Name: series-workflowwmzmf Phase: Failed StartedAt: 2026-08-31 19:45:17 +0000 UTC FinishedAt: 2026-08-31 19:52:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmzmf[0] Phase: Succeeded StartedAt: 2026-08-31 19:45:17 +0000 UTC FinishedAt: 2026-08-31 19:52:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmzmf[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 19:45:17 +0000 UTC FinishedAt: 2026-08-31 19:52:22 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgUm9sbEJhbGwgTURJTy1vdmVyLUkyQyBwcm90b2NvbCBpbml0aWFsaXphdGlvbiAoZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jKSBhbmQgU0ZQIG1vZHVsZSBxdWlyay9idXMgaGFuZGxpbmcgKGRyaXZlcnMvbmV0L3BoeS9zZnAuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBTRlAgY2FnZXMgYW5kIFNGUCB0cmFuc2NlaXZlciBoYXJkd2FyZSBjb21tdW5pY2F0aW5nIG92ZXIgSTJDLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzOWQ0NThmYzA3MmNjNzk4ZjE4NTQwN2I2MTc4MzEzMjI0ZTdiYWU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTk6NDY6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXG5pbmRleCBlZDIwMzUyYTU4OWEzLi5iODhmNjMyMzRiNGU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNcbkBAIC00MTksNiAmIzQzOzQxOSw1MCBAQCBzdGF0aWMgaW50IGkyY19taWlfd3JpdGVfcm9sbGJhbGwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldmFkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGkyY19taWlfcHJvYmVfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4mIzQzO3tcbiYjNDM7XHR1OCBkYXRhX2J1ZltdID0geyBST0xMQkFMTF9EQVRBX0FERFIsIDB4MDEsIDB4MDAsIDB4MDAgfTtcbiYjNDM7XHR1OCBjbWRfYnVmW10gID0geyBST0xMQkFMTF9DTURfQUREUiwgUk9MTEJBTExfQ01EX1JFQUQgfTtcbiYjNDM7XHR1OCBjbWRfYWRkciAgID0gUk9MTEJBTExfQ01EX0FERFI7XG4mIzQzO1x0c3RydWN0IGkyY19tc2cgbXNnc1syXTtcbiYjNDM7XHR1OCByZXN1bHQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0bXNnc1swXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcbiYjNDM7XHRtc2dzWzBdLmZsYWdzID0gMDtcbiYjNDM7XHRtc2dzWzBdLmxlbiAgID0gc2l6ZW9mKGRhdGFfYnVmKTtcbiYjNDM7XHRtc2dzWzBdLmJ1ZiAgID0gZGF0YV9idWY7XG4mIzQzO1x0bXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcbiYjNDM7XHRtc2dzWzFdLmZsYWdzID0gMDtcbiYjNDM7XHRtc2dzWzFdLmxlbiAgID0gc2l6ZW9mKGNtZF9idWYpO1xuJiM0MztcdG1zZ3NbMV0uYnVmICAgPSBjbWRfYnVmO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpMmNfdHJhbnNmZXJfcm9sbGJhbGwoaTJjLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdG1zZ3NbMF0uYWRkciAgPSBST0xMQkFMTF9QSFlfSTJDX0FERFI7XG4mIzQzO1x0bXNnc1swXS5mbGFncyA9IDA7XG4mIzQzO1x0bXNnc1swXS5sZW4gICA9IDE7XG4mIzQzO1x0bXNnc1swXS5idWYgICA9IFx1MDAyNmNtZF9hZGRyO1xuJiM0MztcdG1zZ3NbMV0uYWRkciAgPSBST0xMQkFMTF9QSFlfSTJDX0FERFI7XG4mIzQzO1x0bXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEO1xuJiM0MztcdG1zZ3NbMV0ubGVuICAgPSAxO1xuJiM0MztcdG1zZ3NbMV0uYnVmICAgPSBcdTAwMjZyZXN1bHQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0bXNsZWVwKDIwKTtcbiYjNDM7XHRcdHJldCA9IGkyY190cmFuc2Zlcl9yb2xsYmFsbChpMmMsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0XHRpZiAocmVzdWx0ID09IFJPTExCQUxMX0NNRF9ET05FKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PREVWO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuIHtcbiBcdHN0cnVjdCBpMmNfbXNnIG1zZztcbkBAIC00MzgsMTEgJiM0Mzs0ODIsMTEgQEAgc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4gXG4gXHRyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCBcdTAwMjZtc2csIDEpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGVsc2UgaWYgKHJldCAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0aWYgKHJldCAhPSAxKVxuIFx0XHRyZXR1cm4gLUVJTztcbi1cdGVsc2Vcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKGkyYyk7XG4gfVxuIFxuIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5AQCAtNDg3LDkgJiM0Mzs1MzEsMTAgQEAgc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG4gXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxuIFx0XHRyZXQgPSBpMmNfbWlpX2luaXRfcm9sbGJhbGwoaTJjKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnIocGFyZW50LFxuLVx0XHRcdFx0XCYjMzQ7Q2Fubm90IGluaXRpYWxpemUgUm9sbEJhbGwgTURJTyBJMkMgcHJvdG9jb2w6ICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0cmV0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCAhPSAtRU5PREVWKVxuJiM0MztcdFx0XHRcdGRldl9lcnIocGFyZW50LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7Q2Fubm90IGluaXRpYWxpemUgUm9sbEJhbGwgTURJTyBJMkMgcHJvdG9jb2w6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0cmV0KTtcbiBcdFx0XHRtZGlvYnVzX2ZyZWUobWlpKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5pbmRleCAyZWM5MTQ2NmFjZGYzLi40OWM3N2NhODY5MzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbkBAIC02MTYsNiAmIzQzOzYxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcbiBcdC8vIE9FTSBTRlAtR0UtVCBpcyBhIDEwMDBCYXNlLVQgbW9kdWxlIHdpdGggYnJva2VuIFRYX0ZBVUxUIGluZGljYXRvclxuIFx0U0ZQX1FVSVJLX0YoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtR0UtVFwmIzM0Oywgc2ZwX2ZpeHVwX2lnbm9yZV90eF9mYXVsdCksXG4gXG4mIzQzO1x0U0ZQX1FVSVJLX0YoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtMTBHLVQtSVwmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsKSxcbiBcdFNGUF9RVUlSS19GKFwmIzM0O09FTVwmIzM0OywgXCYjMzQ7U0ZQLTEwRy1UXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLFxuIFx0U0ZQX1FVSVJLX1MoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtMi41Ry1UXCYjMzQ7LCBzZnBfcXVpcmtfb2VtXzJfNWcpLFxuIFx0U0ZQX1FVSVJLX1MoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtMi41Ry1CWDEwLURcJiMzNDssIHNmcF9xdWlya18yNTAwYmFzZXgpLFxuQEAgLTIyMDgsMTAgJiM0MzsyMjA5LDE3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9mYXVsdChzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBuZXh0X3N0YXRlLCBib29sIHdhcm4pXG4gXG4gc3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcbiB7XG4tXHRpZiAoc2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgIT0gTURJT19JMkNfTk9ORSlcbi1cdFx0cmV0dXJuIHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc2ZwKTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sID09IE1ESU9fSTJDX05PTkUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApO1xuJiM0MztcdGlmIChyZXQgPT0gLUVOT0RFVikge1xuJiM0MztcdFx0c2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgUm9sbEJhbGwgTURJTy1vdmVyLUkyQyBwcm90b2NvbCBpbml0aWFsaXphdGlvbiAoZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jKSBhbmQgU0ZQIG1vZHVsZSBxdWlyay9idXMgaGFuZGxpbmcgKGRyaXZlcnMvbmV0L3BoeS9zZnAuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBTRlAgY2FnZXMgYW5kIFNGUCB0cmFuc2NlaXZlciBoYXJkd2FyZSBjb21tdW5pY2F0aW5nIG92ZXIgSTJDLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOWQ0NThmYzA3MmNjNzk4ZjE4NTQwN2I2MTc4MzEzMjI0ZTdiYWU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTk6NDY6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMKaW5kZXggZWQyMDM1MmE1ODlhMy4uYjg4ZjYzMjM0YjRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYwpAQCAtNDE5LDYgJiM0Mzs0MTksNTAgQEAgc3RhdGljIGludCBpMmNfbWlpX3dyaXRlX3JvbGxiYWxsKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBkZXZhZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKJiM0Mzt7CiYjNDM7CXU4IGRhdGFfYnVmW10gPSB7IFJPTExCQUxMX0RBVEFfQUREUiwgMHgwMSwgMHgwMCwgMHgwMCB9OwomIzQzOwl1OCBjbWRfYnVmW10gID0geyBST0xMQkFMTF9DTURfQUREUiwgUk9MTEJBTExfQ01EX1JFQUQgfTsKJiM0MzsJdTggY21kX2FkZHIgICA9IFJPTExCQUxMX0NNRF9BRERSOwomIzQzOwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOwomIzQzOwl1OCByZXN1bHQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwltc2dzWzBdLmFkZHIgID0gUk9MTEJBTExfUEhZX0kyQ19BRERSOwomIzQzOwltc2dzWzBdLmZsYWdzID0gMDsKJiM0MzsJbXNnc1swXS5sZW4gICA9IHNpemVvZihkYXRhX2J1Zik7CiYjNDM7CW1zZ3NbMF0uYnVmICAgPSBkYXRhX2J1ZjsKJiM0MzsJbXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjsKJiM0MzsJbXNnc1sxXS5mbGFncyA9IDA7CiYjNDM7CW1zZ3NbMV0ubGVuICAgPSBzaXplb2YoY21kX2J1Zik7CiYjNDM7CW1zZ3NbMV0uYnVmICAgPSBjbWRfYnVmOwomIzQzOwomIzQzOwlyZXQgPSBpMmNfdHJhbnNmZXJfcm9sbGJhbGwoaTJjLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJbXNnc1swXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjsKJiM0MzsJbXNnc1swXS5mbGFncyA9IDA7CiYjNDM7CW1zZ3NbMF0ubGVuICAgPSAxOwomIzQzOwltc2dzWzBdLmJ1ZiAgID0gJmFtcDtjbWRfYWRkcjsKJiM0MzsJbXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjsKJiM0MzsJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOwomIzQzOwltc2dzWzFdLmxlbiAgID0gMTsKJiM0MzsJbXNnc1sxXS5idWYgICA9ICZhbXA7cmVzdWx0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTA7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltc2xlZXAoMjApOwomIzQzOwkJcmV0ID0gaTJjX3RyYW5zZmVyX3JvbGxiYWxsKGkyYywgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJCWlmIChyZXN1bHQgPT0gUk9MTEJBTExfQ01EX0RPTkUpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9ERVY7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJc3RydWN0IGkyY19tc2cgbXNnOwpAQCAtNDM4LDExICYjNDM7NDgyLDExIEBAIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgJmFtcDttc2csIDEpOwogCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCWVsc2UgaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CWlmIChyZXQgIT0gMSkKIAkJcmV0dXJuIC1FSU87Ci0JZWxzZQotCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGkyY19taWlfcHJvYmVfcm9sbGJhbGwoaTJjKTsKIH0KIAogc3RhdGljIGJvb2wgbWRpb19pMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKQEAgLTQ4Nyw5ICYjNDM7NTMxLDEwIEBAIHN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAogCWNhc2UgTURJT19JMkNfUk9MTEJBTEw6CiAJCXJldCA9IGkyY19taWlfaW5pdF9yb2xsYmFsbChpMmMpOwogCQlpZiAocmV0ICZsdDsgMCkgewotCQkJZGV2X2VycihwYXJlbnQsCi0JCQkJJiMzNDtDYW5ub3QgaW5pdGlhbGl6ZSBSb2xsQmFsbCBNRElPIEkyQyBwcm90b2NvbDogJWRcbiYjMzQ7LAotCQkJCXJldCk7CiYjNDM7CQkJaWYgKHJldCAhPSAtRU5PREVWKQomIzQzOwkJCQlkZXZfZXJyKHBhcmVudCwKJiM0MzsJCQkJCSYjMzQ7Q2Fubm90IGluaXRpYWxpemUgUm9sbEJhbGwgTURJTyBJMkMgcHJvdG9jb2w6ICVkXG4mIzM0OywKJiM0MzsJCQkJCXJldCk7CiAJCQltZGlvYnVzX2ZyZWUobWlpKTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwppbmRleCAyZWM5MTQ2NmFjZGYzLi40OWM3N2NhODY5MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCkBAIC02MTYsNiAmIzQzOzYxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHsKIAkvLyBPRU0gU0ZQLUdFLVQgaXMgYSAxMDAwQmFzZS1UIG1vZHVsZSB3aXRoIGJyb2tlbiBUWF9GQVVMVCBpbmRpY2F0b3IKIAlTRlBfUVVJUktfRigmIzM0O09FTSYjMzQ7LCAmIzM0O1NGUC1HRS1UJiMzNDssIHNmcF9maXh1cF9pZ25vcmVfdHhfZmF1bHQpLAogCiYjNDM7CVNGUF9RVUlSS19GKCYjMzQ7T0VNJiMzNDssICYjMzQ7U0ZQLTEwRy1ULUkmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsKSwKIAlTRlBfUVVJUktfRigmIzM0O09FTSYjMzQ7LCAmIzM0O1NGUC0xMEctVCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLAogCVNGUF9RVUlSS19TKCYjMzQ7T0VNJiMzNDssICYjMzQ7U0ZQLTIuNUctVCYjMzQ7LCBzZnBfcXVpcmtfb2VtXzJfNWcpLAogCVNGUF9RVUlSS19TKCYjMzQ7T0VNJiMzNDssICYjMzQ7U0ZQLTIuNUctQlgxMC1EJiMzNDssIHNmcF9xdWlya18yNTAwYmFzZXgpLApAQCAtMjIwOCwxMCAmIzQzOzIyMDksMTcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2FybikKIAogc3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcCkKIHsKLQlpZiAoc2ZwLSZndDttZGlvX3Byb3RvY29sICE9IE1ESU9fSTJDX05PTkUpCi0JCXJldHVybiBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7CiYjNDM7CWludCByZXQ7CiAKLQlyZXR1cm4gMDsKJiM0MzsJaWYgKHNmcC0mZ3Q7bWRpb19wcm90b2NvbCA9PSBNRElPX0kyQ19OT05FKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldCA9IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc2ZwKTsKJiM0MzsJaWYgKHJldCA9PSAtRU5PREVWKSB7CiYjNDM7CQlzZnAtJmd0O21kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyogUHJvYmUgYSBTRlAgZm9yIGEgUEhZIGRldmljZSBpZiB0aGUgbW9kdWxlIHN1cHBvcnRzIGNvcHBlciAtIHRoZSBQSFkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZXZlbiAqd29ydGgqIGZ1enppbmcuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyB0b3VjaGluZyBjb2RlIHRoYXQmIzM5O3MgaGFyZHdhcmUtc3BlY2lmaWMsIHVucmVhY2hhYmxlIGluIGEgdHlwaWNhbCB0ZXN0aW5nIGVudmlyb25tZW50IChsaWtlIG15IHZpcnR1YWwgbWFjaGluZXMpLCBvciBqdXN0IGdlbmVyYWxseSBub3QgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgd2hhdCBmaWxlcyBoYXZlIGJlZW4gY2hhbmdlZD8gSSBzZWUgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY2AgYW5kIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgLiBBbHJpZ2h0LCB0aGF0IG5hcnJvd3MgdGhpbmdzIGRvd24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIHVzZWQuIEFyZSB0aGV5IGNvcmUgdG8gc29tZSBmdW5kYW1lbnRhbCBuZXR3b3JraW5nIG9wZXJhdGlvbiwgb3IgYXJlIHRoZXkgZGVwZW5kZW50IG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGhhcmR3YXJlPyBJJiMzOTtsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCAob3IganVzdCBgcmVhZC1maWxlYCBhbmQgYSBnb29kIGdyZXApIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgbWRpby1pMmNgIGFuZCBgc2ZwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFuZCB3aGV0aGVyIEkgY2FuIGV2ZW4gcmVhY2ggU0ZQIG9yIG1kaW8taTJjIGluIG15IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIERvZXMgaXQgcmVxdWlyZSBhIHBoeXNpY2FsIFNGUCBtb2R1bGUgb3Igb3RoZXIgc3BlY2lmaWMgaGFyZHdhcmU/CgpIb2xkIG9uLi4uIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgbGV0JiMzOTtzIHNlZSBpZiBJIGNhbiBnZXQgYXdheSB3aXRob3V0IG5lZWRpbmcgYW55IHBoeXNpY2FsIGhhcmR3YXJlLiBJJiMzOTtsbCBjaGVjayB3aGVyZSBgbWRpb19pMmNfYWxsb2NgIG9yIGBzZnBgIGdldHMgcHJvYmVkIG9yIHJlZ2lzdGVyZWQuIElmIEkgY2FuIGZpbmQgYSByZWdpc3RyYXRpb24gcGF0aCB0aGF0JiMzOTtzIHRyaWdnZXJlZCB0aHJvdWdoIHNvbWUgY29uZmlndXJhdGlvbiwgSSBtaWdodCBiZSBpbiBsdWNrLiBUaGF0IHdvdWxkIGFsbG93IG1lIHRvIHNldCB1cCBhbiBlYXNpbHkgcmVwcm9kdWNpYmxlIHRlc3QgZW52aXJvbm1lbnQsIHdoaWNoIHdvdWxkIGJlIGlkZWFsIGZvciBlZmZlY3RpdmUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvX2kyY19hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM9NDkyPXN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTUwNC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1MDU6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA2LVx0XHRcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTQtfVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjU1NTpFWFBPUlRfU1lNQk9MX0dQTChtZGlvX2kyY19hbGxvYyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTU2LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz05NzE9c3RhdGljIGludCBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBzZnAgKnNmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTc1LVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjk3NjpcdGkyY19taWkgPSBtZGlvX2kyY19hbGxvYyhzZnAtXHUwMDNlZGV2LCBzZnAtXHUwMDNlaTJjLCBzZnAtXHUwMDNlbWRpb19wcm90b2NvbCk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTc3LVx0aWYgKElTX0VSUihpMmNfbWlpKSlcbi0tXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaD0xND1lbnVtIG1kaW9faTJjX3Byb3RvIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaC0yMC1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjIxOnN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmgtMjItXHRcdFx0ICAgICAgIGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBTRlAgQ29kZSoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIFNGUCBkcml2ZXImIzM5O3MgYmVoYXZpb3IuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHdoZXJlIGBzZnAuY2AgaXMgYWN0dWFsbHkgKnVzZWQqLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGluc3RhbnRpYXRpb24gYW5kIHRoZSBwbGFjZXMgd2hlcmUgaXRzIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHlwaWNhbCBkcml2ZXIgZmxvdzogcHJvYmluZywgaW5pdGlhbGl6YXRpb24sIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uCgpGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIFNGUCBkcml2ZXImIzM5O3MgY29yZSBsb2dpYy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3RhbmRhcmQgZHJpdmVyIG1lY2hhbmlzbXM6IGhvdyBpdCBoYW5kbGVzIGhvdC1wbHVnIGV2ZW50cywgaG93IGl0IHJlYWRzIHRoZSBtb2R1bGUmIzM5O3MgRUVQUk9NLCBob3cgaXQgbWFuYWdlcyB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBQSFkuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3dzPyBJIG5lZWQgdG8gZ2V0IGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgZHJpdmVy4oCZcyBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lLgoKRmluYWxseSwgdGhlIHVsdGltYXRlIHRlc3Q6IERvZXMgdGhpcyB0aGluZyBiZWhhdmUgYXMgZXhwZWN0ZWQgaW4gYSBzaW11bGF0ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBBbmQsIGNydWNpYWxseSwgY2FuIEkgcmVhY2ggaXQgaW4gbXkgZnV6emluZyBzZXR1cD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGFjY2Vzc2libGUgYW5kIHRoYXQgSSBjYW4gcmVsaWFibHkgdHJpZ2dlciByZWxldmFudCBjb2RlIHBhdGhzIHdpdGhpbiB0aGUgU0ZQIGRyaXZlciBkdXJpbmcgZnV6emluZyBjYW1wYWlnbnMuIE90aGVyd2lzZSwgSSB3aWxsIG5lZWQgdG8gZGV2aXNlIG1ldGhvZHMgZm9yIGdldHRpbmcgdGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIGdldHRpbmcgZXhlcmNpc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0yMTYwPWludCBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE2OC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIxNjk6ICogaXhnYmVfaXNfc2ZwX3Byb2JlIC0gUmV0dXJucyB0cnVlIGlmIFNGUCBpcyBiZWluZyBkZXRlY3RlZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3MC0gKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3My0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIxNzQ6c3RhdGljIGJvb2wgaXhnYmVfaXNfc2ZwX3Byb2JlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IG9mZnNldCwgdTggYWRkcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTIxOTQ9c3RhdGljIGludCBpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWNfaW50KHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDQtXHRcdG1heF9yZXRyeSA9IDM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMjA1Olx0aWYgKGl4Z2JlX2lzX3NmcF9wcm9iZShodywgYnl0ZV9vZmZzZXQsIGRldl9hZGRyKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDYtXHRcdG1heF9yZXRyeSA9IElYR0JFX1NGUF9ERVRFQ1RfUkVUUklFUztcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE2NzY9c3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDMtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDQ6ICogcGh5X3NmcF9wcm9iZSAtIHByb2JlIGZvciBhIFNGUCBjYWdlIGF0dGFjaGVkIHRvIHRoaXMgUEhZIGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA1LSAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA2LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA3OnN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA4LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MzctLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3Mzg6ICogcGh5X3NmcF9yZWxlYXNlIC0gcmVsZWFzZSByZXNvdXJjZXMgc2V0IHVwIGJ5IHBoeV9zZnBfcHJvYmUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzM5LSAqIEBwaHlkZXY6IHRoZSBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3NDAtICpcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTc0MTogKiBSZWxlYXNlIHRoZSBTRlAgcmVzb3VyY2VzIHNldCB1cCBieSBhIHN1Y2Nlc3NmdWwgcGh5X3NmcF9wcm9iZSgpLiBVbnJlZ2lzdGVyXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3NDItICogdGhlIHVwc3RyZWFtIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBwaHlfcG9ydCwgc28gU0ZQIHVwc3RyZWFtIGNhbGxiYWNrcyBjYW5ub3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM1NjU9c3RhdGljIGludCBwaHlfc2V0dXBfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1NzktXHRpZiAoIXBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM1ODA6XHRcdHJldCA9IHBoeV9zZnBfcHJvYmUocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU4MS1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MzI4OD1zdGF0aWMgaW50IHNmcF9pMmNfZ2V0KHN0cnVjdCBzZnAgKnNmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzMxMy1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzozMzE0OnN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzMxNS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTM0OTY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ZwX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzozNDk3Olx0LnByb2JlID0gc2ZwX3Byb2JlLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTM0OTgtXHQucmVtb3ZlID0gc2ZwX3JlbW92ZSxcbi0tXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmM9Mzg9c3RhdGljIHN0cnVjdCBudm1lbV9jb25maWcgbGF5ZXJzY2FwZV9zZnBfbnZtZW1fY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYy00NC1cbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYzo0NTpzdGF0aWMgaW50IGxheWVyc2NhcGVfc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmMtNDYte1xuLS1cbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYz05Nz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsYXllcnNjYXBlX3NmcF9kcml2ZXIgPSB7XG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmM6OTg6XHQucHJvYmVcdD0gbGF5ZXJzY2FwZV9zZnBfcHJvYmUsXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmMtOTktXHQuZHJpdmVyID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFNGUCBQcm9iZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgU0ZQIG1vZHVsZSBpcyBiZWluZyBpbml0aWFsaXplZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHNmcF9wcm9iZWAgZnVuY3Rpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgLSBob3cgaXMgdGhpcyBwcm9iZSB0cmlnZ2VyZWQ/IFdoZXJlIGlzIHRoZSBpbnN0YW50aWF0aW9uIGhhcHBlbmluZz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtLiBJcyB0aGlzIGFsbCBiZWluZyBkcml2ZW4gYnkgdGhlIGRldmljZSB0cmVlLCBBQ1BJLCBvciBpcyBpdCBhIHBsYXRmb3JtIGRldmljZSBzaXR1YXRpb24/IExldCYjMzk7cyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGFuZCB6ZXJvIGluIG9uIHRoZSBgc2ZwX3Byb2JlYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzEwOlx0XHRmd25vZGVfaGFuZGxlX3B1dChoKTtcbjMzMTE6XHRcdHJldHVybiBlcnI7XG4zMzEyOlx0fVxuMzMxMzpcdFxuMzMxNDpcdHN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4zMzE1Olx0e1xuMzMxNjpcdFx0Y29uc3Qgc3RydWN0IHNmZl9kYXRhICpzZmY7XG4zMzE3Olx0XHRjaGFyICpzZnBfaXJxX25hbWU7XG4zMzE4Olx0XHRzdHJ1Y3Qgc2ZwICpzZnA7XG4zMzE5Olx0XHRpbnQgZXJyLCBpO1xuMzMyMDpcdFxuMzMyMTpcdFx0c2ZwID0gc2ZwX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjMzMjI6XHRcdGlmIChJU19FUlIoc2ZwKSlcbjMzMjM6XHRcdFx0cmV0dXJuIFBUUl9FUlIoc2ZwKTtcbjMzMjQ6XHRcbjMzMjU6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNmcCk7XG4zMzI2Olx0XG4zMzI3Olx0XHRlcnIgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoc2ZwLVx1MDAzZWRldiwgc2ZwX2NsZWFudXAsIHNmcCk7XG4zMzI4Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMzMyOTpcdFx0XHRyZXR1cm4gZXJyO1xuMzMzMDpcdFxuMzMzMTpcdFx0c2ZmID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHNmcC1cdTAwM2VkZXYpO1xuMzMzMjpcdFx0aWYgKCFzZmYpXG4zMzMzOlx0XHRcdHNmZiA9IFx1MDAyNnNmcF9kYXRhO1xuMzMzNDpcdFxuMzMzNTpcdFx0c2ZwLVx1MDAzZXR5cGUgPSBzZmY7XG4zMzM2Olx0XG4zMzM3Olx0XHRlcnIgPSBzZnBfaTJjX2dldChzZnApO1xuMzMzODpcdFx0aWYgKGVycilcbjMzMzk6XHRcdFx0cmV0dXJuIGVycjtcbjMzNDA6XHRcbjMzNDE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEdQSU9fTUFYOyBpJiM0MzsmIzQzOylcbjMzNDI6XHRcdFx0aWYgKHNmZi1cdTAwM2VncGlvcyBcdTAwMjYgQklUKGkpKSB7XG4zMzQzOlx0XHRcdFx0c2ZwLVx1MDAzZWdwaW9baV0gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChzZnAtXHUwMDNlZGV2LFxuMzM0NDpcdFx0XHRcdFx0XHQgICBncGlvX25hbWVzW2ldLCBncGlvX2ZsYWdzW2ldKTtcbjMzNDU6XHRcdFx0XHRpZiAoSVNfRVJSKHNmcC1cdTAwM2VncGlvW2ldKSlcbjMzNDY6XHRcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNmcC1cdTAwM2VncGlvW2ldKTtcbjMzNDc6XHRcdFx0fVxuMzM0ODpcdFxuMzM0OTpcdFx0c2ZwLVx1MDAzZXN0YXRlX2h3X21hc2sgPSBTRlBfRl9QUkVTRU5UO1xuMzM1MDpcdFx0c2ZwLVx1MDAzZXN0YXRlX2h3X2RyaXZlID0gU0ZQX0ZfVFhfRElTQUJMRTtcbjMzNTE6XHRcbjMzNTI6XHRcdHNmcC1cdTAwM2VnZXRfc3RhdGUgPSBzZnBfZ3Bpb19nZXRfc3RhdGU7XG4zMzUzOlx0XHRzZnAtXHUwMDNlc2V0X3N0YXRlID0gc2ZwX2dwaW9fc2V0X3N0YXRlO1xuMzM1NDpcdFxuMzM1NTpcdFx0LyogQW4gU0ZQIGNhZ2Ugd2l0aCBubyBNT0RfREVGMCBHUElPIGhhcyBubyBoYXJkd2FyZSBwcmVzZW5jZSBzaWduYWwuXG4zMzU2Olx0XHQgKiBBc3N1bWluZyB0aGUgbW9kdWxlIGlzIGFsd2F5cyBwcmVzZW50IHRyYXBzIGFuIGVtcHR5IGNhZ2UgaW5cbjMzNTc6XHRcdCAqIE1PRF9FUlJPUiBhbmQgbmV2ZXIgZGV0ZWN0cyBob3QtaW5zZXJ0aW9uLCBzbyBkZXJpdmUgcHJlc2VuY2UgZnJvbSBhXG4zMzU4Olx0XHQgKiB0aHJvdHRsZWQgSTJDIHByb2JlIGFuZCBwb2xsIGZvciBjaGFuZ2VzIGluc3RlYWQuIHNmcF9pMmNfY29uZmlndXJlKClcbjMzNTk6XHRcdCAqIGhhcyBhbHJlYWR5IHNldCBpMmNfbWF4X2Jsb2NrX3NpemU7IHNlZWQgaTJjX2Jsb2NrX3NpemUgc28gdGhlXG4zMzYwOlx0XHQgKiBwcmVzZW5jZSByZWFkIGRvZXMgbm90IGlzc3VlIGEgemVyby1sZW5ndGggdHJhbnNmZXIgYmVmb3JlIHRoZSBmaXJzdFxuMzM2MTpcdFx0ICogRUVQUk9NIHJlYWQuIFNlZWQgaTJjX3ByZXNlbnRfbmV4dCB0byBqaWZmaWVzIHNvIHRoZSBmaXJzdCBwcm9iZVxuMzM2MjpcdFx0ICogaGFwcGVucyBpbW1lZGlhdGVseSAoYSB6ZXJvIHZhbHVlIHdvdWxkIGJlIGluIHRoZSBwYXN0IHJlbGF0aXZlIHRvXG4zMzYzOlx0XHQgKiB0aGUgbmVnYXRpdmUgSU5JVElBTF9KSUZGSUVTIGF0IGJvb3QgYW5kIGRlbGF5IGRldGVjdGlvbikuXG4zMzY0Olx0XHQgKlxuMzM2NTpcdFx0ICogQSBzb2xkZXJlZC1kb3duIG1vZHVsZSAoc2ZmLHNmZikgaGFzIG5vIHByZXNlbmNlIHNpZ25hbCBhbmQgaXNcbjMzNjY6XHRcdCAqIGdlbnVpbmVseSBhbHdheXMgcHJlc2VudCwgc28gaXQga2VlcHMgdGhlIGFsd2F5cy1wcmVzZW50IGJlaGF2aW91cjtcbjMzNjc6XHRcdCAqIHRoZSBJMkMgcHJvYmUgaXMgZ2F0ZWQgb24gdGhlIGNhZ2UgdHlwZSBhZHZlcnRpc2luZyBTRlBfRl9QUkVTRU5ULlxuMzM2ODpcdFx0ICovXG4zMzY5Olx0XHRpZiAoIXNmcC1cdTAwM2VncGlvW0dQSU9fTU9EREVGMF0pIHtcbjMzNzA6XHRcdFx0aWYgKHNmZi1cdTAwM2VncGlvcyBcdTAwMjYgU0ZQX0ZfUFJFU0VOVCkge1xuMzM3MTpcdFx0XHRcdHNmcC1cdTAwM2VnZXRfc3RhdGUgPSBzZnBfaTJjX2dldF9zdGF0ZTtcbjMzNzI6XHRcdFx0XHRzZnAtXHUwMDNlaTJjX2Jsb2NrX3NpemUgPSBzZnAtXHUwMDNlaTJjX21heF9ibG9ja19zaXplO1xuMzM3MzpcdFx0XHRcdHNmcC1cdTAwM2VpMmNfcHJlc2VudF9uZXh0ID0gamlmZmllcztcbjMzNzQ6XHRcdFx0XHRzZnAtXHUwMDNlbmVlZF9wb2xsID0gdHJ1ZTtcbjMzNzU6XHRcdFx0fSBlbHNlIHtcbjMzNzY6XHRcdFx0XHRzZnAtXHUwMDNlZ2V0X3N0YXRlID0gc2ZmX2dwaW9fZ2V0X3N0YXRlO1xuMzM3NzpcdFx0XHR9XG4zMzc4Olx0XHR9XG4zMzc5Olx0XG4zMzgwOlx0XHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O21heGltdW0tcG93ZXItbWlsbGl3YXR0XCYjMzQ7LFxuMzM4MTpcdFx0XHRcdFx0IFx1MDAyNnNmcC1cdTAwM2VtYXhfcG93ZXJfbVcpO1xuMzM4MjpcdFx0aWYgKHNmcC1cdTAwM2VtYXhfcG93ZXJfbVcgXHUwMDNjIDEwMDApIHtcbjMzODM6XHRcdFx0aWYgKHNmcC1cdTAwM2VtYXhfcG93ZXJfbVcpXG4zMzg0Olx0XHRcdFx0ZGV2X3dhcm4oc2ZwLVx1MDAzZWRldixcbjMzODU6XHRcdFx0XHRcdCBcJiMzNDtGaXJtd2FyZSBidWc6IGhvc3QgbWF4aW11bSBwb3dlciBzaG91bGQgYmUgYXQgbGVhc3QgMVdcXG5cJiMzNDspO1xuMzM4NjpcdFx0XHRzZnAtXHUwMDNlbWF4X3Bvd2VyX21XID0gMTAwMDtcbjMzODc6XHRcdH1cbjMzODg6XHRcbjMzODk6XHRcdGRldl9pbmZvKHNmcC1cdTAwM2VkZXYsIFwmIzM0O0hvc3QgbWF4aW11bSBwb3dlciAldS4ldVdcXG5cJiMzNDssXG4zMzkwOlx0XHRcdCBzZnAtXHUwMDNlbWF4X3Bvd2VyX21XIC8gMTAwMCwgKHNmcC1cdTAwM2VtYXhfcG93ZXJfbVcgLyAxMDApICUgMTApO1xuMzM5MTpcdFxuMzM5MjpcdFx0LyogR2V0IHRoZSBpbml0aWFsIHN0YXRlLCBhbmQgYWx3YXlzIHNpZ25hbCBUWCBkaXNhYmxlLFxuMzM5MzpcdFx0ICogc2luY2UgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdpbGwgbm90IGJlIHVwLlxuMzM5NDpcdFx0ICovXG4zMzk1Olx0XHRzZnAtXHUwMDNlc3RhdGUgPSBzZnBfZ2V0X3N0YXRlKHNmcCkgfCBTRlBfRl9UWF9ESVNBQkxFO1xuMzM5NjpcdFxuMzM5NzpcdFx0aWYgKHNmcC1cdTAwM2VncGlvW0dQSU9fUlMwXSBcdTAwMjZcdTAwMjZcbjMzOTg6XHRcdCAgICBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAoc2ZwLVx1MDAzZWdwaW9bR1BJT19SUzBdKSlcbjMzOTk6XHRcdFx0c2ZwLVx1MDAzZXN0YXRlIHw9IFNGUF9GX1JTMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjIwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIFRyaWdnZXIgb2YgYHNmcF9zbV9hZGRfbWRpb19idXNgKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWF0aW5nIGNhbGwgZm9yIGBzZnBfc21fYWRkX21kaW9fYnVzYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1c3Qgc2VhcmNoIHRoZSBjb2RlYmFzZSBkaXJlY3RseSBmb3IgdGhhdCBmdW5jdGlvbiBuYW1lLiBJJiMzOTtsbCBkbyBhIHNpbXBsZSB0ZXh0IHNlYXJjaCBmaXJzdDsgaXQmIzM5O3MgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIGJpcmQmIzM5O3MtZXllIHZpZXcgb2Ygd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBldmVuICptZW50aW9uZWQqLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBkaXJlY3QgY2FsbHMsIG9yIHBlcmhhcHMgaW5kaXJlY3QgcmVmZXJlbmNlcywgbWF5YmUgdGhyb3VnaCBhIG1hY3JvIG9yIGEgdHlwZWRlZi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgY29tbW9uIHBhdHRlcm5zIGFuZCB3aGF0IEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yLiBJJiMzOTttIGhvcGluZyB0aGlzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYW5kIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBleGVjdXRlZCwgd2hpY2ggaXMga2V5IHRvIHRyb3VibGVzaG9vdGluZyB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9zbV9hZGRfbWRpb19idXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIxOTY9c3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2Fybilcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIwOS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjEwOnN0YXRpYyBpbnQgc2ZwX3NtX2FkZF9tZGlvX2J1cyhzdHJ1Y3Qgc2ZwICpzZnApXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTI4NjI9c3RhdGljIHZvaWQgc2ZwX3NtX21haW4oc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgZXZlbnQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI5NDctXHRcdFx0LyogQ3JlYXRlIG1kaW9idXMgYW5kIHN0YXJ0IHRyeWluZyBmb3IgUEhZICovXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6Mjk0ODpcdFx0XHRyZXQgPSBzZnBfc21fYWRkX21kaW9fYnVzKHNmcCk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjk0OS1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MjQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTRlAgU3RhdGUgTWFjaGluZSBhbmQgaXRzIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBob3cgdGhlIGBzZnBgIGZyYW1ld29yayBpcyBhY3R1YWxseSBlbXBsb3llZC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBjYW4gSSBlZmZlY3RpdmVseSBzaW11bGF0ZSBvciBpbnN0YW50aWF0ZSBTRlAgZnVuY3Rpb25hbGl0eSBvciBtZGlvLWkyYyB3aXRoaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgR29vZ2xlIENvbXB1dGUgRW5naW5lLCBvciBzeXprYWxsZXI/IFRoZXNlIGFyZSBjcnVjaWFsIHRlc3RpbmcgcGxhdGZvcm1zIGZvciBteSB3b3JrLCBhbmQgYWNoaWV2aW5nIHJlbGlhYmxlIFNGUCBlbXVsYXRpb24gaXMgcGFyYW1vdW50LgoKTm93LCBteSBzdHJhdGVneSBuZWVkcyB0byBiZSBtZXRob2RpY2FsLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IFNGUCBkZXZpY2VzIGFyZSBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gQXJlIHRoZXJlIGV4aXN0aW5nIGkyYyBkcml2ZXJzLCBwcmUtZGVmaW5lZCBwbGF0Zm9ybSBkZXZpY2VzLCBvciBjYW4gdGhlc2UgZGV2aWNlcyBiZSBjcmVhdGVkIG9uIHRoZSBmbHk/IEFyZSB3ZSBsZXZlcmFnaW5nIGNvbmZpZ2ZzLCBzdGFuZGFyZCBpMmMgY2xpZW50IGludGVyYWN0aW9ucywgc3lzZnMgaW50ZXJmYWNlcywgZGV2aWNlIHRyZWUgb3ZlcmxheXMsIG9yIHNvbWUgY29tYmluYXRpb24gb2YgdGhlc2U/CgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgYW5kIGBkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNgLiBUaGVzZSBhcmUgbGlrZWx5IHRvIGhvbGQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IEkgbmVlZCB0byBkaXNzZWN0LgoKRmluYWxseSwgYSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBNRElPX0kyQyBhbmQgU0ZQIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTURJT19JMkMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTEwMD1jb25maWcgTURJT19ISVNJX0ZFTUFDXG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwNi1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMDc6Y29uZmlnIE1ESU9fSTJDXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTA4LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI1MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6CgoqKk5hdmlnYXRpbmcgdGhlIE1ESU8gS2NvbmZpZyBGaWxlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSAxMDcuIEkmIzM5O20gYXNzdW1pbmcgaXQgZGVhbHMgd2l0aCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGdpdmVuIHRoaXMgaXMgYSBLY29uZmlnIGZpbGUuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IGNlcnRhaW4gTURJTyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgcG9zc2libHkgZGVwZW5kZW50IG9uIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSBvciBvdGhlciBuZXR3b3JrIGRldmljZSBzZXR0aW5ncy4gTXkgYmFja2dyb3VuZCBrbm93bGVkZ2Ugb2YgbmV0d29yayBkcml2ZXJzIHRlbGxzIG1lIHRoaXMgZmlsZSB3aWxsIGRlZmluZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGVscCB0ZXh0LiBJdCYjMzk7cyBsaWtlbHkgc3RydWN0dXJlZCBoaWVyYXJjaGljYWxseSwgd2l0aCBwYXJlbnQgb3B0aW9ucyBjb250cm9sbGluZyB0aGUgYXZhaWxhYmlsaXR5IG9mIG1vcmUgZ3JhbnVsYXIgc2V0dGluZ3MuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZTogJiMzNDtpZiBQSFlfTURJTywmIzM0OyAmIzM0O2RlcGVuZHMgb24sJiMzNDsgJiMzNDtzZWxlY3QsJiMzNDsgYW5kICYjMzQ7ZGVmYXVsdCYjMzQ7IHN0YXRlbWVudHMgdGhhdCB3aWxsIGRldGVybWluZSBob3cgdXNlcnMgY29uZmlndXJlIHRoZSBNRElPIGRyaXZlciBhbmQgaXRzIGFzc29jaWF0ZWQgUEhZcy4gSSYjMzk7bSByZWFkeSB0byBzZWUgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0Y29uZmlnIE1ESU9fSElTSV9GRU1BQ1xuIDEwMTpcdFx0dHJpc3RhdGUgXCYjMzQ7SGlzaWxpY29uIEZFTUFDIE1ESU8gYnVzIGNvbnRyb2xsZXJcJiMzNDtcbiAxMDI6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPXG4gMTAzOlx0XHRoZWxwXG4gMTA0Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXG4gMTA1Olx0XHQgIEhpc2lsaWNvbiBTb0MgdGhhdCBoYXZlIGFuIEZhc3QgRXRoZXJuZXQgTUFDLlxuIDEwNjpcdFxuIDEwNzpcdGNvbmZpZyBNRElPX0kyQ1xuIDEwODpcdFx0dHJpc3RhdGVcbiAxMDk6XHRcdGRlcGVuZHMgb24gSTJDXG4gMTEwOlx0XHRoZWxwXG4gMTExOlx0XHQgIFN1cHBvcnQgSTJDIGJhc2VkIFBIWXMuICBUaGlzIHByb3ZpZGVzIGEgTURJTyBidXMgYnJpZGdlZFxuIDExMjpcdFx0ICB0byBJMkMgdG8gYWxsb3cgUEhZcyBjb25uZWN0ZWQgaW4gSTJDIG1vZGUgdG8gYmUgYWNjZXNzZWRcbiAxMTM6XHRcdCAgdXNpbmcgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlLlxuIDExNDpcdFxuIDExNTpcdFx0ICBUaGlzIGlzIGxpYnJhcnkgbW9kZS5cbiAxMTY6XHRcbiAxMTc6XHRjb25maWcgTURJT19NVlVTQlxuIDExODpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBVU0IgdG8gTURJTyBBZGFwdGVyXCYjMzQ7XG4gMTE5Olx0XHRkZXBlbmRzIG9uIFVTQlxuIDEyMDpcdFx0aGVscFxuIDEyMTpcdFx0ICBBIFVTQiB0byBNRElPIGNvbnZlcnRlciBwcmVzZW50IG9uIGRldmVsb3BtZW50IGJvYXJkcyBmb3JcbiAxMjI6XHRcdCAgTWFydmVsbCYjMzk7cyBMaW5rIFN0cmVldCBmYW1pbHkgb2YgRXRoZXJuZXQgc3dpdGNoZXMuXG4gMTIzOlx0XG4gMTI0Olx0Y29uZmlnIE1ESU9fTVNDQ19NSUlNXG4gMTI1Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NlbWkgTUlJTSBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuIDEyNjpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbiAxMjc6XHRcdHNlbGVjdCBSRUdNQVBfTU1JT1xuIDEyODpcdFx0aGVscFxuIDEyOTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTUlJTSAoTURJTykgaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBuZXR3b3JrXG4gMTMwOlx0XHQgIHN3aXRjaGVzIG9mIHRoZSBNaWNyb3NlbWkgU29DczsgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3dpdGNoIG9uXG4gMTMxOlx0XHQgIENPTkZJR19ISUdIX1JFU19USU1FUlNcbiAxMzI6XHRcbiAxMzM6XHRjb25maWcgTURJT19NT1hBUlRcbiAxMzQ6XHRcdHRyaXN0YXRlIFwmIzM0O01PWEEgQVJUIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiAxMzU6XHRcdGRlcGVuZHMgb24gQVJDSF9NT1hBUlQgfHwgQ09NUElMRV9URVNUXG4gMTM2Olx0XHRoZWxwXG4gMTM3Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgbmV0d29ya1xuIDEzODpcdFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIE1PWEEgQVJUIFNvQ1xuIDEzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDExMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIERpYWdub3N0aWMgUXVlcnkqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2VsZWN0aW9uIHByb2Nlc3Mgb2YgdGhpcyBgTURJT19JMkNgIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBiZSBhIG1vZHVsZSwgYSBidXMsIG9yIGV2ZW4ganVzdCBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgaXRlbSBpcyBiZWluZyBjaG9zZW4gb3IgY29uZmlndXJlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgdGhpcyBhIGNvbXBpbGUtdGltZSBvcHRpb24sIGEgcnVudGltZSBjb25maWd1cmF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBjb2RlIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBpdHMgYWN0aXZhdGlvbiBvciBkZWFjdGl2YXRpb24/IFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGRldmljZSBpbnRlcmFjdGlvbi4gRnJvbSB0aGlzLCB0aGUgcGF0aCB0aHJvdWdoIHRoZSBzb2Z0d2FyZSAoYW5kIHBvc3NpYmx5IGhhcmR3YXJlKSBjYW4gYmUgdW5kZXJzdG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE1ESU9fSTJDJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTczPWNvbmZpZyBTRlBcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03Ni1cdGRlcGVuZHMgb24gSFdNT04gfHwgSFdNT049blxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Nzc6XHRzZWxlY3QgTURJT19JMkNcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5MgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgbWF0ZXJpYWw6CgoqKkludmVzdGlnYXRpbmcgUmVsYXRlZCBSZWZlcmVuY2VzKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIEkmIzM5O3ZlIGFscmVhZHkgZ290IGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgY29ubmVjdGlvbnMgb3IgYWx0ZXJuYXRpdmUgYXBwcm9hY2hlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgb3V0IHRoZXJlIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlcyBNRElPX0kyQyBvciBTRlAuIEkga25vdyB0aGVzZSBhcmUgcmVsYXRlZCwgYnV0IEkgbmVlZCB0byBzZWUgaG93IGNvbXByZWhlbnNpdmVseS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBicmlkZ2UgdGhlIGdhcCwgb2ZmZXIgYSBkaWZmZXJlbnQgcGVyc3BlY3RpdmUsIG9yIHBvaW50IHRvIGEgbW9yZSBlbGVnYW50IHNvbHV0aW9uIHRoYW4gd2hhdCBJJiMzOTt2ZSBjdXJyZW50bHkgZ290IGluIG1pbmQuIEkgbmVlZCB0byBjYXN0IGEgd2lkZXIgbmV0IHRvIGNhcHR1cmUgYWxsIHJlbGV2YW50IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU0ZQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnPTI4NT1DT05GSUdfWElMSU5YX0VNQUNMSVRFPXlcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnOjI4NjpDT05GSUdfU0ZQPW1cbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTI4Ny1DT05GSUdfQlJPQURDT01fUEhZPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZz02ND1DT05GSUdfTVZQUDI9eVxuYXJjaC9hcm0vY29uZmlncy9tdmVidV92N19kZWZjb25maWc6NjU6Q09ORklHX1NGUD15XG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZy02Ni1DT05GSUdfTUFSVkVMTF9QSFk9eVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSAmIzQzOz0gbWlpX3RpbWVzdGFtcGVyLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfU0ZQKVx0XHQmIzQzOz0gc2ZwLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcdFx0JiM0Mzs9IHNmcC1idXMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI4LW9iai15XHRcdFx0XHQmIzQzOz0gJChzZnAtb2JqLXkpICQoc2ZwLW9iai1tKVxuLS1cbmluY2x1ZGUvbGludXgvc2ZwLmg9NTY1PXN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3Ny1cbmluY2x1ZGUvbGludXgvc2ZwLmg6NTc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19TRlApXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3OS1jb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpzZnBfZ2V0X21vZHVsZV9jYXBzKHN0cnVjdCBzZnBfYnVzICpidXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipDaGVja2luZyBLY29uZmlnIGZvciBTRlAqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5IGFib3V0IFNGUC4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIFNGUCBzdXBwb3J0IGluIHRoaXMgcHJvamVjdC4gSSB3YW50IHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIG9wdGlvbiBmb3IgaXQsIGFuZCwgaWYgc28sIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYW5kIHBvc3NpYmxlIHZhcmlhdGlvbnMgYXJlLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGVuYWJsZS9kaXNhYmxlIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCB2YXJpb3VzIHN1Yi1vcHRpb25zIGZvciBkaWZmZXJlbnQgU0ZQIHR5cGVzIG9yIGZlYXR1cmVzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgU0ZQIGlzIHRyZWF0ZWQgZnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHQgICAgICAgICAgQWRkcyBzdXBwb3J0IG5lZWRlZCBmb3IgUEhZIGRyaXZlcnMgd3JpdHRlbiBpbiBSdXN0LiBJdCBwcm92aWRlc1xuICA3MTpcdCAgICAgICAgICBhIHdyYXBwZXIgYXJvdW5kIHRoZSBDIHBoeWxpYiBjb3JlLlxuICA3MjpcdFxuICA3MzpcdGNvbmZpZyBTRlBcbiAgNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O1NGUCBjYWdlIHN1cHBvcnRcJiMzNDtcbiAgNzU6XHRcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBQSFlMSU5LXG4gIDc2Olx0XHRkZXBlbmRzIG9uIEhXTU9OIHx8IEhXTU9OPW5cbiAgNzc6XHRcdHNlbGVjdCBNRElPX0kyQ1xuICA3ODpcdFxuICA3OTpcdGNvbW1lbnQgXCYjMzQ7TUlJIFBIWSBkZXZpY2UgZHJpdmVyc1wmIzM0O1xuICA4MDpcdFxuICA4MTpcdGNvbmZpZyBBUzIxWFhYX1BIWVxuICA4MjpcdFx0dHJpc3RhdGUgXCYjMzQ7QWVvbnNlbWkgQVMyMXh4eCBQSFlzXCYjMzQ7XG4gIDgzOlx0XHRoZWxwXG4gIDg0Olx0XHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgQWVvbnNlbWkgQVMyMXh4eCBQSFkuXG4gIDg1Olx0XG4gIDg2Olx0XHQgIFRoZXNlIGFyZSBDNDUgUEhZcyAxMEcgdGhhdCByZXF1aXJlIGFsbCBhIGdlbmVyaWMgZmlybXdhcmUuXG4gIDg3Olx0XG4gIDg4Olx0XHQgIFN1cHBvcnRlZCBQSFlzIEFTMjEwMTFKQjEsIEFTMjEwMTFQQjEsIEFTMjEwMTBKQjEsIEFTMjEwMTBQQjEsXG4gIDg5Olx0XHQgIEFTMjE1MTFKQjEsIEFTMjE1MTFQQjEsIEFTMjE1MTBKQjEsIEFTMjE1MTBQQjEsIEFTMjEyMTBKQjEsXG4gIDkwOlx0XHQgIEFTMjEyMTBQQjEgdGhhdCBhbGwgcmVnaXN0ZXIgd2l0aCB0aGUgUEhZIElEIDB4NzUwMCAweDc1MDBcbiAgOTE6XHRcdCAgYmVmb3JlIHRoZSBmaXJtd2FyZSBpcyBsb2FkZWQuXG4gIDkyOlx0XG4gIDkzOlx0Y29uZmlnIEFJUl9BTjg4MDFfUEhZXG4gIDk0Olx0XHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgQU44ODAxIEdpZ2FiaXQgUEhZXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjYyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTg4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1ESU8gYW5kIFNGUCBSb2xsYmFsbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHNlZWluZyB0aGUgY2hhbmdlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCBmaWxlcy4gSSBrbm93IHRoZXNlIHJlbGF0ZSB0byBNRElPIGJ1c2VzIGFuZCBTRlAgdHJhbnNjZWl2ZXJzLCBzbyB0aGUgY29ubmVjdGlvbiBoZXJlIGlzIGltbWVkaWF0ZS4KCkkgc2VlIGEgbmV3IGZ1bmN0aW9uIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYCBhZGRlZCB3aXRoaW4gYG1kaW8taTJjLmNgLiBJdCYjMzk7cyBwcm9iaW5nIGFuIEkyQyBhZGFwdGVyIHRvIGRldGVybWluZSBpZiBhIFJvbGxiYWxsIGRldmljZSBpcyBwcmVzZW50LiBJdCBkb2VzIHNvIGJ5IHNlbmRpbmcgc29tZSBjb21tYW5kcyBhbmQgcmVhZGluZyBhIHJlc3VsdC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBwcm9iaW5nIGZvciBhIGRldmljZSBhdCBgUk9MTEJBTExfUEhZX0kyQ19BRERSYC4gVGhlcmUgaXMgYSBmb3IgbG9vcCB3aXRoIGEgbXNsZWVwLCBzbyBpdCBsaWtlbHkgY2hlY2tzIGZvciBhIHJlc3BvbnNlIG11bHRpcGxlIHRpbWVzLiBUaGlzIGlzIHByb2JhYmx5IHRvIG1ha2Ugc3VyZSB0aGUgZGV2aWNlIGhhcyBlbm91Z2ggdGltZSB0byByZXNwb25kIG9yIGNvbXBsZXRlIGludGVybmFsIG9wZXJhdGlvbnMuIElmIG5vIHJlc3BvbnNlLCB0aGVuIGAtRU5PREVWYCBpcyByZXR1cm5lZC4KClRoZSBleGlzdGluZyBgaTJjX21paV9pbml0X3JvbGxiYWxsYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNhbGwgYGkyY19taWlfcHJvYmVfcm9sbGJhbGxgLiBJdCBhbHNvIGFwcGVhcnMgdGhlcmUmIzM5O3MgYSBtb3JlIGNhcmVmdWwgY2hlY2sgZm9yIGVycm9ycyBub3csIHdpdGggYSByZXR1cm4gY29kZSBvZiBgLUVOT0RFVmAgYmVpbmcgaGFuZGxlZCBleHBsaWNpdGx5LCB3aGljaCBpcyBnb29kLiBUaGVyZSBpcyBhbHNvIGFuIGFkZGl0aW9uYWwgY2hlY2sgZm9yIGAtRU5PREVWYCBkdXJpbmcgdGhlIE1ESU8gYnVzIGFsbG9jYXRpb24uCgpOb3cgSSBhbSBnb2luZyBpbnRvIGBzZnAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIFNGUCBtb2R1bGUgaGFuZGxpbmcgb2NjdXJzLiBJIG5vdGUgc29tZSBuZXcgZW50cmllcyBpbiBgc2ZwX3F1aXJrc1tdYCwgc3BlY2lmaWNhbGx5IGZvciBtb2R1bGVzIHdpdGggJiMzNDtTRlAtMTBHLVQtSSYjMzQ7IGFuZCAmIzM0O1NGUC0xMEctVCYjMzQ7LiBUaGVyZSYjMzk7cyBhbHNvIGBzZnBfZml4dXBfcm9sbGJhbGxgIGJlaW5nIHVzZWQgYXMgYSBmaXh1cCBmdW5jdGlvbi4gVGhlcmUgYWxzbyBhcHBlYXJzIHRvIGJlIGFuIGFkZGl0aW9uIHRvIGBzZnBfc21fYWRkX21kaW9fYnVzYCB0byBoYW5kbGUgYC1FTk9ERVZgIGR1cmluZyB0aGUgTURJTyBidXMgY3JlYXRpb24uIFRoaXMgaXMgZ29vZDogaWYgdGhlIE1ESU8gYnVzIGNyZWF0aW9uIGZhaWxzLCB0aGUgY29kZSB3aWxsIG5vdyBzZXQgYHNmcC0mZ3Q7bWRpb19wcm90b2NvbGAgdG8gYE1ESU9fSTJDX05PTkVgLCBhbmQgY29udGludWVzIHdpdGhvdXQgdGhlIE1ESU8gYnVzLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvci4KCk92ZXJhbGwsIGl0IHNlZW1zIHRoaXMgaXMgYWJvdXQgbW9yZSByb2J1c3RseSBzdXBwb3J0aW5nIFJvbGxiYWxsLWJhc2VkIGNvcHBlciBTRlAmIzQzOyBtb2R1bGVzLiBUaGUgY29kZSBpcyB0YWtpbmcgY2FyZSB0byBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBSb2xsYmFsbCBkZXZpY2UgYmVmb3JlIGFzc3VtaW5nIGl0JiMzOTtzIHRoZXJlLiBUaGUgYWRkaXRpb24gb2YgdGhlIG5ldyBwcm9iZSBmdW5jdGlvbiBhbmQgdGhlIGltcHJvdmVkIGVycm9yIGhhbmRsaW5nLCBzaG93IHRoYXQgdGhlIHBhdGNoIGF0dGVtcHRzIHRvIG1hbmFnZSB0aGUgUm9sbGJhbGwgY29ubmVjdGlvbiBpbiBhIG1vcmUgY29udHJvbGxlZCBtYW5uZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9maXh1cF9yb2xsYmFsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmM9NDA2PXN0YXRpYyB2b2lkIHNmcF9maXh1cF8xMGdiYXNldF8zMG0oc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy00MTEtXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NDEyOnN0YXRpYyB2b2lkIHNmcF9maXh1cF9yb2xsYmFsbChzdHJ1Y3Qgc2ZwICpzZnApXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDEzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDIzLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjQyNDpzdGF0aWMgdm9pZCBzZnBfZml4dXBfcm9sbGJhbGxfd2FpdDRzKHN0cnVjdCBzZnAgKnNmcClcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy00MjUte1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjQyNjpcdHNmcF9maXh1cF9yb2xsYmFsbChzZnApO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQyNy1cbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9NDM1PXN0YXRpYyB2b2lkIHNmcF9maXh1cF9mc18xMGd0KHN0cnVjdCBzZnAgKnNmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDM3LVx0c2ZwX2ZpeHVwXzEwZ2Jhc2V0XzMwbShzZnApO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjQzODpcdHNmcF9maXh1cF9yb2xsYmFsbF93YWl0NHMoc2ZwKTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy00MzktfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz00NTA9c3RhdGljIHZvaWQgc2ZwX2ZpeHVwX3BvdHJvbihzdHJ1Y3Qgc2ZwICpzZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQ2MS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo0NjI6c3RhdGljIHZvaWQgc2ZwX2ZpeHVwX3JvbGxiYWxsX2NjKHN0cnVjdCBzZnAgKnNmcClcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy00NjMte1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjQ2NDpcdHNmcF9maXh1cF9yb2xsYmFsbChzZnApO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQ2NS1cbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9NTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNTQyLVx0Ly8gRkxZUFJPIFNGUC0xMEdULUNTLTMwTSB1c2VzIFJvbGxiYWxsIHByb3RvY29sIHRvIHRhbGsgdG8gdGhlIFBIWS5cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo1NDM6XHRTRlBfUVVJUktfRihcJiMzNDtGTFlQUk9cJiMzNDssIFwmIzM0O1NGUC0xMEdULUNTLTMwTVwmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsKSxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy01NDQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTU1MS1cdC8vIHRvIHRoZSBQSFkgYW5kIG5lZWRzIDQgc2VjIHdhaXQgYmVmb3JlIHByb2JpbmcgdGhlIFBIWS5cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo1NTI6XHRTRlBfUVVJUktfRihcJiMzNDtGU1wmIzM0OywgXCYjMzQ7U0ZQLTIuNUctVFwmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsX3dhaXQ0cyksXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NTUzOlx0U0ZQX1FVSVJLX0YoXCYjMzQ7RlNcJiMzNDssIFwmIzM0O1NGUC0xMEdNLVRcJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbF93YWl0NHMpLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTU1NC1cbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjEzLVx0Ly8gSE9SQUNPIEhDLTEwR0UtMTEzQyB1c2VzIFJvbGxiYWxsIHByb3RvY29sIHRvIHRhbGsgdG8gdGhlIFBIWS5cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2MTQ6XHRTRlBfUVVJUktfRihcJiMzNDtPRU1cJiMzNDssIFwmIzM0O0hDLTEwR0UtMTEzQ1wmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsKSxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy02MTUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYxOC1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2MTk6XHRTRlBfUVVJUktfRihcJiMzNDtPRU1cJiMzNDssIFwmIzM0O1NGUC0xMEctVC1JXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYyMDpcdFNGUF9RVUlSS19GKFwmIzM0O09FTVwmIzM0OywgXCYjMzQ7U0ZQLTEwRy1UXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYyMS1cdFNGUF9RVUlSS19TKFwmIzM0O09FTVwmIzM0OywgXCYjMzQ7U0ZQLTIuNUctVFwmIzM0Oywgc2ZwX3F1aXJrX29lbV8yXzVnKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjI1LVx0U0ZQX1FVSVJLX1MoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtMi41Ry1MSDIwLUFcJiMzNDssIHNmcF9xdWlya18yNTAwYmFzZXgpLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYyNjpcdFNGUF9RVUlSS19GKFwmIzM0O09FTVwmIzM0OywgXCYjMzQ7UlRTRlAtMTBcJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NjI3Olx0U0ZQX1FVSVJLX0YoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtSVFNGUC0xMEdcJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjI4LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy02MzUtXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NjM2Olx0U0ZQX1FVSVJLX0YoXCYjMzQ7VHVycmlzXCYjMzQ7LCBcJiMzNDtSVFNGUC0yLjVHXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYzNzpcdFNGUF9RVUlSS19GKFwmIzM0O1R1cnJpc1wmIzM0OywgXCYjMzQ7UlRTRlAtMTBcJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbCksXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NjM4Olx0U0ZQX1FVSVJLX0YoXCYjMzQ7VHVycmlzXCYjMzQ7LCBcJiMzNDtSVFNGUC0xMEdcJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbCksXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU2MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0ZQIERyaXZlciBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgc28gdGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIGEgcGF0Y2ggaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBhbmQgdGhlIGNydXggb2YgdGhhdCBoaW5nZXMgb24gd2hldGhlciB0aGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIGRpZyBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0ZQIGRyaXZlciBnZXRzIGJvdW5kIGFuZCBjcmVhdGVkLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgLCB3aGljaCBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aGUgY29yZSBsb2dpYy4gQmluZ28hIFRoZXJlJiMzOTtzIGBzZnBfcHJvYmVgLCBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgc2VlIGluIHRoZSBgc2ZwX29mX21hdGNoYCB0YWJsZSwgaXQgbG9va3MgbGlrZSBpdCBzdXBwb3J0cyAmIzM0O3NmZixzZnAmIzM0OyBhbmQgJiMzNDtzZmYsc2ZmJiMzNDsgY29tcGF0aWJsZSBkZXZpY2VzLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGRyaXZlciBpcyByZWFjaGFibGUuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB0aGF0IGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSDigJMgYXJlIGEgbm8tZ28gZm9yIGZ1enppbmcuIEFsc28sIFBDSSBkZXZpY2UgcmVtb3ZhbHMgYW5kIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIGFyZSBvdXQuIFNvLCBpcyBgc2ZwYCBvciBgbWRpby1pMmNgIHJlYWNoYWJsZSB3aXRob3V0IGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZT8KClRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIEkgY2FuIGluc3RhbnRpYXRlIGFuIFNGUCBjYWdlIG9yIE1ESU8gSTJDIGJ1cyBpbiBhIFFFTVUvdmlydHVhbCBlbnZpcm9ubWVudC4gQ2FuIHBsYXRmb3JtIGRldmljZXMgd2l0aCBgb2ZfbWF0Y2hgIGJlIGNyZWF0ZWQ/IENhbiBJIGNyZWF0ZSBgc2ZwYCB3aXRob3V0IGEgZGV2aWNlIHRyZWUsIG9yIHdpdGggZGV2aWNlIHRyZWUgb3ZlcmxheXMsIG9yIGV2ZW4gdXNpbmcgc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyIGluIFFFTVUgeDg2L2FybTY0PyBUaGF0JiMzOTtzIHRoZSBxdWVzdGlvbiBJIGhhdmUgdG8gYW5zd2VyLiBJIG5lZWQgdG8gY2hlY2sgaWYgU3l6a2FsbGVyIG9yIFFFTVUgaGFzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIGBzZnBgIG9yIGBtZGlvLWkyY2AuCgpUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gZG8gYSBnbG9iYWwgc2VhcmNoLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGFueSBjYWxscyB0byBgbWRpb19pMmNfYWxsb2NgLCBgc2ZwX2FsbG9jYCwgb3IgZGlyZWN0bHkgdG8gYHNmcF9wcm9iZWAuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHZpZXcgb2YgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGFjdHVhbGx5IHVzZWQgYW5kLCBjb25zZXF1ZW50bHksIHdoZXRoZXIgdGhleSBhcmUgbGlrZWx5IHRvIGJlIHJlYWNoZWQgZHVyaW5nIHN0YW5kYXJkIFFFTVUgLyB2aXJ0dWFsIGVudmlyb25tZW50IG9wZXJhdGlvbnMuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBvbiBhIGNvZGUgcGF0aCB0aGF0JiMzOTtzIHJlYXNvbmFibHkgcmVhY2hhYmxlLCB0aHVzIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYFdvcnRoRnV6emluZz10cnVlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb19pMmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jPTQ2Nj1zdGF0aWMgaW50IGkyY19taWlfaW5pdF9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNDkxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjQ5MjpzdGF0aWMgYm9vbCBtZGlvX2kyY19jaGVja19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjQ5MzpcdFx0XHRcdFx0IGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNDk0LXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjUwNTpzdHJ1Y3QgbWlpX2J1cyAqbWRpb19pMmNfYWxsb2Moc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1MDY6XHRcdFx0ICAgICAgIGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA3LXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTEwLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjUxMTpcdGlmICghbWRpb19pMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShpMmMsIHByb3RvY29sKSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01MTItXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTQtfVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjU1NTpFWFBPUlRfU1lNQk9MX0dQTChtZGlvX2kyY19hbGxvYyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTU2LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yNDE9c3RydWN0IHNmcCB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI0NS1cdHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjI0NjpcdGVudW0gbWRpb19pMmNfcHJvdG8gbWRpb19wcm90b2NvbDtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yNDctXHRzdHJ1Y3QgcGh5X2RldmljZSAqbW9kX3BoeTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9OTcxPXN0YXRpYyBpbnQgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3Qgc2ZwICpzZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTk3NS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo5NzY6XHRpMmNfbWlpID0gbWRpb19pMmNfYWxsb2Moc2ZwLVx1MDAzZWRldiwgc2ZwLVx1MDAzZWkyYywgc2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wpO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTk3Ny1cdGlmIChJU19FUlIoaTJjX21paSkpXG4tLVxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg9MTI9c3RydWN0IG1paV9idXM7XG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaC0xMy1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjE0OmVudW0gbWRpb19pMmNfcHJvdG8ge1xuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmgtMTUtXHRNRElPX0kyQ19OT05FLFxuLS1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIwLVxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg6MjE6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaDoyMjpcdFx0XHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbCk7XG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaC0yMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3MTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiB0aGUgU0ZQIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHNmcGAgZHJpdmVyIGNvZGUsIGFuZCBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyBgbWRpb19pMmNfYWxsb2NgIGlzIGV4cG9ydGVkLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIG9ubHkgZnJvbSBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZWAgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AuIEFscmlnaHQsIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgc2hvdWxkIGZvbGxvdyB0aGUgY2hhaW4uIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgYHNmcF9pMmNfbWRpb2J1c19jcmVhdGVgLiBBaCwgaXQmIzM5O3MgYHNmcF9zbV9hZGRfbWRpb19idXNgLiBHb29kLCBnb29kLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgc3RlcCBiYWNrIGFuZCBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBTRlAgZGV2aWNlIGlzIHByb2JlZCBhbmQgaG93IGl0cyBvcGVyYXRpb25zIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIGl0c2VsZi4KClNvLCB3aGVuIGlzIGBzZnBfcHJvYmVgIGFjdHVhbGx5IGdldHRpbmcgY2FsbGVkPyBSaWdodCwgSSBzZWUgaXQuIFRoZSBgc2ZwYCBkcml2ZXIgcmVnaXN0ZXJzIGFzIGEgcGxhdGZvcm0gZHJpdmVyLiBJdCYjMzk7cyBsb29raW5nIGZvciBkZXZpY2VzIHdpdGggdGhlICYjMzQ7c2ZmLHNmcCYjMzQ7IGFuZCAmIzM0O3NmZixzZmYmIzM0OyBjb21wYXRpYmxlcy4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gQW5kIHdoaWxlIEkmIzM5O20gYXQgaXQsIEkgc2hvdWxkIGFsc28gY2hlY2sgb3V0IGBwaHlfc2ZwX3Byb2JlYCBpbiBgcGh5X2RldmljZS5jYC4gQWx3YXlzIGdvb2QgdG8gaGF2ZSBhIGxvb2sgYXQgdGhlIFBIWSBsYXllciwgaXQgbWF5IHNob3cgb3RoZXIgaW50ZXJhY3Rpb25zIGFuZCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfc2ZwX3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY3Nj1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwMy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNDogKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDc6c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTczNy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTczODogKiBwaHlfc2ZwX3JlbGVhc2UgLSByZWxlYXNlIHJlc291cmNlcyBzZXQgdXAgYnkgcGh5X3NmcF9wcm9iZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MzktICogQHBoeWRldjogdGhlIFBIWSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTc0MC0gKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzQxOiAqIFJlbGVhc2UgdGhlIFNGUCByZXNvdXJjZXMgc2V0IHVwIGJ5IGEgc3VjY2Vzc2Z1bCBwaHlfc2ZwX3Byb2JlKCkuIFVucmVnaXN0ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTc0Mi0gKiB0aGUgdXBzdHJlYW0gYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIHBoeV9wb3J0LCBzbyBTRlAgdXBzdHJlYW0gY2FsbGJhY2tzIGNhbm5vdFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzU2NT1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3OS1cdGlmICghcGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4pIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU4MDpcdFx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTgxLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY5NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgd2hhdCB0aGUgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGFjY29tcGxpc2guIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGxhbmRzY2FwZSBvZiBTRlAgbW9kdWxlcywgYW5kIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgc3BlY2lmaWNzIGhlcmUuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHBoeXNpY2FsIGxheWVyIGludGVyZmFjZSBhbmQgbGlrZWx5IGludm9sdmVzIGRldGVjdGluZyBhbmQgY29uZmlndXJpbmcgYW4gU0ZQIG1vZHVsZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBzdGVwcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgYW5kIHdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpdCYjMzk7cyBnb3QuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQmIzM5O3MgZm9sbG93aW5nIGJlc3QgcHJhY3RpY2VzIGZvciB0aGlzIHR5cGUgb2YgcHJvYmUgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IFNGUCB0eXBlcyBhbmQgcG90ZW50aWFsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgaWYgaXQgaW5jbHVkZXMgYW55IHZlbmRvci1zcGVjaWZpYyBoYW5kbGluZy4gVGhpcyBpcyByaWdodCBpbiBteSB3aGVlbGhvdXNlLCBzbyBJJiMzOTttIGV4Y2l0ZWQgdG8gZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcwNDpcdCAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcbjE3MDU6XHQgKiBAcGh5ZGV2OiBQb2ludGVyIHRvIHBoeV9kZXZpY2VcbjE3MDY6XHQgKi9cbjE3MDc6XHRzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjE3MDg6XHR7XG4xNzA5Olx0XHRzdHJ1Y3Qgc2ZwX2J1cyAqYnVzO1xuMTcxMDpcdFx0aW50IHJldCA9IDA7XG4xNzExOlx0XG4xNzEyOlx0XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSkge1xuMTcxMzpcdFx0XHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpO1xuMTcxNDpcdFx0XHRpZiAoSVNfRVJSKGJ1cykpXG4xNzE1Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnVzKTtcbjE3MTY6XHRcbjE3MTc6XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBidXM7XG4xNzE4Olx0XG4xNzE5Olx0XHRcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG4xNzIwOlx0XHRcdHNmcF9idXNfcHV0KGJ1cyk7XG4xNzIxOlx0XG4xNzIyOlx0XHRcdGlmIChyZXQpXG4xNzIzOlx0XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuMTcyNDpcdFx0fVxuMTcyNTpcdFxuMTcyNjpcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKSB7XG4xNzI3Olx0XHRcdHJldCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xuMTcyODpcdFx0XHRpZiAocmV0KSB7XG4xNzI5Olx0XHRcdFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGh5ZGV2LVx1MDAzZXNmcF9idXMpO1xuMTczMDpcdFx0XHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbjE3MzE6XHRcdFx0fVxuMTczMjpcdFx0fVxuMTczMzpcdFxuMTczNDpcdFx0cmV0dXJuIHJldDtcbjE3MzU6XHR9XG4xNzM2Olx0XG4xNzM3Olx0LyoqXG4xNzM4Olx0ICogcGh5X3NmcF9yZWxlYXNlIC0gcmVsZWFzZSByZXNvdXJjZXMgc2V0IHVwIGJ5IHBoeV9zZnBfcHJvYmUoKVxuMTczOTpcdCAqIEBwaHlkZXY6IHRoZSBQSFkgZGV2aWNlXG4xNzQwOlx0ICpcbjE3NDE6XHQgKiBSZWxlYXNlIHRoZSBTRlAgcmVzb3VyY2VzIHNldCB1cCBieSBhIHN1Y2Nlc3NmdWwgcGh5X3NmcF9wcm9iZSgpLiBVbnJlZ2lzdGVyXG4xNzQyOlx0ICogdGhlIHVwc3RyZWFtIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBwaHlfcG9ydCwgc28gU0ZQIHVwc3RyZWFtIGNhbGxiYWNrcyBjYW5ub3RcbjE3NDM6XHQgKiByYWNlIHdpdGggcG9ydCBkZXN0cnVjdGlvbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MzcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUUVNVSAvIFNGUCBDb251bmRydW0qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkLiBDYW4gSSBldmVuICp0aGluayogYWJvdXQgY3JlYXRpbmcgU0ZQIGNhZ2VzIG9yIGRldmljZXMgaW4gUUVNVT8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgcXVlc3Rpb24uIEJ1dCB3YWl0LCBkb2VzIFFFTVUgYWN0dWFsbHkgKmVtdWxhdGUqIHRoZSBwaHlzaWNhbCBTRlAgY2FnZXMgdGhlbXNlbHZlcywgb3IgaXMgaXQgbW9yZSBmb2N1c2VkIG9uIGVtdWxhdGluZyB0aGUgSTJDIGludGVyZmFjZSBvZiBTRlAgbW9kdWxlcz8gT3IsIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc3RhbmRhcmQgaGFyZHdhcmUgcmVwcmVzZW50YXRpb24gdGhhdCBRRU1VIHByb3ZpZGVzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LgoKTGV0IG1lIGJyZWFrIGRvd24gdGhlIGV4aXN0aW5nIGNyaXRlcmlhIHRvIHNlZSBpZiBJJiMzOTttIGV2ZW4gaW4gdGhlIGJhbGxwYXJrLiBUaGUgY3JpdGVyaWEgZm9yIFdvcnRoRnV6emluZz1mYWxzZSBhcmUgcHJldHR5IHNwZWNpZmljLiBNb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50cywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHRob3NlIGFyZSBhbGwgb2J2aW91cyBmbGFncy4gQnV0IHdoYXQgYWJvdXQgdGhlIHJlYWxseSBzcGVjaWZpYyBleGFtcGxlcz8gUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcmVhbCBoYXJkd2FyZT8gT2theSwgdGhhdCBoZWxwcyB0byBjbGFyaWZ5IHRoZSBib3VuZGFyaWVzLiBBbmQgdGhlbiB0aGUgLnJlbW92ZS8uc2h1dGRvd24gY2FsbGJhY2tzIGR1cmluZyB1bmJpbmQgb3BlcmF0aW9ucywgdGhhdCYjMzk7cyBub3Qgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKTm93LCBmb2N1c2luZyBiYWNrLCB3aGF0IGFib3V0IHRoZSBJMkMvTURJTy9TRlAgc2l0dWF0aW9uPyBUaGlzIGZlZWxzIGxpa2UgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLiBDYW4gSTJDIGRldmljZXMgb3IgU0ZQIG1vZHVsZXMgYmUgYWNjZXNzZWQgd2l0aGluIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIGF0IGFsbD8gSG93IGRvZXMgUUVNVSBhbmQgTGludXggZ2VuZXJhbGx5IGRlYWwgd2l0aCB0aGUgaW50ZXJmYWNlIGJldHdlZW4gSTJDIGFuZCBTRlA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuCgpJcyBTRlAgaGFuZGxlZCBhcyBhbiAmIzM0O09GJiMzNDsgKE9wZW4gRmlybXdhcmUpIG9yIHBsYXRmb3JtIGRldmljZT8gRG9lcyBpdCByZXF1aXJlIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciBhbiBTRlAgY2FnZSwgYWxvbmdzaWRlIHRoZSBwaHlzaWNhbCBvciBlbXVsYXRlZCBJMkMgdHJhbnNjZWl2ZXIgbW9kdWxlPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0JiMzOTtzIHRoZSBzZXR1cC4gQ2FuIEkganVzdCBpbnN0YW50aWF0ZSBhbiBTRlAgdXNpbmcgaTJjLWRldiAvIGkyYy1zdHViLCBvciBhbSBJIHN0dWNrIHdpdGggYSBwbGF0Zm9ybSBkZXZpY2Ugc2NlbmFyaW8/IEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciB0aG9zZSBkcml2ZXJzLCBvciBidXNlcywgb3IgYWxsb2MgZnVuY3Rpb25zOiBgc2ZwX2RyaXZlcmAsIGBzZnBfYnVzYCwgYHNmcF9hbGxvY2AgbWlnaHQgYmUgdGhlIGtleXdvcmRzIEkgbmVlZC4gSSBob3BlIEkgY2FuIG1ha2UgdGhpcyBmdXp6YWJsZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwX2J1c19hZGRfdXBzdHJlYW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzA3PXN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxOC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcxOTpcdFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcyMC1cdFx0c2ZwX2J1c19wdXQoYnVzKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM1NjU9c3RhdGljIGludCBwaHlfc2V0dXBfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1NzYtXHQgKiBiaW5kaW5nIG9jY3VycyB3aXRoIFJUTkwgaGVscCwgd2hpY2ggd2lsbCBkZWFkbG9jayB0aGUgY2FsbCB0b1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTc3Olx0ICogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKS5cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3OC1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTc2OD1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE3ODQtXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE3ODU6XHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBsLCBcdTAwMjZzZnBfcGh5bGlua19vcHMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNzg2LVx0c2ZwX2J1c19wdXQoYnVzKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jPTYzNT1FWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX2ZpbmRfZndub2RlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTYzNy0vKipcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmM6NjM4OiAqIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgLSBwYXJzZSBhbmQgcmVnaXN0ZXIgdGhlIG5laWdoYm91cmluZyBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMtNjM5LSAqIEBidXM6IHRoZSBcdTAwMjZzdHJ1Y3Qgc2ZwX2J1cyBmb3VuZCB2aWEgc2ZwX2J1c19maW5kX2Z3bm9kZSgpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYy02NTYtICovXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jOjY1NzppbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY1OC1cdFx0XHQgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcylcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY4NC19XG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jOjY4NTpFWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX2FkZF91cHN0cmVhbSk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY4Ni1cbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY5MS0gKiBEZWxldGUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdXBzdHJlYW0gY29ubmVjdGlvbiBmb3IgdGhlIFNGUFxuZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYzo2OTI6ICogbW9kdWxlLiBAYnVzIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgYnkgc2ZwX2J1c19hZGRfdXBzdHJlYW0oKS5cbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMtNjkzLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvc2ZwLmg9NTkzPXN0cnVjdCBzZnBfYnVzICpzZnBfYnVzX2ZpbmRfZndub2RlKGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpO1xuaW5jbHVkZS9saW51eC9zZnAuaDo1OTQ6aW50IHNmcF9idXNfYWRkX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMsIHZvaWQgKnVwc3RyZWFtLFxuaW5jbHVkZS9saW51eC9zZnAuaC01OTUtXHRcdFx0IGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpO1xuLS1cbmluY2x1ZGUvbGludXgvc2ZwLmg9NjQ4PXNmcF9idXNfZmluZF9md25vZGUoY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTY1Mi1cbmluY2x1ZGUvbGludXgvc2ZwLmg6NjUzOnN0YXRpYyBpbmxpbmUgaW50IHNmcF9idXNfYWRkX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMsIHZvaWQgKnVwc3RyZWFtLFxuaW5jbHVkZS9saW51eC9zZnAuaC02NTQtXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTRlAgQ2FnZXMgYW5kIFJvbGxCYWxsIFBIWXM6IEEgRmVhc2liaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nIFNGUCBjYWdlcyBhbmQgZGV2aWNlcy4gQ2FuIHRoaXMgZXZlbiBiZSBkb25lPyBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFNGUCBhY3R1YWxseSB3b3Jrcy4gQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bjogQSBjYWdlIGlzIGRlY2xhcmVkIGluIHRoZSBEZXZpY2UgVHJlZSwgbWF5YmUgdXNpbmcgT0Ygb24gQVJNLCBNSVBTLCBvciBBQ1BJIGJvYXJkcy4gVGhlIGRyaXZlciBiaW5kcyB0byB0aGUgcGxhdGZvcm0gZGV2aWNlLCBhY2Nlc3NpbmcgYW4gSTJDIGJ1cyBsaW5rZWQgdG8gdGhlIGNhZ2UuIFdoZW4gYSBtb2R1bGUgcGx1Z3MgaW4sIHRoZSBzdGF0ZSBtYWNoaW5lIHN0YXJ0cywgcmVhZGluZyB0aGUgRUVQUk9NIHZpYSBJMkMgYXQgMHg1MCBhbmQgMHg1MS4gSWYgdGhlIEVFUFJPTSBtYXRjaGVzIGEgUm9sbEJhbGwgcXVpcmssIHRoZSBgbWRpb19wcm90b2NvbGAgaXMgc2V0LiBUaGVuLCB3ZSBzZWUgYHNmcF9zbV9hZGRfbWRpb19idXNgIGFuZCBgbWRpb19pMmNfYWxsb2NgLCB1bHRpbWF0ZWx5IGxlYWRpbmcgdG8gYGkyY19taWlfcHJvYmVfcm9sbGJhbGxgLgoKQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFjaCB0aGlzIGluIHN5emthbGxlciBvciBRRU1VPyBBbmQgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5LiBEb2VzIHN0YW5kYXJkIFFFTVUgKHg4Nl82NCBvciBhcm02NCkgZXZlbiBlbXVsYXRlIGFuIFNGUCBjYWdlIG9yIFJvbGxCYWxsIFBIWT8gTm8sIGl0IGRvZXNuJiMzOTt0LiBPa2F5LCB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuIEJ1dCB3YWl0LCB0aGVyZSYjMzk7cyBhIGd1aWRlbGluZSBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHdvcnRoaW5lc3MgZm9yIGZ1enppbmcuIEl0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0JiMzOTtzIGEgbWFqb3IgY29uc2lkZXJhdGlvbi4gU3R1ZmYgbGlrZSBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24gZmxvdywgb3IgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIFFFTVUgYXJlIG91dC4gU28sIGRvZXMgU0ZQIG9yIE1ESU8tSTJDICphY3R1YWxseSogaGF2ZSBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGhvb2tzPwoKUmlnaHQsIGxldCYjMzk7cyBsb29rIGF0IHN5emthbGxlci4gRG9lcyBpdCBoYXZlIGFueSBkZXNjcmlwdGlvbnMgZm9yIHRoaW5ncyBsaWtlIG1kaW8sIHNmcCwgcGh5bGluaywgb3IgZXRodG9vbD8gU3l6a2FsbGVyIHJ1bnMgaW4gUUVNVSAoeDg2XzY0LCBhcm02NCkgb3IgR0NFLiBDYW4gSSBpbnN0YW50aWF0ZSBTRlAgY2FnZXMgaW4gdGhvc2UgZW52aXJvbm1lbnRzPyBJIG5lZWQgdG8gY2hlY2sgZm9yIHN5c2ZzIG9yIGlvY3RsIGludGVyZmFjZXMgdGhhdCB3b3VsZCBsZXQgbWUgaW5zdGFudGlhdGUgcGxhdGZvcm0gZGV2aWNlcywgb3Igc3BlY2lmaWNhbGx5IFNGUCBvciBwaHlsaW5rLiBUaGUgU0ZQIGRyaXZlciBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0IG1hdGNoZXMgdGhlIE9GIG5vZGUgd2l0aCBgY29tcGF0aWJsZSA9ICYjMzQ7c2ZmLHNmcCYjMzQ7YC4gVGhlbiB0aGVyZSYjMzk7cyBwbGF0Zm9ybSBkZXZpY2VzIHdpdGhvdXQgYW4gT0YgZGV2aWNlIHRyZWUgbm9kZS4gSW4gYHNmcF9wcm9iZWAsIGBzZnBfaTJjX2dldChzZnApYCBpcyBjYWxsZWQuIExldCYjMzk7cyBzZWUgd2hhdCAqdGhhdCogZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyODA6XHRcdFx0bWRpb2J1c191bnJlZ2lzdGVyKHNmcC1cdTAwM2VpMmNfbWlpKTtcbjMyODE6XHRcdFx0bWRpb2J1c19mcmVlKHNmcC1cdTAwM2VpMmNfbWlpKTtcbjMyODI6XHRcdH1cbjMyODM6XHRcdGlmIChzZnAtXHUwMDNlaTJjKVxuMzI4NDpcdFx0XHRpMmNfcHV0X2FkYXB0ZXIoc2ZwLVx1MDAzZWkyYyk7XG4zMjg1Olx0XHRrZnJlZShzZnApO1xuMzI4NjpcdH1cbjMyODc6XHRcbjMyODg6XHRzdGF0aWMgaW50IHNmcF9pMmNfZ2V0KHN0cnVjdCBzZnAgKnNmcClcbjMyODk6XHR7XG4zMjkwOlx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqaDtcbjMyOTE6XHRcdHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjO1xuMzI5MjpcdFx0aW50IGVycjtcbjMyOTM6XHRcbjMyOTQ6XHRcdGggPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2X2Z3bm9kZShzZnAtXHUwMDNlZGV2KSwgXCYjMzQ7aTJjLWJ1c1wmIzM0OywgMCk7XG4zMjk1Olx0XHRpZiAoSVNfRVJSKGgpKSB7XG4zMjk2Olx0XHRcdGRldl9lcnIoc2ZwLVx1MDAzZWRldiwgXCYjMzQ7bWlzc2luZyAmIzM5O2kyYy1idXMmIzM5OyBwcm9wZXJ0eVxcblwmIzM0Oyk7XG4zMjk3Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMzI5ODpcdFx0fVxuMzI5OTpcdFxuMzMwMDpcdFx0aTJjID0gaTJjX2dldF9hZGFwdGVyX2J5X2Z3bm9kZShoKTtcbjMzMDE6XHRcdGlmICghaTJjKSB7XG4zMzAyOlx0XHRcdGVyciA9IC1FUFJPQkVfREVGRVI7XG4zMzAzOlx0XHRcdGdvdG8gcHV0O1xuMzMwNDpcdFx0fVxuMzMwNTpcdFxuMzMwNjpcdFx0ZXJyID0gc2ZwX2kyY19jb25maWd1cmUoc2ZwLCBpMmMpO1xuMzMwNzpcdFx0aWYgKGVycilcbjMzMDg6XHRcdFx0aTJjX3B1dF9hZGFwdGVyKGkyYyk7XG4zMzA5Olx0cHV0OlxuMzMxMDpcdFx0Zndub2RlX2hhbmRsZV9wdXQoaCk7XG4zMzExOlx0XHRyZXR1cm4gZXJyO1xuMzMxMjpcdH1cbjMzMTM6XHRcbjMzMTQ6XHRzdGF0aWMgaW50IHNmcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuMzMxNTpcdHtcbjMzMTY6XHRcdGNvbnN0IHN0cnVjdCBzZmZfZGF0YSAqc2ZmO1xuMzMxNzpcdFx0Y2hhciAqc2ZwX2lycV9uYW1lO1xuMzMxODpcdFx0c3RydWN0IHNmcCAqc2ZwO1xuMzMxOTpcdFx0aW50IGVyciwgaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0ZQL0kyQyBQYXRjaCYjMzk7cyBXb3J0aGluZXNzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGBzZnBfaTJjX2dldGAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgZGlyZWN0IGNhbGwgdG8gYGZ3bm9kZV9maW5kX3JlZmVyZW5jZWAgdG8gbG9jYXRlIGFuIEkyQyBhZGFwdGVyLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlOiB0aGlzIGltcGxpZXMgYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIHNldHVwIGlzIHJlcXVpcmVkLiBXZSYjMzk7cmUgdGFsa2luZyBPcGVuRmlybXdhcmUgKERldmljZSBUcmVlKSBvciBBQ1BJIHdpdGggYSBwcm9wZXJseSBkZWZpbmVkIEkyQyBidXMgbm9kZSwgYW4gdXBzdHJlYW0gUEhZL25ldHdvcmsgZGV2aWNlLCBhbmQgYSAqcmVhbCogb3IgZW11bGF0ZWQgU0ZQIHRyYW5zY2VpdmVyIHJlc3BvbmRpbmcgdG8gSTJDIGNvbW11bmljYXRpb24gKEVFUFJPTSBxdWVyaWVzLCBSb2xsQmFsbCBwcm90b2NvbCkuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0IGEgbWludXRlLCBjYW4gdGhpcyBldmVuIGJlIHJlYWxpc3RpY2FsbHkgdGVzdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQ/JiMzNDsgRnJvbSBleHBlcmllbmNlLCBJIGtub3cgdGhhdCBuZWl0aGVyIFFFTVUgbm9yIEdDRSBvZmZlcnMgYW55IHN0YW5kYXJkIHN1cHBvcnQgZm9yIFNGUCBjYWdlIGVtdWxhdGlvbiwgb3IgYW55dGhpbmcgdGhhdCB3b3VsZCBzaW11bGF0ZSB0aGUgbmVjZXNzYXJ5IFJvbGxiYWxsIEkyQyBQSFkuIFRoaXMgc3VnZ2VzdHMgdGhpcyBjb2RlIHBhdGggaXNuJiMzOTt0IGVhc2lseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZnV6emluZyBndWlkZWxpbmVzIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy4gT2theSwgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGNoYW5nZXMgdGhhdCBpbnZvbHZlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCBRRU1VL0dDRSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGVkIGhhcmR3YXJlLCBzaG91bGQgcmVzdWx0IGluIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIGZpdHMgdGhlIGJpbGwgZXhhY3RseS4KClRvIGJlIHRob3JvdWdoLCBsZXQmIzM5O3MgbG9vayBmb3Igb3RoZXIgdXNlcyBvZiBgbWRpby1pMmNgIGFuZCBgc2ZwYCBpbiB0aGUgbmV0d29ya2luZyBjb3JlIG9yIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgY29udGV4dC4gV2hpbGUgdGhlIGNvcmUgY2hlY2sgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBvcmlnaW5hbCBsaW5lLCBsZXQmIzM5O3MgY29uZmlybSB0aGlzIGNvbmNsdXNpb24gYnkgYSBmdWxsIHNjYW4gb2YgdGhlIGNvZGUuIFRoaXMgd2lsbCBoZWxwIHVzIGNvbmZpcm0gbm8gb3RoZXIgcGFydHMgb2YgbmV0d29ya2luZyB1c2UgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLWkyYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtNQUlOVEFJTkVSUz0yNDkwNT1GOlx0ZHJpdmVycy9uZXQvcGh5L3NmcCpcbk1BSU5UQUlORVJTOjI0OTA2OkY6XHRpbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaFxuTUFJTlRBSU5FUlMtMjQ5MDctRjpcdGluY2x1ZGUvbGludXgvcGh5bGluay5oXG4tLVxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfTURJT19ISVNJX0ZFTUFDKVx0XHQmIzQzOz0gbWRpby1oaXNpLWZlbWFjLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX01ESU9fSTJDKVx0XHRcdCYjNDM7PSBtZGlvLWkyYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19NRElPX0lQUTQwMTkpXHRcdCYjNDM7PSBtZGlvLWlwcTQwMTkub1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjE0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8vbWRpby1pMmMuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTE1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6OTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvL21kaW8taTJjLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0xNTg9c3RhdGljIGNvbnN0IGVudW0gZ3Bpb2RfZmxhZ3MgZ3Bpb19mbGFnc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjAtLyogU0ZQIG1vZHVsZXMgYXBwZWFyIHRvIGFsd2F5cyBoYXZlIHRoZWlyIFBIWSBjb25maWd1cmVkIGZvciBidXMgYWRkcmVzc1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIyMTogKiAweDU2ICh3aGljaCB3aXRoIG1kaW8taTJjLCB0cmFuc2xhdGVzIHRvIGEgUEhZIGFkZHJlc3Mgb2YgMjIpLlxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMi0gKiBSb2xsQmFsbCBTRlBzIGFjY2VzcyBwaHkgdmlhIFNGUCBFbmhhbmNlZCBEaWdpdGFsIERpYWdub3N0aWMgSW50ZXJmYWNlXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjIzOiAqIHZpYSBhZGRyZXNzIDB4NTEgKG1kaW8taTJjIHdpbGwgdXNlIFJvbGxCYWxsIHByb3RvY29sIG9uIHRoaXMgYWRkcmVzcykuXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjI0LSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg5MwoJCQkJCQkJb3V0cHV0OiAxMjQKCQkJCQkJCXRob3VnaHRzOiA2MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXb3J0aGluZXNzIG9mIEZ1enppbmcgdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcmVhY2ggb2YgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBgbWRpb19pMmNgIGFuZCBgc2ZwYC4gTG9va2luZyBhdCB0aGUgY29kZWJhc2UsIGl0JiMzOTtzIGNsZWFyIGBtZGlvLWkyYy5jYCBpcyBjb25kaXRpb25hbCDigJMgaXQgb25seSBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19NRElPX0kyQ2AgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdWx0aW1hdGVseSBzZWxlY3RlZCBieSBgQ09ORklHX1NGUGAgaW4gdGhlIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgZmlsZS4gQW5kLCBgc2ZwLmNgIG9ubHkgZ2V0cyBsb2FkZWQvcHJvYmVkIHdoZW4gdGhlcmUmIzM5O3MgYW4gU0ZQIG5vZGUgaW4gdGhlIGRldmljZSB0cmVlIG9yIEFDUEkgd2l0aCBjZXJ0YWluIHByb3BlcnRpZXMgdGhhdCBjb25uZWN0cyB0byBhbiBJMkMgYnVzLiBFc3NlbnRpYWxseSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlLgoKTm93LCBmb2N1c2luZyBvbiAqdGhpcyogc3BlY2lmaWMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZG9pbmcgYSBmZXcgdGhpbmdzLiBGaXJzdCwgdGhlcmUmIzM5O3MgYSBuZXcgcXVpcmsgZm9yICYjMzQ7T0VNIFNGUC0xMEctVC1JJiMzNDsgY29wcGVyIHRyYW5zY2VpdmVycyDigJMgdGhhdCBzY3JlYW1zIGhhcmR3YXJlLXNwZWNpZmljLiBTZWNvbmQsIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBgLUVOT0RFVmAgZXJyb3IgZnJvbSBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZSgpYCwgd2hpY2ggaW52b2x2ZXMgc2V0dGluZyBgc2ZwLSZndDttZGlvX3Byb3RvY29sID0gTURJT19JMkNfTk9ORWAuIFRoaXJkLCBpdCYjMzk7cyBpbXBsZW1lbnRpbmcgYGkyY19taWlfcHJvYmVfcm9sbGJhbGwoKWAgdG8gY2hlY2sgZm9yIFJvbGxCYWxsIE1ESU8gcHJvdG9jb2wgc3VwcG9ydC4KClRoZSBjb21tb24gdGhyZWFkIGhlcmU/IEFsbCBvZiB0aGlzIGlzIHRpZWQgdG8gdGhlIHBoeXNpY2FsIGxheWVyIOKAkyBTRlAgY2FnZXMsIFNGUCYjNDM7IGNvcHBlciBtb2R1bGVzIGNvbm5lY3RlZCB2aWEgSTJDLCBhbmQgdGhlIFJvbGxCYWxsIHByb3RvY29sLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYGkyY19taWlfcHJvYmVfcm9sbGJhbGwoKWAgaXMgdHJ5aW5nIHRvIGRvIEkyQyByZWFkIGFuZCB3YWl0IGZvciBoYXJkd2FyZSBzcGVjaWZpYyByZXNwb25zZS4gVGhpcyBtZWFucyBpdCAqbmVlZHMqIHJlYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24uCgpTbywgdGhlIGtleSBpcyB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGV5IHN0YXRlIHRoYXQgdGhlIHBhdGNoIGlzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLiYjMzQ7LiBUaGlzIGNvZGUgcGF0aCwgd2l0aCBpdHMgZGVwZW5kZW5jZSBvbiBwaHlzaWNhbCBTRlAgbW9kdWxlcyBhbmQgdGhlIFJvbGxCYWxsIHByb3RvY29sLCBpcyBhYnNvbHV0ZWx5IGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gRXZlbiBlbXVsYXRpbmcgdGhlIEkyQyBidXMgaXRzZWxmIHdvdWxkbiYjMzk7dCBiZSBlbm91Z2guIFdlIG5lZWQgdGhlIHBoeXNpY2FsIFNGUCBjYWdlIGFuZCB0aGUgcGh5c2ljYWwgdHJhbnNjZWl2ZXIgd2l0aCB0aGUgUm9sbEJhbGwgcHJvdG9jb2wuCgpUaGVyZWZvcmUsIGFmdGVyIHJldmlld2luZyBhbGwgdGhlIGRldGFpbHMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmc6CgoqICAgYFdvcnRoRnV6emluZzogZmFsc2VgCiogICBgRm9jdXNTeW1ib2xzOiBbXWAKKiAgIGBFbmFibGVDb25maWdzOiBbXWAKClRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyOiBUaGlzIHBhdGNoIG1vZGlmaWVzIGNvZGUgc3BlY2lmaWMgdG8gcGh5c2ljYWwgU0ZQL1NGUCYjNDM7IHRyYW5zY2VpdmVyIG1vZHVsZXMgYW5kIGNhZ2VzIGNvbm5lY3RlZCB2aWEgSTJDLiBUaGlzIGlzIGltcG9zc2libGUgdG8gZW11bGF0ZSBvciByZWFjaCBpbiBhIHZpcnR1YWxpemVkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBUaW1lIHRvIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSBSb2xsQmFsbCBNRElPLW92ZXItSTJDIHByb3RvY29sIGluaXRpYWxpemF0aW9uIChkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMpIGFuZCBTRlAgbW9kdWxlIHF1aXJrL2J1cyBoYW5kbGluZyAoZHJpdmVycy9uZXQvcGh5L3NmcC5jKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFNGUCBjYWdlcyBhbmQgU0ZQIHRyYW5zY2VpdmVyIGhhcmR3YXJlIGNvbW11bmljYXRpbmcgb3ZlciBJMkMsIHdoaWNoIGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgUm9sbEJhbGwgTURJTy1vdmVyLUkyQyBwcm90b2NvbCBpbml0aWFsaXphdGlvbiAoZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jKSBhbmQgU0ZQIG1vZHVsZSBxdWlyay9idXMgaGFuZGxpbmcgKGRyaXZlcnMvbmV0L3BoeS9zZnAuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBTRlAgY2FnZXMgYW5kIFNGUCB0cmFuc2NlaXZlciBoYXJkd2FyZSBjb21tdW5pY2F0aW5nIG92ZXIgSTJDLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Njo0NS4yNzA5NTY1MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjUzMzYwNDUyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIG1vZGlmeSBSb2xsQmFsbCBNRElPLW92ZXItSTJDIHByb3RvY29sIGluaXRpYWxpemF0aW9uIChkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMpIGFuZCBTRlAgbW9kdWxlIHF1aXJrL2J1cyBoYW5kbGluZyAoZHJpdmVycy9uZXQvcGh5L3NmcC5jKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFNGUCBjYWdlcyBhbmQgU0ZQIHRyYW5zY2VpdmVyIGhhcmR3YXJlIGNvbW11bmljYXRpbmcgb3ZlciBJMkMsIHdoaWNoIGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDY6NDUuMjcwOTYxOTA3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE5MjM1NDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzlkNDU4ZmMwNzJjYzc5OGYxODU0MDdiNjE3ODMxMzIyNGU3YmFlNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxOTo0Njo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNcXG5pbmRleCBlZDIwMzUyYTU4OWEzLi5iODhmNjMyMzRiNGU2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xcbkBAIC00MTksNiArNDE5LDUwIEBAIHN0YXRpYyBpbnQgaTJjX21paV93cml0ZV9yb2xsYmFsbChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgZGV2YWQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGkyY19taWlfcHJvYmVfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXFxuK3tcXG4rXFx0dTggZGF0YV9idWZbXSA9IHsgUk9MTEJBTExfREFUQV9BRERSLCAweDAxLCAweDAwLCAweDAwIH07XFxuK1xcdHU4IGNtZF9idWZbXSAgPSB7IFJPTExCQUxMX0NNRF9BRERSLCBST0xMQkFMTF9DTURfUkVBRCB9O1xcbitcXHR1OCBjbWRfYWRkciAgID0gUk9MTEJBTExfQ01EX0FERFI7XFxuK1xcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XFxuK1xcdHU4IHJlc3VsdDtcXG4rXFx0aW50IHJldDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRtc2dzWzBdLmFkZHIgID0gUk9MTEJBTExfUEhZX0kyQ19BRERSO1xcbitcXHRtc2dzWzBdLmZsYWdzID0gMDtcXG4rXFx0bXNnc1swXS5sZW4gICA9IHNpemVvZihkYXRhX2J1Zik7XFxuK1xcdG1zZ3NbMF0uYnVmICAgPSBkYXRhX2J1ZjtcXG4rXFx0bXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcXG4rXFx0bXNnc1sxXS5mbGFncyA9IDA7XFxuK1xcdG1zZ3NbMV0ubGVuICAgPSBzaXplb2YoY21kX2J1Zik7XFxuK1xcdG1zZ3NbMV0uYnVmICAgPSBjbWRfYnVmO1xcbitcXG4rXFx0cmV0ID0gaTJjX3RyYW5zZmVyX3JvbGxiYWxsKGkyYywgbXNncywgQVJSQVlfU0laRShtc2dzKSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdG1zZ3NbMF0uYWRkciAgPSBST0xMQkFMTF9QSFlfSTJDX0FERFI7XFxuK1xcdG1zZ3NbMF0uZmxhZ3MgPSAwO1xcbitcXHRtc2dzWzBdLmxlbiAgID0gMTtcXG4rXFx0bXNnc1swXS5idWYgICA9IFxcdTAwMjZjbWRfYWRkcjtcXG4rXFx0bXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcXG4rXFx0bXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEO1xcbitcXHRtc2dzWzFdLmxlbiAgID0gMTtcXG4rXFx0bXNnc1sxXS5idWYgICA9IFxcdTAwMjZyZXN1bHQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTA7IGkrKykge1xcbitcXHRcXHRtc2xlZXAoMjApO1xcbitcXHRcXHRyZXQgPSBpMmNfdHJhbnNmZXJfcm9sbGJhbGwoaTJjLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHRcXHRpZiAocmVzdWx0ID09IFJPTExCQUxMX0NNRF9ET05FKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxcbiB7XFxuIFxcdHN0cnVjdCBpMmNfbXNnIG1zZztcXG5AQCAtNDM4LDExICs0ODIsMTEgQEAgc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXFxuIFxcbiBcXHRyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCBcXHUwMDI2bXNnLCAxKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdGVsc2UgaWYgKHJldCAhPSAxKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0aWYgKHJldCAhPSAxKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKGkyYyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuQEAgLTQ4Nyw5ICs1MzEsMTAgQEAgc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuIFxcdGNhc2UgTURJT19JMkNfUk9MTEJBTEw6XFxuIFxcdFxcdHJldCA9IGkyY19taWlfaW5pdF9yb2xsYmFsbChpMmMpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRkZXZfZXJyKHBhcmVudCxcXG4tXFx0XFx0XFx0XFx0XFxcIkNhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCAhPSAtRU5PREVWKVxcbitcXHRcXHRcXHRcXHRkZXZfZXJyKHBhcmVudCxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkNhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cmV0KTtcXG4gXFx0XFx0XFx0bWRpb2J1c19mcmVlKG1paSk7XFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuaW5kZXggMmVjOTE0NjZhY2RmMy4uNDljNzdjYTg2OTMxZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcXG5AQCAtNjE2LDYgKzYxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcXG4gXFx0Ly8gT0VNIFNGUC1HRS1UIGlzIGEgMTAwMEJhc2UtVCBtb2R1bGUgd2l0aCBicm9rZW4gVFhfRkFVTFQgaW5kaWNhdG9yXFxuIFxcdFNGUF9RVUlSS19GKFxcXCJPRU1cXFwiLCBcXFwiU0ZQLUdFLVRcXFwiLCBzZnBfZml4dXBfaWdub3JlX3R4X2ZhdWx0KSxcXG4gXFxuK1xcdFNGUF9RVUlSS19GKFxcXCJPRU1cXFwiLCBcXFwiU0ZQLTEwRy1ULUlcXFwiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxcbiBcXHRTRlBfUVVJUktfRihcXFwiT0VNXFxcIiwgXFxcIlNGUC0xMEctVFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXFxuIFxcdFNGUF9RVUlSS19TKFxcXCJPRU1cXFwiLCBcXFwiU0ZQLTIuNUctVFxcXCIsIHNmcF9xdWlya19vZW1fMl81ZyksXFxuIFxcdFNGUF9RVUlSS19TKFxcXCJPRU1cXFwiLCBcXFwiU0ZQLTIuNUctQlgxMC1EXFxcIiwgc2ZwX3F1aXJrXzI1MDBiYXNleCksXFxuQEAgLTIyMDgsMTAgKzIyMDksMTcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2FybilcXG4gXFxuIHN0YXRpYyBpbnQgc2ZwX3NtX2FkZF9tZGlvX2J1cyhzdHJ1Y3Qgc2ZwICpzZnApXFxuIHtcXG4tXFx0aWYgKHNmcC1cXHUwMDNlbWRpb19wcm90b2NvbCAhPSBNRElPX0kyQ19OT05FKVxcbi1cXHRcXHRyZXR1cm4gc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdGlmIChzZnAtXFx1MDAzZW1kaW9fcHJvdG9jb2wgPT0gTURJT19JMkNfTk9ORSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXQgPSBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XFxuK1xcdGlmIChyZXQgPT0gLUVOT0RFVikge1xcbitcXHRcXHRzZnAtXFx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKiBQcm9iZSBhIFNGUCBmb3IgYSBQSFkgZGV2aWNlIGlmIHRoZSBtb2R1bGUgc3VwcG9ydHMgY29wcGVyIC0gdGhlIFBIWVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Njo0Ni43OTA4MDk3NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyMzgxNjE3ODk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBtb2RpZnkgUm9sbEJhbGwgTURJTy1vdmVyLUkyQyBwcm90b2NvbCBpbml0aWFsaXphdGlvbiAoZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jKSBhbmQgU0ZQIG1vZHVsZSBxdWlyay9idXMgaGFuZGxpbmcgKGRyaXZlcnMvbmV0L3BoeS9zZnAuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBTRlAgY2FnZXMgYW5kIFNGUCB0cmFuc2NlaXZlciBoYXJkd2FyZSBjb21tdW5pY2F0aW5nIG92ZXIgSTJDLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM5ZDQ1OGZjMDcyY2M3OThmMTg1NDA3YjYxNzgzMTMyMjRlN2JhZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxOTo0Njo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xuaW5kZXggZWQyMDM1MmE1ODlhMy4uYjg4ZjYzMjM0YjRlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXG5AQCAtNDE5LDYgKzQxOSw1MCBAQCBzdGF0aWMgaW50IGkyY19taWlfd3JpdGVfcm9sbGJhbGwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldmFkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcbit7XG4rXHR1OCBkYXRhX2J1ZltdID0geyBST0xMQkFMTF9EQVRBX0FERFIsIDB4MDEsIDB4MDAsIDB4MDAgfTtcbitcdHU4IGNtZF9idWZbXSAgPSB7IFJPTExCQUxMX0NNRF9BRERSLCBST0xMQkFMTF9DTURfUkVBRCB9O1xuK1x0dTggY21kX2FkZHIgICA9IFJPTExCQUxMX0NNRF9BRERSO1xuK1x0c3RydWN0IGkyY19tc2cgbXNnc1syXTtcbitcdHU4IHJlc3VsdDtcbitcdGludCByZXQ7XG4rXHRpbnQgaTtcbitcbitcdG1zZ3NbMF0uYWRkciAgPSBST0xMQkFMTF9QSFlfSTJDX0FERFI7XG4rXHRtc2dzWzBdLmZsYWdzID0gMDtcbitcdG1zZ3NbMF0ubGVuICAgPSBzaXplb2YoZGF0YV9idWYpO1xuK1x0bXNnc1swXS5idWYgICA9IGRhdGFfYnVmO1xuK1x0bXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcbitcdG1zZ3NbMV0uZmxhZ3MgPSAwO1xuK1x0bXNnc1sxXS5sZW4gICA9IHNpemVvZihjbWRfYnVmKTtcbitcdG1zZ3NbMV0uYnVmICAgPSBjbWRfYnVmO1xuK1xuK1x0cmV0ID0gaTJjX3RyYW5zZmVyX3JvbGxiYWxsKGkyYywgbXNncywgQVJSQVlfU0laRShtc2dzKSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdG1zZ3NbMF0uYWRkciAgPSBST0xMQkFMTF9QSFlfSTJDX0FERFI7XG4rXHRtc2dzWzBdLmZsYWdzID0gMDtcbitcdG1zZ3NbMF0ubGVuICAgPSAxO1xuK1x0bXNnc1swXS5idWYgICA9IFx1MDAyNmNtZF9hZGRyO1xuK1x0bXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcbitcdG1zZ3NbMV0uZmxhZ3MgPSBJMkNfTV9SRDtcbitcdG1zZ3NbMV0ubGVuICAgPSAxO1xuK1x0bXNnc1sxXS5idWYgICA9IFx1MDAyNnJlc3VsdDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwOyBpKyspIHtcbitcdFx0bXNsZWVwKDIwKTtcbitcdFx0cmV0ID0gaTJjX3RyYW5zZmVyX3JvbGxiYWxsKGkyYywgbXNncywgQVJSQVlfU0laRShtc2dzKSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHRcdGlmIChyZXN1bHQgPT0gUk9MTEJBTExfQ01EX0RPTkUpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVOT0RFVjtcbit9XG4rXG4gc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4ge1xuIFx0c3RydWN0IGkyY19tc2cgbXNnO1xuQEAgLTQzOCwxMSArNDgyLDExIEBAIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuIFxuIFx0cmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgXHUwMDI2bXNnLCAxKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4tXHRlbHNlIGlmIChyZXQgIT0gMSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHRpZiAocmV0ICE9IDEpXG4gXHRcdHJldHVybiAtRUlPO1xuLVx0ZWxzZVxuLVx0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKGkyYyk7XG4gfVxuIFxuIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5AQCAtNDg3LDkgKzUzMSwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyAqbWRpb19pMmNfYWxsb2Moc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyxcbiBcdGNhc2UgTURJT19JMkNfUk9MTEJBTEw6XG4gXHRcdHJldCA9IGkyY19taWlfaW5pdF9yb2xsYmFsbChpMmMpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2VycihwYXJlbnQsXG4tXHRcdFx0XHRcIkNhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcblwiLFxuLVx0XHRcdFx0cmV0KTtcbitcdFx0XHRpZiAocmV0ICE9IC1FTk9ERVYpXG4rXHRcdFx0XHRkZXZfZXJyKHBhcmVudCxcbitcdFx0XHRcdFx0XCJDYW5ub3QgaW5pdGlhbGl6ZSBSb2xsQmFsbCBNRElPIEkyQyBwcm90b2NvbDogJWRcXG5cIixcbitcdFx0XHRcdFx0cmV0KTtcbiBcdFx0XHRtZGlvYnVzX2ZyZWUobWlpKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5pbmRleCAyZWM5MTQ2NmFjZGYzLi40OWM3N2NhODY5MzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbkBAIC02MTYsNiArNjE2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgc2ZwX3F1aXJrc1tdID0ge1xuIFx0Ly8gT0VNIFNGUC1HRS1UIGlzIGEgMTAwMEJhc2UtVCBtb2R1bGUgd2l0aCBicm9rZW4gVFhfRkFVTFQgaW5kaWNhdG9yXG4gXHRTRlBfUVVJUktfRihcIk9FTVwiLCBcIlNGUC1HRS1UXCIsIHNmcF9maXh1cF9pZ25vcmVfdHhfZmF1bHQpLFxuIFxuK1x0U0ZQX1FVSVJLX0YoXCJPRU1cIiwgXCJTRlAtMTBHLVQtSVwiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuIFx0U0ZQX1FVSVJLX0YoXCJPRU1cIiwgXCJTRlAtMTBHLVRcIiwgc2ZwX2ZpeHVwX3JvbGxiYWxsX2NjKSxcbiBcdFNGUF9RVUlSS19TKFwiT0VNXCIsIFwiU0ZQLTIuNUctVFwiLCBzZnBfcXVpcmtfb2VtXzJfNWcpLFxuIFx0U0ZQX1FVSVJLX1MoXCJPRU1cIiwgXCJTRlAtMi41Ry1CWDEwLURcIiwgc2ZwX3F1aXJrXzI1MDBiYXNleCksXG5AQCAtMjIwOCwxMCArMjIwOSwxNyBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZmF1bHQoc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgbmV4dF9zdGF0ZSwgYm9vbCB3YXJuKVxuIFxuIHN0YXRpYyBpbnQgc2ZwX3NtX2FkZF9tZGlvX2J1cyhzdHJ1Y3Qgc2ZwICpzZnApXG4ge1xuLVx0aWYgKHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sICE9IE1ESU9fSTJDX05PTkUpXG4tXHRcdHJldHVybiBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XG4rXHRpbnQgcmV0O1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRpZiAoc2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPT0gTURJT19JMkNfTk9ORSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XG4rXHRpZiAocmV0ID09IC1FTk9ERVYpIHtcbitcdFx0c2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Njo0Ni43OTA4MTEwNDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTg1ODQ5NzQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZXZlbiAqd29ydGgqIGZ1enppbmcuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIHRvdWNoaW5nIGNvZGUgdGhhdCdzIGhhcmR3YXJlLXNwZWNpZmljLCB1bnJlYWNoYWJsZSBpbiBhIHR5cGljYWwgdGVzdGluZyBlbnZpcm9ubWVudCAobGlrZSBteSB2aXJ0dWFsIG1hY2hpbmVzKSwgb3IganVzdCBnZW5lcmFsbHkgbm90IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgd2hhdCBmaWxlcyBoYXZlIGJlZW4gY2hhbmdlZD8gSSBzZWUgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY2AgYW5kIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgLiBBbHJpZ2h0LCB0aGF0IG5hcnJvd3MgdGhpbmdzIGRvd24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIHVzZWQuIEFyZSB0aGV5IGNvcmUgdG8gc29tZSBmdW5kYW1lbnRhbCBuZXR3b3JraW5nIG9wZXJhdGlvbiwgb3IgYXJlIHRoZXkgZGVwZW5kZW50IG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGhhcmR3YXJlPyBJJ2xsIHByb2JhYmx5IGZpcmUgdXAgYGdyZXBwZXJgIChvciBqdXN0IGByZWFkLWZpbGVgIGFuZCBhIGdvb2QgZ3JlcCkgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBtZGlvLWkyY2AgYW5kIGBzZnBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYW5kIHdoZXRoZXIgSSBjYW4gZXZlbiByZWFjaCBTRlAgb3IgbWRpby1pMmMgaW4gbXkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRG9lcyBpdCByZXF1aXJlIGEgcGh5c2ljYWwgU0ZQIG1vZHVsZSBvciBvdGhlciBzcGVjaWZpYyBoYXJkd2FyZT9cblxuSG9sZCBvbi4uLiBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCdzIHNlZSBpZiBJIGNhbiBnZXQgYXdheSB3aXRob3V0IG5lZWRpbmcgYW55IHBoeXNpY2FsIGhhcmR3YXJlLiBJJ2xsIGNoZWNrIHdoZXJlIGBtZGlvX2kyY19hbGxvY2Agb3IgYHNmcGAgZ2V0cyBwcm9iZWQgb3IgcmVnaXN0ZXJlZC4gSWYgSSBjYW4gZmluZCBhIHJlZ2lzdHJhdGlvbiBwYXRoIHRoYXQncyB0cmlnZ2VyZWQgdGhyb3VnaCBzb21lIGNvbmZpZ3VyYXRpb24sIEkgbWlnaHQgYmUgaW4gbHVjay4gVGhhdCB3b3VsZCBhbGxvdyBtZSB0byBzZXQgdXAgYW4gZWFzaWx5IHJlcHJvZHVjaWJsZSB0ZXN0IGVudmlyb25tZW50LCB3aGljaCB3b3VsZCBiZSBpZGVhbCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Njo1OC42NDkzMTA0MTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDczOTk4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2kyY19hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM9NDkyPXN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1MDU6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTUwNi1cXHRcXHRcXHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTQtfVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1NTU6RVhQT1JUX1NZTUJPTF9HUEwobWRpb19pMmNfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9OTcxPXN0YXRpYyBpbnQgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTc1LVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo5NzY6XFx0aTJjX21paSA9IG1kaW9faTJjX2FsbG9jKHNmcC1cXHUwMDNlZGV2LCBzZnAtXFx1MDAzZWkyYywgc2ZwLVxcdTAwM2VtZGlvX3Byb3RvY29sKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTc3LVxcdGlmIChJU19FUlIoaTJjX21paSkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaD0xND1lbnVtIG1kaW9faTJjX3Byb3RvIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIwLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjIxOnN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIyLVxcdFxcdFxcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDc6MDAuMzIwMDU1M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MzczMjc1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0ZQIENvZGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIFNGUCBkcml2ZXIncyBiZWhhdmlvci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgd2hlcmUgYHNmcC5jYCBpcyBhY3R1YWxseSAqdXNlZCouIEkgbmVlZCB0byB0cmFjZSBpdHMgaW5zdGFudGlhdGlvbiBhbmQgdGhlIHBsYWNlcyB3aGVyZSBpdHMgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIHR5cGljYWwgZHJpdmVyIGZsb3c6IHByb2JpbmcsIGluaXRpYWxpemF0aW9uLCBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cbkZyb20gdGhlcmUsIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBTRlAgZHJpdmVyJ3MgY29yZSBsb2dpYy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCBkcml2ZXIgbWVjaGFuaXNtczogaG93IGl0IGhhbmRsZXMgaG90LXBsdWcgZXZlbnRzLCBob3cgaXQgcmVhZHMgdGhlIG1vZHVsZSdzIEVFUFJPTSwgaG93IGl0IG1hbmFnZXMgdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgUEhZLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93cz8gSSBuZWVkIHRvIGdldCBhIG1lbnRhbCBtb2RlbCBvZiB0aGlzIGRyaXZlcuKAmXMgaW50ZXJuYWwgc3RhdGUgbWFjaGluZS5cblxuRmluYWxseSwgdGhlIHVsdGltYXRlIHRlc3Q6IERvZXMgdGhpcyB0aGluZyBiZWhhdmUgYXMgZXhwZWN0ZWQgaW4gYSBzaW11bGF0ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBBbmQsIGNydWNpYWxseSwgY2FuIEkgcmVhY2ggaXQgaW4gbXkgZnV6emluZyBzZXR1cD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgYWNjZXNzaWJsZSBhbmQgdGhhdCBJIGNhbiByZWxpYWJseSB0cmlnZ2VyIHJlbGV2YW50IGNvZGUgcGF0aHMgd2l0aGluIHRoZSBTRlAgZHJpdmVyIGR1cmluZyBmdXp6aW5nIGNhbXBhaWducy4gT3RoZXJ3aXNlLCBJIHdpbGwgbmVlZCB0byBkZXZpc2UgbWV0aG9kcyBmb3IgZ2V0dGluZyB0aGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgZ2V0dGluZyBleGVyY2lzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2ODAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NzowNS4wNTczODQ4NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1Nzc1MTgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZnBfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MjE2MD1pbnQgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE2OC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMTY5OiAqIGl4Z2JlX2lzX3NmcF9wcm9iZSAtIFJldHVybnMgdHJ1ZSBpZiBTRlAgaXMgYmVpbmcgZGV0ZWN0ZWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTcwLSAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzMtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjE3NDpzdGF0aWMgYm9vbCBpeGdiZV9pc19zZnBfcHJvYmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggb2Zmc2V0LCB1OCBhZGRyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MjE5ND1zdGF0aWMgaW50IGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpY19pbnQoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMjA0LVxcdFxcdG1heF9yZXRyeSA9IDM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjIwNTpcXHRpZiAoaXhnYmVfaXNfc2ZwX3Byb2JlKGh3LCBieXRlX29mZnNldCwgZGV2X2FkZHIpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDYtXFx0XFx0bWF4X3JldHJ5ID0gSVhHQkVfU0ZQX0RFVEVDVF9SRVRSSUVTO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNjc2PXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDMtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA0OiAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNzpzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzM3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTczODogKiBwaHlfc2ZwX3JlbGVhc2UgLSByZWxlYXNlIHJlc291cmNlcyBzZXQgdXAgYnkgcGh5X3NmcF9wcm9iZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzM5LSAqIEBwaHlkZXY6IHRoZSBQSFkgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzQwLSAqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzQxOiAqIFJlbGVhc2UgdGhlIFNGUCByZXNvdXJjZXMgc2V0IHVwIGJ5IGEgc3VjY2Vzc2Z1bCBwaHlfc2ZwX3Byb2JlKCkuIFVucmVnaXN0ZXJcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3NDItICogdGhlIHVwc3RyZWFtIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBwaHlfcG9ydCwgc28gU0ZQIHVwc3RyZWFtIGNhbGxiYWNrcyBjYW5ub3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzU2NT1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTc5LVxcdGlmICghcGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTgwOlxcdFxcdHJldCA9IHBoeV9zZnBfcHJvYmUocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1ODEtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0zMjg4PXN0YXRpYyBpbnQgc2ZwX2kyY19nZXQoc3RydWN0IHNmcCAqc2ZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTMzMTMtXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjMzMTQ6c3RhdGljIGludCBzZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzMxNS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MzQ5Nj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZnBfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzozNDk3OlxcdC5wcm9iZSA9IHNmcF9wcm9iZSxcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ5OC1cXHQucmVtb3ZlID0gc2ZwX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYz0zOD1zdGF0aWMgc3RydWN0IG52bWVtX2NvbmZpZyBsYXllcnNjYXBlX3NmcF9udm1lbV9jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmMtNDQtXFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jOjQ1OnN0YXRpYyBpbnQgbGF5ZXJzY2FwZV9zZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmMtNDYte1xcbi0tXFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jPTk3PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxheWVyc2NhcGVfc2ZwX2RyaXZlciA9IHtcXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmM6OTg6XFx0LnByb2JlXFx0PSBsYXllcnNjYXBlX3NmcF9wcm9iZSxcXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmMtOTktXFx0LmRyaXZlciA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDc6MDYuNzE1MTQwOTk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY4NzA0NTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFNGUCBQcm9iZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBTRlAgbW9kdWxlIGlzIGJlaW5nIGluaXRpYWxpemVkIHdpdGhpbiB0aGlzIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgc2ZwX3Byb2JlYCBmdW5jdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyAtIGhvdyBpcyB0aGlzIHByb2JlIHRyaWdnZXJlZD8gV2hlcmUgaXMgdGhlIGluc3RhbnRpYXRpb24gaGFwcGVuaW5nPyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20uIElzIHRoaXMgYWxsIGJlaW5nIGRyaXZlbiBieSB0aGUgZGV2aWNlIHRyZWUsIEFDUEksIG9yIGlzIGl0IGEgcGxhdGZvcm0gZGV2aWNlIHNpdHVhdGlvbj8gTGV0J3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCBhbmQgemVybyBpbiBvbiB0aGUgYHNmcF9wcm9iZWAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ3OjA5LjQwMjE4NzcwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMxMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMxMDpcXHRcXHRmd25vZGVfaGFuZGxlX3B1dChoKTtcXG4zMzExOlxcdFxcdHJldHVybiBlcnI7XFxuMzMxMjpcXHR9XFxuMzMxMzpcXHRcXG4zMzE0OlxcdHN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuMzMxNTpcXHR7XFxuMzMxNjpcXHRcXHRjb25zdCBzdHJ1Y3Qgc2ZmX2RhdGEgKnNmZjtcXG4zMzE3OlxcdFxcdGNoYXIgKnNmcF9pcnFfbmFtZTtcXG4zMzE4OlxcdFxcdHN0cnVjdCBzZnAgKnNmcDtcXG4zMzE5OlxcdFxcdGludCBlcnIsIGk7XFxuMzMyMDpcXHRcXG4zMzIxOlxcdFxcdHNmcCA9IHNmcF9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4zMzIyOlxcdFxcdGlmIChJU19FUlIoc2ZwKSlcXG4zMzIzOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHNmcCk7XFxuMzMyNDpcXHRcXG4zMzI1OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNmcCk7XFxuMzMyNjpcXHRcXG4zMzI3OlxcdFxcdGVyciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChzZnAtXFx1MDAzZWRldiwgc2ZwX2NsZWFudXAsIHNmcCk7XFxuMzMyODpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4zMzI5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzMzMDpcXHRcXG4zMzMxOlxcdFxcdHNmZiA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShzZnAtXFx1MDAzZWRldik7XFxuMzMzMjpcXHRcXHRpZiAoIXNmZilcXG4zMzMzOlxcdFxcdFxcdHNmZiA9IFxcdTAwMjZzZnBfZGF0YTtcXG4zMzM0OlxcdFxcbjMzMzU6XFx0XFx0c2ZwLVxcdTAwM2V0eXBlID0gc2ZmO1xcbjMzMzY6XFx0XFxuMzMzNzpcXHRcXHRlcnIgPSBzZnBfaTJjX2dldChzZnApO1xcbjMzMzg6XFx0XFx0aWYgKGVycilcXG4zMzM5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzM0MDpcXHRcXG4zMzQxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBHUElPX01BWDsgaSsrKVxcbjMzNDI6XFx0XFx0XFx0aWYgKHNmZi1cXHUwMDNlZ3Bpb3MgXFx1MDAyNiBCSVQoaSkpIHtcXG4zMzQzOlxcdFxcdFxcdFxcdHNmcC1cXHUwMDNlZ3Bpb1tpXSA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHNmcC1cXHUwMDNlZGV2LFxcbjMzNDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgZ3Bpb19uYW1lc1tpXSwgZ3Bpb19mbGFnc1tpXSk7XFxuMzM0NTpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKHNmcC1cXHUwMDNlZ3Bpb1tpXSkpXFxuMzM0NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihzZnAtXFx1MDAzZWdwaW9baV0pO1xcbjMzNDc6XFx0XFx0XFx0fVxcbjMzNDg6XFx0XFxuMzM0OTpcXHRcXHRzZnAtXFx1MDAzZXN0YXRlX2h3X21hc2sgPSBTRlBfRl9QUkVTRU5UO1xcbjMzNTA6XFx0XFx0c2ZwLVxcdTAwM2VzdGF0ZV9od19kcml2ZSA9IFNGUF9GX1RYX0RJU0FCTEU7XFxuMzM1MTpcXHRcXG4zMzUyOlxcdFxcdHNmcC1cXHUwMDNlZ2V0X3N0YXRlID0gc2ZwX2dwaW9fZ2V0X3N0YXRlO1xcbjMzNTM6XFx0XFx0c2ZwLVxcdTAwM2VzZXRfc3RhdGUgPSBzZnBfZ3Bpb19zZXRfc3RhdGU7XFxuMzM1NDpcXHRcXG4zMzU1OlxcdFxcdC8qIEFuIFNGUCBjYWdlIHdpdGggbm8gTU9EX0RFRjAgR1BJTyBoYXMgbm8gaGFyZHdhcmUgcHJlc2VuY2Ugc2lnbmFsLlxcbjMzNTY6XFx0XFx0ICogQXNzdW1pbmcgdGhlIG1vZHVsZSBpcyBhbHdheXMgcHJlc2VudCB0cmFwcyBhbiBlbXB0eSBjYWdlIGluXFxuMzM1NzpcXHRcXHQgKiBNT0RfRVJST1IgYW5kIG5ldmVyIGRldGVjdHMgaG90LWluc2VydGlvbiwgc28gZGVyaXZlIHByZXNlbmNlIGZyb20gYVxcbjMzNTg6XFx0XFx0ICogdGhyb3R0bGVkIEkyQyBwcm9iZSBhbmQgcG9sbCBmb3IgY2hhbmdlcyBpbnN0ZWFkLiBzZnBfaTJjX2NvbmZpZ3VyZSgpXFxuMzM1OTpcXHRcXHQgKiBoYXMgYWxyZWFkeSBzZXQgaTJjX21heF9ibG9ja19zaXplOyBzZWVkIGkyY19ibG9ja19zaXplIHNvIHRoZVxcbjMzNjA6XFx0XFx0ICogcHJlc2VuY2UgcmVhZCBkb2VzIG5vdCBpc3N1ZSBhIHplcm8tbGVuZ3RoIHRyYW5zZmVyIGJlZm9yZSB0aGUgZmlyc3RcXG4zMzYxOlxcdFxcdCAqIEVFUFJPTSByZWFkLiBTZWVkIGkyY19wcmVzZW50X25leHQgdG8gamlmZmllcyBzbyB0aGUgZmlyc3QgcHJvYmVcXG4zMzYyOlxcdFxcdCAqIGhhcHBlbnMgaW1tZWRpYXRlbHkgKGEgemVybyB2YWx1ZSB3b3VsZCBiZSBpbiB0aGUgcGFzdCByZWxhdGl2ZSB0b1xcbjMzNjM6XFx0XFx0ICogdGhlIG5lZ2F0aXZlIElOSVRJQUxfSklGRklFUyBhdCBib290IGFuZCBkZWxheSBkZXRlY3Rpb24pLlxcbjMzNjQ6XFx0XFx0ICpcXG4zMzY1OlxcdFxcdCAqIEEgc29sZGVyZWQtZG93biBtb2R1bGUgKHNmZixzZmYpIGhhcyBubyBwcmVzZW5jZSBzaWduYWwgYW5kIGlzXFxuMzM2NjpcXHRcXHQgKiBnZW51aW5lbHkgYWx3YXlzIHByZXNlbnQsIHNvIGl0IGtlZXBzIHRoZSBhbHdheXMtcHJlc2VudCBiZWhhdmlvdXI7XFxuMzM2NzpcXHRcXHQgKiB0aGUgSTJDIHByb2JlIGlzIGdhdGVkIG9uIHRoZSBjYWdlIHR5cGUgYWR2ZXJ0aXNpbmcgU0ZQX0ZfUFJFU0VOVC5cXG4zMzY4OlxcdFxcdCAqL1xcbjMzNjk6XFx0XFx0aWYgKCFzZnAtXFx1MDAzZWdwaW9bR1BJT19NT0RERUYwXSkge1xcbjMzNzA6XFx0XFx0XFx0aWYgKHNmZi1cXHUwMDNlZ3Bpb3MgXFx1MDAyNiBTRlBfRl9QUkVTRU5UKSB7XFxuMzM3MTpcXHRcXHRcXHRcXHRzZnAtXFx1MDAzZWdldF9zdGF0ZSA9IHNmcF9pMmNfZ2V0X3N0YXRlO1xcbjMzNzI6XFx0XFx0XFx0XFx0c2ZwLVxcdTAwM2VpMmNfYmxvY2tfc2l6ZSA9IHNmcC1cXHUwMDNlaTJjX21heF9ibG9ja19zaXplO1xcbjMzNzM6XFx0XFx0XFx0XFx0c2ZwLVxcdTAwM2VpMmNfcHJlc2VudF9uZXh0ID0gamlmZmllcztcXG4zMzc0OlxcdFxcdFxcdFxcdHNmcC1cXHUwMDNlbmVlZF9wb2xsID0gdHJ1ZTtcXG4zMzc1OlxcdFxcdFxcdH0gZWxzZSB7XFxuMzM3NjpcXHRcXHRcXHRcXHRzZnAtXFx1MDAzZWdldF9zdGF0ZSA9IHNmZl9ncGlvX2dldF9zdGF0ZTtcXG4zMzc3OlxcdFxcdFxcdH1cXG4zMzc4OlxcdFxcdH1cXG4zMzc5OlxcdFxcbjMzODA6XFx0XFx0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJtYXhpbXVtLXBvd2VyLW1pbGxpd2F0dFxcXCIsXFxuMzM4MTpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnNmcC1cXHUwMDNlbWF4X3Bvd2VyX21XKTtcXG4zMzgyOlxcdFxcdGlmIChzZnAtXFx1MDAzZW1heF9wb3dlcl9tVyBcXHUwMDNjIDEwMDApIHtcXG4zMzgzOlxcdFxcdFxcdGlmIChzZnAtXFx1MDAzZW1heF9wb3dlcl9tVylcXG4zMzg0OlxcdFxcdFxcdFxcdGRldl93YXJuKHNmcC1cXHUwMDNlZGV2LFxcbjMzODU6XFx0XFx0XFx0XFx0XFx0IFxcXCJGaXJtd2FyZSBidWc6IGhvc3QgbWF4aW11bSBwb3dlciBzaG91bGQgYmUgYXQgbGVhc3QgMVdcXFxcblxcXCIpO1xcbjMzODY6XFx0XFx0XFx0c2ZwLVxcdTAwM2VtYXhfcG93ZXJfbVcgPSAxMDAwO1xcbjMzODc6XFx0XFx0fVxcbjMzODg6XFx0XFxuMzM4OTpcXHRcXHRkZXZfaW5mbyhzZnAtXFx1MDAzZWRldiwgXFxcIkhvc3QgbWF4aW11bSBwb3dlciAldS4ldVdcXFxcblxcXCIsXFxuMzM5MDpcXHRcXHRcXHQgc2ZwLVxcdTAwM2VtYXhfcG93ZXJfbVcgLyAxMDAwLCAoc2ZwLVxcdTAwM2VtYXhfcG93ZXJfbVcgLyAxMDApICUgMTApO1xcbjMzOTE6XFx0XFxuMzM5MjpcXHRcXHQvKiBHZXQgdGhlIGluaXRpYWwgc3RhdGUsIGFuZCBhbHdheXMgc2lnbmFsIFRYIGRpc2FibGUsXFxuMzM5MzpcXHRcXHQgKiBzaW5jZSB0aGUgbmV0d29yayBpbnRlcmZhY2Ugd2lsbCBub3QgYmUgdXAuXFxuMzM5NDpcXHRcXHQgKi9cXG4zMzk1OlxcdFxcdHNmcC1cXHUwMDNlc3RhdGUgPSBzZnBfZ2V0X3N0YXRlKHNmcCkgfCBTRlBfRl9UWF9ESVNBQkxFO1xcbjMzOTY6XFx0XFxuMzM5NzpcXHRcXHRpZiAoc2ZwLVxcdTAwM2VncGlvW0dQSU9fUlMwXSBcXHUwMDI2XFx1MDAyNlxcbjMzOTg6XFx0XFx0ICAgIGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChzZnAtXFx1MDAzZWdwaW9bR1BJT19SUzBdKSlcXG4zMzk5OlxcdFxcdFxcdHNmcC1cXHUwMDNlc3RhdGUgfD0gU0ZQX0ZfUlMwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NzowOS40MDIzMzE3MjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTA4ODM2ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVHJpZ2dlciBvZiBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5pdGlhdGluZyBjYWxsIGZvciBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdXN0IHNlYXJjaCB0aGUgY29kZWJhc2UgZGlyZWN0bHkgZm9yIHRoYXQgZnVuY3Rpb24gbmFtZS4gSSdsbCBkbyBhIHNpbXBsZSB0ZXh0IHNlYXJjaCBmaXJzdDsgaXQncyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgYmlyZCdzLWV5ZSB2aWV3IG9mIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZXZlbiAqbWVudGlvbmVkKi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBkaXJlY3QgY2FsbHMsIG9yIHBlcmhhcHMgaW5kaXJlY3QgcmVmZXJlbmNlcywgbWF5YmUgdGhyb3VnaCBhIG1hY3JvIG9yIGEgdHlwZWRlZi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBjb21tb24gcGF0dGVybnMgYW5kIHdoYXQgSSBzaG91bGQgYmUgbG9va2luZyBmb3IuIEknbSBob3BpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGFuZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhlY3V0ZWQsIHdoaWNoIGlzIGtleSB0byB0cm91Ymxlc2hvb3RpbmcgdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjIwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NzoxOC41MTExNzA2OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDc0MTQyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwX3NtX2FkZF9tZGlvX2J1c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmM9MjE5Nj1zdGF0aWMgdm9pZCBzZnBfc21fZmF1bHQoc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgbmV4dF9zdGF0ZSwgYm9vbCB3YXJuKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMDktXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIyMTA6c3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxMS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9Mjg2Mj1zdGF0aWMgdm9pZCBzZnBfc21fbWFpbihzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBldmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yOTQ3LVxcdFxcdFxcdC8qIENyZWF0ZSBtZGlvYnVzIGFuZCBzdGFydCB0cnlpbmcgZm9yIFBIWSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyOTQ4OlxcdFxcdFxcdHJldCA9IHNmcF9zbV9hZGRfbWRpb19idXMoc2ZwKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjk0OS1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NzoyMC4wMTg1OTAzMThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxNDg3NDU2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTRlAgU3RhdGUgTWFjaGluZSBhbmQgaXRzIEludGVncmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgaG93IHRoZSBgc2ZwYCBmcmFtZXdvcmsgaXMgYWN0dWFsbHkgZW1wbG95ZWQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogY2FuIEkgZWZmZWN0aXZlbHkgc2ltdWxhdGUgb3IgaW5zdGFudGlhdGUgU0ZQIGZ1bmN0aW9uYWxpdHkgb3IgbWRpby1pMmMgd2l0aGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgb3Igc3l6a2FsbGVyPyBUaGVzZSBhcmUgY3J1Y2lhbCB0ZXN0aW5nIHBsYXRmb3JtcyBmb3IgbXkgd29yaywgYW5kIGFjaGlldmluZyByZWxpYWJsZSBTRlAgZW11bGF0aW9uIGlzIHBhcmFtb3VudC5cblxuTm93LCBteSBzdHJhdGVneSBuZWVkcyB0byBiZSBtZXRob2RpY2FsLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IFNGUCBkZXZpY2VzIGFyZSBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gQXJlIHRoZXJlIGV4aXN0aW5nIGkyYyBkcml2ZXJzLCBwcmUtZGVmaW5lZCBwbGF0Zm9ybSBkZXZpY2VzLCBvciBjYW4gdGhlc2UgZGV2aWNlcyBiZSBjcmVhdGVkIG9uIHRoZSBmbHk/IEFyZSB3ZSBsZXZlcmFnaW5nIGNvbmZpZ2ZzLCBzdGFuZGFyZCBpMmMgY2xpZW50IGludGVyYWN0aW9ucywgc3lzZnMgaW50ZXJmYWNlcywgZGV2aWNlIHRyZWUgb3ZlcmxheXMsIG9yIHNvbWUgY29tYmluYXRpb24gb2YgdGhlc2U/XG5cbkFscmlnaHQsIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGFuZCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jYC4gVGhlc2UgYXJlIGxpa2VseSB0byBob2xkIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdGhhdCBJIG5lZWQgdG8gZGlzc2VjdC5cblxuRmluYWxseSwgYSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBNRElPX0kyQyBhbmQgU0ZQIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzI0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ3OjM5LjE2NzMzOTgxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MTIwODY4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTURJT19JMkNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTEwMD1jb25maWcgTURJT19ISVNJX0ZFTUFDXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTA2LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMDc6Y29uZmlnIE1ESU9fSTJDXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwOC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Nzo0MS41MDg1NTUwMzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIxNDEwNjU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBNRElPIEtjb25maWcgRmlsZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGxpbmUgMTA3LiBJJ20gYXNzdW1pbmcgaXQgZGVhbHMgd2l0aCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGdpdmVuIHRoaXMgaXMgYSBLY29uZmlnIGZpbGUuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgY2VydGFpbiBNRElPIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBwb3NzaWJseSBkZXBlbmRlbnQgb24gdGhlIGhhcmR3YXJlIHBsYXRmb3JtIG9yIG90aGVyIG5ldHdvcmsgZGV2aWNlIHNldHRpbmdzLiBNeSBiYWNrZ3JvdW5kIGtub3dsZWRnZSBvZiBuZXR3b3JrIGRyaXZlcnMgdGVsbHMgbWUgdGhpcyBmaWxlIHdpbGwgZGVmaW5lIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBoZWxwIHRleHQuIEl0J3MgbGlrZWx5IHN0cnVjdHVyZWQgaGllcmFyY2hpY2FsbHksIHdpdGggcGFyZW50IG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIGF2YWlsYWJpbGl0eSBvZiBtb3JlIGdyYW51bGFyIHNldHRpbmdzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZTogXCJpZiBQSFlfTURJTyxcIiBcImRlcGVuZHMgb24sXCIgXCJzZWxlY3QsXCIgYW5kIFwiZGVmYXVsdFwiIHN0YXRlbWVudHMgdGhhdCB3aWxsIGRldGVybWluZSBob3cgdXNlcnMgY29uZmlndXJlIHRoZSBNRElPIGRyaXZlciBhbmQgaXRzIGFzc29jaWF0ZWQgUEhZcy4gSSdtIHJlYWR5IHRvIHNlZSBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Nzo0NS43MjI2NjM5NTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRjb25maWcgTURJT19ISVNJX0ZFTUFDXFxuIDEwMTpcXHRcXHR0cmlzdGF0ZSBcXFwiSGlzaWxpY29uIEZFTUFDIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuIDEwMjpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBPRl9NRElPXFxuIDEwMzpcXHRcXHRoZWxwXFxuIDEwNDpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXFxuIDEwNTpcXHRcXHQgIEhpc2lsaWNvbiBTb0MgdGhhdCBoYXZlIGFuIEZhc3QgRXRoZXJuZXQgTUFDLlxcbiAxMDY6XFx0XFxuIDEwNzpcXHRjb25maWcgTURJT19JMkNcXG4gMTA4OlxcdFxcdHRyaXN0YXRlXFxuIDEwOTpcXHRcXHRkZXBlbmRzIG9uIEkyQ1xcbiAxMTA6XFx0XFx0aGVscFxcbiAxMTE6XFx0XFx0ICBTdXBwb3J0IEkyQyBiYXNlZCBQSFlzLiAgVGhpcyBwcm92aWRlcyBhIE1ESU8gYnVzIGJyaWRnZWRcXG4gMTEyOlxcdFxcdCAgdG8gSTJDIHRvIGFsbG93IFBIWXMgY29ubmVjdGVkIGluIEkyQyBtb2RlIHRvIGJlIGFjY2Vzc2VkXFxuIDExMzpcXHRcXHQgIHVzaW5nIHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZS5cXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0ICBUaGlzIGlzIGxpYnJhcnkgbW9kZS5cXG4gMTE2OlxcdFxcbiAxMTc6XFx0Y29uZmlnIE1ESU9fTVZVU0JcXG4gMTE4OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFVTQiB0byBNRElPIEFkYXB0ZXJcXFwiXFxuIDExOTpcXHRcXHRkZXBlbmRzIG9uIFVTQlxcbiAxMjA6XFx0XFx0aGVscFxcbiAxMjE6XFx0XFx0ICBBIFVTQiB0byBNRElPIGNvbnZlcnRlciBwcmVzZW50IG9uIGRldmVsb3BtZW50IGJvYXJkcyBmb3JcXG4gMTIyOlxcdFxcdCAgTWFydmVsbCdzIExpbmsgU3RyZWV0IGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcy5cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0Y29uZmlnIE1ESU9fTVNDQ19NSUlNXFxuIDEyNTpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9zZW1pIE1JSU0gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuIDEyNjpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbiAxMjc6XFx0XFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuIDEyODpcXHRcXHRoZWxwXFxuIDEyOTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNSUlNIChNRElPKSBpbnRlcmZhY2UgZm91bmQgaW4gdGhlIG5ldHdvcmtcXG4gMTMwOlxcdFxcdCAgc3dpdGNoZXMgb2YgdGhlIE1pY3Jvc2VtaSBTb0NzOyBpdCBpcyByZWNvbW1lbmRlZCB0byBzd2l0Y2ggb25cXG4gMTMxOlxcdFxcdCAgQ09ORklHX0hJR0hfUkVTX1RJTUVSU1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRjb25maWcgTURJT19NT1hBUlRcXG4gMTM0OlxcdFxcdHRyaXN0YXRlIFxcXCJNT1hBIEFSVCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbiAxMzU6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX01PWEFSVCB8fCBDT01QSUxFX1RFU1RcXG4gMTM2OlxcdFxcdGhlbHBcXG4gMTM3OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBuZXR3b3JrXFxuIDEzODpcXHRcXHQgIGludGVyZmFjZSB1bml0cyBvZiB0aGUgTU9YQSBBUlQgU29DXFxuIDEzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDc6NDUuNzIyNzMwMjAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDgzNDc3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIERpYWdub3N0aWMgUXVlcnkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gcHJvY2VzcyBvZiB0aGlzIGBNRElPX0kyQ2AgY29tcG9uZW50LiBUaGlzIGNvdWxkIGJlIGEgbW9kdWxlLCBhIGJ1cywgb3IgZXZlbiBqdXN0IGEgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IHRoaXMgcGFydGljdWxhciBpdGVtIGlzIGJlaW5nIGNob3NlbiBvciBjb25maWd1cmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyB0aGlzIGEgY29tcGlsZS10aW1lIG9wdGlvbiwgYSBydW50aW1lIGNvbmZpZ3VyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGNvZGUgb3IgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgcmVzcG9uc2libGUgZm9yIGl0cyBhY3RpdmF0aW9uIG9yIGRlYWN0aXZhdGlvbj8gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlIGludGVyYWN0aW9uLiBGcm9tIHRoaXMsIHRoZSBwYXRoIHRocm91Z2ggdGhlIHNvZnR3YXJlIChhbmQgcG9zc2libHkgaGFyZHdhcmUpIGNhbiBiZSB1bmRlcnN0b29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDExMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDc6NDguMDMxMDgwNTM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY3MTAwMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNRElPX0kyQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZz03Mz1jb25maWcgU0ZQXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03Ni1cXHRkZXBlbmRzIG9uIEhXTU9OIHx8IEhXTU9OPW5cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3NzpcXHRzZWxlY3QgTURJT19JMkNcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDc6NTAuMzk4MTg1OTI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzNjg5MjA3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgbWF0ZXJpYWw6XG5cbioqSW52ZXN0aWdhdGluZyBSZWxhdGVkIFJlZmVyZW5jZXMqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIEkndmUgYWxyZWFkeSBnb3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGNvbm5lY3Rpb25zIG9yIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgb3V0IHRoZXJlIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlcyBNRElPX0kyQyBvciBTRlAuIEkga25vdyB0aGVzZSBhcmUgcmVsYXRlZCwgYnV0IEkgbmVlZCB0byBzZWUgaG93IGNvbXByZWhlbnNpdmVseS4gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1pZ2h0IGJyaWRnZSB0aGUgZ2FwLCBvZmZlciBhIGRpZmZlcmVudCBwZXJzcGVjdGl2ZSwgb3IgcG9pbnQgdG8gYSBtb3JlIGVsZWdhbnQgc29sdXRpb24gdGhhbiB3aGF0IEkndmUgY3VycmVudGx5IGdvdCBpbiBtaW5kLiBJIG5lZWQgdG8gY2FzdCBhIHdpZGVyIG5ldCB0byBjYXB0dXJlIGFsbCByZWxldmFudCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Nzo1OC43NjcxMDkxODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDgxNzc0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NGUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0yODU9Q09ORklHX1hJTElOWF9FTUFDTElURT15XFxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6Mjg2OkNPTkZJR19TRlA9bVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTI4Ny1DT05GSUdfQlJPQURDT01fUEhZPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnPTY0PUNPTkZJR19NVlBQMj15XFxuYXJjaC9hcm0vY29uZmlncy9tdmVidV92N19kZWZjb25maWc6NjU6Q09ORklHX1NGUD15XFxuYXJjaC9hcm0vY29uZmlncy9tdmVidV92N19kZWZjb25maWctNjYtQ09ORklHX01BUlZFTExfUEhZPXlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSArPSBtaWlfdGltZXN0YW1wZXIub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAtYnVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjgtb2JqLXlcXHRcXHRcXHRcXHQrPSAkKHNmcC1vYmoteSkgJChzZnAtb2JqLW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oPTU2NT1zdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3Ny1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oOjU3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfU0ZQKVxcbmluY2x1ZGUvbGludXgvc2ZwLmgtNTc5LWNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKnNmcF9nZXRfbW9kdWxlX2NhcHMoc3RydWN0IHNmcF9idXMgKmJ1cyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ4OjAwLjkxNTI5MzIxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjMwNzQ5MDQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIFNGUCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5IGFib3V0IFNGUC5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIFNGUCBzdXBwb3J0IGluIHRoaXMgcHJvamVjdC4gSSB3YW50IHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlJ3MgYSBkZWRpY2F0ZWQgb3B0aW9uIGZvciBpdCwgYW5kLCBpZiBzbywgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgcG9zc2libGUgdmFyaWF0aW9ucyBhcmUuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgZW5hYmxlL2Rpc2FibGUgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCB3aXRoIHZhcmlvdXMgc3ViLW9wdGlvbnMgZm9yIGRpZmZlcmVudCBTRlAgdHlwZXMgb3IgZmVhdHVyZXM/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBTRlAgaXMgdHJlYXRlZCBmcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ4OjEzLjIyMjc4NTY3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHQgICAgICAgICAgQWRkcyBzdXBwb3J0IG5lZWRlZCBmb3IgUEhZIGRyaXZlcnMgd3JpdHRlbiBpbiBSdXN0LiBJdCBwcm92aWRlc1xcbiAgNzE6XFx0ICAgICAgICAgIGEgd3JhcHBlciBhcm91bmQgdGhlIEMgcGh5bGliIGNvcmUuXFxuICA3MjpcXHRcXG4gIDczOlxcdGNvbmZpZyBTRlBcXG4gIDc0OlxcdFxcdHRyaXN0YXRlIFxcXCJTRlAgY2FnZSBzdXBwb3J0XFxcIlxcbiAgNzU6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgUEhZTElOS1xcbiAgNzY6XFx0XFx0ZGVwZW5kcyBvbiBIV01PTiB8fCBIV01PTj1uXFxuICA3NzpcXHRcXHRzZWxlY3QgTURJT19JMkNcXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29tbWVudCBcXFwiTUlJIFBIWSBkZXZpY2UgZHJpdmVyc1xcXCJcXG4gIDgwOlxcdFxcbiAgODE6XFx0Y29uZmlnIEFTMjFYWFhfUEhZXFxuICA4MjpcXHRcXHR0cmlzdGF0ZSBcXFwiQWVvbnNlbWkgQVMyMXh4eCBQSFlzXFxcIlxcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIEFlb25zZW1pIEFTMjF4eHggUEhZLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIFRoZXNlIGFyZSBDNDUgUEhZcyAxMEcgdGhhdCByZXF1aXJlIGFsbCBhIGdlbmVyaWMgZmlybXdhcmUuXFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdCAgU3VwcG9ydGVkIFBIWXMgQVMyMTAxMUpCMSwgQVMyMTAxMVBCMSwgQVMyMTAxMEpCMSwgQVMyMTAxMFBCMSxcXG4gIDg5OlxcdFxcdCAgQVMyMTUxMUpCMSwgQVMyMTUxMVBCMSwgQVMyMTUxMEpCMSwgQVMyMTUxMFBCMSwgQVMyMTIxMEpCMSxcXG4gIDkwOlxcdFxcdCAgQVMyMTIxMFBCMSB0aGF0IGFsbCByZWdpc3RlciB3aXRoIHRoZSBQSFkgSUQgMHg3NTAwIDB4NzUwMFxcbiAgOTE6XFx0XFx0ICBiZWZvcmUgdGhlIGZpcm13YXJlIGlzIGxvYWRlZC5cXG4gIDkyOlxcdFxcbiAgOTM6XFx0Y29uZmlnIEFJUl9BTjg4MDFfUEhZXFxuICA5NDpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIEFOODgwMSBHaWdhYml0IFBIWVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDg6MTMuMjIyODY0OTI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzMzkxNzE4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNRElPIGFuZCBTRlAgUm9sbGJhbGwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBzZWVpbmcgdGhlIGNoYW5nZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgZmlsZXMuIEkga25vdyB0aGVzZSByZWxhdGUgdG8gTURJTyBidXNlcyBhbmQgU0ZQIHRyYW5zY2VpdmVycywgc28gdGhlIGNvbm5lY3Rpb24gaGVyZSBpcyBpbW1lZGlhdGUuXG5cbkkgc2VlIGEgbmV3IGZ1bmN0aW9uIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYCBhZGRlZCB3aXRoaW4gYG1kaW8taTJjLmNgLiBJdCdzIHByb2JpbmcgYW4gSTJDIGFkYXB0ZXIgdG8gZGV0ZXJtaW5lIGlmIGEgUm9sbGJhbGwgZGV2aWNlIGlzIHByZXNlbnQuIEl0IGRvZXMgc28gYnkgc2VuZGluZyBzb21lIGNvbW1hbmRzIGFuZCByZWFkaW5nIGEgcmVzdWx0LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHByb2JpbmcgZm9yIGEgZGV2aWNlIGF0IGBST0xMQkFMTF9QSFlfSTJDX0FERFJgLiBUaGVyZSBpcyBhIGZvciBsb29wIHdpdGggYSBtc2xlZXAsIHNvIGl0IGxpa2VseSBjaGVja3MgZm9yIGEgcmVzcG9uc2UgbXVsdGlwbGUgdGltZXMuIFRoaXMgaXMgcHJvYmFibHkgdG8gbWFrZSBzdXJlIHRoZSBkZXZpY2UgaGFzIGVub3VnaCB0aW1lIHRvIHJlc3BvbmQgb3IgY29tcGxldGUgaW50ZXJuYWwgb3BlcmF0aW9ucy4gSWYgbm8gcmVzcG9uc2UsIHRoZW4gYC1FTk9ERVZgIGlzIHJldHVybmVkLlxuXG5UaGUgZXhpc3RpbmcgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAgZnVuY3Rpb24gaXMgdXBkYXRlZCB0byBjYWxsIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYC4gSXQgYWxzbyBhcHBlYXJzIHRoZXJlJ3MgYSBtb3JlIGNhcmVmdWwgY2hlY2sgZm9yIGVycm9ycyBub3csIHdpdGggYSByZXR1cm4gY29kZSBvZiBgLUVOT0RFVmAgYmVpbmcgaGFuZGxlZCBleHBsaWNpdGx5LCB3aGljaCBpcyBnb29kLiBUaGVyZSBpcyBhbHNvIGFuIGFkZGl0aW9uYWwgY2hlY2sgZm9yIGAtRU5PREVWYCBkdXJpbmcgdGhlIE1ESU8gYnVzIGFsbG9jYXRpb24uXG5cbk5vdyBJIGFtIGdvaW5nIGludG8gYHNmcC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgU0ZQIG1vZHVsZSBoYW5kbGluZyBvY2N1cnMuIEkgbm90ZSBzb21lIG5ldyBlbnRyaWVzIGluIGBzZnBfcXVpcmtzW11gLCBzcGVjaWZpY2FsbHkgZm9yIG1vZHVsZXMgd2l0aCBcIlNGUC0xMEctVC1JXCIgYW5kIFwiU0ZQLTEwRy1UXCIuIFRoZXJlJ3MgYWxzbyBgc2ZwX2ZpeHVwX3JvbGxiYWxsYCBiZWluZyB1c2VkIGFzIGEgZml4dXAgZnVuY3Rpb24uIFRoZXJlIGFsc28gYXBwZWFycyB0byBiZSBhbiBhZGRpdGlvbiB0byBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AgdG8gaGFuZGxlIGAtRU5PREVWYCBkdXJpbmcgdGhlIE1ESU8gYnVzIGNyZWF0aW9uLiBUaGlzIGlzIGdvb2Q6IGlmIHRoZSBNRElPIGJ1cyBjcmVhdGlvbiBmYWlscywgdGhlIGNvZGUgd2lsbCBub3cgc2V0IGBzZnAtXHUwMDNlbWRpb19wcm90b2NvbGAgdG8gYE1ESU9fSTJDX05PTkVgLCBhbmQgY29udGludWVzIHdpdGhvdXQgdGhlIE1ESU8gYnVzLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvci5cblxuT3ZlcmFsbCwgaXQgc2VlbXMgdGhpcyBpcyBhYm91dCBtb3JlIHJvYnVzdGx5IHN1cHBvcnRpbmcgUm9sbGJhbGwtYmFzZWQgY29wcGVyIFNGUCsgbW9kdWxlcy4gVGhlIGNvZGUgaXMgdGFraW5nIGNhcmUgdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgUm9sbGJhbGwgZGV2aWNlIGJlZm9yZSBhc3N1bWluZyBpdCdzIHRoZXJlLiBUaGUgYWRkaXRpb24gb2YgdGhlIG5ldyBwcm9iZSBmdW5jdGlvbiBhbmQgdGhlIGltcHJvdmVkIGVycm9yIGhhbmRsaW5nLCBzaG93IHRoYXQgdGhlIHBhdGNoIGF0dGVtcHRzIHRvIG1hbmFnZSB0aGUgUm9sbGJhbGwgY29ubmVjdGlvbiBpbiBhIG1vcmUgY29udHJvbGxlZCBtYW5uZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjYyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ4OjIyLjU2MjA0ODMyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcxMTE2NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNmcF9maXh1cF9yb2xsYmFsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmM9NDA2PXN0YXRpYyB2b2lkIHNmcF9maXh1cF8xMGdiYXNldF8zMG0oc3RydWN0IHNmcCAqc2ZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQxMS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NDEyOnN0YXRpYyB2b2lkIHNmcF9maXh1cF9yb2xsYmFsbChzdHJ1Y3Qgc2ZwICpzZnApXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQxMy17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDIzLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo0MjQ6c3RhdGljIHZvaWQgc2ZwX2ZpeHVwX3JvbGxiYWxsX3dhaXQ0cyhzdHJ1Y3Qgc2ZwICpzZnApXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQyNS17XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjQyNjpcXHRzZnBfZml4dXBfcm9sbGJhbGwoc2ZwKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDI3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTQzNT1zdGF0aWMgdm9pZCBzZnBfZml4dXBfZnNfMTBndChzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDM3LVxcdHNmcF9maXh1cF8xMGdiYXNldF8zMG0oc2ZwKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NDM4OlxcdHNmcF9maXh1cF9yb2xsYmFsbF93YWl0NHMoc2ZwKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDM5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz00NTA9c3RhdGljIHZvaWQgc2ZwX2ZpeHVwX3BvdHJvbihzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDYxLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo0NjI6c3RhdGljIHZvaWQgc2ZwX2ZpeHVwX3JvbGxiYWxsX2NjKHN0cnVjdCBzZnAgKnNmcClcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDYzLXtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NDY0OlxcdHNmcF9maXh1cF9yb2xsYmFsbChzZnApO1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy00NjUtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9NTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy01NDItXFx0Ly8gRkxZUFJPIFNGUC0xMEdULUNTLTMwTSB1c2VzIFJvbGxiYWxsIHByb3RvY29sIHRvIHRhbGsgdG8gdGhlIFBIWS5cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NTQzOlxcdFNGUF9RVUlSS19GKFxcXCJGTFlQUk9cXFwiLCBcXFwiU0ZQLTEwR1QtQ1MtMzBNXFxcIiwgc2ZwX2ZpeHVwX3JvbGxiYWxsKSxcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNTQ0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTU1MS1cXHQvLyB0byB0aGUgUEhZIGFuZCBuZWVkcyA0IHNlYyB3YWl0IGJlZm9yZSBwcm9iaW5nIHRoZSBQSFkuXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjU1MjpcXHRTRlBfUVVJUktfRihcXFwiRlNcXFwiLCBcXFwiU0ZQLTIuNUctVFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF93YWl0NHMpLFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo1NTM6XFx0U0ZQX1FVSVJLX0YoXFxcIkZTXFxcIiwgXFxcIlNGUC0xMEdNLVRcXFwiLCBzZnBfZml4dXBfcm9sbGJhbGxfd2FpdDRzKSxcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNTU0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYxMy1cXHQvLyBIT1JBQ08gSEMtMTBHRS0xMTNDIHVzZXMgUm9sbGJhbGwgcHJvdG9jb2wgdG8gdGFsayB0byB0aGUgUEhZLlxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2MTQ6XFx0U0ZQX1FVSVJLX0YoXFxcIk9FTVxcXCIsIFxcXCJIQy0xMEdFLTExM0NcXFwiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy02MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjE4LVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2MTk6XFx0U0ZQX1FVSVJLX0YoXFxcIk9FTVxcXCIsIFxcXCJTRlAtMTBHLVQtSVxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYyMDpcXHRTRlBfUVVJUktfRihcXFwiT0VNXFxcIiwgXFxcIlNGUC0xMEctVFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYyMS1cXHRTRlBfUVVJUktfUyhcXFwiT0VNXFxcIiwgXFxcIlNGUC0yLjVHLVRcXFwiLCBzZnBfcXVpcmtfb2VtXzJfNWcpLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYyNS1cXHRTRlBfUVVJUktfUyhcXFwiT0VNXFxcIiwgXFxcIlNGUC0yLjVHLUxIMjAtQVxcXCIsIHNmcF9xdWlya18yNTAwYmFzZXgpLFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2MjY6XFx0U0ZQX1FVSVJLX0YoXFxcIk9FTVxcXCIsIFxcXCJSVFNGUC0xMFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYyNzpcXHRTRlBfUVVJUktfRihcXFwiT0VNXFxcIiwgXFxcIlJUU0ZQLTEwR1xcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYyOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy02MzUtXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYzNjpcXHRTRlBfUVVJUktfRihcXFwiVHVycmlzXFxcIiwgXFxcIlJUU0ZQLTIuNUdcXFwiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2Mzc6XFx0U0ZQX1FVSVJLX0YoXFxcIlR1cnJpc1xcXCIsIFxcXCJSVFNGUC0xMFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYzODpcXHRTRlBfUVVJUktfRihcXFwiVHVycmlzXFxcIiwgXFxcIlJUU0ZQLTEwR1xcXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYzOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDg6MjQuODMzMTcwNDM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDUyODM5NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTRlAgRHJpdmVyIFJlYWNoYWJpbGl0eSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiBhIHBhdGNoIGlzIFwiV29ydGhGdXp6aW5nXCIgYW5kIHRoZSBjcnV4IG9mIHRoYXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIExldCdzIGRpZyBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0ZQIGRyaXZlciBnZXRzIGJvdW5kIGFuZCBjcmVhdGVkLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgLCB3aGljaCBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljLiBCaW5nbyEgVGhlcmUncyBgc2ZwX3Byb2JlYCwgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUgZnVuY3Rpb24uIEZyb20gd2hhdCBJIHNlZSBpbiB0aGUgYHNmcF9vZl9tYXRjaGAgdGFibGUsIGl0IGxvb2tzIGxpa2UgaXQgc3VwcG9ydHMgXCJzZmYsc2ZwXCIgYW5kIFwic2ZmLHNmZlwiIGNvbXBhdGlibGUgZGV2aWNlcy5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZHJpdmVyIGlzIHJlYWNoYWJsZS4gVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHN0YXRlIHRoYXQgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIOKAkyBhcmUgYSBuby1nbyBmb3IgZnV6emluZy4gQWxzbywgUENJIGRldmljZSByZW1vdmFscyBhbmQgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgYXJlIG91dC4gU28sIGlzIGBzZnBgIG9yIGBtZGlvLWkyY2AgcmVhY2hhYmxlIHdpdGhvdXQgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlP1xuXG5UaGUga2V5IGhlcmUgaXMgd2hldGhlciBJIGNhbiBpbnN0YW50aWF0ZSBhbiBTRlAgY2FnZSBvciBNRElPIEkyQyBidXMgaW4gYSBRRU1VL3ZpcnR1YWwgZW52aXJvbm1lbnQuIENhbiBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggYG9mX21hdGNoYCBiZSBjcmVhdGVkPyBDYW4gSSBjcmVhdGUgYHNmcGAgd2l0aG91dCBhIGRldmljZSB0cmVlLCBvciB3aXRoIGRldmljZSB0cmVlIG92ZXJsYXlzLCBvciBldmVuIHVzaW5nIHNvbWV0aGluZyBsaWtlIFN5emthbGxlciBpbiBRRU1VIHg4Ni9hcm02ND8gVGhhdCdzIHRoZSBxdWVzdGlvbiBJIGhhdmUgdG8gYW5zd2VyLiBJIG5lZWQgdG8gY2hlY2sgaWYgU3l6a2FsbGVyIG9yIFFFTVUgaGFzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIGBzZnBgIG9yIGBtZGlvLWkyY2AuXG5cblRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgSSdtIGdvaW5nIHRvIGRvIGEgZ2xvYmFsIHNlYXJjaC4gSSdsbCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGFueSBjYWxscyB0byBgbWRpb19pMmNfYWxsb2NgLCBgc2ZwX2FsbG9jYCwgb3IgZGlyZWN0bHkgdG8gYHNmcF9wcm9iZWAuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHZpZXcgb2YgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGFjdHVhbGx5IHVzZWQgYW5kLCBjb25zZXF1ZW50bHksIHdoZXRoZXIgdGhleSBhcmUgbGlrZWx5IHRvIGJlIHJlYWNoZWQgZHVyaW5nIHN0YW5kYXJkIFFFTVUgLyB2aXJ0dWFsIGVudmlyb25tZW50IG9wZXJhdGlvbnMuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBvbiBhIGNvZGUgcGF0aCB0aGF0J3MgcmVhc29uYWJseSByZWFjaGFibGUsIHRodXMgcG90ZW50aWFsbHkgbGVhZGluZyB0byBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU2MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0ODo0NC44ODYwMTM4NDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzkxMTk1NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb19pMmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jPTQ2Nj1zdGF0aWMgaW50IGkyY19taWlfaW5pdF9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy00OTEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjQ5MjpzdGF0aWMgYm9vbCBtZGlvX2kyY19jaGVja19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo0OTM6XFx0XFx0XFx0XFx0XFx0IGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTQ5NC17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1MDU6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjUwNjpcXHRcXHRcXHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbClcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01MTAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjUxMTpcXHRpZiAoIW1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoaTJjLCBwcm90b2NvbCkpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTUxMi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTQtfVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1NTU6RVhQT1JUX1NZTUJPTF9HUEwobWRpb19pMmNfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MjQxPXN0cnVjdCBzZnAge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI0NS1cXHRzdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX2J1cztcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjQ2OlxcdGVudW0gbWRpb19pMmNfcHJvdG8gbWRpb19wcm90b2NvbDtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjQ3LVxcdHN0cnVjdCBwaHlfZGV2aWNlICptb2RfcGh5O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTk3MT1zdGF0aWMgaW50IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc3RydWN0IHNmcCAqc2ZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTk3NS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6OTc2OlxcdGkyY19taWkgPSBtZGlvX2kyY19hbGxvYyhzZnAtXFx1MDAzZWRldiwgc2ZwLVxcdTAwM2VpMmMsIHNmcC1cXHUwMDNlbWRpb19wcm90b2NvbCk7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTk3Ny1cXHRpZiAoSVNfRVJSKGkyY19taWkpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg9MTI9c3RydWN0IG1paV9idXM7XFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmgtMTMtXFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg6MTQ6ZW51bSBtZGlvX2kyY19wcm90byB7XFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmgtMTUtXFx0TURJT19JMkNfTk9ORSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIwLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjIxOnN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjIyOlxcdFxcdFxcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKTtcXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaC0yMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDg6NDcuMjI1MTM3NDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM2OTczNDcxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiB0aGUgU0ZQIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBzZnBgIGRyaXZlciBjb2RlLCBhbmQgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgYG1kaW9faTJjX2FsbG9jYCBpcyBleHBvcnRlZCwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIG9ubHkgZnJvbSBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZWAgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AuIEFscmlnaHQsIHRoYXQncyBpbnRlcmVzdGluZy4gSSBzaG91bGQgZm9sbG93IHRoZSBjaGFpbi4gTGV0J3Mgc2VlIHdobydzIGNhbGxpbmcgYHNmcF9pMmNfbWRpb2J1c19jcmVhdGVgLiBBaCwgaXQncyBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AuIEdvb2QsIGdvb2QuIE5vdywgbGV0J3MgdGFrZSBhIHN0ZXAgYmFjayBhbmQgZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgU0ZQIGRldmljZSBpcyBwcm9iZWQgYW5kIGhvdyBpdHMgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldmljZSBpdHNlbGYuXG5cblNvLCB3aGVuIGlzIGBzZnBfcHJvYmVgIGFjdHVhbGx5IGdldHRpbmcgY2FsbGVkPyBSaWdodCwgSSBzZWUgaXQuIFRoZSBgc2ZwYCBkcml2ZXIgcmVnaXN0ZXJzIGFzIGEgcGxhdGZvcm0gZHJpdmVyLiBJdCdzIGxvb2tpbmcgZm9yIGRldmljZXMgd2l0aCB0aGUgXCJzZmYsc2ZwXCIgYW5kIFwic2ZmLHNmZlwiIGNvbXBhdGlibGVzLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBBbmQgd2hpbGUgSSdtIGF0IGl0LCBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgcGh5X3NmcF9wcm9iZWAgaW4gYHBoeV9kZXZpY2UuY2AuIEFsd2F5cyBnb29kIHRvIGhhdmUgYSBsb29rIGF0IHRoZSBQSFkgbGF5ZXIsIGl0IG1heSBzaG93IG90aGVyIGludGVyYWN0aW9ucyBhbmQgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDk6MDAuOTIyNDg2NTM0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY2NzM3OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9zZnBfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNjc2PXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDMtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA0OiAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNzpzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzM3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTczODogKiBwaHlfc2ZwX3JlbGVhc2UgLSByZWxlYXNlIHJlc291cmNlcyBzZXQgdXAgYnkgcGh5X3NmcF9wcm9iZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzM5LSAqIEBwaHlkZXY6IHRoZSBQSFkgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzQwLSAqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzQxOiAqIFJlbGVhc2UgdGhlIFNGUCByZXNvdXJjZXMgc2V0IHVwIGJ5IGEgc3VjY2Vzc2Z1bCBwaHlfc2ZwX3Byb2JlKCkuIFVucmVnaXN0ZXJcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3NDItICogdGhlIHVwc3RyZWFtIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBwaHlfcG9ydCwgc28gU0ZQIHVwc3RyZWFtIGNhbGxiYWNrcyBjYW5ub3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzU2NT1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTc5LVxcdGlmICghcGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTgwOlxcdFxcdHJldCA9IHBoeV9zZnBfcHJvYmUocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1ODEtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDk6MDMuMTg5MjMyNjI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNDUyMzMxNTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHdoYXQgdGhlIGBwaHlfc2ZwX3Byb2JlYCBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBhY2NvbXBsaXNoLiBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGxhbmRzY2FwZSBvZiBTRlAgbW9kdWxlcywgYW5kIEknbSBpbnRlcmVzdGVkIGluIHRoZSBzcGVjaWZpY3MgaGVyZS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgcGh5c2ljYWwgbGF5ZXIgaW50ZXJmYWNlIGFuZCBsaWtlbHkgaW52b2x2ZXMgZGV0ZWN0aW5nIGFuZCBjb25maWd1cmluZyBhbiBTRlAgbW9kdWxlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3Qgc3RlcHMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIGFuZCB3aGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXQncyBnb3QuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCdzIGZvbGxvd2luZyBiZXN0IHByYWN0aWNlcyBmb3IgdGhpcyB0eXBlIG9mIHByb2JlIGZ1bmN0aW9uLiBMZXQncyBzZWUgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IFNGUCB0eXBlcyBhbmQgcG90ZW50aWFsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4gSSdtIGFsc28gY3VyaW91cyBpZiBpdCBpbmNsdWRlcyBhbnkgdmVuZG9yLXNwZWNpZmljIGhhbmRsaW5nLiBUaGlzIGlzIHJpZ2h0IGluIG15IHdoZWVsaG91c2UsIHNvIEknbSBleGNpdGVkIHRvIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY5NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ5OjI2LjY0MTU2NzA5MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzA0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzA0OlxcdCAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcXG4xNzA1OlxcdCAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZVxcbjE3MDY6XFx0ICovXFxuMTcwNzpcXHRzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNzA4OlxcdHtcXG4xNzA5OlxcdFxcdHN0cnVjdCBzZnBfYnVzICpidXM7XFxuMTcxMDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xNzExOlxcdFxcbjE3MTI6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKSB7XFxuMTcxMzpcXHRcXHRcXHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKTtcXG4xNzE0OlxcdFxcdFxcdGlmIChJU19FUlIoYnVzKSlcXG4xNzE1OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1cyk7XFxuMTcxNjpcXHRcXG4xNzE3OlxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IGJ1cztcXG4xNzE4OlxcdFxcbjE3MTk6XFx0XFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuMTcyMDpcXHRcXHRcXHRzZnBfYnVzX3B1dChidXMpO1xcbjE3MjE6XFx0XFxuMTcyMjpcXHRcXHRcXHRpZiAocmV0KVxcbjE3MjM6XFx0XFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gTlVMTDtcXG4xNzI0OlxcdFxcdH1cXG4xNzI1OlxcdFxcbjE3MjY6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VzZnBfYnVzKSB7XFxuMTcyNzpcXHRcXHRcXHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcXG4xNzI4OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xNzI5OlxcdFxcdFxcdFxcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyk7XFxuMTczMDpcXHRcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBOVUxMO1xcbjE3MzE6XFx0XFx0XFx0fVxcbjE3MzI6XFx0XFx0fVxcbjE3MzM6XFx0XFxuMTczNDpcXHRcXHRyZXR1cm4gcmV0O1xcbjE3MzU6XFx0fVxcbjE3MzY6XFx0XFxuMTczNzpcXHQvKipcXG4xNzM4OlxcdCAqIHBoeV9zZnBfcmVsZWFzZSAtIHJlbGVhc2UgcmVzb3VyY2VzIHNldCB1cCBieSBwaHlfc2ZwX3Byb2JlKClcXG4xNzM5OlxcdCAqIEBwaHlkZXY6IHRoZSBQSFkgZGV2aWNlXFxuMTc0MDpcXHQgKlxcbjE3NDE6XFx0ICogUmVsZWFzZSB0aGUgU0ZQIHJlc291cmNlcyBzZXQgdXAgYnkgYSBzdWNjZXNzZnVsIHBoeV9zZnBfcHJvYmUoKS4gVW5yZWdpc3RlclxcbjE3NDI6XFx0ICogdGhlIHVwc3RyZWFtIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBwaHlfcG9ydCwgc28gU0ZQIHVwc3RyZWFtIGNhbGxiYWNrcyBjYW5ub3RcXG4xNzQzOlxcdCAqIHJhY2Ugd2l0aCBwb3J0IGRlc3RydWN0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0OToyNi42NDE4MDQ4NzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIxMjQ3Mjc2MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFFFTVUgLyBTRlAgQ29udW5kcnVtKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gQ2FuIEkgZXZlbiAqdGhpbmsqIGFib3V0IGNyZWF0aW5nIFNGUCBjYWdlcyBvciBkZXZpY2VzIGluIFFFTVU/IFRoYXQncyB0aGUgZmlyc3QgcXVlc3Rpb24uIEJ1dCB3YWl0LCBkb2VzIFFFTVUgYWN0dWFsbHkgKmVtdWxhdGUqIHRoZSBwaHlzaWNhbCBTRlAgY2FnZXMgdGhlbXNlbHZlcywgb3IgaXMgaXQgbW9yZSBmb2N1c2VkIG9uIGVtdWxhdGluZyB0aGUgSTJDIGludGVyZmFjZSBvZiBTRlAgbW9kdWxlcz8gT3IsIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc3RhbmRhcmQgaGFyZHdhcmUgcmVwcmVzZW50YXRpb24gdGhhdCBRRU1VIHByb3ZpZGVzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LlxuXG5MZXQgbWUgYnJlYWsgZG93biB0aGUgZXhpc3RpbmcgY3JpdGVyaWEgdG8gc2VlIGlmIEknbSBldmVuIGluIHRoZSBiYWxscGFyay4gVGhlIGNyaXRlcmlhIGZvciBXb3J0aEZ1enppbmc9ZmFsc2UgYXJlIHByZXR0eSBzcGVjaWZpYy4gTW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgbG9nZ2luZywgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBjb25zdGFudHMsIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIOKAkyB0aG9zZSBhcmUgYWxsIG9idmlvdXMgZmxhZ3MuIEJ1dCB3aGF0IGFib3V0IHRoZSByZWFsbHkgc3BlY2lmaWMgZXhhbXBsZXM/IFBDSWUgc3dpdGNoLCBTbWFydE5JQywgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHJlYWwgaGFyZHdhcmU/IE9rYXksIHRoYXQgaGVscHMgdG8gY2xhcmlmeSB0aGUgYm91bmRhcmllcy4gQW5kIHRoZW4gdGhlIC5yZW1vdmUvLnNodXRkb3duIGNhbGxiYWNrcyBkdXJpbmcgdW5iaW5kIG9wZXJhdGlvbnMsIHRoYXQncyBub3Qgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbk5vdywgZm9jdXNpbmcgYmFjaywgd2hhdCBhYm91dCB0aGUgSTJDL01ESU8vU0ZQIHNpdHVhdGlvbj8gVGhpcyBmZWVscyBsaWtlIHRoZSBjcml0aWNhbCBxdWVzdGlvbi4gQ2FuIEkyQyBkZXZpY2VzIG9yIFNGUCBtb2R1bGVzIGJlIGFjY2Vzc2VkIHdpdGhpbiBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBhdCBhbGw/IEhvdyBkb2VzIFFFTVUgYW5kIExpbnV4IGdlbmVyYWxseSBkZWFsIHdpdGggdGhlIGludGVyZmFjZSBiZXR3ZWVuIEkyQyBhbmQgU0ZQPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LlxuXG5JcyBTRlAgaGFuZGxlZCBhcyBhbiBcIk9GXCIgKE9wZW4gRmlybXdhcmUpIG9yIHBsYXRmb3JtIGRldmljZT8gRG9lcyBpdCByZXF1aXJlIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciBhbiBTRlAgY2FnZSwgYWxvbmdzaWRlIHRoZSBwaHlzaWNhbCBvciBlbXVsYXRlZCBJMkMgdHJhbnNjZWl2ZXIgbW9kdWxlPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0J3MgdGhlIHNldHVwLiBDYW4gSSBqdXN0IGluc3RhbnRpYXRlIGFuIFNGUCB1c2luZyBpMmMtZGV2IC8gaTJjLXN0dWIsIG9yIGFtIEkgc3R1Y2sgd2l0aCBhIHBsYXRmb3JtIGRldmljZSBzY2VuYXJpbz8gSSdtIGdvaW5nIHRvIHNlYXJjaCBmb3IgdGhvc2UgZHJpdmVycywgb3IgYnVzZXMsIG9yIGFsbG9jIGZ1bmN0aW9uczogYHNmcF9kcml2ZXJgLCBgc2ZwX2J1c2AsIGBzZnBfYWxsb2NgIG1pZ2h0IGJlIHRoZSBrZXl3b3JkcyBJIG5lZWQuIEkgaG9wZSBJIGNhbiBtYWtlIHRoaXMgZnV6emFibGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTM3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NTE6MjcuODg5MTA0NTY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY1MTIwNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNmcF9idXNfYWRkX3Vwc3RyZWFtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTcwNz1zdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxOC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MTk6XFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzIwLVxcdFxcdHNmcF9idXNfcHV0KGJ1cyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM1NjU9c3RhdGljIGludCBwaHlfc2V0dXBfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3Ni1cXHQgKiBiaW5kaW5nIG9jY3VycyB3aXRoIFJUTkwgaGVscCwgd2hpY2ggd2lsbCBkZWFkbG9jayB0aGUgY2FsbCB0b1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU3NzpcXHQgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3OC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTc2OD1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTc4NC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE3ODU6XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwbCwgXFx1MDAyNnNmcF9waHlsaW5rX29wcyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNzg2LVxcdHNmcF9idXNfcHV0KGJ1cyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jPTYzNT1FWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX2ZpbmRfZndub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMtNjM3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmM6NjM4OiAqIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgLSBwYXJzZSBhbmQgcmVnaXN0ZXIgdGhlIG5laWdoYm91cmluZyBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTYzOS0gKiBAYnVzOiB0aGUgXFx1MDAyNnN0cnVjdCBzZnBfYnVzIGZvdW5kIHZpYSBzZnBfYnVzX2ZpbmRfZndub2RlKClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMtNjU2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmM6NjU3OmludCBzZnBfYnVzX2FkZF91cHN0cmVhbShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzLCB2b2lkICp1cHN0cmVhbSxcXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY1OC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMtNjg0LX1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jOjY4NTpFWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX2FkZF91cHN0cmVhbSk7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYy02ODYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY5MS0gKiBEZWxldGUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdXBzdHJlYW0gY29ubmVjdGlvbiBmb3IgdGhlIFNGUFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmM6NjkyOiAqIG1vZHVsZS4gQGJ1cyBzaG91bGQgaGF2ZSBiZWVuIGFkZGVkIGJ5IHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkuXFxuZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYy02OTMtICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oPTU5Mz1zdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX2J1c19maW5kX2Z3bm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG5pbmNsdWRlL2xpbnV4L3NmcC5oOjU5NDppbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXFxuaW5jbHVkZS9saW51eC9zZnAuaC01OTUtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZnAuaD02NDg9c2ZwX2J1c19maW5kX2Z3bm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZnAuaC02NTItXFxuaW5jbHVkZS9saW51eC9zZnAuaDo2NTM6c3RhdGljIGlubGluZSBpbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXFxuaW5jbHVkZS9saW51eC9zZnAuaC02NTQtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjUxOjMwLjA1NDIzMTEwMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDcwMDc4MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU0ZQIENhZ2VzIGFuZCBSb2xsQmFsbCBQSFlzOiBBIEZlYXNpYmlsaXR5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcgU0ZQIGNhZ2VzIGFuZCBkZXZpY2VzLiBDYW4gdGhpcyBldmVuIGJlIGRvbmU/IEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgU0ZQIGFjdHVhbGx5IHdvcmtzLiBBbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd246IEEgY2FnZSBpcyBkZWNsYXJlZCBpbiB0aGUgRGV2aWNlIFRyZWUsIG1heWJlIHVzaW5nIE9GIG9uIEFSTSwgTUlQUywgb3IgQUNQSSBib2FyZHMuIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIHBsYXRmb3JtIGRldmljZSwgYWNjZXNzaW5nIGFuIEkyQyBidXMgbGlua2VkIHRvIHRoZSBjYWdlLiBXaGVuIGEgbW9kdWxlIHBsdWdzIGluLCB0aGUgc3RhdGUgbWFjaGluZSBzdGFydHMsIHJlYWRpbmcgdGhlIEVFUFJPTSB2aWEgSTJDIGF0IDB4NTAgYW5kIDB4NTEuIElmIHRoZSBFRVBST00gbWF0Y2hlcyBhIFJvbGxCYWxsIHF1aXJrLCB0aGUgYG1kaW9fcHJvdG9jb2xgIGlzIHNldC4gVGhlbiwgd2Ugc2VlIGBzZnBfc21fYWRkX21kaW9fYnVzYCBhbmQgYG1kaW9faTJjX2FsbG9jYCwgdWx0aW1hdGVseSBsZWFkaW5nIHRvIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYC5cblxuQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFjaCB0aGlzIGluIHN5emthbGxlciBvciBRRU1VPyBBbmQgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byB0aGluayBjYXJlZnVsbHkuIERvZXMgc3RhbmRhcmQgUUVNVSAoeDg2XzY0IG9yIGFybTY0KSBldmVuIGVtdWxhdGUgYW4gU0ZQIGNhZ2Ugb3IgUm9sbEJhbGwgUEhZPyBObywgaXQgZG9lc24ndC4gT2theSwgdGhhdCdzIGEgZGVhZCBlbmQuIEJ1dCB3YWl0LCB0aGVyZSdzIGEgZ3VpZGVsaW5lIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgd29ydGhpbmVzcyBmb3IgZnV6emluZy4gSXQgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoYXQncyBhIG1ham9yIGNvbnNpZGVyYXRpb24uIFN0dWZmIGxpa2UgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb25zdGFudHMgdGhhdCBkb24ndCBhbHRlciBleGVjdXRpb24gZmxvdywgb3IgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIFFFTVUgYXJlIG91dC4gU28sIGRvZXMgU0ZQIG9yIE1ESU8tSTJDICphY3R1YWxseSogaGF2ZSBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGhvb2tzP1xuXG5SaWdodCwgbGV0J3MgbG9vayBhdCBzeXprYWxsZXIuIERvZXMgaXQgaGF2ZSBhbnkgZGVzY3JpcHRpb25zIGZvciB0aGluZ3MgbGlrZSBtZGlvLCBzZnAsIHBoeWxpbmssIG9yIGV0aHRvb2w/IFN5emthbGxlciBydW5zIGluIFFFTVUgKHg4Nl82NCwgYXJtNjQpIG9yIEdDRS4gQ2FuIEkgaW5zdGFudGlhdGUgU0ZQIGNhZ2VzIGluIHRob3NlIGVudmlyb25tZW50cz8gSSBuZWVkIHRvIGNoZWNrIGZvciBzeXNmcyBvciBpb2N0bCBpbnRlcmZhY2VzIHRoYXQgd291bGQgbGV0IG1lIGluc3RhbnRpYXRlIHBsYXRmb3JtIGRldmljZXMsIG9yIHNwZWNpZmljYWxseSBTRlAgb3IgcGh5bGluay4gVGhlIFNGUCBkcml2ZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCBtYXRjaGVzIHRoZSBPRiBub2RlIHdpdGggYGNvbXBhdGlibGUgPSBcInNmZixzZnBcImAuIFRoZW4gdGhlcmUncyBwbGF0Zm9ybSBkZXZpY2VzIHdpdGhvdXQgYW4gT0YgZGV2aWNlIHRyZWUgbm9kZS4gSW4gYHNmcF9wcm9iZWAsIGBzZnBfaTJjX2dldChzZnApYCBpcyBjYWxsZWQuIExldCdzIHNlZSB3aGF0ICp0aGF0KiBmdW5jdGlvbiBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo1MTozNy4xMjQzMTE1N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyODA6XFx0XFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKHNmcC1cXHUwMDNlaTJjX21paSk7XFxuMzI4MTpcXHRcXHRcXHRtZGlvYnVzX2ZyZWUoc2ZwLVxcdTAwM2VpMmNfbWlpKTtcXG4zMjgyOlxcdFxcdH1cXG4zMjgzOlxcdFxcdGlmIChzZnAtXFx1MDAzZWkyYylcXG4zMjg0OlxcdFxcdFxcdGkyY19wdXRfYWRhcHRlcihzZnAtXFx1MDAzZWkyYyk7XFxuMzI4NTpcXHRcXHRrZnJlZShzZnApO1xcbjMyODY6XFx0fVxcbjMyODc6XFx0XFxuMzI4ODpcXHRzdGF0aWMgaW50IHNmcF9pMmNfZ2V0KHN0cnVjdCBzZnAgKnNmcClcXG4zMjg5OlxcdHtcXG4zMjkwOlxcdFxcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpoO1xcbjMyOTE6XFx0XFx0c3RydWN0IGkyY19hZGFwdGVyICppMmM7XFxuMzI5MjpcXHRcXHRpbnQgZXJyO1xcbjMyOTM6XFx0XFxuMzI5NDpcXHRcXHRoID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldl9md25vZGUoc2ZwLVxcdTAwM2VkZXYpLCBcXFwiaTJjLWJ1c1xcXCIsIDApO1xcbjMyOTU6XFx0XFx0aWYgKElTX0VSUihoKSkge1xcbjMyOTY6XFx0XFx0XFx0ZGV2X2VycihzZnAtXFx1MDAzZWRldiwgXFxcIm1pc3NpbmcgJ2kyYy1idXMnIHByb3BlcnR5XFxcXG5cXFwiKTtcXG4zMjk3OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjMyOTg6XFx0XFx0fVxcbjMyOTk6XFx0XFxuMzMwMDpcXHRcXHRpMmMgPSBpMmNfZ2V0X2FkYXB0ZXJfYnlfZndub2RlKGgpO1xcbjMzMDE6XFx0XFx0aWYgKCFpMmMpIHtcXG4zMzAyOlxcdFxcdFxcdGVyciA9IC1FUFJPQkVfREVGRVI7XFxuMzMwMzpcXHRcXHRcXHRnb3RvIHB1dDtcXG4zMzA0OlxcdFxcdH1cXG4zMzA1OlxcdFxcbjMzMDY6XFx0XFx0ZXJyID0gc2ZwX2kyY19jb25maWd1cmUoc2ZwLCBpMmMpO1xcbjMzMDc6XFx0XFx0aWYgKGVycilcXG4zMzA4OlxcdFxcdFxcdGkyY19wdXRfYWRhcHRlcihpMmMpO1xcbjMzMDk6XFx0cHV0OlxcbjMzMTA6XFx0XFx0Zndub2RlX2hhbmRsZV9wdXQoaCk7XFxuMzMxMTpcXHRcXHRyZXR1cm4gZXJyO1xcbjMzMTI6XFx0fVxcbjMzMTM6XFx0XFxuMzMxNDpcXHRzdGF0aWMgaW50IHNmcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbjMzMTU6XFx0e1xcbjMzMTY6XFx0XFx0Y29uc3Qgc3RydWN0IHNmZl9kYXRhICpzZmY7XFxuMzMxNzpcXHRcXHRjaGFyICpzZnBfaXJxX25hbWU7XFxuMzMxODpcXHRcXHRzdHJ1Y3Qgc2ZwICpzZnA7XFxuMzMxOTpcXHRcXHRpbnQgZXJyLCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo1MTozNy4xMjQ0Njc3MzlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIwNzM3NjI2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0ZQL0kyQyBQYXRjaCdzIFdvcnRoaW5lc3MgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgc2ZwX2kyY19nZXRgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdCwgYW5kIGl0J3MgbWFraW5nIGEgZGlyZWN0IGNhbGwgdG8gYGZ3bm9kZV9maW5kX3JlZmVyZW5jZWAgdG8gbG9jYXRlIGFuIEkyQyBhZGFwdGVyLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlOiB0aGlzIGltcGxpZXMgYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIHNldHVwIGlzIHJlcXVpcmVkLiBXZSdyZSB0YWxraW5nIE9wZW5GaXJtd2FyZSAoRGV2aWNlIFRyZWUpIG9yIEFDUEkgd2l0aCBhIHByb3Blcmx5IGRlZmluZWQgSTJDIGJ1cyBub2RlLCBhbiB1cHN0cmVhbSBQSFkvbmV0d29yayBkZXZpY2UsIGFuZCBhICpyZWFsKiBvciBlbXVsYXRlZCBTRlAgdHJhbnNjZWl2ZXIgcmVzcG9uZGluZyB0byBJMkMgY29tbXVuaWNhdGlvbiAoRUVQUk9NIHF1ZXJpZXMsIFJvbGxCYWxsIHByb3RvY29sKS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCBhIG1pbnV0ZSwgY2FuIHRoaXMgZXZlbiBiZSByZWFsaXN0aWNhbGx5IHRlc3RlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50P1wiIEZyb20gZXhwZXJpZW5jZSwgSSBrbm93IHRoYXQgbmVpdGhlciBRRU1VIG5vciBHQ0Ugb2ZmZXJzIGFueSBzdGFuZGFyZCBzdXBwb3J0IGZvciBTRlAgY2FnZSBlbXVsYXRpb24sIG9yIGFueXRoaW5nIHRoYXQgd291bGQgc2ltdWxhdGUgdGhlIG5lY2Vzc2FyeSBSb2xsYmFsbCBJMkMgUEhZLiBUaGlzIHN1Z2dlc3RzIHRoaXMgY29kZSBwYXRoIGlzbid0IGVhc2lseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyB0byBjb25maXJtIG15IGh5cG90aGVzaXMuIE9rYXksIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBjaGFuZ2VzIHRoYXQgaW52b2x2ZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgUUVNVS9HQ0UsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZSwgc2hvdWxkIHJlc3VsdCBpbiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBmaXRzIHRoZSBiaWxsIGV4YWN0bHkuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQncyBsb29rIGZvciBvdGhlciB1c2VzIG9mIGBtZGlvLWkyY2AgYW5kIGBzZnBgIGluIHRoZSBuZXR3b3JraW5nIGNvcmUgb3IgdmlydHVhbCBuZXR3b3JrIGRldmljZSBjb250ZXh0LiBXaGlsZSB0aGUgY29yZSBjaGVjayBpcyB0cmlnZ2VyZWQgYnkgdGhlIG9yaWdpbmFsIGxpbmUsIGxldCdzIGNvbmZpcm0gdGhpcyBjb25jbHVzaW9uIGJ5IGEgZnVsbCBzY2FuIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgaGVscCB1cyBjb25maXJtIG5vIG90aGVyIHBhcnRzIG9mIG5ldHdvcmtpbmcgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo1MTo0OS4xOTgyMzMyNTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDY2NTY2MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby1pMmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiTUFJTlRBSU5FUlM9MjQ5MDU9RjpcXHRkcml2ZXJzL25ldC9waHkvc2ZwKlxcbk1BSU5UQUlORVJTOjI0OTA2OkY6XFx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmhcXG5NQUlOVEFJTkVSUy0yNDkwNy1GOlxcdGluY2x1ZGUvbGludXgvcGh5bGluay5oXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19NRElPX0hJU0lfRkVNQUMpXFx0XFx0Kz0gbWRpby1oaXNpLWZlbWFjLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19NRElPX0kyQylcXHRcXHRcXHQrPSBtZGlvLWkyYy5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfTURJT19JUFE0MDE5KVxcdFxcdCs9IG1kaW8taXBxNDAxOS5vXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtMTMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzoxNDojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby9tZGlvLWkyYy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy0xNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvamlmZmllcy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvL21kaW8taTJjLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0xNTg9c3RhdGljIGNvbnN0IGVudW0gZ3Bpb2RfZmxhZ3MgZ3Bpb19mbGFnc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMC0vKiBTRlAgbW9kdWxlcyBhcHBlYXIgdG8gYWx3YXlzIGhhdmUgdGhlaXIgUEhZIGNvbmZpZ3VyZWQgZm9yIGJ1cyBhZGRyZXNzXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIyMTogKiAweDU2ICh3aGljaCB3aXRoIG1kaW8taTJjLCB0cmFuc2xhdGVzIHRvIGEgUEhZIGFkZHJlc3Mgb2YgMjIpLlxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjItICogUm9sbEJhbGwgU0ZQcyBhY2Nlc3MgcGh5IHZpYSBTRlAgRW5oYW5jZWQgRGlnaXRhbCBEaWFnbm9zdGljIEludGVyZmFjZVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjM6ICogdmlhIGFkZHJlc3MgMHg1MSAobWRpby1pMmMgd2lsbCB1c2UgUm9sbEJhbGwgcHJvdG9jb2wgb24gdGhpcyBhZGRyZXNzKS5cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjI0LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo1MTo1MS4zMDQ5MDQwNjZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzMDIwNTg5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXb3J0aGluZXNzIG9mIEZ1enppbmcgdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYWNoIG9mIHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG1kaW9faTJjYCBhbmQgYHNmcGAuIExvb2tpbmcgYXQgdGhlIGNvZGViYXNlLCBpdCdzIGNsZWFyIGBtZGlvLWkyYy5jYCBpcyBjb25kaXRpb25hbCDigJMgaXQgb25seSBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19NRElPX0kyQ2AgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdWx0aW1hdGVseSBzZWxlY3RlZCBieSBgQ09ORklHX1NGUGAgaW4gdGhlIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgZmlsZS4gQW5kLCBgc2ZwLmNgIG9ubHkgZ2V0cyBsb2FkZWQvcHJvYmVkIHdoZW4gdGhlcmUncyBhbiBTRlAgbm9kZSBpbiB0aGUgZGV2aWNlIHRyZWUgb3IgQUNQSSB3aXRoIGNlcnRhaW4gcHJvcGVydGllcyB0aGF0IGNvbm5lY3RzIHRvIGFuIEkyQyBidXMuIEVzc2VudGlhbGx5LCB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUtc3BlY2lmaWMgY29kZS5cblxuTm93LCBmb2N1c2luZyBvbiAqdGhpcyogc3BlY2lmaWMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQncyBkb2luZyBhIGZldyB0aGluZ3MuIEZpcnN0LCB0aGVyZSdzIGEgbmV3IHF1aXJrIGZvciBcIk9FTSBTRlAtMTBHLVQtSVwiIGNvcHBlciB0cmFuc2NlaXZlcnMg4oCTIHRoYXQgc2NyZWFtcyBoYXJkd2FyZS1zcGVjaWZpYy4gU2Vjb25kLCBpdCdzIGhhbmRsaW5nIHRoZSBgLUVOT0RFVmAgZXJyb3IgZnJvbSBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZSgpYCwgd2hpY2ggaW52b2x2ZXMgc2V0dGluZyBgc2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FYC4gVGhpcmQsIGl0J3MgaW1wbGVtZW50aW5nIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKClgIHRvIGNoZWNrIGZvciBSb2xsQmFsbCBNRElPIHByb3RvY29sIHN1cHBvcnQuXG5cblRoZSBjb21tb24gdGhyZWFkIGhlcmU/IEFsbCBvZiB0aGlzIGlzIHRpZWQgdG8gdGhlIHBoeXNpY2FsIGxheWVyIOKAkyBTRlAgY2FnZXMsIFNGUCsgY29wcGVyIG1vZHVsZXMgY29ubmVjdGVkIHZpYSBJMkMsIGFuZCB0aGUgUm9sbEJhbGwgcHJvdG9jb2wuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBgaTJjX21paV9wcm9iZV9yb2xsYmFsbCgpYCBpcyB0cnlpbmcgdG8gZG8gSTJDIHJlYWQgYW5kIHdhaXQgZm9yIGhhcmR3YXJlIHNwZWNpZmljIHJlc3BvbnNlLiBUaGlzIG1lYW5zIGl0ICpuZWVkcyogcmVhbCBoYXJkd2FyZSB0byBmdW5jdGlvbi5cblxuU28sIHRoZSBrZXkgaXMgdGhlIGluc3RydWN0aW9ucy4gVGhleSBzdGF0ZSB0aGF0IHRoZSBwYXRjaCBpcyBcIldvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuLi5cIi4gVGhpcyBjb2RlIHBhdGgsIHdpdGggaXRzIGRlcGVuZGVuY2Ugb24gcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYW5kIHRoZSBSb2xsQmFsbCBwcm90b2NvbCwgaXMgYWJzb2x1dGVseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEV2ZW4gZW11bGF0aW5nIHRoZSBJMkMgYnVzIGl0c2VsZiB3b3VsZG4ndCBiZSBlbm91Z2guIFdlIG5lZWQgdGhlIHBoeXNpY2FsIFNGUCBjYWdlIGFuZCB0aGUgcGh5c2ljYWwgdHJhbnNjZWl2ZXIgd2l0aCB0aGUgUm9sbEJhbGwgcHJvdG9jb2wuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgcmV2aWV3aW5nIGFsbCB0aGUgZGV0YWlscywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nOlxuXG4qICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9sczogW11gXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtdYFxuXG5UaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhcjogVGhpcyBwYXRjaCBtb2RpZmllcyBjb2RlIHNwZWNpZmljIHRvIHBoeXNpY2FsIFNGUC9TRlArIHRyYW5zY2VpdmVyIG1vZHVsZXMgYW5kIGNhZ2VzIGNvbm5lY3RlZCB2aWEgSTJDLiBUaGlzIGlzIGltcG9zc2libGUgdG8gZW11bGF0ZSBvciByZWFjaCBpbiBhIHZpcnR1YWxpemVkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBUaW1lIHRvIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4OTMsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjUyOjEwLjYwNjk2NDc1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBtb2RpZnkgUm9sbEJhbGwgTURJTy1vdmVyLUkyQyBwcm90b2NvbCBpbml0aWFsaXphdGlvbiAoZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jKSBhbmQgU0ZQIG1vZHVsZSBxdWlyay9idXMgaGFuZGxpbmcgKGRyaXZlcnMvbmV0L3BoeS9zZnAuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBTRlAgY2FnZXMgYW5kIFNGUCB0cmFuc2NlaXZlciBoYXJkd2FyZSBjb21tdW5pY2F0aW5nIG92ZXIgSTJDLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IFJvbGxCYWxsIE1ESU8tb3Zlci1JMkMgcHJvdG9jb2wgaW5pdGlhbGl6YXRpb24gKGRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYykgYW5kIFNGUCBtb2R1bGUgcXVpcmsvYnVzIGhhbmRsaW5nIChkcml2ZXJzL25ldC9waHkvc2ZwLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgU0ZQIGNhZ2VzIGFuZCBTRlAgdHJhbnNjZWl2ZXIgaGFyZHdhcmUgY29tbXVuaWNhdGluZyBvdmVyIEkyQywgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo1MjoxMC42MDY5OTA2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowwmzmf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 19:45:17 +0000 UTC FinishedAt: 2026-08-31 19:52:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgUm9sbEJhbGwgTURJTy1vdmVyLUkyQyBwcm90b2NvbCBpbml0aWFsaXphdGlvbiAoZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jKSBhbmQgU0ZQIG1vZHVsZSBxdWlyay9idXMgaGFuZGxpbmcgKGRyaXZlcnMvbmV0L3BoeS9zZnAuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBTRlAgY2FnZXMgYW5kIFNGUCB0cmFuc2NlaXZlciBoYXJkd2FyZSBjb21tdW5pY2F0aW5nIG92ZXIgSTJDLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzOWQ0NThmYzA3MmNjNzk4ZjE4NTQwN2I2MTc4MzEzMjI0ZTdiYWU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTk6NDY6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXG5pbmRleCBlZDIwMzUyYTU4OWEzLi5iODhmNjMyMzRiNGU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNcbkBAIC00MTksNiAmIzQzOzQxOSw1MCBAQCBzdGF0aWMgaW50IGkyY19taWlfd3JpdGVfcm9sbGJhbGwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldmFkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGkyY19taWlfcHJvYmVfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4mIzQzO3tcbiYjNDM7XHR1OCBkYXRhX2J1ZltdID0geyBST0xMQkFMTF9EQVRBX0FERFIsIDB4MDEsIDB4MDAsIDB4MDAgfTtcbiYjNDM7XHR1OCBjbWRfYnVmW10gID0geyBST0xMQkFMTF9DTURfQUREUiwgUk9MTEJBTExfQ01EX1JFQUQgfTtcbiYjNDM7XHR1OCBjbWRfYWRkciAgID0gUk9MTEJBTExfQ01EX0FERFI7XG4mIzQzO1x0c3RydWN0IGkyY19tc2cgbXNnc1syXTtcbiYjNDM7XHR1OCByZXN1bHQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0bXNnc1swXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcbiYjNDM7XHRtc2dzWzBdLmZsYWdzID0gMDtcbiYjNDM7XHRtc2dzWzBdLmxlbiAgID0gc2l6ZW9mKGRhdGFfYnVmKTtcbiYjNDM7XHRtc2dzWzBdLmJ1ZiAgID0gZGF0YV9idWY7XG4mIzQzO1x0bXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcbiYjNDM7XHRtc2dzWzFdLmZsYWdzID0gMDtcbiYjNDM7XHRtc2dzWzFdLmxlbiAgID0gc2l6ZW9mKGNtZF9idWYpO1xuJiM0MztcdG1zZ3NbMV0uYnVmICAgPSBjbWRfYnVmO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpMmNfdHJhbnNmZXJfcm9sbGJhbGwoaTJjLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdG1zZ3NbMF0uYWRkciAgPSBST0xMQkFMTF9QSFlfSTJDX0FERFI7XG4mIzQzO1x0bXNnc1swXS5mbGFncyA9IDA7XG4mIzQzO1x0bXNnc1swXS5sZW4gICA9IDE7XG4mIzQzO1x0bXNnc1swXS5idWYgICA9IFx1MDAyNmNtZF9hZGRyO1xuJiM0MztcdG1zZ3NbMV0uYWRkciAgPSBST0xMQkFMTF9QSFlfSTJDX0FERFI7XG4mIzQzO1x0bXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEO1xuJiM0MztcdG1zZ3NbMV0ubGVuICAgPSAxO1xuJiM0MztcdG1zZ3NbMV0uYnVmICAgPSBcdTAwMjZyZXN1bHQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0bXNsZWVwKDIwKTtcbiYjNDM7XHRcdHJldCA9IGkyY190cmFuc2Zlcl9yb2xsYmFsbChpMmMsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0XHRpZiAocmVzdWx0ID09IFJPTExCQUxMX0NNRF9ET05FKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PREVWO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuIHtcbiBcdHN0cnVjdCBpMmNfbXNnIG1zZztcbkBAIC00MzgsMTEgJiM0Mzs0ODIsMTEgQEAgc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4gXG4gXHRyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCBcdTAwMjZtc2csIDEpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGVsc2UgaWYgKHJldCAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0aWYgKHJldCAhPSAxKVxuIFx0XHRyZXR1cm4gLUVJTztcbi1cdGVsc2Vcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKGkyYyk7XG4gfVxuIFxuIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5AQCAtNDg3LDkgJiM0Mzs1MzEsMTAgQEAgc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG4gXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxuIFx0XHRyZXQgPSBpMmNfbWlpX2luaXRfcm9sbGJhbGwoaTJjKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnIocGFyZW50LFxuLVx0XHRcdFx0XCYjMzQ7Q2Fubm90IGluaXRpYWxpemUgUm9sbEJhbGwgTURJTyBJMkMgcHJvdG9jb2w6ICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0cmV0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCAhPSAtRU5PREVWKVxuJiM0MztcdFx0XHRcdGRldl9lcnIocGFyZW50LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7Q2Fubm90IGluaXRpYWxpemUgUm9sbEJhbGwgTURJTyBJMkMgcHJvdG9jb2w6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0cmV0KTtcbiBcdFx0XHRtZGlvYnVzX2ZyZWUobWlpKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5pbmRleCAyZWM5MTQ2NmFjZGYzLi40OWM3N2NhODY5MzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbkBAIC02MTYsNiAmIzQzOzYxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcbiBcdC8vIE9FTSBTRlAtR0UtVCBpcyBhIDEwMDBCYXNlLVQgbW9kdWxlIHdpdGggYnJva2VuIFRYX0ZBVUxUIGluZGljYXRvclxuIFx0U0ZQX1FVSVJLX0YoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtR0UtVFwmIzM0Oywgc2ZwX2ZpeHVwX2lnbm9yZV90eF9mYXVsdCksXG4gXG4mIzQzO1x0U0ZQX1FVSVJLX0YoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtMTBHLVQtSVwmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsKSxcbiBcdFNGUF9RVUlSS19GKFwmIzM0O09FTVwmIzM0OywgXCYjMzQ7U0ZQLTEwRy1UXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLFxuIFx0U0ZQX1FVSVJLX1MoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtMi41Ry1UXCYjMzQ7LCBzZnBfcXVpcmtfb2VtXzJfNWcpLFxuIFx0U0ZQX1FVSVJLX1MoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtMi41Ry1CWDEwLURcJiMzNDssIHNmcF9xdWlya18yNTAwYmFzZXgpLFxuQEAgLTIyMDgsMTAgJiM0MzsyMjA5LDE3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9mYXVsdChzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBuZXh0X3N0YXRlLCBib29sIHdhcm4pXG4gXG4gc3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcbiB7XG4tXHRpZiAoc2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgIT0gTURJT19JMkNfTk9ORSlcbi1cdFx0cmV0dXJuIHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc2ZwKTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sID09IE1ESU9fSTJDX05PTkUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApO1xuJiM0MztcdGlmIChyZXQgPT0gLUVOT0RFVikge1xuJiM0MztcdFx0c2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgUm9sbEJhbGwgTURJTy1vdmVyLUkyQyBwcm90b2NvbCBpbml0aWFsaXphdGlvbiAoZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jKSBhbmQgU0ZQIG1vZHVsZSBxdWlyay9idXMgaGFuZGxpbmcgKGRyaXZlcnMvbmV0L3BoeS9zZnAuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBTRlAgY2FnZXMgYW5kIFNGUCB0cmFuc2NlaXZlciBoYXJkd2FyZSBjb21tdW5pY2F0aW5nIG92ZXIgSTJDLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOWQ0NThmYzA3MmNjNzk4ZjE4NTQwN2I2MTc4MzEzMjI0ZTdiYWU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTk6NDY6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMKaW5kZXggZWQyMDM1MmE1ODlhMy4uYjg4ZjYzMjM0YjRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYwpAQCAtNDE5LDYgJiM0Mzs0MTksNTAgQEAgc3RhdGljIGludCBpMmNfbWlpX3dyaXRlX3JvbGxiYWxsKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBkZXZhZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKJiM0Mzt7CiYjNDM7CXU4IGRhdGFfYnVmW10gPSB7IFJPTExCQUxMX0RBVEFfQUREUiwgMHgwMSwgMHgwMCwgMHgwMCB9OwomIzQzOwl1OCBjbWRfYnVmW10gID0geyBST0xMQkFMTF9DTURfQUREUiwgUk9MTEJBTExfQ01EX1JFQUQgfTsKJiM0MzsJdTggY21kX2FkZHIgICA9IFJPTExCQUxMX0NNRF9BRERSOwomIzQzOwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOwomIzQzOwl1OCByZXN1bHQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwltc2dzWzBdLmFkZHIgID0gUk9MTEJBTExfUEhZX0kyQ19BRERSOwomIzQzOwltc2dzWzBdLmZsYWdzID0gMDsKJiM0MzsJbXNnc1swXS5sZW4gICA9IHNpemVvZihkYXRhX2J1Zik7CiYjNDM7CW1zZ3NbMF0uYnVmICAgPSBkYXRhX2J1ZjsKJiM0MzsJbXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjsKJiM0MzsJbXNnc1sxXS5mbGFncyA9IDA7CiYjNDM7CW1zZ3NbMV0ubGVuICAgPSBzaXplb2YoY21kX2J1Zik7CiYjNDM7CW1zZ3NbMV0uYnVmICAgPSBjbWRfYnVmOwomIzQzOwomIzQzOwlyZXQgPSBpMmNfdHJhbnNmZXJfcm9sbGJhbGwoaTJjLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJbXNnc1swXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjsKJiM0MzsJbXNnc1swXS5mbGFncyA9IDA7CiYjNDM7CW1zZ3NbMF0ubGVuICAgPSAxOwomIzQzOwltc2dzWzBdLmJ1ZiAgID0gJmFtcDtjbWRfYWRkcjsKJiM0MzsJbXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjsKJiM0MzsJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOwomIzQzOwltc2dzWzFdLmxlbiAgID0gMTsKJiM0MzsJbXNnc1sxXS5idWYgICA9ICZhbXA7cmVzdWx0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTA7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltc2xlZXAoMjApOwomIzQzOwkJcmV0ID0gaTJjX3RyYW5zZmVyX3JvbGxiYWxsKGkyYywgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJCWlmIChyZXN1bHQgPT0gUk9MTEJBTExfQ01EX0RPTkUpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9ERVY7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJc3RydWN0IGkyY19tc2cgbXNnOwpAQCAtNDM4LDExICYjNDM7NDgyLDExIEBAIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgJmFtcDttc2csIDEpOwogCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCWVsc2UgaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CWlmIChyZXQgIT0gMSkKIAkJcmV0dXJuIC1FSU87Ci0JZWxzZQotCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGkyY19taWlfcHJvYmVfcm9sbGJhbGwoaTJjKTsKIH0KIAogc3RhdGljIGJvb2wgbWRpb19pMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKQEAgLTQ4Nyw5ICYjNDM7NTMxLDEwIEBAIHN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAogCWNhc2UgTURJT19JMkNfUk9MTEJBTEw6CiAJCXJldCA9IGkyY19taWlfaW5pdF9yb2xsYmFsbChpMmMpOwogCQlpZiAocmV0ICZsdDsgMCkgewotCQkJZGV2X2VycihwYXJlbnQsCi0JCQkJJiMzNDtDYW5ub3QgaW5pdGlhbGl6ZSBSb2xsQmFsbCBNRElPIEkyQyBwcm90b2NvbDogJWRcbiYjMzQ7LAotCQkJCXJldCk7CiYjNDM7CQkJaWYgKHJldCAhPSAtRU5PREVWKQomIzQzOwkJCQlkZXZfZXJyKHBhcmVudCwKJiM0MzsJCQkJCSYjMzQ7Q2Fubm90IGluaXRpYWxpemUgUm9sbEJhbGwgTURJTyBJMkMgcHJvdG9jb2w6ICVkXG4mIzM0OywKJiM0MzsJCQkJCXJldCk7CiAJCQltZGlvYnVzX2ZyZWUobWlpKTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwppbmRleCAyZWM5MTQ2NmFjZGYzLi40OWM3N2NhODY5MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCkBAIC02MTYsNiAmIzQzOzYxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHsKIAkvLyBPRU0gU0ZQLUdFLVQgaXMgYSAxMDAwQmFzZS1UIG1vZHVsZSB3aXRoIGJyb2tlbiBUWF9GQVVMVCBpbmRpY2F0b3IKIAlTRlBfUVVJUktfRigmIzM0O09FTSYjMzQ7LCAmIzM0O1NGUC1HRS1UJiMzNDssIHNmcF9maXh1cF9pZ25vcmVfdHhfZmF1bHQpLAogCiYjNDM7CVNGUF9RVUlSS19GKCYjMzQ7T0VNJiMzNDssICYjMzQ7U0ZQLTEwRy1ULUkmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsKSwKIAlTRlBfUVVJUktfRigmIzM0O09FTSYjMzQ7LCAmIzM0O1NGUC0xMEctVCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLAogCVNGUF9RVUlSS19TKCYjMzQ7T0VNJiMzNDssICYjMzQ7U0ZQLTIuNUctVCYjMzQ7LCBzZnBfcXVpcmtfb2VtXzJfNWcpLAogCVNGUF9RVUlSS19TKCYjMzQ7T0VNJiMzNDssICYjMzQ7U0ZQLTIuNUctQlgxMC1EJiMzNDssIHNmcF9xdWlya18yNTAwYmFzZXgpLApAQCAtMjIwOCwxMCAmIzQzOzIyMDksMTcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2FybikKIAogc3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcCkKIHsKLQlpZiAoc2ZwLSZndDttZGlvX3Byb3RvY29sICE9IE1ESU9fSTJDX05PTkUpCi0JCXJldHVybiBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7CiYjNDM7CWludCByZXQ7CiAKLQlyZXR1cm4gMDsKJiM0MzsJaWYgKHNmcC0mZ3Q7bWRpb19wcm90b2NvbCA9PSBNRElPX0kyQ19OT05FKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldCA9IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc2ZwKTsKJiM0MzsJaWYgKHJldCA9PSAtRU5PREVWKSB7CiYjNDM7CQlzZnAtJmd0O21kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyogUHJvYmUgYSBTRlAgZm9yIGEgUEhZIGRldmljZSBpZiB0aGUgbW9kdWxlIHN1cHBvcnRzIGNvcHBlciAtIHRoZSBQSFkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZXZlbiAqd29ydGgqIGZ1enppbmcuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCYjMzk7cyB0b3VjaGluZyBjb2RlIHRoYXQmIzM5O3MgaGFyZHdhcmUtc3BlY2lmaWMsIHVucmVhY2hhYmxlIGluIGEgdHlwaWNhbCB0ZXN0aW5nIGVudmlyb25tZW50IChsaWtlIG15IHZpcnR1YWwgbWFjaGluZXMpLCBvciBqdXN0IGdlbmVyYWxseSBub3QgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4KCkZpcnN0IHRoaW5ncyBmaXJzdCwgd2hhdCBmaWxlcyBoYXZlIGJlZW4gY2hhbmdlZD8gSSBzZWUgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY2AgYW5kIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgLiBBbHJpZ2h0LCB0aGF0IG5hcnJvd3MgdGhpbmdzIGRvd24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIHVzZWQuIEFyZSB0aGV5IGNvcmUgdG8gc29tZSBmdW5kYW1lbnRhbCBuZXR3b3JraW5nIG9wZXJhdGlvbiwgb3IgYXJlIHRoZXkgZGVwZW5kZW50IG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGhhcmR3YXJlPyBJJiMzOTtsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCAob3IganVzdCBgcmVhZC1maWxlYCBhbmQgYSBnb29kIGdyZXApIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgbWRpby1pMmNgIGFuZCBgc2ZwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFuZCB3aGV0aGVyIEkgY2FuIGV2ZW4gcmVhY2ggU0ZQIG9yIG1kaW8taTJjIGluIG15IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIERvZXMgaXQgcmVxdWlyZSBhIHBoeXNpY2FsIFNGUCBtb2R1bGUgb3Igb3RoZXIgc3BlY2lmaWMgaGFyZHdhcmU/CgpIb2xkIG9uLi4uIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgbGV0JiMzOTtzIHNlZSBpZiBJIGNhbiBnZXQgYXdheSB3aXRob3V0IG5lZWRpbmcgYW55IHBoeXNpY2FsIGhhcmR3YXJlLiBJJiMzOTtsbCBjaGVjayB3aGVyZSBgbWRpb19pMmNfYWxsb2NgIG9yIGBzZnBgIGdldHMgcHJvYmVkIG9yIHJlZ2lzdGVyZWQuIElmIEkgY2FuIGZpbmQgYSByZWdpc3RyYXRpb24gcGF0aCB0aGF0JiMzOTtzIHRyaWdnZXJlZCB0aHJvdWdoIHNvbWUgY29uZmlndXJhdGlvbiwgSSBtaWdodCBiZSBpbiBsdWNrLiBUaGF0IHdvdWxkIGFsbG93IG1lIHRvIHNldCB1cCBhbiBlYXNpbHkgcmVwcm9kdWNpYmxlIHRlc3QgZW52aXJvbm1lbnQsIHdoaWNoIHdvdWxkIGJlIGlkZWFsIGZvciBlZmZlY3RpdmUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvX2kyY19hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM9NDkyPXN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTUwNC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1MDU6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA2LVx0XHRcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTQtfVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjU1NTpFWFBPUlRfU1lNQk9MX0dQTChtZGlvX2kyY19hbGxvYyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTU2LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz05NzE9c3RhdGljIGludCBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBzZnAgKnNmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTc1LVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjk3NjpcdGkyY19taWkgPSBtZGlvX2kyY19hbGxvYyhzZnAtXHUwMDNlZGV2LCBzZnAtXHUwMDNlaTJjLCBzZnAtXHUwMDNlbWRpb19wcm90b2NvbCk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTc3LVx0aWYgKElTX0VSUihpMmNfbWlpKSlcbi0tXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaD0xND1lbnVtIG1kaW9faTJjX3Byb3RvIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaC0yMC1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjIxOnN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmgtMjItXHRcdFx0ICAgICAgIGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBTRlAgQ29kZSoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIFNGUCBkcml2ZXImIzM5O3MgYmVoYXZpb3IuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHdoZXJlIGBzZnAuY2AgaXMgYWN0dWFsbHkgKnVzZWQqLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGluc3RhbnRpYXRpb24gYW5kIHRoZSBwbGFjZXMgd2hlcmUgaXRzIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHlwaWNhbCBkcml2ZXIgZmxvdzogcHJvYmluZywgaW5pdGlhbGl6YXRpb24sIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uCgpGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIFNGUCBkcml2ZXImIzM5O3MgY29yZSBsb2dpYy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3RhbmRhcmQgZHJpdmVyIG1lY2hhbmlzbXM6IGhvdyBpdCBoYW5kbGVzIGhvdC1wbHVnIGV2ZW50cywgaG93IGl0IHJlYWRzIHRoZSBtb2R1bGUmIzM5O3MgRUVQUk9NLCBob3cgaXQgbWFuYWdlcyB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBQSFkuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3dzPyBJIG5lZWQgdG8gZ2V0IGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgZHJpdmVy4oCZcyBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lLgoKRmluYWxseSwgdGhlIHVsdGltYXRlIHRlc3Q6IERvZXMgdGhpcyB0aGluZyBiZWhhdmUgYXMgZXhwZWN0ZWQgaW4gYSBzaW11bGF0ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBBbmQsIGNydWNpYWxseSwgY2FuIEkgcmVhY2ggaXQgaW4gbXkgZnV6emluZyBzZXR1cD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGFjY2Vzc2libGUgYW5kIHRoYXQgSSBjYW4gcmVsaWFibHkgdHJpZ2dlciByZWxldmFudCBjb2RlIHBhdGhzIHdpdGhpbiB0aGUgU0ZQIGRyaXZlciBkdXJpbmcgZnV6emluZyBjYW1wYWlnbnMuIE90aGVyd2lzZSwgSSB3aWxsIG5lZWQgdG8gZGV2aXNlIG1ldGhvZHMgZm9yIGdldHRpbmcgdGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIGdldHRpbmcgZXhlcmNpc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0yMTYwPWludCBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE2OC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIxNjk6ICogaXhnYmVfaXNfc2ZwX3Byb2JlIC0gUmV0dXJucyB0cnVlIGlmIFNGUCBpcyBiZWluZyBkZXRlY3RlZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3MC0gKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3My0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIxNzQ6c3RhdGljIGJvb2wgaXhnYmVfaXNfc2ZwX3Byb2JlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IG9mZnNldCwgdTggYWRkcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTIxOTQ9c3RhdGljIGludCBpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWNfaW50KHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDQtXHRcdG1heF9yZXRyeSA9IDM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMjA1Olx0aWYgKGl4Z2JlX2lzX3NmcF9wcm9iZShodywgYnl0ZV9vZmZzZXQsIGRldl9hZGRyKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDYtXHRcdG1heF9yZXRyeSA9IElYR0JFX1NGUF9ERVRFQ1RfUkVUUklFUztcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE2NzY9c3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDMtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDQ6ICogcGh5X3NmcF9wcm9iZSAtIHByb2JlIGZvciBhIFNGUCBjYWdlIGF0dGFjaGVkIHRvIHRoaXMgUEhZIGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA1LSAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA2LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA3OnN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA4LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MzctLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3Mzg6ICogcGh5X3NmcF9yZWxlYXNlIC0gcmVsZWFzZSByZXNvdXJjZXMgc2V0IHVwIGJ5IHBoeV9zZnBfcHJvYmUoKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzM5LSAqIEBwaHlkZXY6IHRoZSBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3NDAtICpcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTc0MTogKiBSZWxlYXNlIHRoZSBTRlAgcmVzb3VyY2VzIHNldCB1cCBieSBhIHN1Y2Nlc3NmdWwgcGh5X3NmcF9wcm9iZSgpLiBVbnJlZ2lzdGVyXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3NDItICogdGhlIHVwc3RyZWFtIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBwaHlfcG9ydCwgc28gU0ZQIHVwc3RyZWFtIGNhbGxiYWNrcyBjYW5ub3Rcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM1NjU9c3RhdGljIGludCBwaHlfc2V0dXBfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1NzktXHRpZiAoIXBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM1ODA6XHRcdHJldCA9IHBoeV9zZnBfcHJvYmUocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU4MS1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MzI4OD1zdGF0aWMgaW50IHNmcF9pMmNfZ2V0KHN0cnVjdCBzZnAgKnNmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzMxMy1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzozMzE0OnN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzMxNS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTM0OTY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ZwX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzozNDk3Olx0LnByb2JlID0gc2ZwX3Byb2JlLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTM0OTgtXHQucmVtb3ZlID0gc2ZwX3JlbW92ZSxcbi0tXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmM9Mzg9c3RhdGljIHN0cnVjdCBudm1lbV9jb25maWcgbGF5ZXJzY2FwZV9zZnBfbnZtZW1fY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYy00NC1cbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYzo0NTpzdGF0aWMgaW50IGxheWVyc2NhcGVfc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmMtNDYte1xuLS1cbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYz05Nz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsYXllcnNjYXBlX3NmcF9kcml2ZXIgPSB7XG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmM6OTg6XHQucHJvYmVcdD0gbGF5ZXJzY2FwZV9zZnBfcHJvYmUsXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmMtOTktXHQuZHJpdmVyID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFNGUCBQcm9iZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgU0ZQIG1vZHVsZSBpcyBiZWluZyBpbml0aWFsaXplZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHNmcF9wcm9iZWAgZnVuY3Rpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgLSBob3cgaXMgdGhpcyBwcm9iZSB0cmlnZ2VyZWQ/IFdoZXJlIGlzIHRoZSBpbnN0YW50aWF0aW9uIGhhcHBlbmluZz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtLiBJcyB0aGlzIGFsbCBiZWluZyBkcml2ZW4gYnkgdGhlIGRldmljZSB0cmVlLCBBQ1BJLCBvciBpcyBpdCBhIHBsYXRmb3JtIGRldmljZSBzaXR1YXRpb24/IExldCYjMzk7cyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGFuZCB6ZXJvIGluIG9uIHRoZSBgc2ZwX3Byb2JlYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzEwOlx0XHRmd25vZGVfaGFuZGxlX3B1dChoKTtcbjMzMTE6XHRcdHJldHVybiBlcnI7XG4zMzEyOlx0fVxuMzMxMzpcdFxuMzMxNDpcdHN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4zMzE1Olx0e1xuMzMxNjpcdFx0Y29uc3Qgc3RydWN0IHNmZl9kYXRhICpzZmY7XG4zMzE3Olx0XHRjaGFyICpzZnBfaXJxX25hbWU7XG4zMzE4Olx0XHRzdHJ1Y3Qgc2ZwICpzZnA7XG4zMzE5Olx0XHRpbnQgZXJyLCBpO1xuMzMyMDpcdFxuMzMyMTpcdFx0c2ZwID0gc2ZwX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjMzMjI6XHRcdGlmIChJU19FUlIoc2ZwKSlcbjMzMjM6XHRcdFx0cmV0dXJuIFBUUl9FUlIoc2ZwKTtcbjMzMjQ6XHRcbjMzMjU6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNmcCk7XG4zMzI2Olx0XG4zMzI3Olx0XHRlcnIgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoc2ZwLVx1MDAzZWRldiwgc2ZwX2NsZWFudXAsIHNmcCk7XG4zMzI4Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMzMyOTpcdFx0XHRyZXR1cm4gZXJyO1xuMzMzMDpcdFxuMzMzMTpcdFx0c2ZmID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHNmcC1cdTAwM2VkZXYpO1xuMzMzMjpcdFx0aWYgKCFzZmYpXG4zMzMzOlx0XHRcdHNmZiA9IFx1MDAyNnNmcF9kYXRhO1xuMzMzNDpcdFxuMzMzNTpcdFx0c2ZwLVx1MDAzZXR5cGUgPSBzZmY7XG4zMzM2Olx0XG4zMzM3Olx0XHRlcnIgPSBzZnBfaTJjX2dldChzZnApO1xuMzMzODpcdFx0aWYgKGVycilcbjMzMzk6XHRcdFx0cmV0dXJuIGVycjtcbjMzNDA6XHRcbjMzNDE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEdQSU9fTUFYOyBpJiM0MzsmIzQzOylcbjMzNDI6XHRcdFx0aWYgKHNmZi1cdTAwM2VncGlvcyBcdTAwMjYgQklUKGkpKSB7XG4zMzQzOlx0XHRcdFx0c2ZwLVx1MDAzZWdwaW9baV0gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChzZnAtXHUwMDNlZGV2LFxuMzM0NDpcdFx0XHRcdFx0XHQgICBncGlvX25hbWVzW2ldLCBncGlvX2ZsYWdzW2ldKTtcbjMzNDU6XHRcdFx0XHRpZiAoSVNfRVJSKHNmcC1cdTAwM2VncGlvW2ldKSlcbjMzNDY6XHRcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNmcC1cdTAwM2VncGlvW2ldKTtcbjMzNDc6XHRcdFx0fVxuMzM0ODpcdFxuMzM0OTpcdFx0c2ZwLVx1MDAzZXN0YXRlX2h3X21hc2sgPSBTRlBfRl9QUkVTRU5UO1xuMzM1MDpcdFx0c2ZwLVx1MDAzZXN0YXRlX2h3X2RyaXZlID0gU0ZQX0ZfVFhfRElTQUJMRTtcbjMzNTE6XHRcbjMzNTI6XHRcdHNmcC1cdTAwM2VnZXRfc3RhdGUgPSBzZnBfZ3Bpb19nZXRfc3RhdGU7XG4zMzUzOlx0XHRzZnAtXHUwMDNlc2V0X3N0YXRlID0gc2ZwX2dwaW9fc2V0X3N0YXRlO1xuMzM1NDpcdFxuMzM1NTpcdFx0LyogQW4gU0ZQIGNhZ2Ugd2l0aCBubyBNT0RfREVGMCBHUElPIGhhcyBubyBoYXJkd2FyZSBwcmVzZW5jZSBzaWduYWwuXG4zMzU2Olx0XHQgKiBBc3N1bWluZyB0aGUgbW9kdWxlIGlzIGFsd2F5cyBwcmVzZW50IHRyYXBzIGFuIGVtcHR5IGNhZ2UgaW5cbjMzNTc6XHRcdCAqIE1PRF9FUlJPUiBhbmQgbmV2ZXIgZGV0ZWN0cyBob3QtaW5zZXJ0aW9uLCBzbyBkZXJpdmUgcHJlc2VuY2UgZnJvbSBhXG4zMzU4Olx0XHQgKiB0aHJvdHRsZWQgSTJDIHByb2JlIGFuZCBwb2xsIGZvciBjaGFuZ2VzIGluc3RlYWQuIHNmcF9pMmNfY29uZmlndXJlKClcbjMzNTk6XHRcdCAqIGhhcyBhbHJlYWR5IHNldCBpMmNfbWF4X2Jsb2NrX3NpemU7IHNlZWQgaTJjX2Jsb2NrX3NpemUgc28gdGhlXG4zMzYwOlx0XHQgKiBwcmVzZW5jZSByZWFkIGRvZXMgbm90IGlzc3VlIGEgemVyby1sZW5ndGggdHJhbnNmZXIgYmVmb3JlIHRoZSBmaXJzdFxuMzM2MTpcdFx0ICogRUVQUk9NIHJlYWQuIFNlZWQgaTJjX3ByZXNlbnRfbmV4dCB0byBqaWZmaWVzIHNvIHRoZSBmaXJzdCBwcm9iZVxuMzM2MjpcdFx0ICogaGFwcGVucyBpbW1lZGlhdGVseSAoYSB6ZXJvIHZhbHVlIHdvdWxkIGJlIGluIHRoZSBwYXN0IHJlbGF0aXZlIHRvXG4zMzYzOlx0XHQgKiB0aGUgbmVnYXRpdmUgSU5JVElBTF9KSUZGSUVTIGF0IGJvb3QgYW5kIGRlbGF5IGRldGVjdGlvbikuXG4zMzY0Olx0XHQgKlxuMzM2NTpcdFx0ICogQSBzb2xkZXJlZC1kb3duIG1vZHVsZSAoc2ZmLHNmZikgaGFzIG5vIHByZXNlbmNlIHNpZ25hbCBhbmQgaXNcbjMzNjY6XHRcdCAqIGdlbnVpbmVseSBhbHdheXMgcHJlc2VudCwgc28gaXQga2VlcHMgdGhlIGFsd2F5cy1wcmVzZW50IGJlaGF2aW91cjtcbjMzNjc6XHRcdCAqIHRoZSBJMkMgcHJvYmUgaXMgZ2F0ZWQgb24gdGhlIGNhZ2UgdHlwZSBhZHZlcnRpc2luZyBTRlBfRl9QUkVTRU5ULlxuMzM2ODpcdFx0ICovXG4zMzY5Olx0XHRpZiAoIXNmcC1cdTAwM2VncGlvW0dQSU9fTU9EREVGMF0pIHtcbjMzNzA6XHRcdFx0aWYgKHNmZi1cdTAwM2VncGlvcyBcdTAwMjYgU0ZQX0ZfUFJFU0VOVCkge1xuMzM3MTpcdFx0XHRcdHNmcC1cdTAwM2VnZXRfc3RhdGUgPSBzZnBfaTJjX2dldF9zdGF0ZTtcbjMzNzI6XHRcdFx0XHRzZnAtXHUwMDNlaTJjX2Jsb2NrX3NpemUgPSBzZnAtXHUwMDNlaTJjX21heF9ibG9ja19zaXplO1xuMzM3MzpcdFx0XHRcdHNmcC1cdTAwM2VpMmNfcHJlc2VudF9uZXh0ID0gamlmZmllcztcbjMzNzQ6XHRcdFx0XHRzZnAtXHUwMDNlbmVlZF9wb2xsID0gdHJ1ZTtcbjMzNzU6XHRcdFx0fSBlbHNlIHtcbjMzNzY6XHRcdFx0XHRzZnAtXHUwMDNlZ2V0X3N0YXRlID0gc2ZmX2dwaW9fZ2V0X3N0YXRlO1xuMzM3NzpcdFx0XHR9XG4zMzc4Olx0XHR9XG4zMzc5Olx0XG4zMzgwOlx0XHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O21heGltdW0tcG93ZXItbWlsbGl3YXR0XCYjMzQ7LFxuMzM4MTpcdFx0XHRcdFx0IFx1MDAyNnNmcC1cdTAwM2VtYXhfcG93ZXJfbVcpO1xuMzM4MjpcdFx0aWYgKHNmcC1cdTAwM2VtYXhfcG93ZXJfbVcgXHUwMDNjIDEwMDApIHtcbjMzODM6XHRcdFx0aWYgKHNmcC1cdTAwM2VtYXhfcG93ZXJfbVcpXG4zMzg0Olx0XHRcdFx0ZGV2X3dhcm4oc2ZwLVx1MDAzZWRldixcbjMzODU6XHRcdFx0XHRcdCBcJiMzNDtGaXJtd2FyZSBidWc6IGhvc3QgbWF4aW11bSBwb3dlciBzaG91bGQgYmUgYXQgbGVhc3QgMVdcXG5cJiMzNDspO1xuMzM4NjpcdFx0XHRzZnAtXHUwMDNlbWF4X3Bvd2VyX21XID0gMTAwMDtcbjMzODc6XHRcdH1cbjMzODg6XHRcbjMzODk6XHRcdGRldl9pbmZvKHNmcC1cdTAwM2VkZXYsIFwmIzM0O0hvc3QgbWF4aW11bSBwb3dlciAldS4ldVdcXG5cJiMzNDssXG4zMzkwOlx0XHRcdCBzZnAtXHUwMDNlbWF4X3Bvd2VyX21XIC8gMTAwMCwgKHNmcC1cdTAwM2VtYXhfcG93ZXJfbVcgLyAxMDApICUgMTApO1xuMzM5MTpcdFxuMzM5MjpcdFx0LyogR2V0IHRoZSBpbml0aWFsIHN0YXRlLCBhbmQgYWx3YXlzIHNpZ25hbCBUWCBkaXNhYmxlLFxuMzM5MzpcdFx0ICogc2luY2UgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHdpbGwgbm90IGJlIHVwLlxuMzM5NDpcdFx0ICovXG4zMzk1Olx0XHRzZnAtXHUwMDNlc3RhdGUgPSBzZnBfZ2V0X3N0YXRlKHNmcCkgfCBTRlBfRl9UWF9ESVNBQkxFO1xuMzM5NjpcdFxuMzM5NzpcdFx0aWYgKHNmcC1cdTAwM2VncGlvW0dQSU9fUlMwXSBcdTAwMjZcdTAwMjZcbjMzOTg6XHRcdCAgICBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAoc2ZwLVx1MDAzZWdwaW9bR1BJT19SUzBdKSlcbjMzOTk6XHRcdFx0c2ZwLVx1MDAzZXN0YXRlIHw9IFNGUF9GX1JTMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjIwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIFRyaWdnZXIgb2YgYHNmcF9zbV9hZGRfbWRpb19idXNgKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWF0aW5nIGNhbGwgZm9yIGBzZnBfc21fYWRkX21kaW9fYnVzYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1c3Qgc2VhcmNoIHRoZSBjb2RlYmFzZSBkaXJlY3RseSBmb3IgdGhhdCBmdW5jdGlvbiBuYW1lLiBJJiMzOTtsbCBkbyBhIHNpbXBsZSB0ZXh0IHNlYXJjaCBmaXJzdDsgaXQmIzM5O3MgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIGJpcmQmIzM5O3MtZXllIHZpZXcgb2Ygd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBldmVuICptZW50aW9uZWQqLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBkaXJlY3QgY2FsbHMsIG9yIHBlcmhhcHMgaW5kaXJlY3QgcmVmZXJlbmNlcywgbWF5YmUgdGhyb3VnaCBhIG1hY3JvIG9yIGEgdHlwZWRlZi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgY29tbW9uIHBhdHRlcm5zIGFuZCB3aGF0IEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yLiBJJiMzOTttIGhvcGluZyB0aGlzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYW5kIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBleGVjdXRlZCwgd2hpY2ggaXMga2V5IHRvIHRyb3VibGVzaG9vdGluZyB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9zbV9hZGRfbWRpb19idXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIxOTY9c3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2Fybilcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIwOS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjEwOnN0YXRpYyBpbnQgc2ZwX3NtX2FkZF9tZGlvX2J1cyhzdHJ1Y3Qgc2ZwICpzZnApXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTI4NjI9c3RhdGljIHZvaWQgc2ZwX3NtX21haW4oc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgZXZlbnQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI5NDctXHRcdFx0LyogQ3JlYXRlIG1kaW9idXMgYW5kIHN0YXJ0IHRyeWluZyBmb3IgUEhZICovXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6Mjk0ODpcdFx0XHRyZXQgPSBzZnBfc21fYWRkX21kaW9fYnVzKHNmcCk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjk0OS1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MjQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTRlAgU3RhdGUgTWFjaGluZSBhbmQgaXRzIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBob3cgdGhlIGBzZnBgIGZyYW1ld29yayBpcyBhY3R1YWxseSBlbXBsb3llZC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBjYW4gSSBlZmZlY3RpdmVseSBzaW11bGF0ZSBvciBpbnN0YW50aWF0ZSBTRlAgZnVuY3Rpb25hbGl0eSBvciBtZGlvLWkyYyB3aXRoaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgR29vZ2xlIENvbXB1dGUgRW5naW5lLCBvciBzeXprYWxsZXI/IFRoZXNlIGFyZSBjcnVjaWFsIHRlc3RpbmcgcGxhdGZvcm1zIGZvciBteSB3b3JrLCBhbmQgYWNoaWV2aW5nIHJlbGlhYmxlIFNGUCBlbXVsYXRpb24gaXMgcGFyYW1vdW50LgoKTm93LCBteSBzdHJhdGVneSBuZWVkcyB0byBiZSBtZXRob2RpY2FsLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IFNGUCBkZXZpY2VzIGFyZSBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gQXJlIHRoZXJlIGV4aXN0aW5nIGkyYyBkcml2ZXJzLCBwcmUtZGVmaW5lZCBwbGF0Zm9ybSBkZXZpY2VzLCBvciBjYW4gdGhlc2UgZGV2aWNlcyBiZSBjcmVhdGVkIG9uIHRoZSBmbHk/IEFyZSB3ZSBsZXZlcmFnaW5nIGNvbmZpZ2ZzLCBzdGFuZGFyZCBpMmMgY2xpZW50IGludGVyYWN0aW9ucywgc3lzZnMgaW50ZXJmYWNlcywgZGV2aWNlIHRyZWUgb3ZlcmxheXMsIG9yIHNvbWUgY29tYmluYXRpb24gb2YgdGhlc2U/CgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgYW5kIGBkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNgLiBUaGVzZSBhcmUgbGlrZWx5IHRvIGhvbGQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IEkgbmVlZCB0byBkaXNzZWN0LgoKRmluYWxseSwgYSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBNRElPX0kyQyBhbmQgU0ZQIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTURJT19JMkMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTEwMD1jb25maWcgTURJT19ISVNJX0ZFTUFDXG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwNi1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMDc6Y29uZmlnIE1ESU9fSTJDXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTA4LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI1MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6CgoqKk5hdmlnYXRpbmcgdGhlIE1ESU8gS2NvbmZpZyBGaWxlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSAxMDcuIEkmIzM5O20gYXNzdW1pbmcgaXQgZGVhbHMgd2l0aCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGdpdmVuIHRoaXMgaXMgYSBLY29uZmlnIGZpbGUuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaG93IGNlcnRhaW4gTURJTyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgcG9zc2libHkgZGVwZW5kZW50IG9uIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSBvciBvdGhlciBuZXR3b3JrIGRldmljZSBzZXR0aW5ncy4gTXkgYmFja2dyb3VuZCBrbm93bGVkZ2Ugb2YgbmV0d29yayBkcml2ZXJzIHRlbGxzIG1lIHRoaXMgZmlsZSB3aWxsIGRlZmluZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGVscCB0ZXh0LiBJdCYjMzk7cyBsaWtlbHkgc3RydWN0dXJlZCBoaWVyYXJjaGljYWxseSwgd2l0aCBwYXJlbnQgb3B0aW9ucyBjb250cm9sbGluZyB0aGUgYXZhaWxhYmlsaXR5IG9mIG1vcmUgZ3JhbnVsYXIgc2V0dGluZ3MuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZTogJiMzNDtpZiBQSFlfTURJTywmIzM0OyAmIzM0O2RlcGVuZHMgb24sJiMzNDsgJiMzNDtzZWxlY3QsJiMzNDsgYW5kICYjMzQ7ZGVmYXVsdCYjMzQ7IHN0YXRlbWVudHMgdGhhdCB3aWxsIGRldGVybWluZSBob3cgdXNlcnMgY29uZmlndXJlIHRoZSBNRElPIGRyaXZlciBhbmQgaXRzIGFzc29jaWF0ZWQgUEhZcy4gSSYjMzk7bSByZWFkeSB0byBzZWUgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0Y29uZmlnIE1ESU9fSElTSV9GRU1BQ1xuIDEwMTpcdFx0dHJpc3RhdGUgXCYjMzQ7SGlzaWxpY29uIEZFTUFDIE1ESU8gYnVzIGNvbnRyb2xsZXJcJiMzNDtcbiAxMDI6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPXG4gMTAzOlx0XHRoZWxwXG4gMTA0Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXG4gMTA1Olx0XHQgIEhpc2lsaWNvbiBTb0MgdGhhdCBoYXZlIGFuIEZhc3QgRXRoZXJuZXQgTUFDLlxuIDEwNjpcdFxuIDEwNzpcdGNvbmZpZyBNRElPX0kyQ1xuIDEwODpcdFx0dHJpc3RhdGVcbiAxMDk6XHRcdGRlcGVuZHMgb24gSTJDXG4gMTEwOlx0XHRoZWxwXG4gMTExOlx0XHQgIFN1cHBvcnQgSTJDIGJhc2VkIFBIWXMuICBUaGlzIHByb3ZpZGVzIGEgTURJTyBidXMgYnJpZGdlZFxuIDExMjpcdFx0ICB0byBJMkMgdG8gYWxsb3cgUEhZcyBjb25uZWN0ZWQgaW4gSTJDIG1vZGUgdG8gYmUgYWNjZXNzZWRcbiAxMTM6XHRcdCAgdXNpbmcgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlLlxuIDExNDpcdFxuIDExNTpcdFx0ICBUaGlzIGlzIGxpYnJhcnkgbW9kZS5cbiAxMTY6XHRcbiAxMTc6XHRjb25maWcgTURJT19NVlVTQlxuIDExODpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBVU0IgdG8gTURJTyBBZGFwdGVyXCYjMzQ7XG4gMTE5Olx0XHRkZXBlbmRzIG9uIFVTQlxuIDEyMDpcdFx0aGVscFxuIDEyMTpcdFx0ICBBIFVTQiB0byBNRElPIGNvbnZlcnRlciBwcmVzZW50IG9uIGRldmVsb3BtZW50IGJvYXJkcyBmb3JcbiAxMjI6XHRcdCAgTWFydmVsbCYjMzk7cyBMaW5rIFN0cmVldCBmYW1pbHkgb2YgRXRoZXJuZXQgc3dpdGNoZXMuXG4gMTIzOlx0XG4gMTI0Olx0Y29uZmlnIE1ESU9fTVNDQ19NSUlNXG4gMTI1Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NlbWkgTUlJTSBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuIDEyNjpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbiAxMjc6XHRcdHNlbGVjdCBSRUdNQVBfTU1JT1xuIDEyODpcdFx0aGVscFxuIDEyOTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTUlJTSAoTURJTykgaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBuZXR3b3JrXG4gMTMwOlx0XHQgIHN3aXRjaGVzIG9mIHRoZSBNaWNyb3NlbWkgU29DczsgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3dpdGNoIG9uXG4gMTMxOlx0XHQgIENPTkZJR19ISUdIX1JFU19USU1FUlNcbiAxMzI6XHRcbiAxMzM6XHRjb25maWcgTURJT19NT1hBUlRcbiAxMzQ6XHRcdHRyaXN0YXRlIFwmIzM0O01PWEEgQVJUIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiAxMzU6XHRcdGRlcGVuZHMgb24gQVJDSF9NT1hBUlQgfHwgQ09NUElMRV9URVNUXG4gMTM2Olx0XHRoZWxwXG4gMTM3Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgbmV0d29ya1xuIDEzODpcdFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIE1PWEEgQVJUIFNvQ1xuIDEzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDExMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIERpYWdub3N0aWMgUXVlcnkqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2VsZWN0aW9uIHByb2Nlc3Mgb2YgdGhpcyBgTURJT19JMkNgIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBiZSBhIG1vZHVsZSwgYSBidXMsIG9yIGV2ZW4ganVzdCBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgaXRlbSBpcyBiZWluZyBjaG9zZW4gb3IgY29uZmlndXJlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgdGhpcyBhIGNvbXBpbGUtdGltZSBvcHRpb24sIGEgcnVudGltZSBjb25maWd1cmF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBjb2RlIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBpdHMgYWN0aXZhdGlvbiBvciBkZWFjdGl2YXRpb24/IFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGRldmljZSBpbnRlcmFjdGlvbi4gRnJvbSB0aGlzLCB0aGUgcGF0aCB0aHJvdWdoIHRoZSBzb2Z0d2FyZSAoYW5kIHBvc3NpYmx5IGhhcmR3YXJlKSBjYW4gYmUgdW5kZXJzdG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE1ESU9fSTJDJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTczPWNvbmZpZyBTRlBcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03Ni1cdGRlcGVuZHMgb24gSFdNT04gfHwgSFdNT049blxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Nzc6XHRzZWxlY3QgTURJT19JMkNcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5MgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgbWF0ZXJpYWw6CgoqKkludmVzdGlnYXRpbmcgUmVsYXRlZCBSZWZlcmVuY2VzKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIEkmIzM5O3ZlIGFscmVhZHkgZ290IGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgY29ubmVjdGlvbnMgb3IgYWx0ZXJuYXRpdmUgYXBwcm9hY2hlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgb3V0IHRoZXJlIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlcyBNRElPX0kyQyBvciBTRlAuIEkga25vdyB0aGVzZSBhcmUgcmVsYXRlZCwgYnV0IEkgbmVlZCB0byBzZWUgaG93IGNvbXByZWhlbnNpdmVseS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBicmlkZ2UgdGhlIGdhcCwgb2ZmZXIgYSBkaWZmZXJlbnQgcGVyc3BlY3RpdmUsIG9yIHBvaW50IHRvIGEgbW9yZSBlbGVnYW50IHNvbHV0aW9uIHRoYW4gd2hhdCBJJiMzOTt2ZSBjdXJyZW50bHkgZ290IGluIG1pbmQuIEkgbmVlZCB0byBjYXN0IGEgd2lkZXIgbmV0IHRvIGNhcHR1cmUgYWxsIHJlbGV2YW50IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU0ZQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnPTI4NT1DT05GSUdfWElMSU5YX0VNQUNMSVRFPXlcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnOjI4NjpDT05GSUdfU0ZQPW1cbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTI4Ny1DT05GSUdfQlJPQURDT01fUEhZPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZz02ND1DT05GSUdfTVZQUDI9eVxuYXJjaC9hcm0vY29uZmlncy9tdmVidV92N19kZWZjb25maWc6NjU6Q09ORklHX1NGUD15XG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZy02Ni1DT05GSUdfTUFSVkVMTF9QSFk9eVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSAmIzQzOz0gbWlpX3RpbWVzdGFtcGVyLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfU0ZQKVx0XHQmIzQzOz0gc2ZwLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcdFx0JiM0Mzs9IHNmcC1idXMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI4LW9iai15XHRcdFx0XHQmIzQzOz0gJChzZnAtb2JqLXkpICQoc2ZwLW9iai1tKVxuLS1cbmluY2x1ZGUvbGludXgvc2ZwLmg9NTY1PXN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3Ny1cbmluY2x1ZGUvbGludXgvc2ZwLmg6NTc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19TRlApXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3OS1jb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpzZnBfZ2V0X21vZHVsZV9jYXBzKHN0cnVjdCBzZnBfYnVzICpidXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipDaGVja2luZyBLY29uZmlnIGZvciBTRlAqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5IGFib3V0IFNGUC4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIFNGUCBzdXBwb3J0IGluIHRoaXMgcHJvamVjdC4gSSB3YW50IHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIG9wdGlvbiBmb3IgaXQsIGFuZCwgaWYgc28sIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYW5kIHBvc3NpYmxlIHZhcmlhdGlvbnMgYXJlLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGVuYWJsZS9kaXNhYmxlIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCB2YXJpb3VzIHN1Yi1vcHRpb25zIGZvciBkaWZmZXJlbnQgU0ZQIHR5cGVzIG9yIGZlYXR1cmVzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgU0ZQIGlzIHRyZWF0ZWQgZnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHQgICAgICAgICAgQWRkcyBzdXBwb3J0IG5lZWRlZCBmb3IgUEhZIGRyaXZlcnMgd3JpdHRlbiBpbiBSdXN0LiBJdCBwcm92aWRlc1xuICA3MTpcdCAgICAgICAgICBhIHdyYXBwZXIgYXJvdW5kIHRoZSBDIHBoeWxpYiBjb3JlLlxuICA3MjpcdFxuICA3MzpcdGNvbmZpZyBTRlBcbiAgNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O1NGUCBjYWdlIHN1cHBvcnRcJiMzNDtcbiAgNzU6XHRcdGRlcGVuZHMgb24gSTJDIFx1MDAyNlx1MDAyNiBQSFlMSU5LXG4gIDc2Olx0XHRkZXBlbmRzIG9uIEhXTU9OIHx8IEhXTU9OPW5cbiAgNzc6XHRcdHNlbGVjdCBNRElPX0kyQ1xuICA3ODpcdFxuICA3OTpcdGNvbW1lbnQgXCYjMzQ7TUlJIFBIWSBkZXZpY2UgZHJpdmVyc1wmIzM0O1xuICA4MDpcdFxuICA4MTpcdGNvbmZpZyBBUzIxWFhYX1BIWVxuICA4MjpcdFx0dHJpc3RhdGUgXCYjMzQ7QWVvbnNlbWkgQVMyMXh4eCBQSFlzXCYjMzQ7XG4gIDgzOlx0XHRoZWxwXG4gIDg0Olx0XHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgQWVvbnNlbWkgQVMyMXh4eCBQSFkuXG4gIDg1Olx0XG4gIDg2Olx0XHQgIFRoZXNlIGFyZSBDNDUgUEhZcyAxMEcgdGhhdCByZXF1aXJlIGFsbCBhIGdlbmVyaWMgZmlybXdhcmUuXG4gIDg3Olx0XG4gIDg4Olx0XHQgIFN1cHBvcnRlZCBQSFlzIEFTMjEwMTFKQjEsIEFTMjEwMTFQQjEsIEFTMjEwMTBKQjEsIEFTMjEwMTBQQjEsXG4gIDg5Olx0XHQgIEFTMjE1MTFKQjEsIEFTMjE1MTFQQjEsIEFTMjE1MTBKQjEsIEFTMjE1MTBQQjEsIEFTMjEyMTBKQjEsXG4gIDkwOlx0XHQgIEFTMjEyMTBQQjEgdGhhdCBhbGwgcmVnaXN0ZXIgd2l0aCB0aGUgUEhZIElEIDB4NzUwMCAweDc1MDBcbiAgOTE6XHRcdCAgYmVmb3JlIHRoZSBmaXJtd2FyZSBpcyBsb2FkZWQuXG4gIDkyOlx0XG4gIDkzOlx0Y29uZmlnIEFJUl9BTjg4MDFfUEhZXG4gIDk0Olx0XHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgQU44ODAxIEdpZ2FiaXQgUEhZXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjYyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTg4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1ESU8gYW5kIFNGUCBSb2xsYmFsbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHNlZWluZyB0aGUgY2hhbmdlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCBmaWxlcy4gSSBrbm93IHRoZXNlIHJlbGF0ZSB0byBNRElPIGJ1c2VzIGFuZCBTRlAgdHJhbnNjZWl2ZXJzLCBzbyB0aGUgY29ubmVjdGlvbiBoZXJlIGlzIGltbWVkaWF0ZS4KCkkgc2VlIGEgbmV3IGZ1bmN0aW9uIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYCBhZGRlZCB3aXRoaW4gYG1kaW8taTJjLmNgLiBJdCYjMzk7cyBwcm9iaW5nIGFuIEkyQyBhZGFwdGVyIHRvIGRldGVybWluZSBpZiBhIFJvbGxiYWxsIGRldmljZSBpcyBwcmVzZW50LiBJdCBkb2VzIHNvIGJ5IHNlbmRpbmcgc29tZSBjb21tYW5kcyBhbmQgcmVhZGluZyBhIHJlc3VsdC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBwcm9iaW5nIGZvciBhIGRldmljZSBhdCBgUk9MTEJBTExfUEhZX0kyQ19BRERSYC4gVGhlcmUgaXMgYSBmb3IgbG9vcCB3aXRoIGEgbXNsZWVwLCBzbyBpdCBsaWtlbHkgY2hlY2tzIGZvciBhIHJlc3BvbnNlIG11bHRpcGxlIHRpbWVzLiBUaGlzIGlzIHByb2JhYmx5IHRvIG1ha2Ugc3VyZSB0aGUgZGV2aWNlIGhhcyBlbm91Z2ggdGltZSB0byByZXNwb25kIG9yIGNvbXBsZXRlIGludGVybmFsIG9wZXJhdGlvbnMuIElmIG5vIHJlc3BvbnNlLCB0aGVuIGAtRU5PREVWYCBpcyByZXR1cm5lZC4KClRoZSBleGlzdGluZyBgaTJjX21paV9pbml0X3JvbGxiYWxsYCBmdW5jdGlvbiBpcyB1cGRhdGVkIHRvIGNhbGwgYGkyY19taWlfcHJvYmVfcm9sbGJhbGxgLiBJdCBhbHNvIGFwcGVhcnMgdGhlcmUmIzM5O3MgYSBtb3JlIGNhcmVmdWwgY2hlY2sgZm9yIGVycm9ycyBub3csIHdpdGggYSByZXR1cm4gY29kZSBvZiBgLUVOT0RFVmAgYmVpbmcgaGFuZGxlZCBleHBsaWNpdGx5LCB3aGljaCBpcyBnb29kLiBUaGVyZSBpcyBhbHNvIGFuIGFkZGl0aW9uYWwgY2hlY2sgZm9yIGAtRU5PREVWYCBkdXJpbmcgdGhlIE1ESU8gYnVzIGFsbG9jYXRpb24uCgpOb3cgSSBhbSBnb2luZyBpbnRvIGBzZnAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIFNGUCBtb2R1bGUgaGFuZGxpbmcgb2NjdXJzLiBJIG5vdGUgc29tZSBuZXcgZW50cmllcyBpbiBgc2ZwX3F1aXJrc1tdYCwgc3BlY2lmaWNhbGx5IGZvciBtb2R1bGVzIHdpdGggJiMzNDtTRlAtMTBHLVQtSSYjMzQ7IGFuZCAmIzM0O1NGUC0xMEctVCYjMzQ7LiBUaGVyZSYjMzk7cyBhbHNvIGBzZnBfZml4dXBfcm9sbGJhbGxgIGJlaW5nIHVzZWQgYXMgYSBmaXh1cCBmdW5jdGlvbi4gVGhlcmUgYWxzbyBhcHBlYXJzIHRvIGJlIGFuIGFkZGl0aW9uIHRvIGBzZnBfc21fYWRkX21kaW9fYnVzYCB0byBoYW5kbGUgYC1FTk9ERVZgIGR1cmluZyB0aGUgTURJTyBidXMgY3JlYXRpb24uIFRoaXMgaXMgZ29vZDogaWYgdGhlIE1ESU8gYnVzIGNyZWF0aW9uIGZhaWxzLCB0aGUgY29kZSB3aWxsIG5vdyBzZXQgYHNmcC0mZ3Q7bWRpb19wcm90b2NvbGAgdG8gYE1ESU9fSTJDX05PTkVgLCBhbmQgY29udGludWVzIHdpdGhvdXQgdGhlIE1ESU8gYnVzLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvci4KCk92ZXJhbGwsIGl0IHNlZW1zIHRoaXMgaXMgYWJvdXQgbW9yZSByb2J1c3RseSBzdXBwb3J0aW5nIFJvbGxiYWxsLWJhc2VkIGNvcHBlciBTRlAmIzQzOyBtb2R1bGVzLiBUaGUgY29kZSBpcyB0YWtpbmcgY2FyZSB0byBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBSb2xsYmFsbCBkZXZpY2UgYmVmb3JlIGFzc3VtaW5nIGl0JiMzOTtzIHRoZXJlLiBUaGUgYWRkaXRpb24gb2YgdGhlIG5ldyBwcm9iZSBmdW5jdGlvbiBhbmQgdGhlIGltcHJvdmVkIGVycm9yIGhhbmRsaW5nLCBzaG93IHRoYXQgdGhlIHBhdGNoIGF0dGVtcHRzIHRvIG1hbmFnZSB0aGUgUm9sbGJhbGwgY29ubmVjdGlvbiBpbiBhIG1vcmUgY29udHJvbGxlZCBtYW5uZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9maXh1cF9yb2xsYmFsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmM9NDA2PXN0YXRpYyB2b2lkIHNmcF9maXh1cF8xMGdiYXNldF8zMG0oc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy00MTEtXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NDEyOnN0YXRpYyB2b2lkIHNmcF9maXh1cF9yb2xsYmFsbChzdHJ1Y3Qgc2ZwICpzZnApXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDEzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDIzLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjQyNDpzdGF0aWMgdm9pZCBzZnBfZml4dXBfcm9sbGJhbGxfd2FpdDRzKHN0cnVjdCBzZnAgKnNmcClcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy00MjUte1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjQyNjpcdHNmcF9maXh1cF9yb2xsYmFsbChzZnApO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQyNy1cbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9NDM1PXN0YXRpYyB2b2lkIHNmcF9maXh1cF9mc18xMGd0KHN0cnVjdCBzZnAgKnNmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDM3LVx0c2ZwX2ZpeHVwXzEwZ2Jhc2V0XzMwbShzZnApO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjQzODpcdHNmcF9maXh1cF9yb2xsYmFsbF93YWl0NHMoc2ZwKTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy00MzktfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz00NTA9c3RhdGljIHZvaWQgc2ZwX2ZpeHVwX3BvdHJvbihzdHJ1Y3Qgc2ZwICpzZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQ2MS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo0NjI6c3RhdGljIHZvaWQgc2ZwX2ZpeHVwX3JvbGxiYWxsX2NjKHN0cnVjdCBzZnAgKnNmcClcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy00NjMte1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjQ2NDpcdHNmcF9maXh1cF9yb2xsYmFsbChzZnApO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQ2NS1cbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9NTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNTQyLVx0Ly8gRkxZUFJPIFNGUC0xMEdULUNTLTMwTSB1c2VzIFJvbGxiYWxsIHByb3RvY29sIHRvIHRhbGsgdG8gdGhlIFBIWS5cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo1NDM6XHRTRlBfUVVJUktfRihcJiMzNDtGTFlQUk9cJiMzNDssIFwmIzM0O1NGUC0xMEdULUNTLTMwTVwmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsKSxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy01NDQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTU1MS1cdC8vIHRvIHRoZSBQSFkgYW5kIG5lZWRzIDQgc2VjIHdhaXQgYmVmb3JlIHByb2JpbmcgdGhlIFBIWS5cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo1NTI6XHRTRlBfUVVJUktfRihcJiMzNDtGU1wmIzM0OywgXCYjMzQ7U0ZQLTIuNUctVFwmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsX3dhaXQ0cyksXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NTUzOlx0U0ZQX1FVSVJLX0YoXCYjMzQ7RlNcJiMzNDssIFwmIzM0O1NGUC0xMEdNLVRcJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbF93YWl0NHMpLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTU1NC1cbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjEzLVx0Ly8gSE9SQUNPIEhDLTEwR0UtMTEzQyB1c2VzIFJvbGxiYWxsIHByb3RvY29sIHRvIHRhbGsgdG8gdGhlIFBIWS5cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2MTQ6XHRTRlBfUVVJUktfRihcJiMzNDtPRU1cJiMzNDssIFwmIzM0O0hDLTEwR0UtMTEzQ1wmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsKSxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy02MTUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYxOC1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2MTk6XHRTRlBfUVVJUktfRihcJiMzNDtPRU1cJiMzNDssIFwmIzM0O1NGUC0xMEctVC1JXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYyMDpcdFNGUF9RVUlSS19GKFwmIzM0O09FTVwmIzM0OywgXCYjMzQ7U0ZQLTEwRy1UXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYyMS1cdFNGUF9RVUlSS19TKFwmIzM0O09FTVwmIzM0OywgXCYjMzQ7U0ZQLTIuNUctVFwmIzM0Oywgc2ZwX3F1aXJrX29lbV8yXzVnKSxcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjI1LVx0U0ZQX1FVSVJLX1MoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtMi41Ry1MSDIwLUFcJiMzNDssIHNmcF9xdWlya18yNTAwYmFzZXgpLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYyNjpcdFNGUF9RVUlSS19GKFwmIzM0O09FTVwmIzM0OywgXCYjMzQ7UlRTRlAtMTBcJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NjI3Olx0U0ZQX1FVSVJLX0YoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtSVFNGUC0xMEdcJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjI4LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy02MzUtXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NjM2Olx0U0ZQX1FVSVJLX0YoXCYjMzQ7VHVycmlzXCYjMzQ7LCBcJiMzNDtSVFNGUC0yLjVHXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYzNzpcdFNGUF9RVUlSS19GKFwmIzM0O1R1cnJpc1wmIzM0OywgXCYjMzQ7UlRTRlAtMTBcJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbCksXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NjM4Olx0U0ZQX1FVSVJLX0YoXCYjMzQ7VHVycmlzXCYjMzQ7LCBcJiMzNDtSVFNGUC0xMEdcJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbCksXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU2MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0ZQIERyaXZlciBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgc28gdGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIGEgcGF0Y2ggaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBhbmQgdGhlIGNydXggb2YgdGhhdCBoaW5nZXMgb24gd2hldGhlciB0aGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIGRpZyBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0ZQIGRyaXZlciBnZXRzIGJvdW5kIGFuZCBjcmVhdGVkLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgLCB3aGljaCBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aGUgY29yZSBsb2dpYy4gQmluZ28hIFRoZXJlJiMzOTtzIGBzZnBfcHJvYmVgLCBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgc2VlIGluIHRoZSBgc2ZwX29mX21hdGNoYCB0YWJsZSwgaXQgbG9va3MgbGlrZSBpdCBzdXBwb3J0cyAmIzM0O3NmZixzZnAmIzM0OyBhbmQgJiMzNDtzZmYsc2ZmJiMzNDsgY29tcGF0aWJsZSBkZXZpY2VzLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGRyaXZlciBpcyByZWFjaGFibGUuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB0aGF0IGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSDigJMgYXJlIGEgbm8tZ28gZm9yIGZ1enppbmcuIEFsc28sIFBDSSBkZXZpY2UgcmVtb3ZhbHMgYW5kIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIGFyZSBvdXQuIFNvLCBpcyBgc2ZwYCBvciBgbWRpby1pMmNgIHJlYWNoYWJsZSB3aXRob3V0IGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZT8KClRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIEkgY2FuIGluc3RhbnRpYXRlIGFuIFNGUCBjYWdlIG9yIE1ESU8gSTJDIGJ1cyBpbiBhIFFFTVUvdmlydHVhbCBlbnZpcm9ubWVudC4gQ2FuIHBsYXRmb3JtIGRldmljZXMgd2l0aCBgb2ZfbWF0Y2hgIGJlIGNyZWF0ZWQ/IENhbiBJIGNyZWF0ZSBgc2ZwYCB3aXRob3V0IGEgZGV2aWNlIHRyZWUsIG9yIHdpdGggZGV2aWNlIHRyZWUgb3ZlcmxheXMsIG9yIGV2ZW4gdXNpbmcgc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyIGluIFFFTVUgeDg2L2FybTY0PyBUaGF0JiMzOTtzIHRoZSBxdWVzdGlvbiBJIGhhdmUgdG8gYW5zd2VyLiBJIG5lZWQgdG8gY2hlY2sgaWYgU3l6a2FsbGVyIG9yIFFFTVUgaGFzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIGBzZnBgIG9yIGBtZGlvLWkyY2AuCgpUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gZG8gYSBnbG9iYWwgc2VhcmNoLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGFueSBjYWxscyB0byBgbWRpb19pMmNfYWxsb2NgLCBgc2ZwX2FsbG9jYCwgb3IgZGlyZWN0bHkgdG8gYHNmcF9wcm9iZWAuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHZpZXcgb2YgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGFjdHVhbGx5IHVzZWQgYW5kLCBjb25zZXF1ZW50bHksIHdoZXRoZXIgdGhleSBhcmUgbGlrZWx5IHRvIGJlIHJlYWNoZWQgZHVyaW5nIHN0YW5kYXJkIFFFTVUgLyB2aXJ0dWFsIGVudmlyb25tZW50IG9wZXJhdGlvbnMuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBvbiBhIGNvZGUgcGF0aCB0aGF0JiMzOTtzIHJlYXNvbmFibHkgcmVhY2hhYmxlLCB0aHVzIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYFdvcnRoRnV6emluZz10cnVlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb19pMmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jPTQ2Nj1zdGF0aWMgaW50IGkyY19taWlfaW5pdF9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNDkxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjQ5MjpzdGF0aWMgYm9vbCBtZGlvX2kyY19jaGVja19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjQ5MzpcdFx0XHRcdFx0IGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNDk0LXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjUwNTpzdHJ1Y3QgbWlpX2J1cyAqbWRpb19pMmNfYWxsb2Moc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1MDY6XHRcdFx0ICAgICAgIGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA3LXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTEwLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjUxMTpcdGlmICghbWRpb19pMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShpMmMsIHByb3RvY29sKSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01MTItXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTQtfVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjU1NTpFWFBPUlRfU1lNQk9MX0dQTChtZGlvX2kyY19hbGxvYyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTU2LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yNDE9c3RydWN0IHNmcCB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI0NS1cdHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjI0NjpcdGVudW0gbWRpb19pMmNfcHJvdG8gbWRpb19wcm90b2NvbDtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yNDctXHRzdHJ1Y3QgcGh5X2RldmljZSAqbW9kX3BoeTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9OTcxPXN0YXRpYyBpbnQgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3Qgc2ZwICpzZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTk3NS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo5NzY6XHRpMmNfbWlpID0gbWRpb19pMmNfYWxsb2Moc2ZwLVx1MDAzZWRldiwgc2ZwLVx1MDAzZWkyYywgc2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wpO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTk3Ny1cdGlmIChJU19FUlIoaTJjX21paSkpXG4tLVxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg9MTI9c3RydWN0IG1paV9idXM7XG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaC0xMy1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjE0OmVudW0gbWRpb19pMmNfcHJvdG8ge1xuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmgtMTUtXHRNRElPX0kyQ19OT05FLFxuLS1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIwLVxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg6MjE6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaDoyMjpcdFx0XHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbCk7XG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaC0yMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3MTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiB0aGUgU0ZQIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHNmcGAgZHJpdmVyIGNvZGUsIGFuZCBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyBgbWRpb19pMmNfYWxsb2NgIGlzIGV4cG9ydGVkLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIG9ubHkgZnJvbSBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZWAgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AuIEFscmlnaHQsIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgc2hvdWxkIGZvbGxvdyB0aGUgY2hhaW4uIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgYHNmcF9pMmNfbWRpb2J1c19jcmVhdGVgLiBBaCwgaXQmIzM5O3MgYHNmcF9zbV9hZGRfbWRpb19idXNgLiBHb29kLCBnb29kLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgc3RlcCBiYWNrIGFuZCBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBTRlAgZGV2aWNlIGlzIHByb2JlZCBhbmQgaG93IGl0cyBvcGVyYXRpb25zIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIGl0c2VsZi4KClNvLCB3aGVuIGlzIGBzZnBfcHJvYmVgIGFjdHVhbGx5IGdldHRpbmcgY2FsbGVkPyBSaWdodCwgSSBzZWUgaXQuIFRoZSBgc2ZwYCBkcml2ZXIgcmVnaXN0ZXJzIGFzIGEgcGxhdGZvcm0gZHJpdmVyLiBJdCYjMzk7cyBsb29raW5nIGZvciBkZXZpY2VzIHdpdGggdGhlICYjMzQ7c2ZmLHNmcCYjMzQ7IGFuZCAmIzM0O3NmZixzZmYmIzM0OyBjb21wYXRpYmxlcy4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gQW5kIHdoaWxlIEkmIzM5O20gYXQgaXQsIEkgc2hvdWxkIGFsc28gY2hlY2sgb3V0IGBwaHlfc2ZwX3Byb2JlYCBpbiBgcGh5X2RldmljZS5jYC4gQWx3YXlzIGdvb2QgdG8gaGF2ZSBhIGxvb2sgYXQgdGhlIFBIWSBsYXllciwgaXQgbWF5IHNob3cgb3RoZXIgaW50ZXJhY3Rpb25zIGFuZCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfc2ZwX3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY3Nj1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwMy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNDogKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDc6c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTczNy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTczODogKiBwaHlfc2ZwX3JlbGVhc2UgLSByZWxlYXNlIHJlc291cmNlcyBzZXQgdXAgYnkgcGh5X3NmcF9wcm9iZSgpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MzktICogQHBoeWRldjogdGhlIFBIWSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTc0MC0gKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzQxOiAqIFJlbGVhc2UgdGhlIFNGUCByZXNvdXJjZXMgc2V0IHVwIGJ5IGEgc3VjY2Vzc2Z1bCBwaHlfc2ZwX3Byb2JlKCkuIFVucmVnaXN0ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTc0Mi0gKiB0aGUgdXBzdHJlYW0gYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIHBoeV9wb3J0LCBzbyBTRlAgdXBzdHJlYW0gY2FsbGJhY2tzIGNhbm5vdFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzU2NT1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3OS1cdGlmICghcGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4pIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU4MDpcdFx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTgxLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY5NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgd2hhdCB0aGUgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGFjY29tcGxpc2guIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGxhbmRzY2FwZSBvZiBTRlAgbW9kdWxlcywgYW5kIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgc3BlY2lmaWNzIGhlcmUuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHBoeXNpY2FsIGxheWVyIGludGVyZmFjZSBhbmQgbGlrZWx5IGludm9sdmVzIGRldGVjdGluZyBhbmQgY29uZmlndXJpbmcgYW4gU0ZQIG1vZHVsZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBzdGVwcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgYW5kIHdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpdCYjMzk7cyBnb3QuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQmIzM5O3MgZm9sbG93aW5nIGJlc3QgcHJhY3RpY2VzIGZvciB0aGlzIHR5cGUgb2YgcHJvYmUgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IFNGUCB0eXBlcyBhbmQgcG90ZW50aWFsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgaWYgaXQgaW5jbHVkZXMgYW55IHZlbmRvci1zcGVjaWZpYyBoYW5kbGluZy4gVGhpcyBpcyByaWdodCBpbiBteSB3aGVlbGhvdXNlLCBzbyBJJiMzOTttIGV4Y2l0ZWQgdG8gZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcwNDpcdCAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcbjE3MDU6XHQgKiBAcGh5ZGV2OiBQb2ludGVyIHRvIHBoeV9kZXZpY2VcbjE3MDY6XHQgKi9cbjE3MDc6XHRzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjE3MDg6XHR7XG4xNzA5Olx0XHRzdHJ1Y3Qgc2ZwX2J1cyAqYnVzO1xuMTcxMDpcdFx0aW50IHJldCA9IDA7XG4xNzExOlx0XG4xNzEyOlx0XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSkge1xuMTcxMzpcdFx0XHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpO1xuMTcxNDpcdFx0XHRpZiAoSVNfRVJSKGJ1cykpXG4xNzE1Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnVzKTtcbjE3MTY6XHRcbjE3MTc6XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBidXM7XG4xNzE4Olx0XG4xNzE5Olx0XHRcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG4xNzIwOlx0XHRcdHNmcF9idXNfcHV0KGJ1cyk7XG4xNzIxOlx0XG4xNzIyOlx0XHRcdGlmIChyZXQpXG4xNzIzOlx0XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuMTcyNDpcdFx0fVxuMTcyNTpcdFxuMTcyNjpcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKSB7XG4xNzI3Olx0XHRcdHJldCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xuMTcyODpcdFx0XHRpZiAocmV0KSB7XG4xNzI5Olx0XHRcdFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGh5ZGV2LVx1MDAzZXNmcF9idXMpO1xuMTczMDpcdFx0XHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbjE3MzE6XHRcdFx0fVxuMTczMjpcdFx0fVxuMTczMzpcdFxuMTczNDpcdFx0cmV0dXJuIHJldDtcbjE3MzU6XHR9XG4xNzM2Olx0XG4xNzM3Olx0LyoqXG4xNzM4Olx0ICogcGh5X3NmcF9yZWxlYXNlIC0gcmVsZWFzZSByZXNvdXJjZXMgc2V0IHVwIGJ5IHBoeV9zZnBfcHJvYmUoKVxuMTczOTpcdCAqIEBwaHlkZXY6IHRoZSBQSFkgZGV2aWNlXG4xNzQwOlx0ICpcbjE3NDE6XHQgKiBSZWxlYXNlIHRoZSBTRlAgcmVzb3VyY2VzIHNldCB1cCBieSBhIHN1Y2Nlc3NmdWwgcGh5X3NmcF9wcm9iZSgpLiBVbnJlZ2lzdGVyXG4xNzQyOlx0ICogdGhlIHVwc3RyZWFtIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBwaHlfcG9ydCwgc28gU0ZQIHVwc3RyZWFtIGNhbGxiYWNrcyBjYW5ub3RcbjE3NDM6XHQgKiByYWNlIHdpdGggcG9ydCBkZXN0cnVjdGlvbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MzcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUUVNVSAvIFNGUCBDb251bmRydW0qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkLiBDYW4gSSBldmVuICp0aGluayogYWJvdXQgY3JlYXRpbmcgU0ZQIGNhZ2VzIG9yIGRldmljZXMgaW4gUUVNVT8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgcXVlc3Rpb24uIEJ1dCB3YWl0LCBkb2VzIFFFTVUgYWN0dWFsbHkgKmVtdWxhdGUqIHRoZSBwaHlzaWNhbCBTRlAgY2FnZXMgdGhlbXNlbHZlcywgb3IgaXMgaXQgbW9yZSBmb2N1c2VkIG9uIGVtdWxhdGluZyB0aGUgSTJDIGludGVyZmFjZSBvZiBTRlAgbW9kdWxlcz8gT3IsIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc3RhbmRhcmQgaGFyZHdhcmUgcmVwcmVzZW50YXRpb24gdGhhdCBRRU1VIHByb3ZpZGVzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LgoKTGV0IG1lIGJyZWFrIGRvd24gdGhlIGV4aXN0aW5nIGNyaXRlcmlhIHRvIHNlZSBpZiBJJiMzOTttIGV2ZW4gaW4gdGhlIGJhbGxwYXJrLiBUaGUgY3JpdGVyaWEgZm9yIFdvcnRoRnV6emluZz1mYWxzZSBhcmUgcHJldHR5IHNwZWNpZmljLiBNb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50cywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHRob3NlIGFyZSBhbGwgb2J2aW91cyBmbGFncy4gQnV0IHdoYXQgYWJvdXQgdGhlIHJlYWxseSBzcGVjaWZpYyBleGFtcGxlcz8gUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcmVhbCBoYXJkd2FyZT8gT2theSwgdGhhdCBoZWxwcyB0byBjbGFyaWZ5IHRoZSBib3VuZGFyaWVzLiBBbmQgdGhlbiB0aGUgLnJlbW92ZS8uc2h1dGRvd24gY2FsbGJhY2tzIGR1cmluZyB1bmJpbmQgb3BlcmF0aW9ucywgdGhhdCYjMzk7cyBub3Qgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKTm93LCBmb2N1c2luZyBiYWNrLCB3aGF0IGFib3V0IHRoZSBJMkMvTURJTy9TRlAgc2l0dWF0aW9uPyBUaGlzIGZlZWxzIGxpa2UgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLiBDYW4gSTJDIGRldmljZXMgb3IgU0ZQIG1vZHVsZXMgYmUgYWNjZXNzZWQgd2l0aGluIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIGF0IGFsbD8gSG93IGRvZXMgUUVNVSBhbmQgTGludXggZ2VuZXJhbGx5IGRlYWwgd2l0aCB0aGUgaW50ZXJmYWNlIGJldHdlZW4gSTJDIGFuZCBTRlA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuCgpJcyBTRlAgaGFuZGxlZCBhcyBhbiAmIzM0O09GJiMzNDsgKE9wZW4gRmlybXdhcmUpIG9yIHBsYXRmb3JtIGRldmljZT8gRG9lcyBpdCByZXF1aXJlIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciBhbiBTRlAgY2FnZSwgYWxvbmdzaWRlIHRoZSBwaHlzaWNhbCBvciBlbXVsYXRlZCBJMkMgdHJhbnNjZWl2ZXIgbW9kdWxlPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0JiMzOTtzIHRoZSBzZXR1cC4gQ2FuIEkganVzdCBpbnN0YW50aWF0ZSBhbiBTRlAgdXNpbmcgaTJjLWRldiAvIGkyYy1zdHViLCBvciBhbSBJIHN0dWNrIHdpdGggYSBwbGF0Zm9ybSBkZXZpY2Ugc2NlbmFyaW8/IEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciB0aG9zZSBkcml2ZXJzLCBvciBidXNlcywgb3IgYWxsb2MgZnVuY3Rpb25zOiBgc2ZwX2RyaXZlcmAsIGBzZnBfYnVzYCwgYHNmcF9hbGxvY2AgbWlnaHQgYmUgdGhlIGtleXdvcmRzIEkgbmVlZC4gSSBob3BlIEkgY2FuIG1ha2UgdGhpcyBmdXp6YWJsZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwX2J1c19hZGRfdXBzdHJlYW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzA3PXN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxOC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcxOTpcdFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcyMC1cdFx0c2ZwX2J1c19wdXQoYnVzKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM1NjU9c3RhdGljIGludCBwaHlfc2V0dXBfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1NzYtXHQgKiBiaW5kaW5nIG9jY3VycyB3aXRoIFJUTkwgaGVscCwgd2hpY2ggd2lsbCBkZWFkbG9jayB0aGUgY2FsbCB0b1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTc3Olx0ICogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKS5cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3OC1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTc2OD1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE3ODQtXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE3ODU6XHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBsLCBcdTAwMjZzZnBfcGh5bGlua19vcHMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNzg2LVx0c2ZwX2J1c19wdXQoYnVzKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jPTYzNT1FWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX2ZpbmRfZndub2RlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTYzNy0vKipcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmM6NjM4OiAqIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgLSBwYXJzZSBhbmQgcmVnaXN0ZXIgdGhlIG5laWdoYm91cmluZyBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMtNjM5LSAqIEBidXM6IHRoZSBcdTAwMjZzdHJ1Y3Qgc2ZwX2J1cyBmb3VuZCB2aWEgc2ZwX2J1c19maW5kX2Z3bm9kZSgpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYy02NTYtICovXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jOjY1NzppbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY1OC1cdFx0XHQgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcylcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY4NC19XG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jOjY4NTpFWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX2FkZF91cHN0cmVhbSk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY4Ni1cbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY5MS0gKiBEZWxldGUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdXBzdHJlYW0gY29ubmVjdGlvbiBmb3IgdGhlIFNGUFxuZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYzo2OTI6ICogbW9kdWxlLiBAYnVzIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgYnkgc2ZwX2J1c19hZGRfdXBzdHJlYW0oKS5cbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMtNjkzLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvc2ZwLmg9NTkzPXN0cnVjdCBzZnBfYnVzICpzZnBfYnVzX2ZpbmRfZndub2RlKGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpO1xuaW5jbHVkZS9saW51eC9zZnAuaDo1OTQ6aW50IHNmcF9idXNfYWRkX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMsIHZvaWQgKnVwc3RyZWFtLFxuaW5jbHVkZS9saW51eC9zZnAuaC01OTUtXHRcdFx0IGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpO1xuLS1cbmluY2x1ZGUvbGludXgvc2ZwLmg9NjQ4PXNmcF9idXNfZmluZF9md25vZGUoY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTY1Mi1cbmluY2x1ZGUvbGludXgvc2ZwLmg6NjUzOnN0YXRpYyBpbmxpbmUgaW50IHNmcF9idXNfYWRkX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMsIHZvaWQgKnVwc3RyZWFtLFxuaW5jbHVkZS9saW51eC9zZnAuaC02NTQtXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTRlAgQ2FnZXMgYW5kIFJvbGxCYWxsIFBIWXM6IEEgRmVhc2liaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nIFNGUCBjYWdlcyBhbmQgZGV2aWNlcy4gQ2FuIHRoaXMgZXZlbiBiZSBkb25lPyBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFNGUCBhY3R1YWxseSB3b3Jrcy4gQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bjogQSBjYWdlIGlzIGRlY2xhcmVkIGluIHRoZSBEZXZpY2UgVHJlZSwgbWF5YmUgdXNpbmcgT0Ygb24gQVJNLCBNSVBTLCBvciBBQ1BJIGJvYXJkcy4gVGhlIGRyaXZlciBiaW5kcyB0byB0aGUgcGxhdGZvcm0gZGV2aWNlLCBhY2Nlc3NpbmcgYW4gSTJDIGJ1cyBsaW5rZWQgdG8gdGhlIGNhZ2UuIFdoZW4gYSBtb2R1bGUgcGx1Z3MgaW4sIHRoZSBzdGF0ZSBtYWNoaW5lIHN0YXJ0cywgcmVhZGluZyB0aGUgRUVQUk9NIHZpYSBJMkMgYXQgMHg1MCBhbmQgMHg1MS4gSWYgdGhlIEVFUFJPTSBtYXRjaGVzIGEgUm9sbEJhbGwgcXVpcmssIHRoZSBgbWRpb19wcm90b2NvbGAgaXMgc2V0LiBUaGVuLCB3ZSBzZWUgYHNmcF9zbV9hZGRfbWRpb19idXNgIGFuZCBgbWRpb19pMmNfYWxsb2NgLCB1bHRpbWF0ZWx5IGxlYWRpbmcgdG8gYGkyY19taWlfcHJvYmVfcm9sbGJhbGxgLgoKQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFjaCB0aGlzIGluIHN5emthbGxlciBvciBRRU1VPyBBbmQgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5LiBEb2VzIHN0YW5kYXJkIFFFTVUgKHg4Nl82NCBvciBhcm02NCkgZXZlbiBlbXVsYXRlIGFuIFNGUCBjYWdlIG9yIFJvbGxCYWxsIFBIWT8gTm8sIGl0IGRvZXNuJiMzOTt0LiBPa2F5LCB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuIEJ1dCB3YWl0LCB0aGVyZSYjMzk7cyBhIGd1aWRlbGluZSBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHdvcnRoaW5lc3MgZm9yIGZ1enppbmcuIEl0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0JiMzOTtzIGEgbWFqb3IgY29uc2lkZXJhdGlvbi4gU3R1ZmYgbGlrZSBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24gZmxvdywgb3IgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIFFFTVUgYXJlIG91dC4gU28sIGRvZXMgU0ZQIG9yIE1ESU8tSTJDICphY3R1YWxseSogaGF2ZSBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGhvb2tzPwoKUmlnaHQsIGxldCYjMzk7cyBsb29rIGF0IHN5emthbGxlci4gRG9lcyBpdCBoYXZlIGFueSBkZXNjcmlwdGlvbnMgZm9yIHRoaW5ncyBsaWtlIG1kaW8sIHNmcCwgcGh5bGluaywgb3IgZXRodG9vbD8gU3l6a2FsbGVyIHJ1bnMgaW4gUUVNVSAoeDg2XzY0LCBhcm02NCkgb3IgR0NFLiBDYW4gSSBpbnN0YW50aWF0ZSBTRlAgY2FnZXMgaW4gdGhvc2UgZW52aXJvbm1lbnRzPyBJIG5lZWQgdG8gY2hlY2sgZm9yIHN5c2ZzIG9yIGlvY3RsIGludGVyZmFjZXMgdGhhdCB3b3VsZCBsZXQgbWUgaW5zdGFudGlhdGUgcGxhdGZvcm0gZGV2aWNlcywgb3Igc3BlY2lmaWNhbGx5IFNGUCBvciBwaHlsaW5rLiBUaGUgU0ZQIGRyaXZlciBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0IG1hdGNoZXMgdGhlIE9GIG5vZGUgd2l0aCBgY29tcGF0aWJsZSA9ICYjMzQ7c2ZmLHNmcCYjMzQ7YC4gVGhlbiB0aGVyZSYjMzk7cyBwbGF0Zm9ybSBkZXZpY2VzIHdpdGhvdXQgYW4gT0YgZGV2aWNlIHRyZWUgbm9kZS4gSW4gYHNmcF9wcm9iZWAsIGBzZnBfaTJjX2dldChzZnApYCBpcyBjYWxsZWQuIExldCYjMzk7cyBzZWUgd2hhdCAqdGhhdCogZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyODA6XHRcdFx0bWRpb2J1c191bnJlZ2lzdGVyKHNmcC1cdTAwM2VpMmNfbWlpKTtcbjMyODE6XHRcdFx0bWRpb2J1c19mcmVlKHNmcC1cdTAwM2VpMmNfbWlpKTtcbjMyODI6XHRcdH1cbjMyODM6XHRcdGlmIChzZnAtXHUwMDNlaTJjKVxuMzI4NDpcdFx0XHRpMmNfcHV0X2FkYXB0ZXIoc2ZwLVx1MDAzZWkyYyk7XG4zMjg1Olx0XHRrZnJlZShzZnApO1xuMzI4NjpcdH1cbjMyODc6XHRcbjMyODg6XHRzdGF0aWMgaW50IHNmcF9pMmNfZ2V0KHN0cnVjdCBzZnAgKnNmcClcbjMyODk6XHR7XG4zMjkwOlx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqaDtcbjMyOTE6XHRcdHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjO1xuMzI5MjpcdFx0aW50IGVycjtcbjMyOTM6XHRcbjMyOTQ6XHRcdGggPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2X2Z3bm9kZShzZnAtXHUwMDNlZGV2KSwgXCYjMzQ7aTJjLWJ1c1wmIzM0OywgMCk7XG4zMjk1Olx0XHRpZiAoSVNfRVJSKGgpKSB7XG4zMjk2Olx0XHRcdGRldl9lcnIoc2ZwLVx1MDAzZWRldiwgXCYjMzQ7bWlzc2luZyAmIzM5O2kyYy1idXMmIzM5OyBwcm9wZXJ0eVxcblwmIzM0Oyk7XG4zMjk3Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMzI5ODpcdFx0fVxuMzI5OTpcdFxuMzMwMDpcdFx0aTJjID0gaTJjX2dldF9hZGFwdGVyX2J5X2Z3bm9kZShoKTtcbjMzMDE6XHRcdGlmICghaTJjKSB7XG4zMzAyOlx0XHRcdGVyciA9IC1FUFJPQkVfREVGRVI7XG4zMzAzOlx0XHRcdGdvdG8gcHV0O1xuMzMwNDpcdFx0fVxuMzMwNTpcdFxuMzMwNjpcdFx0ZXJyID0gc2ZwX2kyY19jb25maWd1cmUoc2ZwLCBpMmMpO1xuMzMwNzpcdFx0aWYgKGVycilcbjMzMDg6XHRcdFx0aTJjX3B1dF9hZGFwdGVyKGkyYyk7XG4zMzA5Olx0cHV0OlxuMzMxMDpcdFx0Zndub2RlX2hhbmRsZV9wdXQoaCk7XG4zMzExOlx0XHRyZXR1cm4gZXJyO1xuMzMxMjpcdH1cbjMzMTM6XHRcbjMzMTQ6XHRzdGF0aWMgaW50IHNmcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuMzMxNTpcdHtcbjMzMTY6XHRcdGNvbnN0IHN0cnVjdCBzZmZfZGF0YSAqc2ZmO1xuMzMxNzpcdFx0Y2hhciAqc2ZwX2lycV9uYW1lO1xuMzMxODpcdFx0c3RydWN0IHNmcCAqc2ZwO1xuMzMxOTpcdFx0aW50IGVyciwgaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0ZQL0kyQyBQYXRjaCYjMzk7cyBXb3J0aGluZXNzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGBzZnBfaTJjX2dldGAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgZGlyZWN0IGNhbGwgdG8gYGZ3bm9kZV9maW5kX3JlZmVyZW5jZWAgdG8gbG9jYXRlIGFuIEkyQyBhZGFwdGVyLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlOiB0aGlzIGltcGxpZXMgYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIHNldHVwIGlzIHJlcXVpcmVkLiBXZSYjMzk7cmUgdGFsa2luZyBPcGVuRmlybXdhcmUgKERldmljZSBUcmVlKSBvciBBQ1BJIHdpdGggYSBwcm9wZXJseSBkZWZpbmVkIEkyQyBidXMgbm9kZSwgYW4gdXBzdHJlYW0gUEhZL25ldHdvcmsgZGV2aWNlLCBhbmQgYSAqcmVhbCogb3IgZW11bGF0ZWQgU0ZQIHRyYW5zY2VpdmVyIHJlc3BvbmRpbmcgdG8gSTJDIGNvbW11bmljYXRpb24gKEVFUFJPTSBxdWVyaWVzLCBSb2xsQmFsbCBwcm90b2NvbCkuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0IGEgbWludXRlLCBjYW4gdGhpcyBldmVuIGJlIHJlYWxpc3RpY2FsbHkgdGVzdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQ/JiMzNDsgRnJvbSBleHBlcmllbmNlLCBJIGtub3cgdGhhdCBuZWl0aGVyIFFFTVUgbm9yIEdDRSBvZmZlcnMgYW55IHN0YW5kYXJkIHN1cHBvcnQgZm9yIFNGUCBjYWdlIGVtdWxhdGlvbiwgb3IgYW55dGhpbmcgdGhhdCB3b3VsZCBzaW11bGF0ZSB0aGUgbmVjZXNzYXJ5IFJvbGxiYWxsIEkyQyBQSFkuIFRoaXMgc3VnZ2VzdHMgdGhpcyBjb2RlIHBhdGggaXNuJiMzOTt0IGVhc2lseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZnV6emluZyBndWlkZWxpbmVzIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy4gT2theSwgdGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGNoYW5nZXMgdGhhdCBpbnZvbHZlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCBRRU1VL0dDRSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGVkIGhhcmR3YXJlLCBzaG91bGQgcmVzdWx0IGluIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIGZpdHMgdGhlIGJpbGwgZXhhY3RseS4KClRvIGJlIHRob3JvdWdoLCBsZXQmIzM5O3MgbG9vayBmb3Igb3RoZXIgdXNlcyBvZiBgbWRpby1pMmNgIGFuZCBgc2ZwYCBpbiB0aGUgbmV0d29ya2luZyBjb3JlIG9yIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgY29udGV4dC4gV2hpbGUgdGhlIGNvcmUgY2hlY2sgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBvcmlnaW5hbCBsaW5lLCBsZXQmIzM5O3MgY29uZmlybSB0aGlzIGNvbmNsdXNpb24gYnkgYSBmdWxsIHNjYW4gb2YgdGhlIGNvZGUuIFRoaXMgd2lsbCBoZWxwIHVzIGNvbmZpcm0gbm8gb3RoZXIgcGFydHMgb2YgbmV0d29ya2luZyB1c2UgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLWkyYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtNQUlOVEFJTkVSUz0yNDkwNT1GOlx0ZHJpdmVycy9uZXQvcGh5L3NmcCpcbk1BSU5UQUlORVJTOjI0OTA2OkY6XHRpbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaFxuTUFJTlRBSU5FUlMtMjQ5MDctRjpcdGluY2x1ZGUvbGludXgvcGh5bGluay5oXG4tLVxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfTURJT19ISVNJX0ZFTUFDKVx0XHQmIzQzOz0gbWRpby1oaXNpLWZlbWFjLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX01ESU9fSTJDKVx0XHRcdCYjNDM7PSBtZGlvLWkyYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19NRElPX0lQUTQwMTkpXHRcdCYjNDM7PSBtZGlvLWlwcTQwMTkub1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjE0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8vbWRpby1pMmMuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTE1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6OTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvL21kaW8taTJjLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0xNTg9c3RhdGljIGNvbnN0IGVudW0gZ3Bpb2RfZmxhZ3MgZ3Bpb19mbGFnc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjAtLyogU0ZQIG1vZHVsZXMgYXBwZWFyIHRvIGFsd2F5cyBoYXZlIHRoZWlyIFBIWSBjb25maWd1cmVkIGZvciBidXMgYWRkcmVzc1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIyMTogKiAweDU2ICh3aGljaCB3aXRoIG1kaW8taTJjLCB0cmFuc2xhdGVzIHRvIGEgUEhZIGFkZHJlc3Mgb2YgMjIpLlxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMi0gKiBSb2xsQmFsbCBTRlBzIGFjY2VzcyBwaHkgdmlhIFNGUCBFbmhhbmNlZCBEaWdpdGFsIERpYWdub3N0aWMgSW50ZXJmYWNlXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjIzOiAqIHZpYSBhZGRyZXNzIDB4NTEgKG1kaW8taTJjIHdpbGwgdXNlIFJvbGxCYWxsIHByb3RvY29sIG9uIHRoaXMgYWRkcmVzcykuXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjI0LSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg5MwoJCQkJCQkJb3V0cHV0OiAxMjQKCQkJCQkJCXRob3VnaHRzOiA2MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXb3J0aGluZXNzIG9mIEZ1enppbmcgdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcmVhY2ggb2YgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBgbWRpb19pMmNgIGFuZCBgc2ZwYC4gTG9va2luZyBhdCB0aGUgY29kZWJhc2UsIGl0JiMzOTtzIGNsZWFyIGBtZGlvLWkyYy5jYCBpcyBjb25kaXRpb25hbCDigJMgaXQgb25seSBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19NRElPX0kyQ2AgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdWx0aW1hdGVseSBzZWxlY3RlZCBieSBgQ09ORklHX1NGUGAgaW4gdGhlIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgZmlsZS4gQW5kLCBgc2ZwLmNgIG9ubHkgZ2V0cyBsb2FkZWQvcHJvYmVkIHdoZW4gdGhlcmUmIzM5O3MgYW4gU0ZQIG5vZGUgaW4gdGhlIGRldmljZSB0cmVlIG9yIEFDUEkgd2l0aCBjZXJ0YWluIHByb3BlcnRpZXMgdGhhdCBjb25uZWN0cyB0byBhbiBJMkMgYnVzLiBFc3NlbnRpYWxseSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlLgoKTm93LCBmb2N1c2luZyBvbiAqdGhpcyogc3BlY2lmaWMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZG9pbmcgYSBmZXcgdGhpbmdzLiBGaXJzdCwgdGhlcmUmIzM5O3MgYSBuZXcgcXVpcmsgZm9yICYjMzQ7T0VNIFNGUC0xMEctVC1JJiMzNDsgY29wcGVyIHRyYW5zY2VpdmVycyDigJMgdGhhdCBzY3JlYW1zIGhhcmR3YXJlLXNwZWNpZmljLiBTZWNvbmQsIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBgLUVOT0RFVmAgZXJyb3IgZnJvbSBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZSgpYCwgd2hpY2ggaW52b2x2ZXMgc2V0dGluZyBgc2ZwLSZndDttZGlvX3Byb3RvY29sID0gTURJT19JMkNfTk9ORWAuIFRoaXJkLCBpdCYjMzk7cyBpbXBsZW1lbnRpbmcgYGkyY19taWlfcHJvYmVfcm9sbGJhbGwoKWAgdG8gY2hlY2sgZm9yIFJvbGxCYWxsIE1ESU8gcHJvdG9jb2wgc3VwcG9ydC4KClRoZSBjb21tb24gdGhyZWFkIGhlcmU/IEFsbCBvZiB0aGlzIGlzIHRpZWQgdG8gdGhlIHBoeXNpY2FsIGxheWVyIOKAkyBTRlAgY2FnZXMsIFNGUCYjNDM7IGNvcHBlciBtb2R1bGVzIGNvbm5lY3RlZCB2aWEgSTJDLCBhbmQgdGhlIFJvbGxCYWxsIHByb3RvY29sLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYGkyY19taWlfcHJvYmVfcm9sbGJhbGwoKWAgaXMgdHJ5aW5nIHRvIGRvIEkyQyByZWFkIGFuZCB3YWl0IGZvciBoYXJkd2FyZSBzcGVjaWZpYyByZXNwb25zZS4gVGhpcyBtZWFucyBpdCAqbmVlZHMqIHJlYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24uCgpTbywgdGhlIGtleSBpcyB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGV5IHN0YXRlIHRoYXQgdGhlIHBhdGNoIGlzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLiYjMzQ7LiBUaGlzIGNvZGUgcGF0aCwgd2l0aCBpdHMgZGVwZW5kZW5jZSBvbiBwaHlzaWNhbCBTRlAgbW9kdWxlcyBhbmQgdGhlIFJvbGxCYWxsIHByb3RvY29sLCBpcyBhYnNvbHV0ZWx5IGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gRXZlbiBlbXVsYXRpbmcgdGhlIEkyQyBidXMgaXRzZWxmIHdvdWxkbiYjMzk7dCBiZSBlbm91Z2guIFdlIG5lZWQgdGhlIHBoeXNpY2FsIFNGUCBjYWdlIGFuZCB0aGUgcGh5c2ljYWwgdHJhbnNjZWl2ZXIgd2l0aCB0aGUgUm9sbEJhbGwgcHJvdG9jb2wuCgpUaGVyZWZvcmUsIGFmdGVyIHJldmlld2luZyBhbGwgdGhlIGRldGFpbHMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmc6CgoqICAgYFdvcnRoRnV6emluZzogZmFsc2VgCiogICBgRm9jdXNTeW1ib2xzOiBbXWAKKiAgIGBFbmFibGVDb25maWdzOiBbXWAKClRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyOiBUaGlzIHBhdGNoIG1vZGlmaWVzIGNvZGUgc3BlY2lmaWMgdG8gcGh5c2ljYWwgU0ZQL1NGUCYjNDM7IHRyYW5zY2VpdmVyIG1vZHVsZXMgYW5kIGNhZ2VzIGNvbm5lY3RlZCB2aWEgSTJDLiBUaGlzIGlzIGltcG9zc2libGUgdG8gZW11bGF0ZSBvciByZWFjaCBpbiBhIHZpcnR1YWxpemVkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBUaW1lIHRvIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSBSb2xsQmFsbCBNRElPLW92ZXItSTJDIHByb3RvY29sIGluaXRpYWxpemF0aW9uIChkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMpIGFuZCBTRlAgbW9kdWxlIHF1aXJrL2J1cyBoYW5kbGluZyAoZHJpdmVycy9uZXQvcGh5L3NmcC5jKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFNGUCBjYWdlcyBhbmQgU0ZQIHRyYW5zY2VpdmVyIGhhcmR3YXJlIGNvbW11bmljYXRpbmcgb3ZlciBJMkMsIHdoaWNoIGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgUm9sbEJhbGwgTURJTy1vdmVyLUkyQyBwcm90b2NvbCBpbml0aWFsaXphdGlvbiAoZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jKSBhbmQgU0ZQIG1vZHVsZSBxdWlyay9idXMgaGFuZGxpbmcgKGRyaXZlcnMvbmV0L3BoeS9zZnAuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBTRlAgY2FnZXMgYW5kIFNGUCB0cmFuc2NlaXZlciBoYXJkd2FyZSBjb21tdW5pY2F0aW5nIG92ZXIgSTJDLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE5OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Njo0NS4yNzA5NTY1MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjUzMzYwNDUyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIG1vZGlmeSBSb2xsQmFsbCBNRElPLW92ZXItSTJDIHByb3RvY29sIGluaXRpYWxpemF0aW9uIChkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMpIGFuZCBTRlAgbW9kdWxlIHF1aXJrL2J1cyBoYW5kbGluZyAoZHJpdmVycy9uZXQvcGh5L3NmcC5jKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIFNGUCBjYWdlcyBhbmQgU0ZQIHRyYW5zY2VpdmVyIGhhcmR3YXJlIGNvbW11bmljYXRpbmcgb3ZlciBJMkMsIHdoaWNoIGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBzdWNoIGFzIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDY6NDUuMjcwOTYxOTA3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE5MjM1NDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzlkNDU4ZmMwNzJjYzc5OGYxODU0MDdiNjE3ODMxMzIyNGU3YmFlNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxOTo0Njo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNcXG5pbmRleCBlZDIwMzUyYTU4OWEzLi5iODhmNjMyMzRiNGU2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xcbkBAIC00MTksNiArNDE5LDUwIEBAIHN0YXRpYyBpbnQgaTJjX21paV93cml0ZV9yb2xsYmFsbChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgZGV2YWQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGkyY19taWlfcHJvYmVfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXFxuK3tcXG4rXFx0dTggZGF0YV9idWZbXSA9IHsgUk9MTEJBTExfREFUQV9BRERSLCAweDAxLCAweDAwLCAweDAwIH07XFxuK1xcdHU4IGNtZF9idWZbXSAgPSB7IFJPTExCQUxMX0NNRF9BRERSLCBST0xMQkFMTF9DTURfUkVBRCB9O1xcbitcXHR1OCBjbWRfYWRkciAgID0gUk9MTEJBTExfQ01EX0FERFI7XFxuK1xcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XFxuK1xcdHU4IHJlc3VsdDtcXG4rXFx0aW50IHJldDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRtc2dzWzBdLmFkZHIgID0gUk9MTEJBTExfUEhZX0kyQ19BRERSO1xcbitcXHRtc2dzWzBdLmZsYWdzID0gMDtcXG4rXFx0bXNnc1swXS5sZW4gICA9IHNpemVvZihkYXRhX2J1Zik7XFxuK1xcdG1zZ3NbMF0uYnVmICAgPSBkYXRhX2J1ZjtcXG4rXFx0bXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcXG4rXFx0bXNnc1sxXS5mbGFncyA9IDA7XFxuK1xcdG1zZ3NbMV0ubGVuICAgPSBzaXplb2YoY21kX2J1Zik7XFxuK1xcdG1zZ3NbMV0uYnVmICAgPSBjbWRfYnVmO1xcbitcXG4rXFx0cmV0ID0gaTJjX3RyYW5zZmVyX3JvbGxiYWxsKGkyYywgbXNncywgQVJSQVlfU0laRShtc2dzKSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdG1zZ3NbMF0uYWRkciAgPSBST0xMQkFMTF9QSFlfSTJDX0FERFI7XFxuK1xcdG1zZ3NbMF0uZmxhZ3MgPSAwO1xcbitcXHRtc2dzWzBdLmxlbiAgID0gMTtcXG4rXFx0bXNnc1swXS5idWYgICA9IFxcdTAwMjZjbWRfYWRkcjtcXG4rXFx0bXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcXG4rXFx0bXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEO1xcbitcXHRtc2dzWzFdLmxlbiAgID0gMTtcXG4rXFx0bXNnc1sxXS5idWYgICA9IFxcdTAwMjZyZXN1bHQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTA7IGkrKykge1xcbitcXHRcXHRtc2xlZXAoMjApO1xcbitcXHRcXHRyZXQgPSBpMmNfdHJhbnNmZXJfcm9sbGJhbGwoaTJjLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHRcXHRpZiAocmVzdWx0ID09IFJPTExCQUxMX0NNRF9ET05FKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxcbiB7XFxuIFxcdHN0cnVjdCBpMmNfbXNnIG1zZztcXG5AQCAtNDM4LDExICs0ODIsMTEgQEAgc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXFxuIFxcbiBcXHRyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCBcXHUwMDI2bXNnLCAxKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdGVsc2UgaWYgKHJldCAhPSAxKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0aWYgKHJldCAhPSAxKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKGkyYyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuQEAgLTQ4Nyw5ICs1MzEsMTAgQEAgc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuIFxcdGNhc2UgTURJT19JMkNfUk9MTEJBTEw6XFxuIFxcdFxcdHJldCA9IGkyY19taWlfaW5pdF9yb2xsYmFsbChpMmMpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRkZXZfZXJyKHBhcmVudCxcXG4tXFx0XFx0XFx0XFx0XFxcIkNhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cmV0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCAhPSAtRU5PREVWKVxcbitcXHRcXHRcXHRcXHRkZXZfZXJyKHBhcmVudCxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkNhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cmV0KTtcXG4gXFx0XFx0XFx0bWRpb2J1c19mcmVlKG1paSk7XFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuaW5kZXggMmVjOTE0NjZhY2RmMy4uNDljNzdjYTg2OTMxZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcXG5AQCAtNjE2LDYgKzYxNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcXG4gXFx0Ly8gT0VNIFNGUC1HRS1UIGlzIGEgMTAwMEJhc2UtVCBtb2R1bGUgd2l0aCBicm9rZW4gVFhfRkFVTFQgaW5kaWNhdG9yXFxuIFxcdFNGUF9RVUlSS19GKFxcXCJPRU1cXFwiLCBcXFwiU0ZQLUdFLVRcXFwiLCBzZnBfZml4dXBfaWdub3JlX3R4X2ZhdWx0KSxcXG4gXFxuK1xcdFNGUF9RVUlSS19GKFxcXCJPRU1cXFwiLCBcXFwiU0ZQLTEwRy1ULUlcXFwiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxcbiBcXHRTRlBfUVVJUktfRihcXFwiT0VNXFxcIiwgXFxcIlNGUC0xMEctVFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXFxuIFxcdFNGUF9RVUlSS19TKFxcXCJPRU1cXFwiLCBcXFwiU0ZQLTIuNUctVFxcXCIsIHNmcF9xdWlya19vZW1fMl81ZyksXFxuIFxcdFNGUF9RVUlSS19TKFxcXCJPRU1cXFwiLCBcXFwiU0ZQLTIuNUctQlgxMC1EXFxcIiwgc2ZwX3F1aXJrXzI1MDBiYXNleCksXFxuQEAgLTIyMDgsMTAgKzIyMDksMTcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2FybilcXG4gXFxuIHN0YXRpYyBpbnQgc2ZwX3NtX2FkZF9tZGlvX2J1cyhzdHJ1Y3Qgc2ZwICpzZnApXFxuIHtcXG4tXFx0aWYgKHNmcC1cXHUwMDNlbWRpb19wcm90b2NvbCAhPSBNRElPX0kyQ19OT05FKVxcbi1cXHRcXHRyZXR1cm4gc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdGlmIChzZnAtXFx1MDAzZW1kaW9fcHJvdG9jb2wgPT0gTURJT19JMkNfTk9ORSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXQgPSBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XFxuK1xcdGlmIChyZXQgPT0gLUVOT0RFVikge1xcbitcXHRcXHRzZnAtXFx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKiBQcm9iZSBhIFNGUCBmb3IgYSBQSFkgZGV2aWNlIGlmIHRoZSBtb2R1bGUgc3VwcG9ydHMgY29wcGVyIC0gdGhlIFBIWVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Njo0Ni43OTA4MDk3NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyMzgxNjE3ODk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBtb2RpZnkgUm9sbEJhbGwgTURJTy1vdmVyLUkyQyBwcm90b2NvbCBpbml0aWFsaXphdGlvbiAoZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jKSBhbmQgU0ZQIG1vZHVsZSBxdWlyay9idXMgaGFuZGxpbmcgKGRyaXZlcnMvbmV0L3BoeS9zZnAuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBTRlAgY2FnZXMgYW5kIFNGUCB0cmFuc2NlaXZlciBoYXJkd2FyZSBjb21tdW5pY2F0aW5nIG92ZXIgSTJDLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM5ZDQ1OGZjMDcyY2M3OThmMTg1NDA3YjYxNzgzMTMyMjRlN2JhZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxOTo0Njo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xuaW5kZXggZWQyMDM1MmE1ODlhMy4uYjg4ZjYzMjM0YjRlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXG5AQCAtNDE5LDYgKzQxOSw1MCBAQCBzdGF0aWMgaW50IGkyY19taWlfd3JpdGVfcm9sbGJhbGwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldmFkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcbit7XG4rXHR1OCBkYXRhX2J1ZltdID0geyBST0xMQkFMTF9EQVRBX0FERFIsIDB4MDEsIDB4MDAsIDB4MDAgfTtcbitcdHU4IGNtZF9idWZbXSAgPSB7IFJPTExCQUxMX0NNRF9BRERSLCBST0xMQkFMTF9DTURfUkVBRCB9O1xuK1x0dTggY21kX2FkZHIgICA9IFJPTExCQUxMX0NNRF9BRERSO1xuK1x0c3RydWN0IGkyY19tc2cgbXNnc1syXTtcbitcdHU4IHJlc3VsdDtcbitcdGludCByZXQ7XG4rXHRpbnQgaTtcbitcbitcdG1zZ3NbMF0uYWRkciAgPSBST0xMQkFMTF9QSFlfSTJDX0FERFI7XG4rXHRtc2dzWzBdLmZsYWdzID0gMDtcbitcdG1zZ3NbMF0ubGVuICAgPSBzaXplb2YoZGF0YV9idWYpO1xuK1x0bXNnc1swXS5idWYgICA9IGRhdGFfYnVmO1xuK1x0bXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcbitcdG1zZ3NbMV0uZmxhZ3MgPSAwO1xuK1x0bXNnc1sxXS5sZW4gICA9IHNpemVvZihjbWRfYnVmKTtcbitcdG1zZ3NbMV0uYnVmICAgPSBjbWRfYnVmO1xuK1xuK1x0cmV0ID0gaTJjX3RyYW5zZmVyX3JvbGxiYWxsKGkyYywgbXNncywgQVJSQVlfU0laRShtc2dzKSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdG1zZ3NbMF0uYWRkciAgPSBST0xMQkFMTF9QSFlfSTJDX0FERFI7XG4rXHRtc2dzWzBdLmZsYWdzID0gMDtcbitcdG1zZ3NbMF0ubGVuICAgPSAxO1xuK1x0bXNnc1swXS5idWYgICA9IFx1MDAyNmNtZF9hZGRyO1xuK1x0bXNnc1sxXS5hZGRyICA9IFJPTExCQUxMX1BIWV9JMkNfQUREUjtcbitcdG1zZ3NbMV0uZmxhZ3MgPSBJMkNfTV9SRDtcbitcdG1zZ3NbMV0ubGVuICAgPSAxO1xuK1x0bXNnc1sxXS5idWYgICA9IFx1MDAyNnJlc3VsdDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwOyBpKyspIHtcbitcdFx0bXNsZWVwKDIwKTtcbitcdFx0cmV0ID0gaTJjX3RyYW5zZmVyX3JvbGxiYWxsKGkyYywgbXNncywgQVJSQVlfU0laRShtc2dzKSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHRcdGlmIChyZXN1bHQgPT0gUk9MTEJBTExfQ01EX0RPTkUpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVOT0RFVjtcbit9XG4rXG4gc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4ge1xuIFx0c3RydWN0IGkyY19tc2cgbXNnO1xuQEAgLTQzOCwxMSArNDgyLDExIEBAIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuIFxuIFx0cmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgXHUwMDI2bXNnLCAxKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4tXHRlbHNlIGlmIChyZXQgIT0gMSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHRpZiAocmV0ICE9IDEpXG4gXHRcdHJldHVybiAtRUlPO1xuLVx0ZWxzZVxuLVx0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKGkyYyk7XG4gfVxuIFxuIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5AQCAtNDg3LDkgKzUzMSwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyAqbWRpb19pMmNfYWxsb2Moc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyxcbiBcdGNhc2UgTURJT19JMkNfUk9MTEJBTEw6XG4gXHRcdHJldCA9IGkyY19taWlfaW5pdF9yb2xsYmFsbChpMmMpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2VycihwYXJlbnQsXG4tXHRcdFx0XHRcIkNhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcblwiLFxuLVx0XHRcdFx0cmV0KTtcbitcdFx0XHRpZiAocmV0ICE9IC1FTk9ERVYpXG4rXHRcdFx0XHRkZXZfZXJyKHBhcmVudCxcbitcdFx0XHRcdFx0XCJDYW5ub3QgaW5pdGlhbGl6ZSBSb2xsQmFsbCBNRElPIEkyQyBwcm90b2NvbDogJWRcXG5cIixcbitcdFx0XHRcdFx0cmV0KTtcbiBcdFx0XHRtZGlvYnVzX2ZyZWUobWlpKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5pbmRleCAyZWM5MTQ2NmFjZGYzLi40OWM3N2NhODY5MzFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbkBAIC02MTYsNiArNjE2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgc2ZwX3F1aXJrc1tdID0ge1xuIFx0Ly8gT0VNIFNGUC1HRS1UIGlzIGEgMTAwMEJhc2UtVCBtb2R1bGUgd2l0aCBicm9rZW4gVFhfRkFVTFQgaW5kaWNhdG9yXG4gXHRTRlBfUVVJUktfRihcIk9FTVwiLCBcIlNGUC1HRS1UXCIsIHNmcF9maXh1cF9pZ25vcmVfdHhfZmF1bHQpLFxuIFxuK1x0U0ZQX1FVSVJLX0YoXCJPRU1cIiwgXCJTRlAtMTBHLVQtSVwiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuIFx0U0ZQX1FVSVJLX0YoXCJPRU1cIiwgXCJTRlAtMTBHLVRcIiwgc2ZwX2ZpeHVwX3JvbGxiYWxsX2NjKSxcbiBcdFNGUF9RVUlSS19TKFwiT0VNXCIsIFwiU0ZQLTIuNUctVFwiLCBzZnBfcXVpcmtfb2VtXzJfNWcpLFxuIFx0U0ZQX1FVSVJLX1MoXCJPRU1cIiwgXCJTRlAtMi41Ry1CWDEwLURcIiwgc2ZwX3F1aXJrXzI1MDBiYXNleCksXG5AQCAtMjIwOCwxMCArMjIwOSwxNyBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZmF1bHQoc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgbmV4dF9zdGF0ZSwgYm9vbCB3YXJuKVxuIFxuIHN0YXRpYyBpbnQgc2ZwX3NtX2FkZF9tZGlvX2J1cyhzdHJ1Y3Qgc2ZwICpzZnApXG4ge1xuLVx0aWYgKHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sICE9IE1ESU9fSTJDX05PTkUpXG4tXHRcdHJldHVybiBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XG4rXHRpbnQgcmV0O1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRpZiAoc2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPT0gTURJT19JMkNfTk9ORSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XG4rXHRpZiAocmV0ID09IC1FTk9ERVYpIHtcbitcdFx0c2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Njo0Ni43OTA4MTEwNDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTg1ODQ5NzQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZXZlbiAqd29ydGgqIGZ1enppbmcuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIHRvdWNoaW5nIGNvZGUgdGhhdCdzIGhhcmR3YXJlLXNwZWNpZmljLCB1bnJlYWNoYWJsZSBpbiBhIHR5cGljYWwgdGVzdGluZyBlbnZpcm9ubWVudCAobGlrZSBteSB2aXJ0dWFsIG1hY2hpbmVzKSwgb3IganVzdCBnZW5lcmFsbHkgbm90IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgd2hhdCBmaWxlcyBoYXZlIGJlZW4gY2hhbmdlZD8gSSBzZWUgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY2AgYW5kIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgLiBBbHJpZ2h0LCB0aGF0IG5hcnJvd3MgdGhpbmdzIGRvd24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIHVzZWQuIEFyZSB0aGV5IGNvcmUgdG8gc29tZSBmdW5kYW1lbnRhbCBuZXR3b3JraW5nIG9wZXJhdGlvbiwgb3IgYXJlIHRoZXkgZGVwZW5kZW50IG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGhhcmR3YXJlPyBJJ2xsIHByb2JhYmx5IGZpcmUgdXAgYGdyZXBwZXJgIChvciBqdXN0IGByZWFkLWZpbGVgIGFuZCBhIGdvb2QgZ3JlcCkgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBtZGlvLWkyY2AgYW5kIGBzZnBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYW5kIHdoZXRoZXIgSSBjYW4gZXZlbiByZWFjaCBTRlAgb3IgbWRpby1pMmMgaW4gbXkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRG9lcyBpdCByZXF1aXJlIGEgcGh5c2ljYWwgU0ZQIG1vZHVsZSBvciBvdGhlciBzcGVjaWZpYyBoYXJkd2FyZT9cblxuSG9sZCBvbi4uLiBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCdzIHNlZSBpZiBJIGNhbiBnZXQgYXdheSB3aXRob3V0IG5lZWRpbmcgYW55IHBoeXNpY2FsIGhhcmR3YXJlLiBJJ2xsIGNoZWNrIHdoZXJlIGBtZGlvX2kyY19hbGxvY2Agb3IgYHNmcGAgZ2V0cyBwcm9iZWQgb3IgcmVnaXN0ZXJlZC4gSWYgSSBjYW4gZmluZCBhIHJlZ2lzdHJhdGlvbiBwYXRoIHRoYXQncyB0cmlnZ2VyZWQgdGhyb3VnaCBzb21lIGNvbmZpZ3VyYXRpb24sIEkgbWlnaHQgYmUgaW4gbHVjay4gVGhhdCB3b3VsZCBhbGxvdyBtZSB0byBzZXQgdXAgYW4gZWFzaWx5IHJlcHJvZHVjaWJsZSB0ZXN0IGVudmlyb25tZW50LCB3aGljaCB3b3VsZCBiZSBpZGVhbCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Njo1OC42NDkzMTA0MTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDczOTk4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2kyY19hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM9NDkyPXN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1MDU6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTUwNi1cXHRcXHRcXHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTQtfVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1NTU6RVhQT1JUX1NZTUJPTF9HUEwobWRpb19pMmNfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9OTcxPXN0YXRpYyBpbnQgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTc1LVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo5NzY6XFx0aTJjX21paSA9IG1kaW9faTJjX2FsbG9jKHNmcC1cXHUwMDNlZGV2LCBzZnAtXFx1MDAzZWkyYywgc2ZwLVxcdTAwM2VtZGlvX3Byb3RvY29sKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTc3LVxcdGlmIChJU19FUlIoaTJjX21paSkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaD0xND1lbnVtIG1kaW9faTJjX3Byb3RvIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIwLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjIxOnN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIyLVxcdFxcdFxcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDc6MDAuMzIwMDU1M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MzczMjc1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0ZQIENvZGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIFNGUCBkcml2ZXIncyBiZWhhdmlvci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgd2hlcmUgYHNmcC5jYCBpcyBhY3R1YWxseSAqdXNlZCouIEkgbmVlZCB0byB0cmFjZSBpdHMgaW5zdGFudGlhdGlvbiBhbmQgdGhlIHBsYWNlcyB3aGVyZSBpdHMgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIHR5cGljYWwgZHJpdmVyIGZsb3c6IHByb2JpbmcsIGluaXRpYWxpemF0aW9uLCBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cbkZyb20gdGhlcmUsIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBTRlAgZHJpdmVyJ3MgY29yZSBsb2dpYy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCBkcml2ZXIgbWVjaGFuaXNtczogaG93IGl0IGhhbmRsZXMgaG90LXBsdWcgZXZlbnRzLCBob3cgaXQgcmVhZHMgdGhlIG1vZHVsZSdzIEVFUFJPTSwgaG93IGl0IG1hbmFnZXMgdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgUEhZLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93cz8gSSBuZWVkIHRvIGdldCBhIG1lbnRhbCBtb2RlbCBvZiB0aGlzIGRyaXZlcuKAmXMgaW50ZXJuYWwgc3RhdGUgbWFjaGluZS5cblxuRmluYWxseSwgdGhlIHVsdGltYXRlIHRlc3Q6IERvZXMgdGhpcyB0aGluZyBiZWhhdmUgYXMgZXhwZWN0ZWQgaW4gYSBzaW11bGF0ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBBbmQsIGNydWNpYWxseSwgY2FuIEkgcmVhY2ggaXQgaW4gbXkgZnV6emluZyBzZXR1cD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgYWNjZXNzaWJsZSBhbmQgdGhhdCBJIGNhbiByZWxpYWJseSB0cmlnZ2VyIHJlbGV2YW50IGNvZGUgcGF0aHMgd2l0aGluIHRoZSBTRlAgZHJpdmVyIGR1cmluZyBmdXp6aW5nIGNhbXBhaWducy4gT3RoZXJ3aXNlLCBJIHdpbGwgbmVlZCB0byBkZXZpc2UgbWV0aG9kcyBmb3IgZ2V0dGluZyB0aGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgZ2V0dGluZyBleGVyY2lzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2ODAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NzowNS4wNTczODQ4NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1Nzc1MTgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZnBfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MjE2MD1pbnQgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE2OC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMTY5OiAqIGl4Z2JlX2lzX3NmcF9wcm9iZSAtIFJldHVybnMgdHJ1ZSBpZiBTRlAgaXMgYmVpbmcgZGV0ZWN0ZWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTcwLSAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzMtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjE3NDpzdGF0aWMgYm9vbCBpeGdiZV9pc19zZnBfcHJvYmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggb2Zmc2V0LCB1OCBhZGRyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MjE5ND1zdGF0aWMgaW50IGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpY19pbnQoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMjA0LVxcdFxcdG1heF9yZXRyeSA9IDM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjIwNTpcXHRpZiAoaXhnYmVfaXNfc2ZwX3Byb2JlKGh3LCBieXRlX29mZnNldCwgZGV2X2FkZHIpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDYtXFx0XFx0bWF4X3JldHJ5ID0gSVhHQkVfU0ZQX0RFVEVDVF9SRVRSSUVTO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNjc2PXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDMtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA0OiAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNzpzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzM3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTczODogKiBwaHlfc2ZwX3JlbGVhc2UgLSByZWxlYXNlIHJlc291cmNlcyBzZXQgdXAgYnkgcGh5X3NmcF9wcm9iZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzM5LSAqIEBwaHlkZXY6IHRoZSBQSFkgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzQwLSAqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzQxOiAqIFJlbGVhc2UgdGhlIFNGUCByZXNvdXJjZXMgc2V0IHVwIGJ5IGEgc3VjY2Vzc2Z1bCBwaHlfc2ZwX3Byb2JlKCkuIFVucmVnaXN0ZXJcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3NDItICogdGhlIHVwc3RyZWFtIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBwaHlfcG9ydCwgc28gU0ZQIHVwc3RyZWFtIGNhbGxiYWNrcyBjYW5ub3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzU2NT1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTc5LVxcdGlmICghcGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTgwOlxcdFxcdHJldCA9IHBoeV9zZnBfcHJvYmUocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1ODEtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0zMjg4PXN0YXRpYyBpbnQgc2ZwX2kyY19nZXQoc3RydWN0IHNmcCAqc2ZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTMzMTMtXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjMzMTQ6c3RhdGljIGludCBzZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzMxNS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MzQ5Nj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZnBfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzozNDk3OlxcdC5wcm9iZSA9IHNmcF9wcm9iZSxcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ5OC1cXHQucmVtb3ZlID0gc2ZwX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYz0zOD1zdGF0aWMgc3RydWN0IG52bWVtX2NvbmZpZyBsYXllcnNjYXBlX3NmcF9udm1lbV9jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmMtNDQtXFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jOjQ1OnN0YXRpYyBpbnQgbGF5ZXJzY2FwZV9zZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmMtNDYte1xcbi0tXFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jPTk3PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxheWVyc2NhcGVfc2ZwX2RyaXZlciA9IHtcXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmM6OTg6XFx0LnByb2JlXFx0PSBsYXllcnNjYXBlX3NmcF9wcm9iZSxcXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmMtOTktXFx0LmRyaXZlciA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDc6MDYuNzE1MTQwOTk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY4NzA0NTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFNGUCBQcm9iZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBTRlAgbW9kdWxlIGlzIGJlaW5nIGluaXRpYWxpemVkIHdpdGhpbiB0aGlzIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgc2ZwX3Byb2JlYCBmdW5jdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyAtIGhvdyBpcyB0aGlzIHByb2JlIHRyaWdnZXJlZD8gV2hlcmUgaXMgdGhlIGluc3RhbnRpYXRpb24gaGFwcGVuaW5nPyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20uIElzIHRoaXMgYWxsIGJlaW5nIGRyaXZlbiBieSB0aGUgZGV2aWNlIHRyZWUsIEFDUEksIG9yIGlzIGl0IGEgcGxhdGZvcm0gZGV2aWNlIHNpdHVhdGlvbj8gTGV0J3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCBhbmQgemVybyBpbiBvbiB0aGUgYHNmcF9wcm9iZWAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ3OjA5LjQwMjE4NzcwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMxMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMxMDpcXHRcXHRmd25vZGVfaGFuZGxlX3B1dChoKTtcXG4zMzExOlxcdFxcdHJldHVybiBlcnI7XFxuMzMxMjpcXHR9XFxuMzMxMzpcXHRcXG4zMzE0OlxcdHN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuMzMxNTpcXHR7XFxuMzMxNjpcXHRcXHRjb25zdCBzdHJ1Y3Qgc2ZmX2RhdGEgKnNmZjtcXG4zMzE3OlxcdFxcdGNoYXIgKnNmcF9pcnFfbmFtZTtcXG4zMzE4OlxcdFxcdHN0cnVjdCBzZnAgKnNmcDtcXG4zMzE5OlxcdFxcdGludCBlcnIsIGk7XFxuMzMyMDpcXHRcXG4zMzIxOlxcdFxcdHNmcCA9IHNmcF9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4zMzIyOlxcdFxcdGlmIChJU19FUlIoc2ZwKSlcXG4zMzIzOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHNmcCk7XFxuMzMyNDpcXHRcXG4zMzI1OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNmcCk7XFxuMzMyNjpcXHRcXG4zMzI3OlxcdFxcdGVyciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChzZnAtXFx1MDAzZWRldiwgc2ZwX2NsZWFudXAsIHNmcCk7XFxuMzMyODpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4zMzI5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzMzMDpcXHRcXG4zMzMxOlxcdFxcdHNmZiA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShzZnAtXFx1MDAzZWRldik7XFxuMzMzMjpcXHRcXHRpZiAoIXNmZilcXG4zMzMzOlxcdFxcdFxcdHNmZiA9IFxcdTAwMjZzZnBfZGF0YTtcXG4zMzM0OlxcdFxcbjMzMzU6XFx0XFx0c2ZwLVxcdTAwM2V0eXBlID0gc2ZmO1xcbjMzMzY6XFx0XFxuMzMzNzpcXHRcXHRlcnIgPSBzZnBfaTJjX2dldChzZnApO1xcbjMzMzg6XFx0XFx0aWYgKGVycilcXG4zMzM5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzM0MDpcXHRcXG4zMzQxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBHUElPX01BWDsgaSsrKVxcbjMzNDI6XFx0XFx0XFx0aWYgKHNmZi1cXHUwMDNlZ3Bpb3MgXFx1MDAyNiBCSVQoaSkpIHtcXG4zMzQzOlxcdFxcdFxcdFxcdHNmcC1cXHUwMDNlZ3Bpb1tpXSA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHNmcC1cXHUwMDNlZGV2LFxcbjMzNDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgZ3Bpb19uYW1lc1tpXSwgZ3Bpb19mbGFnc1tpXSk7XFxuMzM0NTpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKHNmcC1cXHUwMDNlZ3Bpb1tpXSkpXFxuMzM0NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihzZnAtXFx1MDAzZWdwaW9baV0pO1xcbjMzNDc6XFx0XFx0XFx0fVxcbjMzNDg6XFx0XFxuMzM0OTpcXHRcXHRzZnAtXFx1MDAzZXN0YXRlX2h3X21hc2sgPSBTRlBfRl9QUkVTRU5UO1xcbjMzNTA6XFx0XFx0c2ZwLVxcdTAwM2VzdGF0ZV9od19kcml2ZSA9IFNGUF9GX1RYX0RJU0FCTEU7XFxuMzM1MTpcXHRcXG4zMzUyOlxcdFxcdHNmcC1cXHUwMDNlZ2V0X3N0YXRlID0gc2ZwX2dwaW9fZ2V0X3N0YXRlO1xcbjMzNTM6XFx0XFx0c2ZwLVxcdTAwM2VzZXRfc3RhdGUgPSBzZnBfZ3Bpb19zZXRfc3RhdGU7XFxuMzM1NDpcXHRcXG4zMzU1OlxcdFxcdC8qIEFuIFNGUCBjYWdlIHdpdGggbm8gTU9EX0RFRjAgR1BJTyBoYXMgbm8gaGFyZHdhcmUgcHJlc2VuY2Ugc2lnbmFsLlxcbjMzNTY6XFx0XFx0ICogQXNzdW1pbmcgdGhlIG1vZHVsZSBpcyBhbHdheXMgcHJlc2VudCB0cmFwcyBhbiBlbXB0eSBjYWdlIGluXFxuMzM1NzpcXHRcXHQgKiBNT0RfRVJST1IgYW5kIG5ldmVyIGRldGVjdHMgaG90LWluc2VydGlvbiwgc28gZGVyaXZlIHByZXNlbmNlIGZyb20gYVxcbjMzNTg6XFx0XFx0ICogdGhyb3R0bGVkIEkyQyBwcm9iZSBhbmQgcG9sbCBmb3IgY2hhbmdlcyBpbnN0ZWFkLiBzZnBfaTJjX2NvbmZpZ3VyZSgpXFxuMzM1OTpcXHRcXHQgKiBoYXMgYWxyZWFkeSBzZXQgaTJjX21heF9ibG9ja19zaXplOyBzZWVkIGkyY19ibG9ja19zaXplIHNvIHRoZVxcbjMzNjA6XFx0XFx0ICogcHJlc2VuY2UgcmVhZCBkb2VzIG5vdCBpc3N1ZSBhIHplcm8tbGVuZ3RoIHRyYW5zZmVyIGJlZm9yZSB0aGUgZmlyc3RcXG4zMzYxOlxcdFxcdCAqIEVFUFJPTSByZWFkLiBTZWVkIGkyY19wcmVzZW50X25leHQgdG8gamlmZmllcyBzbyB0aGUgZmlyc3QgcHJvYmVcXG4zMzYyOlxcdFxcdCAqIGhhcHBlbnMgaW1tZWRpYXRlbHkgKGEgemVybyB2YWx1ZSB3b3VsZCBiZSBpbiB0aGUgcGFzdCByZWxhdGl2ZSB0b1xcbjMzNjM6XFx0XFx0ICogdGhlIG5lZ2F0aXZlIElOSVRJQUxfSklGRklFUyBhdCBib290IGFuZCBkZWxheSBkZXRlY3Rpb24pLlxcbjMzNjQ6XFx0XFx0ICpcXG4zMzY1OlxcdFxcdCAqIEEgc29sZGVyZWQtZG93biBtb2R1bGUgKHNmZixzZmYpIGhhcyBubyBwcmVzZW5jZSBzaWduYWwgYW5kIGlzXFxuMzM2NjpcXHRcXHQgKiBnZW51aW5lbHkgYWx3YXlzIHByZXNlbnQsIHNvIGl0IGtlZXBzIHRoZSBhbHdheXMtcHJlc2VudCBiZWhhdmlvdXI7XFxuMzM2NzpcXHRcXHQgKiB0aGUgSTJDIHByb2JlIGlzIGdhdGVkIG9uIHRoZSBjYWdlIHR5cGUgYWR2ZXJ0aXNpbmcgU0ZQX0ZfUFJFU0VOVC5cXG4zMzY4OlxcdFxcdCAqL1xcbjMzNjk6XFx0XFx0aWYgKCFzZnAtXFx1MDAzZWdwaW9bR1BJT19NT0RERUYwXSkge1xcbjMzNzA6XFx0XFx0XFx0aWYgKHNmZi1cXHUwMDNlZ3Bpb3MgXFx1MDAyNiBTRlBfRl9QUkVTRU5UKSB7XFxuMzM3MTpcXHRcXHRcXHRcXHRzZnAtXFx1MDAzZWdldF9zdGF0ZSA9IHNmcF9pMmNfZ2V0X3N0YXRlO1xcbjMzNzI6XFx0XFx0XFx0XFx0c2ZwLVxcdTAwM2VpMmNfYmxvY2tfc2l6ZSA9IHNmcC1cXHUwMDNlaTJjX21heF9ibG9ja19zaXplO1xcbjMzNzM6XFx0XFx0XFx0XFx0c2ZwLVxcdTAwM2VpMmNfcHJlc2VudF9uZXh0ID0gamlmZmllcztcXG4zMzc0OlxcdFxcdFxcdFxcdHNmcC1cXHUwMDNlbmVlZF9wb2xsID0gdHJ1ZTtcXG4zMzc1OlxcdFxcdFxcdH0gZWxzZSB7XFxuMzM3NjpcXHRcXHRcXHRcXHRzZnAtXFx1MDAzZWdldF9zdGF0ZSA9IHNmZl9ncGlvX2dldF9zdGF0ZTtcXG4zMzc3OlxcdFxcdFxcdH1cXG4zMzc4OlxcdFxcdH1cXG4zMzc5OlxcdFxcbjMzODA6XFx0XFx0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJtYXhpbXVtLXBvd2VyLW1pbGxpd2F0dFxcXCIsXFxuMzM4MTpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnNmcC1cXHUwMDNlbWF4X3Bvd2VyX21XKTtcXG4zMzgyOlxcdFxcdGlmIChzZnAtXFx1MDAzZW1heF9wb3dlcl9tVyBcXHUwMDNjIDEwMDApIHtcXG4zMzgzOlxcdFxcdFxcdGlmIChzZnAtXFx1MDAzZW1heF9wb3dlcl9tVylcXG4zMzg0OlxcdFxcdFxcdFxcdGRldl93YXJuKHNmcC1cXHUwMDNlZGV2LFxcbjMzODU6XFx0XFx0XFx0XFx0XFx0IFxcXCJGaXJtd2FyZSBidWc6IGhvc3QgbWF4aW11bSBwb3dlciBzaG91bGQgYmUgYXQgbGVhc3QgMVdcXFxcblxcXCIpO1xcbjMzODY6XFx0XFx0XFx0c2ZwLVxcdTAwM2VtYXhfcG93ZXJfbVcgPSAxMDAwO1xcbjMzODc6XFx0XFx0fVxcbjMzODg6XFx0XFxuMzM4OTpcXHRcXHRkZXZfaW5mbyhzZnAtXFx1MDAzZWRldiwgXFxcIkhvc3QgbWF4aW11bSBwb3dlciAldS4ldVdcXFxcblxcXCIsXFxuMzM5MDpcXHRcXHRcXHQgc2ZwLVxcdTAwM2VtYXhfcG93ZXJfbVcgLyAxMDAwLCAoc2ZwLVxcdTAwM2VtYXhfcG93ZXJfbVcgLyAxMDApICUgMTApO1xcbjMzOTE6XFx0XFxuMzM5MjpcXHRcXHQvKiBHZXQgdGhlIGluaXRpYWwgc3RhdGUsIGFuZCBhbHdheXMgc2lnbmFsIFRYIGRpc2FibGUsXFxuMzM5MzpcXHRcXHQgKiBzaW5jZSB0aGUgbmV0d29yayBpbnRlcmZhY2Ugd2lsbCBub3QgYmUgdXAuXFxuMzM5NDpcXHRcXHQgKi9cXG4zMzk1OlxcdFxcdHNmcC1cXHUwMDNlc3RhdGUgPSBzZnBfZ2V0X3N0YXRlKHNmcCkgfCBTRlBfRl9UWF9ESVNBQkxFO1xcbjMzOTY6XFx0XFxuMzM5NzpcXHRcXHRpZiAoc2ZwLVxcdTAwM2VncGlvW0dQSU9fUlMwXSBcXHUwMDI2XFx1MDAyNlxcbjMzOTg6XFx0XFx0ICAgIGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChzZnAtXFx1MDAzZWdwaW9bR1BJT19SUzBdKSlcXG4zMzk5OlxcdFxcdFxcdHNmcC1cXHUwMDNlc3RhdGUgfD0gU0ZQX0ZfUlMwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NzowOS40MDIzMzE3MjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTA4ODM2ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVHJpZ2dlciBvZiBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5pdGlhdGluZyBjYWxsIGZvciBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdXN0IHNlYXJjaCB0aGUgY29kZWJhc2UgZGlyZWN0bHkgZm9yIHRoYXQgZnVuY3Rpb24gbmFtZS4gSSdsbCBkbyBhIHNpbXBsZSB0ZXh0IHNlYXJjaCBmaXJzdDsgaXQncyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgYmlyZCdzLWV5ZSB2aWV3IG9mIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZXZlbiAqbWVudGlvbmVkKi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBkaXJlY3QgY2FsbHMsIG9yIHBlcmhhcHMgaW5kaXJlY3QgcmVmZXJlbmNlcywgbWF5YmUgdGhyb3VnaCBhIG1hY3JvIG9yIGEgdHlwZWRlZi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBjb21tb24gcGF0dGVybnMgYW5kIHdoYXQgSSBzaG91bGQgYmUgbG9va2luZyBmb3IuIEknbSBob3BpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGFuZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhlY3V0ZWQsIHdoaWNoIGlzIGtleSB0byB0cm91Ymxlc2hvb3RpbmcgdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjIwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NzoxOC41MTExNzA2OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDc0MTQyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwX3NtX2FkZF9tZGlvX2J1c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmM9MjE5Nj1zdGF0aWMgdm9pZCBzZnBfc21fZmF1bHQoc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgbmV4dF9zdGF0ZSwgYm9vbCB3YXJuKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMDktXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIyMTA6c3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxMS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9Mjg2Mj1zdGF0aWMgdm9pZCBzZnBfc21fbWFpbihzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBldmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yOTQ3LVxcdFxcdFxcdC8qIENyZWF0ZSBtZGlvYnVzIGFuZCBzdGFydCB0cnlpbmcgZm9yIFBIWSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyOTQ4OlxcdFxcdFxcdHJldCA9IHNmcF9zbV9hZGRfbWRpb19idXMoc2ZwKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjk0OS1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0NzoyMC4wMTg1OTAzMThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxNDg3NDU2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTRlAgU3RhdGUgTWFjaGluZSBhbmQgaXRzIEludGVncmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgaG93IHRoZSBgc2ZwYCBmcmFtZXdvcmsgaXMgYWN0dWFsbHkgZW1wbG95ZWQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogY2FuIEkgZWZmZWN0aXZlbHkgc2ltdWxhdGUgb3IgaW5zdGFudGlhdGUgU0ZQIGZ1bmN0aW9uYWxpdHkgb3IgbWRpby1pMmMgd2l0aGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgb3Igc3l6a2FsbGVyPyBUaGVzZSBhcmUgY3J1Y2lhbCB0ZXN0aW5nIHBsYXRmb3JtcyBmb3IgbXkgd29yaywgYW5kIGFjaGlldmluZyByZWxpYWJsZSBTRlAgZW11bGF0aW9uIGlzIHBhcmFtb3VudC5cblxuTm93LCBteSBzdHJhdGVneSBuZWVkcyB0byBiZSBtZXRob2RpY2FsLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaG93IFNGUCBkZXZpY2VzIGFyZSBicm91Z2h0IGludG8gdGhlIHN5c3RlbS4gQXJlIHRoZXJlIGV4aXN0aW5nIGkyYyBkcml2ZXJzLCBwcmUtZGVmaW5lZCBwbGF0Zm9ybSBkZXZpY2VzLCBvciBjYW4gdGhlc2UgZGV2aWNlcyBiZSBjcmVhdGVkIG9uIHRoZSBmbHk/IEFyZSB3ZSBsZXZlcmFnaW5nIGNvbmZpZ2ZzLCBzdGFuZGFyZCBpMmMgY2xpZW50IGludGVyYWN0aW9ucywgc3lzZnMgaW50ZXJmYWNlcywgZGV2aWNlIHRyZWUgb3ZlcmxheXMsIG9yIHNvbWUgY29tYmluYXRpb24gb2YgdGhlc2U/XG5cbkFscmlnaHQsIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBleGFtaW5lIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGFuZCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jYC4gVGhlc2UgYXJlIGxpa2VseSB0byBob2xkIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdGhhdCBJIG5lZWQgdG8gZGlzc2VjdC5cblxuRmluYWxseSwgYSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBNRElPX0kyQyBhbmQgU0ZQIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzI0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ3OjM5LjE2NzMzOTgxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MTIwODY4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTURJT19JMkNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTEwMD1jb25maWcgTURJT19ISVNJX0ZFTUFDXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTA2LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMDc6Y29uZmlnIE1ESU9fSTJDXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwOC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Nzo0MS41MDg1NTUwMzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIxNDEwNjU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBNRElPIEtjb25maWcgRmlsZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGxpbmUgMTA3LiBJJ20gYXNzdW1pbmcgaXQgZGVhbHMgd2l0aCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGdpdmVuIHRoaXMgaXMgYSBLY29uZmlnIGZpbGUuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgY2VydGFpbiBNRElPIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBwb3NzaWJseSBkZXBlbmRlbnQgb24gdGhlIGhhcmR3YXJlIHBsYXRmb3JtIG9yIG90aGVyIG5ldHdvcmsgZGV2aWNlIHNldHRpbmdzLiBNeSBiYWNrZ3JvdW5kIGtub3dsZWRnZSBvZiBuZXR3b3JrIGRyaXZlcnMgdGVsbHMgbWUgdGhpcyBmaWxlIHdpbGwgZGVmaW5lIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBoZWxwIHRleHQuIEl0J3MgbGlrZWx5IHN0cnVjdHVyZWQgaGllcmFyY2hpY2FsbHksIHdpdGggcGFyZW50IG9wdGlvbnMgY29udHJvbGxpbmcgdGhlIGF2YWlsYWJpbGl0eSBvZiBtb3JlIGdyYW51bGFyIHNldHRpbmdzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZTogXCJpZiBQSFlfTURJTyxcIiBcImRlcGVuZHMgb24sXCIgXCJzZWxlY3QsXCIgYW5kIFwiZGVmYXVsdFwiIHN0YXRlbWVudHMgdGhhdCB3aWxsIGRldGVybWluZSBob3cgdXNlcnMgY29uZmlndXJlIHRoZSBNRElPIGRyaXZlciBhbmQgaXRzIGFzc29jaWF0ZWQgUEhZcy4gSSdtIHJlYWR5IHRvIHNlZSBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Nzo0NS43MjI2NjM5NTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRjb25maWcgTURJT19ISVNJX0ZFTUFDXFxuIDEwMTpcXHRcXHR0cmlzdGF0ZSBcXFwiSGlzaWxpY29uIEZFTUFDIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuIDEwMjpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBPRl9NRElPXFxuIDEwMzpcXHRcXHRoZWxwXFxuIDEwNDpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXFxuIDEwNTpcXHRcXHQgIEhpc2lsaWNvbiBTb0MgdGhhdCBoYXZlIGFuIEZhc3QgRXRoZXJuZXQgTUFDLlxcbiAxMDY6XFx0XFxuIDEwNzpcXHRjb25maWcgTURJT19JMkNcXG4gMTA4OlxcdFxcdHRyaXN0YXRlXFxuIDEwOTpcXHRcXHRkZXBlbmRzIG9uIEkyQ1xcbiAxMTA6XFx0XFx0aGVscFxcbiAxMTE6XFx0XFx0ICBTdXBwb3J0IEkyQyBiYXNlZCBQSFlzLiAgVGhpcyBwcm92aWRlcyBhIE1ESU8gYnVzIGJyaWRnZWRcXG4gMTEyOlxcdFxcdCAgdG8gSTJDIHRvIGFsbG93IFBIWXMgY29ubmVjdGVkIGluIEkyQyBtb2RlIHRvIGJlIGFjY2Vzc2VkXFxuIDExMzpcXHRcXHQgIHVzaW5nIHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZS5cXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0ICBUaGlzIGlzIGxpYnJhcnkgbW9kZS5cXG4gMTE2OlxcdFxcbiAxMTc6XFx0Y29uZmlnIE1ESU9fTVZVU0JcXG4gMTE4OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFVTQiB0byBNRElPIEFkYXB0ZXJcXFwiXFxuIDExOTpcXHRcXHRkZXBlbmRzIG9uIFVTQlxcbiAxMjA6XFx0XFx0aGVscFxcbiAxMjE6XFx0XFx0ICBBIFVTQiB0byBNRElPIGNvbnZlcnRlciBwcmVzZW50IG9uIGRldmVsb3BtZW50IGJvYXJkcyBmb3JcXG4gMTIyOlxcdFxcdCAgTWFydmVsbCdzIExpbmsgU3RyZWV0IGZhbWlseSBvZiBFdGhlcm5ldCBzd2l0Y2hlcy5cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0Y29uZmlnIE1ESU9fTVNDQ19NSUlNXFxuIDEyNTpcXHRcXHR0cmlzdGF0ZSBcXFwiTWljcm9zZW1pIE1JSU0gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuIDEyNjpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbiAxMjc6XFx0XFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuIDEyODpcXHRcXHRoZWxwXFxuIDEyOTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNSUlNIChNRElPKSBpbnRlcmZhY2UgZm91bmQgaW4gdGhlIG5ldHdvcmtcXG4gMTMwOlxcdFxcdCAgc3dpdGNoZXMgb2YgdGhlIE1pY3Jvc2VtaSBTb0NzOyBpdCBpcyByZWNvbW1lbmRlZCB0byBzd2l0Y2ggb25cXG4gMTMxOlxcdFxcdCAgQ09ORklHX0hJR0hfUkVTX1RJTUVSU1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRjb25maWcgTURJT19NT1hBUlRcXG4gMTM0OlxcdFxcdHRyaXN0YXRlIFxcXCJNT1hBIEFSVCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbiAxMzU6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX01PWEFSVCB8fCBDT01QSUxFX1RFU1RcXG4gMTM2OlxcdFxcdGhlbHBcXG4gMTM3OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBuZXR3b3JrXFxuIDEzODpcXHRcXHQgIGludGVyZmFjZSB1bml0cyBvZiB0aGUgTU9YQSBBUlQgU29DXFxuIDEzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDc6NDUuNzIyNzMwMjAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDgzNDc3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIERpYWdub3N0aWMgUXVlcnkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gcHJvY2VzcyBvZiB0aGlzIGBNRElPX0kyQ2AgY29tcG9uZW50LiBUaGlzIGNvdWxkIGJlIGEgbW9kdWxlLCBhIGJ1cywgb3IgZXZlbiBqdXN0IGEgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IHRoaXMgcGFydGljdWxhciBpdGVtIGlzIGJlaW5nIGNob3NlbiBvciBjb25maWd1cmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyB0aGlzIGEgY29tcGlsZS10aW1lIG9wdGlvbiwgYSBydW50aW1lIGNvbmZpZ3VyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGNvZGUgb3IgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgcmVzcG9uc2libGUgZm9yIGl0cyBhY3RpdmF0aW9uIG9yIGRlYWN0aXZhdGlvbj8gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlIGludGVyYWN0aW9uLiBGcm9tIHRoaXMsIHRoZSBwYXRoIHRocm91Z2ggdGhlIHNvZnR3YXJlIChhbmQgcG9zc2libHkgaGFyZHdhcmUpIGNhbiBiZSB1bmRlcnN0b29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDExMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDc6NDguMDMxMDgwNTM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY3MTAwMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNRElPX0kyQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZz03Mz1jb25maWcgU0ZQXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03Ni1cXHRkZXBlbmRzIG9uIEhXTU9OIHx8IEhXTU9OPW5cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3NzpcXHRzZWxlY3QgTURJT19JMkNcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDc6NTAuMzk4MTg1OTI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzNjg5MjA3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgbWF0ZXJpYWw6XG5cbioqSW52ZXN0aWdhdGluZyBSZWxhdGVkIFJlZmVyZW5jZXMqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIEkndmUgYWxyZWFkeSBnb3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGNvbm5lY3Rpb25zIG9yIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgb3V0IHRoZXJlIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlcyBNRElPX0kyQyBvciBTRlAuIEkga25vdyB0aGVzZSBhcmUgcmVsYXRlZCwgYnV0IEkgbmVlZCB0byBzZWUgaG93IGNvbXByZWhlbnNpdmVseS4gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1pZ2h0IGJyaWRnZSB0aGUgZ2FwLCBvZmZlciBhIGRpZmZlcmVudCBwZXJzcGVjdGl2ZSwgb3IgcG9pbnQgdG8gYSBtb3JlIGVsZWdhbnQgc29sdXRpb24gdGhhbiB3aGF0IEkndmUgY3VycmVudGx5IGdvdCBpbiBtaW5kLiBJIG5lZWQgdG8gY2FzdCBhIHdpZGVyIG5ldCB0byBjYXB0dXJlIGFsbCByZWxldmFudCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0Nzo1OC43NjcxMDkxODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDgxNzc0MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NGUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0yODU9Q09ORklHX1hJTElOWF9FTUFDTElURT15XFxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6Mjg2OkNPTkZJR19TRlA9bVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTI4Ny1DT05GSUdfQlJPQURDT01fUEhZPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnPTY0PUNPTkZJR19NVlBQMj15XFxuYXJjaC9hcm0vY29uZmlncy9tdmVidV92N19kZWZjb25maWc6NjU6Q09ORklHX1NGUD15XFxuYXJjaC9hcm0vY29uZmlncy9tdmVidV92N19kZWZjb25maWctNjYtQ09ORklHX01BUlZFTExfUEhZPXlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSArPSBtaWlfdGltZXN0YW1wZXIub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAtYnVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjgtb2JqLXlcXHRcXHRcXHRcXHQrPSAkKHNmcC1vYmoteSkgJChzZnAtb2JqLW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oPTU2NT1zdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3Ny1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oOjU3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfU0ZQKVxcbmluY2x1ZGUvbGludXgvc2ZwLmgtNTc5LWNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKnNmcF9nZXRfbW9kdWxlX2NhcHMoc3RydWN0IHNmcF9idXMgKmJ1cyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ4OjAwLjkxNTI5MzIxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjMwNzQ5MDQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIFNGUCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5IGFib3V0IFNGUC5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIFNGUCBzdXBwb3J0IGluIHRoaXMgcHJvamVjdC4gSSB3YW50IHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlJ3MgYSBkZWRpY2F0ZWQgb3B0aW9uIGZvciBpdCwgYW5kLCBpZiBzbywgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgcG9zc2libGUgdmFyaWF0aW9ucyBhcmUuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgZW5hYmxlL2Rpc2FibGUgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCB3aXRoIHZhcmlvdXMgc3ViLW9wdGlvbnMgZm9yIGRpZmZlcmVudCBTRlAgdHlwZXMgb3IgZmVhdHVyZXM/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBTRlAgaXMgdHJlYXRlZCBmcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ4OjEzLjIyMjc4NTY3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHQgICAgICAgICAgQWRkcyBzdXBwb3J0IG5lZWRlZCBmb3IgUEhZIGRyaXZlcnMgd3JpdHRlbiBpbiBSdXN0LiBJdCBwcm92aWRlc1xcbiAgNzE6XFx0ICAgICAgICAgIGEgd3JhcHBlciBhcm91bmQgdGhlIEMgcGh5bGliIGNvcmUuXFxuICA3MjpcXHRcXG4gIDczOlxcdGNvbmZpZyBTRlBcXG4gIDc0OlxcdFxcdHRyaXN0YXRlIFxcXCJTRlAgY2FnZSBzdXBwb3J0XFxcIlxcbiAgNzU6XFx0XFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgUEhZTElOS1xcbiAgNzY6XFx0XFx0ZGVwZW5kcyBvbiBIV01PTiB8fCBIV01PTj1uXFxuICA3NzpcXHRcXHRzZWxlY3QgTURJT19JMkNcXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29tbWVudCBcXFwiTUlJIFBIWSBkZXZpY2UgZHJpdmVyc1xcXCJcXG4gIDgwOlxcdFxcbiAgODE6XFx0Y29uZmlnIEFTMjFYWFhfUEhZXFxuICA4MjpcXHRcXHR0cmlzdGF0ZSBcXFwiQWVvbnNlbWkgQVMyMXh4eCBQSFlzXFxcIlxcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIEFlb25zZW1pIEFTMjF4eHggUEhZLlxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIFRoZXNlIGFyZSBDNDUgUEhZcyAxMEcgdGhhdCByZXF1aXJlIGFsbCBhIGdlbmVyaWMgZmlybXdhcmUuXFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdCAgU3VwcG9ydGVkIFBIWXMgQVMyMTAxMUpCMSwgQVMyMTAxMVBCMSwgQVMyMTAxMEpCMSwgQVMyMTAxMFBCMSxcXG4gIDg5OlxcdFxcdCAgQVMyMTUxMUpCMSwgQVMyMTUxMVBCMSwgQVMyMTUxMEpCMSwgQVMyMTUxMFBCMSwgQVMyMTIxMEpCMSxcXG4gIDkwOlxcdFxcdCAgQVMyMTIxMFBCMSB0aGF0IGFsbCByZWdpc3RlciB3aXRoIHRoZSBQSFkgSUQgMHg3NTAwIDB4NzUwMFxcbiAgOTE6XFx0XFx0ICBiZWZvcmUgdGhlIGZpcm13YXJlIGlzIGxvYWRlZC5cXG4gIDkyOlxcdFxcbiAgOTM6XFx0Y29uZmlnIEFJUl9BTjg4MDFfUEhZXFxuICA5NDpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIEFOODgwMSBHaWdhYml0IFBIWVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDg6MTMuMjIyODY0OTI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzMzkxNzE4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNRElPIGFuZCBTRlAgUm9sbGJhbGwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBzZWVpbmcgdGhlIGNoYW5nZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgZmlsZXMuIEkga25vdyB0aGVzZSByZWxhdGUgdG8gTURJTyBidXNlcyBhbmQgU0ZQIHRyYW5zY2VpdmVycywgc28gdGhlIGNvbm5lY3Rpb24gaGVyZSBpcyBpbW1lZGlhdGUuXG5cbkkgc2VlIGEgbmV3IGZ1bmN0aW9uIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYCBhZGRlZCB3aXRoaW4gYG1kaW8taTJjLmNgLiBJdCdzIHByb2JpbmcgYW4gSTJDIGFkYXB0ZXIgdG8gZGV0ZXJtaW5lIGlmIGEgUm9sbGJhbGwgZGV2aWNlIGlzIHByZXNlbnQuIEl0IGRvZXMgc28gYnkgc2VuZGluZyBzb21lIGNvbW1hbmRzIGFuZCByZWFkaW5nIGEgcmVzdWx0LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIHByb2JpbmcgZm9yIGEgZGV2aWNlIGF0IGBST0xMQkFMTF9QSFlfSTJDX0FERFJgLiBUaGVyZSBpcyBhIGZvciBsb29wIHdpdGggYSBtc2xlZXAsIHNvIGl0IGxpa2VseSBjaGVja3MgZm9yIGEgcmVzcG9uc2UgbXVsdGlwbGUgdGltZXMuIFRoaXMgaXMgcHJvYmFibHkgdG8gbWFrZSBzdXJlIHRoZSBkZXZpY2UgaGFzIGVub3VnaCB0aW1lIHRvIHJlc3BvbmQgb3IgY29tcGxldGUgaW50ZXJuYWwgb3BlcmF0aW9ucy4gSWYgbm8gcmVzcG9uc2UsIHRoZW4gYC1FTk9ERVZgIGlzIHJldHVybmVkLlxuXG5UaGUgZXhpc3RpbmcgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAgZnVuY3Rpb24gaXMgdXBkYXRlZCB0byBjYWxsIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYC4gSXQgYWxzbyBhcHBlYXJzIHRoZXJlJ3MgYSBtb3JlIGNhcmVmdWwgY2hlY2sgZm9yIGVycm9ycyBub3csIHdpdGggYSByZXR1cm4gY29kZSBvZiBgLUVOT0RFVmAgYmVpbmcgaGFuZGxlZCBleHBsaWNpdGx5LCB3aGljaCBpcyBnb29kLiBUaGVyZSBpcyBhbHNvIGFuIGFkZGl0aW9uYWwgY2hlY2sgZm9yIGAtRU5PREVWYCBkdXJpbmcgdGhlIE1ESU8gYnVzIGFsbG9jYXRpb24uXG5cbk5vdyBJIGFtIGdvaW5nIGludG8gYHNmcC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgU0ZQIG1vZHVsZSBoYW5kbGluZyBvY2N1cnMuIEkgbm90ZSBzb21lIG5ldyBlbnRyaWVzIGluIGBzZnBfcXVpcmtzW11gLCBzcGVjaWZpY2FsbHkgZm9yIG1vZHVsZXMgd2l0aCBcIlNGUC0xMEctVC1JXCIgYW5kIFwiU0ZQLTEwRy1UXCIuIFRoZXJlJ3MgYWxzbyBgc2ZwX2ZpeHVwX3JvbGxiYWxsYCBiZWluZyB1c2VkIGFzIGEgZml4dXAgZnVuY3Rpb24uIFRoZXJlIGFsc28gYXBwZWFycyB0byBiZSBhbiBhZGRpdGlvbiB0byBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AgdG8gaGFuZGxlIGAtRU5PREVWYCBkdXJpbmcgdGhlIE1ESU8gYnVzIGNyZWF0aW9uLiBUaGlzIGlzIGdvb2Q6IGlmIHRoZSBNRElPIGJ1cyBjcmVhdGlvbiBmYWlscywgdGhlIGNvZGUgd2lsbCBub3cgc2V0IGBzZnAtXHUwMDNlbWRpb19wcm90b2NvbGAgdG8gYE1ESU9fSTJDX05PTkVgLCBhbmQgY29udGludWVzIHdpdGhvdXQgdGhlIE1ESU8gYnVzLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvci5cblxuT3ZlcmFsbCwgaXQgc2VlbXMgdGhpcyBpcyBhYm91dCBtb3JlIHJvYnVzdGx5IHN1cHBvcnRpbmcgUm9sbGJhbGwtYmFzZWQgY29wcGVyIFNGUCsgbW9kdWxlcy4gVGhlIGNvZGUgaXMgdGFraW5nIGNhcmUgdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgUm9sbGJhbGwgZGV2aWNlIGJlZm9yZSBhc3N1bWluZyBpdCdzIHRoZXJlLiBUaGUgYWRkaXRpb24gb2YgdGhlIG5ldyBwcm9iZSBmdW5jdGlvbiBhbmQgdGhlIGltcHJvdmVkIGVycm9yIGhhbmRsaW5nLCBzaG93IHRoYXQgdGhlIHBhdGNoIGF0dGVtcHRzIHRvIG1hbmFnZSB0aGUgUm9sbGJhbGwgY29ubmVjdGlvbiBpbiBhIG1vcmUgY29udHJvbGxlZCBtYW5uZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjYyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ4OjIyLjU2MjA0ODMyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcxMTE2NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNmcF9maXh1cF9yb2xsYmFsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmM9NDA2PXN0YXRpYyB2b2lkIHNmcF9maXh1cF8xMGdiYXNldF8zMG0oc3RydWN0IHNmcCAqc2ZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQxMS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NDEyOnN0YXRpYyB2b2lkIHNmcF9maXh1cF9yb2xsYmFsbChzdHJ1Y3Qgc2ZwICpzZnApXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQxMy17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDIzLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo0MjQ6c3RhdGljIHZvaWQgc2ZwX2ZpeHVwX3JvbGxiYWxsX3dhaXQ0cyhzdHJ1Y3Qgc2ZwICpzZnApXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTQyNS17XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjQyNjpcXHRzZnBfZml4dXBfcm9sbGJhbGwoc2ZwKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDI3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTQzNT1zdGF0aWMgdm9pZCBzZnBfZml4dXBfZnNfMTBndChzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDM3LVxcdHNmcF9maXh1cF8xMGdiYXNldF8zMG0oc2ZwKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NDM4OlxcdHNmcF9maXh1cF9yb2xsYmFsbF93YWl0NHMoc2ZwKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDM5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz00NTA9c3RhdGljIHZvaWQgc2ZwX2ZpeHVwX3BvdHJvbihzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDYxLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo0NjI6c3RhdGljIHZvaWQgc2ZwX2ZpeHVwX3JvbGxiYWxsX2NjKHN0cnVjdCBzZnAgKnNmcClcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNDYzLXtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NDY0OlxcdHNmcF9maXh1cF9yb2xsYmFsbChzZnApO1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy00NjUtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9NTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy01NDItXFx0Ly8gRkxZUFJPIFNGUC0xMEdULUNTLTMwTSB1c2VzIFJvbGxiYWxsIHByb3RvY29sIHRvIHRhbGsgdG8gdGhlIFBIWS5cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NTQzOlxcdFNGUF9RVUlSS19GKFxcXCJGTFlQUk9cXFwiLCBcXFwiU0ZQLTEwR1QtQ1MtMzBNXFxcIiwgc2ZwX2ZpeHVwX3JvbGxiYWxsKSxcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNTQ0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTU1MS1cXHQvLyB0byB0aGUgUEhZIGFuZCBuZWVkcyA0IHNlYyB3YWl0IGJlZm9yZSBwcm9iaW5nIHRoZSBQSFkuXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjU1MjpcXHRTRlBfUVVJUktfRihcXFwiRlNcXFwiLCBcXFwiU0ZQLTIuNUctVFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF93YWl0NHMpLFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo1NTM6XFx0U0ZQX1FVSVJLX0YoXFxcIkZTXFxcIiwgXFxcIlNGUC0xMEdNLVRcXFwiLCBzZnBfZml4dXBfcm9sbGJhbGxfd2FpdDRzKSxcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNTU0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYxMy1cXHQvLyBIT1JBQ08gSEMtMTBHRS0xMTNDIHVzZXMgUm9sbGJhbGwgcHJvdG9jb2wgdG8gdGFsayB0byB0aGUgUEhZLlxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2MTQ6XFx0U0ZQX1FVSVJLX0YoXFxcIk9FTVxcXCIsIFxcXCJIQy0xMEdFLTExM0NcXFwiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy02MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjE4LVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2MTk6XFx0U0ZQX1FVSVJLX0YoXFxcIk9FTVxcXCIsIFxcXCJTRlAtMTBHLVQtSVxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYyMDpcXHRTRlBfUVVJUktfRihcXFwiT0VNXFxcIiwgXFxcIlNGUC0xMEctVFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYyMS1cXHRTRlBfUVVJUktfUyhcXFwiT0VNXFxcIiwgXFxcIlNGUC0yLjVHLVRcXFwiLCBzZnBfcXVpcmtfb2VtXzJfNWcpLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYyNS1cXHRTRlBfUVVJUktfUyhcXFwiT0VNXFxcIiwgXFxcIlNGUC0yLjVHLUxIMjAtQVxcXCIsIHNmcF9xdWlya18yNTAwYmFzZXgpLFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2MjY6XFx0U0ZQX1FVSVJLX0YoXFxcIk9FTVxcXCIsIFxcXCJSVFNGUC0xMFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYyNzpcXHRTRlBfUVVJUktfRihcXFwiT0VNXFxcIiwgXFxcIlJUU0ZQLTEwR1xcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYyOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy02MzUtXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYzNjpcXHRTRlBfUVVJUktfRihcXFwiVHVycmlzXFxcIiwgXFxcIlJUU0ZQLTIuNUdcXFwiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2Mzc6XFx0U0ZQX1FVSVJLX0YoXFxcIlR1cnJpc1xcXCIsIFxcXCJSVFNGUC0xMFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjYzODpcXHRTRlBfUVVJUktfRihcXFwiVHVycmlzXFxcIiwgXFxcIlJUU0ZQLTEwR1xcXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTYzOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDg6MjQuODMzMTcwNDM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDUyODM5NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTRlAgRHJpdmVyIFJlYWNoYWJpbGl0eSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGRldGVybWluZSBpZiBhIHBhdGNoIGlzIFwiV29ydGhGdXp6aW5nXCIgYW5kIHRoZSBjcnV4IG9mIHRoYXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIExldCdzIGRpZyBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgU0ZQIGRyaXZlciBnZXRzIGJvdW5kIGFuZCBjcmVhdGVkLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgLCB3aGljaCBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljLiBCaW5nbyEgVGhlcmUncyBgc2ZwX3Byb2JlYCwgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUgZnVuY3Rpb24uIEZyb20gd2hhdCBJIHNlZSBpbiB0aGUgYHNmcF9vZl9tYXRjaGAgdGFibGUsIGl0IGxvb2tzIGxpa2UgaXQgc3VwcG9ydHMgXCJzZmYsc2ZwXCIgYW5kIFwic2ZmLHNmZlwiIGNvbXBhdGlibGUgZGV2aWNlcy5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZHJpdmVyIGlzIHJlYWNoYWJsZS4gVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHN0YXRlIHRoYXQgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIOKAkyBhcmUgYSBuby1nbyBmb3IgZnV6emluZy4gQWxzbywgUENJIGRldmljZSByZW1vdmFscyBhbmQgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgYXJlIG91dC4gU28sIGlzIGBzZnBgIG9yIGBtZGlvLWkyY2AgcmVhY2hhYmxlIHdpdGhvdXQgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlP1xuXG5UaGUga2V5IGhlcmUgaXMgd2hldGhlciBJIGNhbiBpbnN0YW50aWF0ZSBhbiBTRlAgY2FnZSBvciBNRElPIEkyQyBidXMgaW4gYSBRRU1VL3ZpcnR1YWwgZW52aXJvbm1lbnQuIENhbiBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggYG9mX21hdGNoYCBiZSBjcmVhdGVkPyBDYW4gSSBjcmVhdGUgYHNmcGAgd2l0aG91dCBhIGRldmljZSB0cmVlLCBvciB3aXRoIGRldmljZSB0cmVlIG92ZXJsYXlzLCBvciBldmVuIHVzaW5nIHNvbWV0aGluZyBsaWtlIFN5emthbGxlciBpbiBRRU1VIHg4Ni9hcm02ND8gVGhhdCdzIHRoZSBxdWVzdGlvbiBJIGhhdmUgdG8gYW5zd2VyLiBJIG5lZWQgdG8gY2hlY2sgaWYgU3l6a2FsbGVyIG9yIFFFTVUgaGFzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIGBzZnBgIG9yIGBtZGlvLWkyY2AuXG5cblRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcywgSSdtIGdvaW5nIHRvIGRvIGEgZ2xvYmFsIHNlYXJjaC4gSSdsbCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGFueSBjYWxscyB0byBgbWRpb19pMmNfYWxsb2NgLCBgc2ZwX2FsbG9jYCwgb3IgZGlyZWN0bHkgdG8gYHNmcF9wcm9iZWAuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHZpZXcgb2YgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGFjdHVhbGx5IHVzZWQgYW5kLCBjb25zZXF1ZW50bHksIHdoZXRoZXIgdGhleSBhcmUgbGlrZWx5IHRvIGJlIHJlYWNoZWQgZHVyaW5nIHN0YW5kYXJkIFFFTVUgLyB2aXJ0dWFsIGVudmlyb25tZW50IG9wZXJhdGlvbnMuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBtb2RpZmljYXRpb25zIGFyZSBvbiBhIGNvZGUgcGF0aCB0aGF0J3MgcmVhc29uYWJseSByZWFjaGFibGUsIHRodXMgcG90ZW50aWFsbHkgbGVhZGluZyB0byBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU2MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0ODo0NC44ODYwMTM4NDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzkxMTk1NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb19pMmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jPTQ2Nj1zdGF0aWMgaW50IGkyY19taWlfaW5pdF9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy00OTEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjQ5MjpzdGF0aWMgYm9vbCBtZGlvX2kyY19jaGVja19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo0OTM6XFx0XFx0XFx0XFx0XFx0IGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTQ5NC17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1MDU6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjUwNjpcXHRcXHRcXHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbClcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01MTAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjUxMTpcXHRpZiAoIW1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoaTJjLCBwcm90b2NvbCkpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTUxMi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTQtfVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1NTU6RVhQT1JUX1NZTUJPTF9HUEwobWRpb19pMmNfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MjQxPXN0cnVjdCBzZnAge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI0NS1cXHRzdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX2J1cztcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjQ2OlxcdGVudW0gbWRpb19pMmNfcHJvdG8gbWRpb19wcm90b2NvbDtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjQ3LVxcdHN0cnVjdCBwaHlfZGV2aWNlICptb2RfcGh5O1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTk3MT1zdGF0aWMgaW50IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc3RydWN0IHNmcCAqc2ZwKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTk3NS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6OTc2OlxcdGkyY19taWkgPSBtZGlvX2kyY19hbGxvYyhzZnAtXFx1MDAzZWRldiwgc2ZwLVxcdTAwM2VpMmMsIHNmcC1cXHUwMDNlbWRpb19wcm90b2NvbCk7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTk3Ny1cXHRpZiAoSVNfRVJSKGkyY19taWkpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg9MTI9c3RydWN0IG1paV9idXM7XFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmgtMTMtXFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg6MTQ6ZW51bSBtZGlvX2kyY19wcm90byB7XFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmgtMTUtXFx0TURJT19JMkNfTk9ORSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIwLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjIxOnN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjIyOlxcdFxcdFxcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKTtcXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaC0yMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDg6NDcuMjI1MTM3NDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM2OTczNDcxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiB0aGUgU0ZQIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBzZnBgIGRyaXZlciBjb2RlLCBhbmQgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgYG1kaW9faTJjX2FsbG9jYCBpcyBleHBvcnRlZCwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIG9ubHkgZnJvbSBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZWAgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AuIEFscmlnaHQsIHRoYXQncyBpbnRlcmVzdGluZy4gSSBzaG91bGQgZm9sbG93IHRoZSBjaGFpbi4gTGV0J3Mgc2VlIHdobydzIGNhbGxpbmcgYHNmcF9pMmNfbWRpb2J1c19jcmVhdGVgLiBBaCwgaXQncyBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AuIEdvb2QsIGdvb2QuIE5vdywgbGV0J3MgdGFrZSBhIHN0ZXAgYmFjayBhbmQgZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgU0ZQIGRldmljZSBpcyBwcm9iZWQgYW5kIGhvdyBpdHMgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldmljZSBpdHNlbGYuXG5cblNvLCB3aGVuIGlzIGBzZnBfcHJvYmVgIGFjdHVhbGx5IGdldHRpbmcgY2FsbGVkPyBSaWdodCwgSSBzZWUgaXQuIFRoZSBgc2ZwYCBkcml2ZXIgcmVnaXN0ZXJzIGFzIGEgcGxhdGZvcm0gZHJpdmVyLiBJdCdzIGxvb2tpbmcgZm9yIGRldmljZXMgd2l0aCB0aGUgXCJzZmYsc2ZwXCIgYW5kIFwic2ZmLHNmZlwiIGNvbXBhdGlibGVzLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBBbmQgd2hpbGUgSSdtIGF0IGl0LCBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgcGh5X3NmcF9wcm9iZWAgaW4gYHBoeV9kZXZpY2UuY2AuIEFsd2F5cyBnb29kIHRvIGhhdmUgYSBsb29rIGF0IHRoZSBQSFkgbGF5ZXIsIGl0IG1heSBzaG93IG90aGVyIGludGVyYWN0aW9ucyBhbmQgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDk6MDAuOTIyNDg2NTM0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY2NzM3OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9zZnBfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNjc2PXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDMtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA0OiAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNzpzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzM3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTczODogKiBwaHlfc2ZwX3JlbGVhc2UgLSByZWxlYXNlIHJlc291cmNlcyBzZXQgdXAgYnkgcGh5X3NmcF9wcm9iZSgpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzM5LSAqIEBwaHlkZXY6IHRoZSBQSFkgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzQwLSAqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzQxOiAqIFJlbGVhc2UgdGhlIFNGUCByZXNvdXJjZXMgc2V0IHVwIGJ5IGEgc3VjY2Vzc2Z1bCBwaHlfc2ZwX3Byb2JlKCkuIFVucmVnaXN0ZXJcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3NDItICogdGhlIHVwc3RyZWFtIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBwaHlfcG9ydCwgc28gU0ZQIHVwc3RyZWFtIGNhbGxiYWNrcyBjYW5ub3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzU2NT1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTc5LVxcdGlmICghcGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTgwOlxcdFxcdHJldCA9IHBoeV9zZnBfcHJvYmUocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1ODEtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NDk6MDMuMTg5MjMyNjI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNDUyMzMxNTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHdoYXQgdGhlIGBwaHlfc2ZwX3Byb2JlYCBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBhY2NvbXBsaXNoLiBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGxhbmRzY2FwZSBvZiBTRlAgbW9kdWxlcywgYW5kIEknbSBpbnRlcmVzdGVkIGluIHRoZSBzcGVjaWZpY3MgaGVyZS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgcGh5c2ljYWwgbGF5ZXIgaW50ZXJmYWNlIGFuZCBsaWtlbHkgaW52b2x2ZXMgZGV0ZWN0aW5nIGFuZCBjb25maWd1cmluZyBhbiBTRlAgbW9kdWxlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3Qgc3RlcHMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIGFuZCB3aGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXQncyBnb3QuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCdzIGZvbGxvd2luZyBiZXN0IHByYWN0aWNlcyBmb3IgdGhpcyB0eXBlIG9mIHByb2JlIGZ1bmN0aW9uLiBMZXQncyBzZWUgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IFNGUCB0eXBlcyBhbmQgcG90ZW50aWFsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4gSSdtIGFsc28gY3VyaW91cyBpZiBpdCBpbmNsdWRlcyBhbnkgdmVuZG9yLXNwZWNpZmljIGhhbmRsaW5nLiBUaGlzIGlzIHJpZ2h0IGluIG15IHdoZWVsaG91c2UsIHNvIEknbSBleGNpdGVkIHRvIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY5NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjQ5OjI2LjY0MTU2NzA5MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzA0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzA0OlxcdCAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcXG4xNzA1OlxcdCAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZVxcbjE3MDY6XFx0ICovXFxuMTcwNzpcXHRzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNzA4OlxcdHtcXG4xNzA5OlxcdFxcdHN0cnVjdCBzZnBfYnVzICpidXM7XFxuMTcxMDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xNzExOlxcdFxcbjE3MTI6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKSB7XFxuMTcxMzpcXHRcXHRcXHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKTtcXG4xNzE0OlxcdFxcdFxcdGlmIChJU19FUlIoYnVzKSlcXG4xNzE1OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1cyk7XFxuMTcxNjpcXHRcXG4xNzE3OlxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IGJ1cztcXG4xNzE4OlxcdFxcbjE3MTk6XFx0XFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuMTcyMDpcXHRcXHRcXHRzZnBfYnVzX3B1dChidXMpO1xcbjE3MjE6XFx0XFxuMTcyMjpcXHRcXHRcXHRpZiAocmV0KVxcbjE3MjM6XFx0XFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gTlVMTDtcXG4xNzI0OlxcdFxcdH1cXG4xNzI1OlxcdFxcbjE3MjY6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VzZnBfYnVzKSB7XFxuMTcyNzpcXHRcXHRcXHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcXG4xNzI4OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xNzI5OlxcdFxcdFxcdFxcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyk7XFxuMTczMDpcXHRcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBOVUxMO1xcbjE3MzE6XFx0XFx0XFx0fVxcbjE3MzI6XFx0XFx0fVxcbjE3MzM6XFx0XFxuMTczNDpcXHRcXHRyZXR1cm4gcmV0O1xcbjE3MzU6XFx0fVxcbjE3MzY6XFx0XFxuMTczNzpcXHQvKipcXG4xNzM4OlxcdCAqIHBoeV9zZnBfcmVsZWFzZSAtIHJlbGVhc2UgcmVzb3VyY2VzIHNldCB1cCBieSBwaHlfc2ZwX3Byb2JlKClcXG4xNzM5OlxcdCAqIEBwaHlkZXY6IHRoZSBQSFkgZGV2aWNlXFxuMTc0MDpcXHQgKlxcbjE3NDE6XFx0ICogUmVsZWFzZSB0aGUgU0ZQIHJlc291cmNlcyBzZXQgdXAgYnkgYSBzdWNjZXNzZnVsIHBoeV9zZnBfcHJvYmUoKS4gVW5yZWdpc3RlclxcbjE3NDI6XFx0ICogdGhlIHVwc3RyZWFtIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBwaHlfcG9ydCwgc28gU0ZQIHVwc3RyZWFtIGNhbGxiYWNrcyBjYW5ub3RcXG4xNzQzOlxcdCAqIHJhY2Ugd2l0aCBwb3J0IGRlc3RydWN0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo0OToyNi42NDE4MDQ4NzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIxMjQ3Mjc2MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFFFTVUgLyBTRlAgQ29udW5kcnVtKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gQ2FuIEkgZXZlbiAqdGhpbmsqIGFib3V0IGNyZWF0aW5nIFNGUCBjYWdlcyBvciBkZXZpY2VzIGluIFFFTVU/IFRoYXQncyB0aGUgZmlyc3QgcXVlc3Rpb24uIEJ1dCB3YWl0LCBkb2VzIFFFTVUgYWN0dWFsbHkgKmVtdWxhdGUqIHRoZSBwaHlzaWNhbCBTRlAgY2FnZXMgdGhlbXNlbHZlcywgb3IgaXMgaXQgbW9yZSBmb2N1c2VkIG9uIGVtdWxhdGluZyB0aGUgSTJDIGludGVyZmFjZSBvZiBTRlAgbW9kdWxlcz8gT3IsIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc3RhbmRhcmQgaGFyZHdhcmUgcmVwcmVzZW50YXRpb24gdGhhdCBRRU1VIHByb3ZpZGVzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LlxuXG5MZXQgbWUgYnJlYWsgZG93biB0aGUgZXhpc3RpbmcgY3JpdGVyaWEgdG8gc2VlIGlmIEknbSBldmVuIGluIHRoZSBiYWxscGFyay4gVGhlIGNyaXRlcmlhIGZvciBXb3J0aEZ1enppbmc9ZmFsc2UgYXJlIHByZXR0eSBzcGVjaWZpYy4gTW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgbG9nZ2luZywgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBjb25zdGFudHMsIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIOKAkyB0aG9zZSBhcmUgYWxsIG9idmlvdXMgZmxhZ3MuIEJ1dCB3aGF0IGFib3V0IHRoZSByZWFsbHkgc3BlY2lmaWMgZXhhbXBsZXM/IFBDSWUgc3dpdGNoLCBTbWFydE5JQywgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHJlYWwgaGFyZHdhcmU/IE9rYXksIHRoYXQgaGVscHMgdG8gY2xhcmlmeSB0aGUgYm91bmRhcmllcy4gQW5kIHRoZW4gdGhlIC5yZW1vdmUvLnNodXRkb3duIGNhbGxiYWNrcyBkdXJpbmcgdW5iaW5kIG9wZXJhdGlvbnMsIHRoYXQncyBub3Qgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbk5vdywgZm9jdXNpbmcgYmFjaywgd2hhdCBhYm91dCB0aGUgSTJDL01ESU8vU0ZQIHNpdHVhdGlvbj8gVGhpcyBmZWVscyBsaWtlIHRoZSBjcml0aWNhbCBxdWVzdGlvbi4gQ2FuIEkyQyBkZXZpY2VzIG9yIFNGUCBtb2R1bGVzIGJlIGFjY2Vzc2VkIHdpdGhpbiBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBhdCBhbGw/IEhvdyBkb2VzIFFFTVUgYW5kIExpbnV4IGdlbmVyYWxseSBkZWFsIHdpdGggdGhlIGludGVyZmFjZSBiZXR3ZWVuIEkyQyBhbmQgU0ZQPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LlxuXG5JcyBTRlAgaGFuZGxlZCBhcyBhbiBcIk9GXCIgKE9wZW4gRmlybXdhcmUpIG9yIHBsYXRmb3JtIGRldmljZT8gRG9lcyBpdCByZXF1aXJlIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciBhbiBTRlAgY2FnZSwgYWxvbmdzaWRlIHRoZSBwaHlzaWNhbCBvciBlbXVsYXRlZCBJMkMgdHJhbnNjZWl2ZXIgbW9kdWxlPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0J3MgdGhlIHNldHVwLiBDYW4gSSBqdXN0IGluc3RhbnRpYXRlIGFuIFNGUCB1c2luZyBpMmMtZGV2IC8gaTJjLXN0dWIsIG9yIGFtIEkgc3R1Y2sgd2l0aCBhIHBsYXRmb3JtIGRldmljZSBzY2VuYXJpbz8gSSdtIGdvaW5nIHRvIHNlYXJjaCBmb3IgdGhvc2UgZHJpdmVycywgb3IgYnVzZXMsIG9yIGFsbG9jIGZ1bmN0aW9uczogYHNmcF9kcml2ZXJgLCBgc2ZwX2J1c2AsIGBzZnBfYWxsb2NgIG1pZ2h0IGJlIHRoZSBrZXl3b3JkcyBJIG5lZWQuIEkgaG9wZSBJIGNhbiBtYWtlIHRoaXMgZnV6emFibGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTM3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTk6NTE6MjcuODg5MTA0NTY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY1MTIwNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNmcF9idXNfYWRkX3Vwc3RyZWFtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTcwNz1zdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxOC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MTk6XFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzIwLVxcdFxcdHNmcF9idXNfcHV0KGJ1cyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM1NjU9c3RhdGljIGludCBwaHlfc2V0dXBfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3Ni1cXHQgKiBiaW5kaW5nIG9jY3VycyB3aXRoIFJUTkwgaGVscCwgd2hpY2ggd2lsbCBkZWFkbG9jayB0aGUgY2FsbCB0b1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU3NzpcXHQgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3OC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTc2OD1zdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTc4NC1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE3ODU6XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwbCwgXFx1MDAyNnNmcF9waHlsaW5rX29wcyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xNzg2LVxcdHNmcF9idXNfcHV0KGJ1cyk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jPTYzNT1FWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX2ZpbmRfZndub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMtNjM3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmM6NjM4OiAqIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgLSBwYXJzZSBhbmQgcmVnaXN0ZXIgdGhlIG5laWdoYm91cmluZyBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTYzOS0gKiBAYnVzOiB0aGUgXFx1MDAyNnN0cnVjdCBzZnBfYnVzIGZvdW5kIHZpYSBzZnBfYnVzX2ZpbmRfZndub2RlKClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMtNjU2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmM6NjU3OmludCBzZnBfYnVzX2FkZF91cHN0cmVhbShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzLCB2b2lkICp1cHN0cmVhbSxcXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY1OC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMtNjg0LX1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jOjY4NTpFWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX2FkZF91cHN0cmVhbSk7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYy02ODYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jLTY5MS0gKiBEZWxldGUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdXBzdHJlYW0gY29ubmVjdGlvbiBmb3IgdGhlIFNGUFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmM6NjkyOiAqIG1vZHVsZS4gQGJ1cyBzaG91bGQgaGF2ZSBiZWVuIGFkZGVkIGJ5IHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkuXFxuZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYy02OTMtICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oPTU5Mz1zdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX2J1c19maW5kX2Z3bm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG5pbmNsdWRlL2xpbnV4L3NmcC5oOjU5NDppbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXFxuaW5jbHVkZS9saW51eC9zZnAuaC01OTUtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZnAuaD02NDg9c2ZwX2J1c19maW5kX2Z3bm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZnAuaC02NTItXFxuaW5jbHVkZS9saW51eC9zZnAuaDo2NTM6c3RhdGljIGlubGluZSBpbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXFxuaW5jbHVkZS9saW51eC9zZnAuaC02NTQtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjUxOjMwLjA1NDIzMTEwMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDcwMDc4MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU0ZQIENhZ2VzIGFuZCBSb2xsQmFsbCBQSFlzOiBBIEZlYXNpYmlsaXR5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcgU0ZQIGNhZ2VzIGFuZCBkZXZpY2VzLiBDYW4gdGhpcyBldmVuIGJlIGRvbmU/IEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgU0ZQIGFjdHVhbGx5IHdvcmtzLiBBbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd246IEEgY2FnZSBpcyBkZWNsYXJlZCBpbiB0aGUgRGV2aWNlIFRyZWUsIG1heWJlIHVzaW5nIE9GIG9uIEFSTSwgTUlQUywgb3IgQUNQSSBib2FyZHMuIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIHBsYXRmb3JtIGRldmljZSwgYWNjZXNzaW5nIGFuIEkyQyBidXMgbGlua2VkIHRvIHRoZSBjYWdlLiBXaGVuIGEgbW9kdWxlIHBsdWdzIGluLCB0aGUgc3RhdGUgbWFjaGluZSBzdGFydHMsIHJlYWRpbmcgdGhlIEVFUFJPTSB2aWEgSTJDIGF0IDB4NTAgYW5kIDB4NTEuIElmIHRoZSBFRVBST00gbWF0Y2hlcyBhIFJvbGxCYWxsIHF1aXJrLCB0aGUgYG1kaW9fcHJvdG9jb2xgIGlzIHNldC4gVGhlbiwgd2Ugc2VlIGBzZnBfc21fYWRkX21kaW9fYnVzYCBhbmQgYG1kaW9faTJjX2FsbG9jYCwgdWx0aW1hdGVseSBsZWFkaW5nIHRvIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYC5cblxuQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFjaCB0aGlzIGluIHN5emthbGxlciBvciBRRU1VPyBBbmQgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byB0aGluayBjYXJlZnVsbHkuIERvZXMgc3RhbmRhcmQgUUVNVSAoeDg2XzY0IG9yIGFybTY0KSBldmVuIGVtdWxhdGUgYW4gU0ZQIGNhZ2Ugb3IgUm9sbEJhbGwgUEhZPyBObywgaXQgZG9lc24ndC4gT2theSwgdGhhdCdzIGEgZGVhZCBlbmQuIEJ1dCB3YWl0LCB0aGVyZSdzIGEgZ3VpZGVsaW5lIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgd29ydGhpbmVzcyBmb3IgZnV6emluZy4gSXQgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoYXQncyBhIG1ham9yIGNvbnNpZGVyYXRpb24uIFN0dWZmIGxpa2UgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb25zdGFudHMgdGhhdCBkb24ndCBhbHRlciBleGVjdXRpb24gZmxvdywgb3IgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIFFFTVUgYXJlIG91dC4gU28sIGRvZXMgU0ZQIG9yIE1ESU8tSTJDICphY3R1YWxseSogaGF2ZSBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGhvb2tzP1xuXG5SaWdodCwgbGV0J3MgbG9vayBhdCBzeXprYWxsZXIuIERvZXMgaXQgaGF2ZSBhbnkgZGVzY3JpcHRpb25zIGZvciB0aGluZ3MgbGlrZSBtZGlvLCBzZnAsIHBoeWxpbmssIG9yIGV0aHRvb2w/IFN5emthbGxlciBydW5zIGluIFFFTVUgKHg4Nl82NCwgYXJtNjQpIG9yIEdDRS4gQ2FuIEkgaW5zdGFudGlhdGUgU0ZQIGNhZ2VzIGluIHRob3NlIGVudmlyb25tZW50cz8gSSBuZWVkIHRvIGNoZWNrIGZvciBzeXNmcyBvciBpb2N0bCBpbnRlcmZhY2VzIHRoYXQgd291bGQgbGV0IG1lIGluc3RhbnRpYXRlIHBsYXRmb3JtIGRldmljZXMsIG9yIHNwZWNpZmljYWxseSBTRlAgb3IgcGh5bGluay4gVGhlIFNGUCBkcml2ZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCBtYXRjaGVzIHRoZSBPRiBub2RlIHdpdGggYGNvbXBhdGlibGUgPSBcInNmZixzZnBcImAuIFRoZW4gdGhlcmUncyBwbGF0Zm9ybSBkZXZpY2VzIHdpdGhvdXQgYW4gT0YgZGV2aWNlIHRyZWUgbm9kZS4gSW4gYHNmcF9wcm9iZWAsIGBzZnBfaTJjX2dldChzZnApYCBpcyBjYWxsZWQuIExldCdzIHNlZSB3aGF0ICp0aGF0KiBmdW5jdGlvbiBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo1MTozNy4xMjQzMTE1N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyODA6XFx0XFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKHNmcC1cXHUwMDNlaTJjX21paSk7XFxuMzI4MTpcXHRcXHRcXHRtZGlvYnVzX2ZyZWUoc2ZwLVxcdTAwM2VpMmNfbWlpKTtcXG4zMjgyOlxcdFxcdH1cXG4zMjgzOlxcdFxcdGlmIChzZnAtXFx1MDAzZWkyYylcXG4zMjg0OlxcdFxcdFxcdGkyY19wdXRfYWRhcHRlcihzZnAtXFx1MDAzZWkyYyk7XFxuMzI4NTpcXHRcXHRrZnJlZShzZnApO1xcbjMyODY6XFx0fVxcbjMyODc6XFx0XFxuMzI4ODpcXHRzdGF0aWMgaW50IHNmcF9pMmNfZ2V0KHN0cnVjdCBzZnAgKnNmcClcXG4zMjg5OlxcdHtcXG4zMjkwOlxcdFxcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpoO1xcbjMyOTE6XFx0XFx0c3RydWN0IGkyY19hZGFwdGVyICppMmM7XFxuMzI5MjpcXHRcXHRpbnQgZXJyO1xcbjMyOTM6XFx0XFxuMzI5NDpcXHRcXHRoID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldl9md25vZGUoc2ZwLVxcdTAwM2VkZXYpLCBcXFwiaTJjLWJ1c1xcXCIsIDApO1xcbjMyOTU6XFx0XFx0aWYgKElTX0VSUihoKSkge1xcbjMyOTY6XFx0XFx0XFx0ZGV2X2VycihzZnAtXFx1MDAzZWRldiwgXFxcIm1pc3NpbmcgJ2kyYy1idXMnIHByb3BlcnR5XFxcXG5cXFwiKTtcXG4zMjk3OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjMyOTg6XFx0XFx0fVxcbjMyOTk6XFx0XFxuMzMwMDpcXHRcXHRpMmMgPSBpMmNfZ2V0X2FkYXB0ZXJfYnlfZndub2RlKGgpO1xcbjMzMDE6XFx0XFx0aWYgKCFpMmMpIHtcXG4zMzAyOlxcdFxcdFxcdGVyciA9IC1FUFJPQkVfREVGRVI7XFxuMzMwMzpcXHRcXHRcXHRnb3RvIHB1dDtcXG4zMzA0OlxcdFxcdH1cXG4zMzA1OlxcdFxcbjMzMDY6XFx0XFx0ZXJyID0gc2ZwX2kyY19jb25maWd1cmUoc2ZwLCBpMmMpO1xcbjMzMDc6XFx0XFx0aWYgKGVycilcXG4zMzA4OlxcdFxcdFxcdGkyY19wdXRfYWRhcHRlcihpMmMpO1xcbjMzMDk6XFx0cHV0OlxcbjMzMTA6XFx0XFx0Zndub2RlX2hhbmRsZV9wdXQoaCk7XFxuMzMxMTpcXHRcXHRyZXR1cm4gZXJyO1xcbjMzMTI6XFx0fVxcbjMzMTM6XFx0XFxuMzMxNDpcXHRzdGF0aWMgaW50IHNmcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbjMzMTU6XFx0e1xcbjMzMTY6XFx0XFx0Y29uc3Qgc3RydWN0IHNmZl9kYXRhICpzZmY7XFxuMzMxNzpcXHRcXHRjaGFyICpzZnBfaXJxX25hbWU7XFxuMzMxODpcXHRcXHRzdHJ1Y3Qgc2ZwICpzZnA7XFxuMzMxOTpcXHRcXHRpbnQgZXJyLCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo1MTozNy4xMjQ0Njc3MzlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIwNzM3NjI2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0ZQL0kyQyBQYXRjaCdzIFdvcnRoaW5lc3MgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgc2ZwX2kyY19nZXRgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdCwgYW5kIGl0J3MgbWFraW5nIGEgZGlyZWN0IGNhbGwgdG8gYGZ3bm9kZV9maW5kX3JlZmVyZW5jZWAgdG8gbG9jYXRlIGFuIEkyQyBhZGFwdGVyLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGlzc3VlOiB0aGlzIGltcGxpZXMgYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIHNldHVwIGlzIHJlcXVpcmVkLiBXZSdyZSB0YWxraW5nIE9wZW5GaXJtd2FyZSAoRGV2aWNlIFRyZWUpIG9yIEFDUEkgd2l0aCBhIHByb3Blcmx5IGRlZmluZWQgSTJDIGJ1cyBub2RlLCBhbiB1cHN0cmVhbSBQSFkvbmV0d29yayBkZXZpY2UsIGFuZCBhICpyZWFsKiBvciBlbXVsYXRlZCBTRlAgdHJhbnNjZWl2ZXIgcmVzcG9uZGluZyB0byBJMkMgY29tbXVuaWNhdGlvbiAoRUVQUk9NIHF1ZXJpZXMsIFJvbGxCYWxsIHByb3RvY29sKS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCBhIG1pbnV0ZSwgY2FuIHRoaXMgZXZlbiBiZSByZWFsaXN0aWNhbGx5IHRlc3RlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50P1wiIEZyb20gZXhwZXJpZW5jZSwgSSBrbm93IHRoYXQgbmVpdGhlciBRRU1VIG5vciBHQ0Ugb2ZmZXJzIGFueSBzdGFuZGFyZCBzdXBwb3J0IGZvciBTRlAgY2FnZSBlbXVsYXRpb24sIG9yIGFueXRoaW5nIHRoYXQgd291bGQgc2ltdWxhdGUgdGhlIG5lY2Vzc2FyeSBSb2xsYmFsbCBJMkMgUEhZLiBUaGlzIHN1Z2dlc3RzIHRoaXMgY29kZSBwYXRoIGlzbid0IGVhc2lseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyB0byBjb25maXJtIG15IGh5cG90aGVzaXMuIE9rYXksIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBjaGFuZ2VzIHRoYXQgaW52b2x2ZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgUUVNVS9HQ0UsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZSwgc2hvdWxkIHJlc3VsdCBpbiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBmaXRzIHRoZSBiaWxsIGV4YWN0bHkuXG5cblRvIGJlIHRob3JvdWdoLCBsZXQncyBsb29rIGZvciBvdGhlciB1c2VzIG9mIGBtZGlvLWkyY2AgYW5kIGBzZnBgIGluIHRoZSBuZXR3b3JraW5nIGNvcmUgb3IgdmlydHVhbCBuZXR3b3JrIGRldmljZSBjb250ZXh0LiBXaGlsZSB0aGUgY29yZSBjaGVjayBpcyB0cmlnZ2VyZWQgYnkgdGhlIG9yaWdpbmFsIGxpbmUsIGxldCdzIGNvbmZpcm0gdGhpcyBjb25jbHVzaW9uIGJ5IGEgZnVsbCBzY2FuIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgaGVscCB1cyBjb25maXJtIG5vIG90aGVyIHBhcnRzIG9mIG5ldHdvcmtpbmcgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo1MTo0OS4xOTgyMzMyNTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDY2NTY2MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby1pMmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiTUFJTlRBSU5FUlM9MjQ5MDU9RjpcXHRkcml2ZXJzL25ldC9waHkvc2ZwKlxcbk1BSU5UQUlORVJTOjI0OTA2OkY6XFx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmhcXG5NQUlOVEFJTkVSUy0yNDkwNy1GOlxcdGluY2x1ZGUvbGludXgvcGh5bGluay5oXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTE1PW9iai0kKENPTkZJR19NRElPX0hJU0lfRkVNQUMpXFx0XFx0Kz0gbWRpby1oaXNpLWZlbWFjLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19NRElPX0kyQylcXHRcXHRcXHQrPSBtZGlvLWkyYy5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0xNy1vYmotJChDT05GSUdfTURJT19JUFE0MDE5KVxcdFxcdCs9IG1kaW8taXBxNDAxOS5vXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtMTMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzoxNDojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby9tZGlvLWkyYy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy0xNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvamlmZmllcy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvL21kaW8taTJjLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0xNTg9c3RhdGljIGNvbnN0IGVudW0gZ3Bpb2RfZmxhZ3MgZ3Bpb19mbGFnc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMC0vKiBTRlAgbW9kdWxlcyBhcHBlYXIgdG8gYWx3YXlzIGhhdmUgdGhlaXIgUEhZIGNvbmZpZ3VyZWQgZm9yIGJ1cyBhZGRyZXNzXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIyMTogKiAweDU2ICh3aGljaCB3aXRoIG1kaW8taTJjLCB0cmFuc2xhdGVzIHRvIGEgUEhZIGFkZHJlc3Mgb2YgMjIpLlxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjItICogUm9sbEJhbGwgU0ZQcyBhY2Nlc3MgcGh5IHZpYSBTRlAgRW5oYW5jZWQgRGlnaXRhbCBEaWFnbm9zdGljIEludGVyZmFjZVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjM6ICogdmlhIGFkZHJlc3MgMHg1MSAobWRpby1pMmMgd2lsbCB1c2UgUm9sbEJhbGwgcHJvdG9jb2wgb24gdGhpcyBhZGRyZXNzKS5cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjI0LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo1MTo1MS4zMDQ5MDQwNjZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzMDIwNTg5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXb3J0aGluZXNzIG9mIEZ1enppbmcgdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYWNoIG9mIHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG1kaW9faTJjYCBhbmQgYHNmcGAuIExvb2tpbmcgYXQgdGhlIGNvZGViYXNlLCBpdCdzIGNsZWFyIGBtZGlvLWkyYy5jYCBpcyBjb25kaXRpb25hbCDigJMgaXQgb25seSBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19NRElPX0kyQ2AgaXMgZW5hYmxlZCwgd2hpY2ggaXMgdWx0aW1hdGVseSBzZWxlY3RlZCBieSBgQ09ORklHX1NGUGAgaW4gdGhlIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgZmlsZS4gQW5kLCBgc2ZwLmNgIG9ubHkgZ2V0cyBsb2FkZWQvcHJvYmVkIHdoZW4gdGhlcmUncyBhbiBTRlAgbm9kZSBpbiB0aGUgZGV2aWNlIHRyZWUgb3IgQUNQSSB3aXRoIGNlcnRhaW4gcHJvcGVydGllcyB0aGF0IGNvbm5lY3RzIHRvIGFuIEkyQyBidXMuIEVzc2VudGlhbGx5LCB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUtc3BlY2lmaWMgY29kZS5cblxuTm93LCBmb2N1c2luZyBvbiAqdGhpcyogc3BlY2lmaWMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQncyBkb2luZyBhIGZldyB0aGluZ3MuIEZpcnN0LCB0aGVyZSdzIGEgbmV3IHF1aXJrIGZvciBcIk9FTSBTRlAtMTBHLVQtSVwiIGNvcHBlciB0cmFuc2NlaXZlcnMg4oCTIHRoYXQgc2NyZWFtcyBoYXJkd2FyZS1zcGVjaWZpYy4gU2Vjb25kLCBpdCdzIGhhbmRsaW5nIHRoZSBgLUVOT0RFVmAgZXJyb3IgZnJvbSBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZSgpYCwgd2hpY2ggaW52b2x2ZXMgc2V0dGluZyBgc2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FYC4gVGhpcmQsIGl0J3MgaW1wbGVtZW50aW5nIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKClgIHRvIGNoZWNrIGZvciBSb2xsQmFsbCBNRElPIHByb3RvY29sIHN1cHBvcnQuXG5cblRoZSBjb21tb24gdGhyZWFkIGhlcmU/IEFsbCBvZiB0aGlzIGlzIHRpZWQgdG8gdGhlIHBoeXNpY2FsIGxheWVyIOKAkyBTRlAgY2FnZXMsIFNGUCsgY29wcGVyIG1vZHVsZXMgY29ubmVjdGVkIHZpYSBJMkMsIGFuZCB0aGUgUm9sbEJhbGwgcHJvdG9jb2wuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBgaTJjX21paV9wcm9iZV9yb2xsYmFsbCgpYCBpcyB0cnlpbmcgdG8gZG8gSTJDIHJlYWQgYW5kIHdhaXQgZm9yIGhhcmR3YXJlIHNwZWNpZmljIHJlc3BvbnNlLiBUaGlzIG1lYW5zIGl0ICpuZWVkcyogcmVhbCBoYXJkd2FyZSB0byBmdW5jdGlvbi5cblxuU28sIHRoZSBrZXkgaXMgdGhlIGluc3RydWN0aW9ucy4gVGhleSBzdGF0ZSB0aGF0IHRoZSBwYXRjaCBpcyBcIldvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuLi5cIi4gVGhpcyBjb2RlIHBhdGgsIHdpdGggaXRzIGRlcGVuZGVuY2Ugb24gcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYW5kIHRoZSBSb2xsQmFsbCBwcm90b2NvbCwgaXMgYWJzb2x1dGVseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEV2ZW4gZW11bGF0aW5nIHRoZSBJMkMgYnVzIGl0c2VsZiB3b3VsZG4ndCBiZSBlbm91Z2guIFdlIG5lZWQgdGhlIHBoeXNpY2FsIFNGUCBjYWdlIGFuZCB0aGUgcGh5c2ljYWwgdHJhbnNjZWl2ZXIgd2l0aCB0aGUgUm9sbEJhbGwgcHJvdG9jb2wuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgcmV2aWV3aW5nIGFsbCB0aGUgZGV0YWlscywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nOlxuXG4qICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9sczogW11gXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtdYFxuXG5UaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhcjogVGhpcyBwYXRjaCBtb2RpZmllcyBjb2RlIHNwZWNpZmljIHRvIHBoeXNpY2FsIFNGUC9TRlArIHRyYW5zY2VpdmVyIG1vZHVsZXMgYW5kIGNhZ2VzIGNvbm5lY3RlZCB2aWEgSTJDLiBUaGlzIGlzIGltcG9zc2libGUgdG8gZW11bGF0ZSBvciByZWFjaCBpbiBhIHZpcnR1YWxpemVkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBUaW1lIHRvIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4OTMsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE5OjUyOjEwLjYwNjk2NDc1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBtb2RpZnkgUm9sbEJhbGwgTURJTy1vdmVyLUkyQyBwcm90b2NvbCBpbml0aWFsaXphdGlvbiAoZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jKSBhbmQgU0ZQIG1vZHVsZSBxdWlyay9idXMgaGFuZGxpbmcgKGRyaXZlcnMvbmV0L3BoeS9zZnAuYykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBTRlAgY2FnZXMgYW5kIFNGUCB0cmFuc2NlaXZlciBoYXJkd2FyZSBjb21tdW5pY2F0aW5nIG92ZXIgSTJDLCB3aGljaCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgc3VjaCBhcyBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IFJvbGxCYWxsIE1ESU8tb3Zlci1JMkMgcHJvdG9jb2wgaW5pdGlhbGl6YXRpb24gKGRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYykgYW5kIFNGUCBtb2R1bGUgcXVpcmsvYnVzIGhhbmRsaW5nIChkcml2ZXJzL25ldC9waHkvc2ZwLmMpLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgU0ZQIGNhZ2VzIGFuZCBTRlAgdHJhbnNjZWl2ZXIgaGFyZHdhcmUgY29tbXVuaWNhdGluZyBvdmVyIEkyQywgd2hpY2ggYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHN1Y2ggYXMgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxOTo1MjoxMC42MDY5OTA2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowwmzmf[1] Phase: Running StartedAt: 2026-08-31 19:52:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmzmf[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-31 19:52:22 +0000 UTC FinishedAt: 2026-08-31 19:52:28 +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,}