Name: series-workflownxgbs Phase: Failed StartedAt: 2026-07-03 05:17:13 +0000 UTC FinishedAt: 2026-07-03 05:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflownxgbs[0] Phase: Succeeded StartedAt: 2026-07-03 05:17:13 +0000 UTC FinishedAt: 2026-07-03 05:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownxgbs[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 05:17:13 +0000 UTC FinishedAt: 2026-07-03 05:43:16 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgYGlkcGZfbWJfaW50cl9yZXFfaXJxYCB3aXRoaW4gdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgUENJIGRyaXZlci4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uIGFmdGVyIGEgc3VjY2Vzc2Z1bCBoYXJkd2FyZSByZXNldCBjaGVjayAoYGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGVgKSwgd2hpY2ggcmVxdWlyZXMgcmVhZGluZyBzcGVjaWZpYyB2YWx1ZXMgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMgKFBDSSBCQVJzKS4gU2luY2Ugc3l6a2FsbGVyIGFuZCB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgZG8gbm90IGVtdWxhdGUgSURQRiBoYXJkd2FyZSwgdGhlIHJlc2V0IGNoZWNrIHdpbGwgZmFpbCwgbWFraW5nIHRoaXMgY29kZSBwYXRoIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYzY2M0MjlkMjgyNGNiZDRiNjE2ZmVkNTM3NDY5MmE3MzJkYjY0NzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDA1OjQxOjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuaW5kZXggY2Y5NjZmZTZjNzU5Y2UuLmJiODFlNjIwYzVjODdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbkBAIC0xMzksNyAmIzQzOzEzOSw3IEBAIHN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX3JlcV9pcnEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFwmIzM0O0lSUSByZXF1ZXN0IGZvciBtYWlsYm94IGZhaWxlZCwgZXJyb3I6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuLVxuJiM0MztcdFx0a2ZyZWUobmFtZSk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgaWRwZl9tYl9pbnRyX3JlcV9pcnFgIHdpdGhpbiB0aGUgSW50ZWwgSURQRiAoSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uKSBQQ0kgZHJpdmVyLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBzdWNjZXNzZnVsIGhhcmR3YXJlIHJlc2V0IGNoZWNrIChgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWApLCB3aGljaCByZXF1aXJlcyByZWFkaW5nIHNwZWNpZmljIHZhbHVlcyBmcm9tIGhhcmR3YXJlIHJlZ2lzdGVycyAoUENJIEJBUnMpLiBTaW5jZSBzeXprYWxsZXIgYW5kIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSBkbyBub3QgZW11bGF0ZSBJRFBGIGhhcmR3YXJlLCB0aGUgcmVzZXQgY2hlY2sgd2lsbCBmYWlsLCBtYWtpbmcgdGhpcyBjb2RlIHBhdGggdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmM2NjNDI5ZDI4MjRjYmQ0YjYxNmZlZDUzNzQ2OTJhNzMyZGI2NDc2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAwNTo0MTozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYwppbmRleCBjZjk2NmZlNmM3NTljZS4uYmI4MWU2MjBjNWM4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMKQEAgLTEzOSw3ICYjNDM7MTM5LDcgQEAgc3RhdGljIGludCBpZHBmX21iX2ludHJfcmVxX2lycShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKQogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwKIAkJCSYjMzQ7SVJRIHJlcXVlc3QgZm9yIG1haWxib3ggZmFpbGVkLCBlcnJvcjogJWRcbiYjMzQ7LCBlcnIpOwotCiYjNDM7CQlrZnJlZShuYW1lKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBGaXggaW4gdGhlIEludGVsIElEUEYgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDogdGhleSYjMzk7dmUgYWRkZWQgYGtmcmVlKG5hbWUpO2AgaW4gdGhlIGVycm9yIHBhdGggb2YgYGlkcGZfbWJfaW50cl9yZXFfaXJxYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgbWVtb3J5IGxlYWsgZml4LiBHb29kIGNhdGNoLgoKTm93LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcg4oCTIGlzIHRoaXMgSW50ZWwgSURQRiBkcml2ZXIgZXZlbiAqcmVsZXZhbnQqIGluIHRoZSBlbnZpcm9ubWVudHMgSSB0eXBpY2FsbHkgZGVhbCB3aXRoPyBJRFBGIGlzIGFuIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBkcml2ZXIsIHJpZ2h0PyBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgYXJlIHVzdWFsbHkgdHJpY2t5IHRvIHRyaWdnZXIgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHVubGVzcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHZlcnkgc3BlY2lmaWMgZW11bGF0aW9uIG9yIGEgZ2VuZXJpYyBmcmFtZXdvcmsgdHJpY2tlcnkuIEJ1dCB3YWl0IGEgbWludXRlLCB0aGUgcGVubnkganVzdCBkcm9wcGVkLiBJRFBGIGlzIGEgUENJIGRldmljZSBkcml2ZXIsIGlzbiYjMzk7dCBpdD8gT2theSwgdGhhdCBjaGFuZ2VzIHRoaW5ncy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2x1ZXMgdGhlcmUgYWJvdXQgaXRzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGRlcGVuZGVuY2llcy4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiBpdCYjMzk7cyBtb3JlIHdpZGVseSB1c2VkIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSURQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzo0OmNvbmZpZyBJRFBGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnPTE3PWlmIElEUEZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0xOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzoxOTpjb25maWcgSURQRl9TSU5HTEVRXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMjAtXHRib29sIFwmIzM0O2lkcGYgc2luZ2xlcSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJRFBGIEVtdWxhdGlvbiBGZWFzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0ZXN0aW5nIElEUEYgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBJRFBGIGlzIGEgUENJIGRyaXZlci4gVGhhdCBtZWFucywgcmVhbGlzdGljYWxseSwgSSBuZWVkIGEgc3BlY2lmaWMgZW11bGF0ZWQgZGV2aWNlIGluIFFFTVUgdGhhdCAqcmVwcmVzZW50cyogSURQRi4gV2l0aG91dCB0aGF0LCB0aGVyZSYjMzk7cyBubyBkaXJlY3QgcGF0aCBmb3IgbWUgdG8gYWN0dWFsbHkgcmVhY2ggdGhlIGRyaXZlci4gU28sIG15IG5leHQgc3RlcCBpcyB0byBhY3R1YWxseSBpbnZlc3RpZ2F0ZSBpZiBhbnkgZm9ybSBvZiBJRFBGIGVtdWxhdGlvbiBleGlzdHMgd2l0aGluIFFFTVUuCgpHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIHVzdWFsbHkgY2hlY2sgZm9yIHRoZSBjb21tb24gSW50ZWwgTklDIGVtdWxhdGlvbnMgZmlyc3Qg4oCTIGUxMDAwLCBlMTAwMGUsIGlnYiwgdGhvc2UgYXJlIHByZXR0eSBzdGFuZGFyZC4gQnV0IElEUEYgaXMgcmVsYXRpdmVseSBuZXcsIHNwZWNpZmljYWxseSBmb3IgSW50ZWwmIzM5O3MgSVBVLCBvciBJbmZyYXN0cnVjdHVyZSBQcm9jZXNzaW5nIFVuaXQuIEl0JiMzOTtzIG5vdCBhIGNvbW1vbiBOSUMuIEkmIzM5O2QgYmUgc3VycHJpc2VkIGlmIFFFTVUgKmRpZCogaGF2ZSBhbnl0aGluZyBvdXQgb2YgdGhlIGJveCBmb3IgSURQRi4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHN1cHBvcnQuIEFzIGEgUENJIGRyaXZlciwgaXQgd291bGQgcmVxdWlyZSBhIHNwZWNpZmljIFBDSSBJRCB0byBmdW5jdGlvbiwgcmlnaHQ/IFNvLCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGNvZGUgZm9yIGEgbW9tZW50IGFuZCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uY2AgdG8gbG9vayBmb3IgdGhvc2UgUENJIElEcy4gVGhhdCB3b3VsZCBnaXZlIG1lIHNvbWV0aGluZyBjb25jcmV0ZSB0byB3b3JrIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UENJX0RFVklDRS4qSURQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHBmX3BjaV90YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM3OC1cdHsgUENJX1ZERVZJQ0UoSU5URUwsIElEUEZfREVWX0lEX1ZGKX0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjM3OTpcdHsgUENJX0RFVklDRV9DTEFTUyhJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGLCB+MCl9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODAtXHR7IC8qIFNlbnRpbmVsICovIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIE5ldHdvcmsgRGV2aWNlIENsYXNzIERlZmluaXRpb24qKgoKQWxyaWdodCwgdGhhdCBsaW5lIC0gYFBDSV9ERVZJQ0VfQ0xBU1MoSURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRiwgfjApYCAtIGltbWVkaWF0ZWx5IGNhdWdodCBteSBhdHRlbnRpb24uIFRoZSBgUENJX0RFVklDRV9DTEFTU2AgbWFjcm8gaXMsIG9mIGNvdXJzZSwgYSB3YXkgdG8gZGVmaW5lIHRoZSBQQ0kgZGV2aWNlIGNsYXNzIGNvZGUuIEJ1dCB3aGF0JiMzOTtzIHRoZSBzaWduaWZpY2FuY2Ugb2YgYElEUEZfQ0xBU1NfTkVUV09SS19FVEhFUk5FVF9QUk9HSUZgIHNwZWNpZmljYWxseT8gQW5kIG1vcmUgY3J1Y2lhbGx5LCB0aGF0IGJpdG1hc2sgYH4wYCBpcyBnb2luZyB0byByZXF1aXJlIGZ1cnRoZXIgaW5zcGVjdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgY2xhc3MuIFdlIGFyZSBsb29raW5nIGF0IGEgKnZlcnkgc3BlY2lmaWMqIEV0aGVybmV0IGRldmljZSBjbGFzcyBoZXJlLiBMZXQmIzM5O3MgZGVsdmUgaW50byB3aGF0IHRoaXMgcGFydGljdWxhciBpZGVudGlmaWVyIHJlcHJlc2VudHMuIE5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgSURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRmAgdG8gdW5kZXJzdGFuZCB0aGlzIGRldmljZSYjMzk7cyBpbnRlbmRlZCBmdW5jdGlvbiBtb3JlIGNvbXBsZXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMTEtI2RlZmluZSBJRFBGX05FVFdPUktfRVRIRVJORVRfUFJPR0lGXHRcdFx0XHQweDAxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjEyOiNkZWZpbmUgSURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRlx0XHRcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTEzLVx0KFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIFx1MDAzY1x1MDAzYyA4IHwgSURQRl9ORVRXT1JLX0VUSEVSTkVUX1BST0dJRilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jPTU2PXN0YXRpYyBpbnQgaWRwZl9kZXZfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjYxOlx0aWYgKGVudC1cdTAwM2VjbGFzcyA9PSBJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTYyLVx0XHRyZXQgPSBpZHBmX2dldF9kZXZpY2VfdHlwZShhZGFwdGVyLVx1MDAzZXBkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHBmX3BjaV90YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM3OC1cdHsgUENJX1ZERVZJQ0UoSU5URUwsIElEUEZfREVWX0lEX1ZGKX0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjM3OTpcdHsgUENJX0RFVklDRV9DTEFTUyhJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGLCB+MCl9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODAtXHR7IC8qIFNlbnRpbmVsICovIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBTeXprYWxsZXItVHJpZ2dlcmVkIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGNvZGUgdGFyZ2V0cyBQQ0kgZGV2aWNlcywgc3BlY2lmaWNhbGx5IHRob3NlIGNsYXNzaWZpZWQgYXMgbmV0d29yayBFdGhlcm5ldCAoYFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUYCkgd2l0aCBhIHByb2dyYW1taW5nIGludGVyZmFjZSBvZiBgMHgwMWAuIEhtbSwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjb3VsZCB0aGlzIGJlIHRyaWdnZXJlZCBieSBhIGdlbmVyaWMgUENJIGRldmljZSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBJZiBzeXprYWxsZXIgd2VyZSB0byBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggdGhpcyBjbGFzcywgY291bGQgaXQgcG90ZW50aWFsbHkgcHJvYmUgdGhpcyBkcml2ZXI/IFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0IHN5emthbGxlciAqdXN1YWxseSogZG9lc24mIzM5O3QgZ28gYXJvdW5kIGluamVjdGluZyBhcmJpdHJhcnkgUENJIGRldmljZXMgd2l0aCBhIHZlcnkgc3BlY2lmaWMgY2xhc3MgdW5sZXNzIHRoZXJlJiMzOTtzIGFuIGVzdGFibGlzaGVkIFBDSSBmdXp6aW5nIGZyYW1ld29yayBpbiBwbGFjZS4gTm93LCB2aGNpIGlzIG9uZSwgYnV0IHRoZXJlIGlzbiYjMzk7dCBvbmUgdXBzdHJlYW0gaW4gTGludXggZm9yIFBDSS4KClJpZ2h0LCBJJiMzOTttIHJlbWluZGluZyBteXNlbGYgbm93LCB0aGVyZSBpcyAqc29tZSogUENJIGZ1enppbmcgY2FwYWJpbGl0eSB3aXRoaW4gc3l6a2FsbGVyLCBidXQgaXQmIzM5O3MgcmF0aGVyIGxpbWl0ZWQuIEFuZCB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyLCBJRFBGLCBkZW1hbmRzIGNlcnRhaW4gaGFyZHdhcmUgaW50ZXJhY3Rpb25zIC0gYSBtYWlsYm94IHN5c3RlbSBhbmQgc28gZm9ydGguIFRoZSBjcnVjaWFsIHRoaW5nIHRvIHZlcmlmeSBpcyB3aGV0aGVyIGBpZHBmX21iX2ludHJfcmVxX2lycWAgaXMgYWNjZXNzaWJsZS4gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBJIG5lZWQgdG8gY2hlY2sgaWYgaXQmIzM5O3MgcmVhY2hhYmxlLiBUaGF0JiMzOTtzIHRoZSBrZXk6IGNhbiB3ZSBnZXQgdGhpcyBpbnRlcnJ1cHQgcmVxdWVzdCBmdW5jdGlvbiB0byBiZSBpbnZva2VkPyBJZiBzbywgdGhpcyBtaWdodCBwcm92aWRlIHVzIHdpdGggYSBzdGFydGluZyBwb2ludCBmb3IgdnVsbmVyYWJpbGl0eSByZXNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl9tYl9pbnRyX3JlcV9pcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTE1PXN0YXRpYyB2b2lkIGlkcGZfbWJfaXJxX2VuYWJsZShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xMjUtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTI2OiAqIGlkcGZfbWJfaW50cl9yZXFfaXJxIC0gUmVxdWVzdCBpcnEgZm9yIHRoZSBtYWlsYm94IGludGVycnVwdFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyNy0gKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmUgdG8gcGFzcyB0byB0aGUgbWFpbGJveCBpcnEgaGFuZGxlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyOC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxMjk6c3RhdGljIGludCBpZHBmX21iX2ludHJfcmVxX2lycShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEzMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE1NT1zdGF0aWMgaW50IGlkcGZfbWJfaW50cl9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxNjA6XHRyZXR1cm4gaWRwZl9tYl9pbnRyX3JlcV9pcnEoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgQ2FsbCB0byBgaWRwZl9tYl9pbnRyX2luaXRgKioKCk9rYXksIHNvIEkgc2VlIGBpZHBmX21iX2ludHJfaW5pdGAuICBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXMsICp3aGVyZSogaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2sgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGluaXRpYXRpbmcgdGhpcyBpbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gSXMgaXQgZHVyaW5nIGRyaXZlciBwcm9iZSwgYSBtb2R1bGUgbG9hZCwgb3IgcGVyaGFwcyBzb21lIGxhdGVyIHN0YWdlIG9mIHN5c3RlbSBpbml0aWFsaXphdGlvbj8gIElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBkZXZpY2UsIG9yIGlzIGl0IGEgbW9yZSBnZW5lcmFsIHNldHVwPyBHZXR0aW5nIHRoYXQgYnJvYWRlciBwaWN0dXJlIGlzIHRoZSBrZXkgdG8gZWZmaWNpZW50IGRlYnVnZ2luZyBvciBtb2RpZmljYXRpb25zLiBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgdXBzdHJlYW0gY29kZSB0aGF0IHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl9tYl9pbnRyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTI5PXN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX3JlcV9pcnEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE1MjogKiBpZHBmX21iX2ludHJfaW5pdCAtIEluaXRpYWxpemUgdGhlIG1haWxib3ggaW50ZXJydXB0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUzLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZSB0byBzdG9yZSB0aGUgbWFpbGJveCB2ZWN0b3JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTQtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTU1OnN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0zMDQ9aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtNDE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjQxNzpcdGVyciA9IGlkcGZfbWJfaW50cl9pbml0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTQxOC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBpZHBmX2ludHJfcmVxYCBDYWxsKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6ICYjMzQ7RnJvbSB3aGVyZSBpcyBgaWRwZl9pbnRyX3JlcWAgYmVpbmcgY2FsbGVkPyYjMzQ7IFRoaXMgaXNuJiMzOTt0IGEgY29tcGxleCBxdWVzdGlvbiBpbiBpdHNlbGYsIGJ1dCBpdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9uKHMpIHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSB3aGF0IGFyZWEgb2YgdGhlIGNvZGUgaXMgaW5pdGlhdGluZyB0aGlzIGludGVycnVwdCByZXF1ZXN0LiBJcyBpdCByZWxhdGVkIHRvIHRoZSBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiwgYSBzcGVjaWZpYyBkcml2ZXIsIHRoZSBrZXJuZWwmIzM5O3MgaW50ZXJydXB0IG1hbmFnZW1lbnQgc3lzdGVtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGFuc3dlciB3aWxsIGd1aWRlIG15IGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHRoZSBzb3VyY2UuIE9uY2UgSSBoYXZlIGlkZW50aWZpZWQgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLCBJIGNhbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBkZWR1Y2UgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkcGZfaW50cl9yZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaD0xMDQ5PXZvaWQgaWRwZl92Zl9kZXZfb3BzX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaDoxMDUwOmludCBpZHBmX2ludHJfcmVxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtMTA1MS12b2lkIGlkcGZfaW50cl9yZWwoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTI1ND1pbnQgaWRwZl9yZXFfcmVsX3ZlY3Rvcl9pbmRleGVzKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTI5OC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoyOTk6ICogaWRwZl9pbnRyX3JlcSAtIFJlcXVlc3QgaW50ZXJydXB0IGNhcGFiaWxpdGllc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTMwMC0gKiBAYWRhcHRlcjogYWRhcHRlciB0byBlbmFibGUgaW50ZXJydXB0cyBvblxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0zMDMtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MzA0OmludCBpZHBmX2ludHJfcmVxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMzA1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYz0zNDgwPWludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM1ODYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNTg3Olx0ZXJyID0gaWRwZl9pbnRyX3JlcShhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM1ODgtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIHRoZSBDb3JlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGlkcGZfdmNfY29yZV9pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaXRzIG9yaWdpbi4gV2hlcmUgaXMgdGhpcyB0aGluZyBiZWluZyBjYWxsZWQgZnJvbT8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSB0byBmb2xsb3cgdGhlIG92ZXJhbGwgcHJvZ3JhbSBmbG93LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZnVuY3Rpb24gYW5kIHNlZSB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgaXRzIGV4ZWN1dGlvbi4gSXMgaXQgY2FsbGVkIGRpcmVjdGx5IGZyb20gYSBtYWluIHJvdXRpbmU/IElzIGl0IGludm9rZWQgYXMgcGFydCBvZiBzb21lIGxhcmdlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvciBmcmFtZXdvcms/IERvZXMgYW5vdGhlciBmdW5jdGlvbiwgd2hpY2ggaW4gdHVybiBjYWxscyB0aGlzIG9uZSwgaGFuZGxlIHNvbWUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uIG9yIHJlc291cmNlIGFsbG9jYXRpb24/IEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBnb2luZyB0byBwcm92aWRlIHNpZ25pZmljYW50IGNsdWVzIGFib3V0IHRoZSBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhlIGBpZHBmX3ZjX2NvcmVfaW5pdGAgZnVuY3Rpb24gaXRzZWxmLCB3aGljaCBpcyB3aGF0IEkgbmVlZCB0byB0cnVseSBjb21wcmVoZW5kIHRoaXMgbW9kdWxlLiBJIHNob3VsZCB1c2UgbXkgdG9vbHMgdG8gdW5kZXJzdGFuZCB0aGlzIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkcGZfdmNfY29yZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE4OTM9c3RhdGljIHZvaWQgaWRwZl9pbml0X2hhcmRfcmVzZXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTk0MS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE5NDI6XHRlcnIgPSBpZHBmX3ZjX2NvcmVfaW5pdChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xOTQzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTM0MzM9c3RhdGljIGludCBpZHBmX3Zwb3J0X3BhcmFtc19idWZfYWxsb2Moc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDY3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ2ODogKiBpZHBmX3ZjX2NvcmVfaW5pdCAtIEluaXRpYWxpemUgc3RhdGUgbWFjaGluZSBhbmQgZ2V0IGRyaXZlciBzcGVjaWZpY1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2OS0gKiByZXNvdXJjZXNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDc5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ4MDppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0ODEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oPTEwMj12b2lkIGlkcGZfZGVpbml0X2RmbHRfbWJ4KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmg6MTAzOmludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oLTEwNC12b2lkIGlkcGZfdmNfY29yZV9kZWluaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBPcmlnaW4gb2YgYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YCoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGRpcmVjdHMgbXkgYXR0ZW50aW9uIHRvIGBpZHBmX2luaXRfaGFyZF9yZXNldGAuIE15IGZpcnN0IHRob3VnaHQgaXM6IFdoZXJlICppcyogdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gS25vd2luZyB0aGUgY2FsbCBncmFwaCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3QsIGVzcGVjaWFsbHkgaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aXRoaW4gdGhlIGNvZGUgd2hlcmUgYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YCBpcyBpbnZva2VkLiBJcyBpdCBwYXJ0IG9mIHRoZSBub3JtYWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IElzIGl0IHRyaWdnZXJlZCBieSBzb21lIHNwZWNpZmljIGV2ZW50IG9yIGNvbmRpdGlvbj8gS25vd2luZyB0aGUgKmNvbnRleHQqIG9mIGl0cyBleGVjdXRpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGludGVycHJldGluZyB3aGF0IGl0ICpkb2VzKi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGluaXRpYXRlIGEgc2VhcmNoIGZvciBpdHMgY2FsbCBzaXRlcyB0byBwYWludCB0aGUgcGljdHVyZSBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkcGZfaW5pdF9oYXJkX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE4NTc9c3RhdGljIGludCBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlKHN0cnVjdCBpZHBmX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTg4NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxODg2OiAqIGlkcGZfaW5pdF9oYXJkX3Jlc2V0IC0gSW5pdGlhdGUgYSBoYXJkd2FyZSByZXNldFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE4ODctICogQGFkYXB0ZXI6IERyaXZlciBzcGVjaWZpYyBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xODkyLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE4OTM6c3RhdGljIHZvaWQgaWRwZl9pbml0X2hhcmRfcmVzZXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xODk0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTk3Mj12b2lkIGlkcGZfdmNfZXZlbnRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5OTItXHRzZXRfYml0KElEUEZfSFJfUkVTRVRfSU5fUFJPRywgYWRhcHRlci1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTk5MzpcdGlkcGZfaW5pdF9oYXJkX3Jlc2V0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5OTQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgYGlkcGZfdmNfZXZlbnRfdGFza2AgQ29udW5kcnVtKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgaWRwZl92Y19ldmVudF90YXNrYC4gUmlnaHQsIHRoYXQmIzM5O3MgYSB3b3JrIHF1ZXVlIHRhc2ssIGdvdCBpdC4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZnVuY3Rpb24gaW4gdGhhdCBzcGVjaWZpYyB3YXkuIEJ1dCBJJiMzOTttIGFsc28gdGhpbmtpbmcsIGlzIHRoaXMgKnRoZSogb25seSBwYXRoPyBUaGlzIHNwZWNpZmljIHRhc2sgc2VlbXMgbGlrZSBhIHNpbmd1bGFyIHBvaW50IG9mIHJlc3BvbnNpYmlsaXR5IGluIHRoZSBmbG93LiBJZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoIGl0LCBhcmUgd2UgYm90dGxlbmVja2VkPyBBcmUgdGhlcmUgYW55IGFsdGVybmF0aXZlIHN0cmF0ZWdpZXMgb3IgcmVkdW5kYW50IHBhdGhzIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBvYnZpb3VzLCBhbnkgb3RoZXIgZnVuY3Rpb25zIG9yIHByb2Nlc3NlcyB0aGF0IGNhbiBoYW5kbGUgc2ltaWxhciByZXNwb25zaWJpbGl0aWVzPyBXZSBjYW4mIzM5O3QgbGV0IHRoaXMgYmUgdGhlIG9ubHkgc29sdXRpb24uIE15IGpvYiBub3cgaXMgdG8gZGV0ZXJtaW5lIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgb3IgcHJvY2Vzc2VzIG1heSBhY2NvbXBsaXNoIGEgc2ltaWxhciBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkcGZfdmNfY29yZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE4OTM9c3RhdGljIHZvaWQgaWRwZl9pbml0X2hhcmRfcmVzZXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTk0MS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE5NDI6XHRlcnIgPSBpZHBmX3ZjX2NvcmVfaW5pdChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xOTQzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTM0MzM9c3RhdGljIGludCBpZHBmX3Zwb3J0X3BhcmFtc19idWZfYWxsb2Moc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDY3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ2ODogKiBpZHBmX3ZjX2NvcmVfaW5pdCAtIEluaXRpYWxpemUgc3RhdGUgbWFjaGluZSBhbmQgZ2V0IGRyaXZlciBzcGVjaWZpY1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2OS0gKiByZXNvdXJjZXNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDc5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ4MDppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0ODEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oPTEwMj12b2lkIGlkcGZfZGVpbml0X2RmbHRfbWJ4KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmg6MTAzOmludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oLTEwNC12b2lkIGlkcGZfdmNfY29yZV9kZWluaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBJbml0aWFsaXphdGlvbiBGbG93KioKCkhhbmcgb24gYSBzZWNvbmQuIEkmIzM5O20gbm90aWNpbmcgc29tZXRoaW5nIGhlcmUuIEl0IGxvb2tzIGxpa2UgYGlkcGZfdmNfY29yZV9pbml0YCBpcyAqb25seSogY2FsbGVkIGZyb20gYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YC4gVGhhdCBzZWVtcyBhIGJpdC4uLiByZXN0cmljdGl2ZSwgZG9lc24mIzM5O3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0IG9mIGluaXRpYWxpemF0aW9uLiBXaGF0IGFtIEkgbWlzc2luZz8KCkFscmlnaHQsIGxldCYjMzk7cyBiYWNrIHVwLiBXaGVyZSAqZWxzZSogbWlnaHQgdGhpcyBpbml0aWFsaXphdGlvbiBiZSBoYXBwZW5pbmcsIG9yIGF0IGxlYXN0IGJlIGEgbG9naWNhbCBjYW5kaWRhdGU/IEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB0aGUgY2FsbCBzdHJ1Y3R1cmUgZnJvbSB0aGUgZHJpdmVyJiMzOTtzIGVudHJ5IHBvaW50cy4gSSB3aWxsIGxvb2sgaW50byBib3RoIGBpZHBmX3Byb2JlYCBhbmQgYGlkcGZfZGV2X2luaXRgLiBJIGJldCB0aGUgYW5zd2VyIGxpZXMgdGhlcmUuIExldCYjMzk7cyBzZWUgaWYgZWl0aGVyIG9mIHRoZW0gdG91Y2hlcyB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBpbiBhIGRpZmZlcmVudCB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkcGZfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jPTE4OT1zdGF0aWMgaW50IGlkcGZfY2ZnX2h3KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0yMjgtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjIyOTogKiBpZHBmX3Byb2JlIC0gRGV2aWNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMjMwLSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMjM0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzoyMzU6c3RhdGljIGludCBpZHBmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0yMzYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzg0PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpZHBmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM4Ni1cdC5pZF90YWJsZVx0XHQ9IGlkcGZfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM6Mzg3Olx0LnByb2JlXHRcdFx0PSBpZHBmX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODgtXHQuc3Jpb3ZfY29uZmlndXJlXHQ9IGlkcGZfc3Jpb3ZfY29uZmlndXJlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDM1CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgaWRwZl9wcm9iZWAgQ2FsbCBTdGFjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBpZHBmX3Byb2JlYCBhbmQgbmVlZCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IG90aGVyIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgdGhpcyB0aGluZyByZWx5IG9uPyYjMzQ7IEkgbmVlZCB0byBzZWUgdGhlIGNhbGxzIGl0IG1ha2VzLCB0aGUgZnVuY3Rpb25zIGl0IGludm9rZXMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGV4ZWN1dGlvbiBmbG93LiBJcyBpdCBtYWtpbmcgZGlyZWN0IGNhbGxzLCBvciBpcyB0aGVyZSBhbiBpbnRlcm1lZGlhdGUgbGF5ZXIgSSBuZWVkIHRvIGV4cGxvcmU/IEJhc2ljYWxseSwgSSBuZWVkIGEgcXVpY2sgaGlnaC1sZXZlbCB2aWV3IG9mIGl0cyBjb250cm9sIGZsb3cgZ3JhcGguIFVuZGVyc3RhbmRpbmcgdGhhdCBjYWxsIHN0YWNrIHF1aWNrbHkgaXMga2V5IHRvIGVmZmljaWVudGx5IGRlYnVnZ2luZyBhbnkgaXNzdWUgcmVsYXRlZCB0byBJbnRlbCBkcml2ZXIgcHJvYmluZyBvciBpdHMgaW5pdGlhbGl6YXRpb24uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcCBJIHRha2UgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgaG93IGRlZXBseSBuZXN0ZWQgYW55IHBvdGVudGlhbCBwcm9ibGVtIG1pZ2h0IGJlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCB0b3VjaGVzIGFuZCB3aGF0IGl0IHJlbGllcyB1cG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzU6XHRzdGF0aWMgaW50IGlkcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gMjM2Olx0e1xuIDIzNzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gMjM4Olx0XHRzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyO1xuIDIzOTpcdFx0aW50IGVycjtcbiAyNDA6XHRcbiAyNDE6XHRcdGFkYXB0ZXIgPSBremFsbG9jX29iaigqYWRhcHRlcik7XG4gMjQyOlx0XHRpZiAoIWFkYXB0ZXIpXG4gMjQzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI0NDpcdFxuIDI0NTpcdFx0YWRhcHRlci1cdTAwM2VyZXFfdHhfc3BsaXRxID0gdHJ1ZTtcbiAyNDY6XHRcdGFkYXB0ZXItXHUwMDNlcmVxX3J4X3NwbGl0cSA9IHRydWU7XG4gMjQ3Olx0XG4gMjQ4Olx0XHRhZGFwdGVyLVx1MDAzZXBkZXYgPSBwZGV2O1xuIDI0OTpcdFx0ZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpO1xuIDI1MDpcdFx0aWYgKGVycilcbiAyNTE6XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyNTI6XHRcbiAyNTM6XHRcdGVyciA9IHBjaW1fcmVxdWVzdF9yZWdpb24ocGRldiwgMCwgcGNpX25hbWUocGRldikpO1xuIDI1NDpcdFx0aWYgKGVycikge1xuIDI1NTpcdFx0XHRwY2lfZXJyKHBkZXYsIFwmIzM0O3BjaW1fcmVxdWVzdF9yZWdpb24gZmFpbGVkICVwZVxcblwmIzM0OywgRVJSX1BUUihlcnIpKTtcbiAyNTY6XHRcbiAyNTc6XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyNTg6XHRcdH1cbiAyNTk6XHRcbiAyNjA6XHRcdGVyciA9IHBjaV9lbmFibGVfcHRtKHBkZXYpO1xuIDI2MTpcdFx0aWYgKGVycilcbiAyNjI6XHRcdFx0cGNpX2RiZyhwZGV2LCBcJiMzNDtQQ0llIFBUTSBpcyBub3Qgc3VwcG9ydGVkIGJ5IFBDSWUgYnVzL2NvbnRyb2xsZXJcXG5cJiMzNDspO1xuIDI2MzpcdFxuIDI2NDpcdFx0Lyogc2V0IHVwIGZvciBoaWdoIG9yIGxvdyBkbWEgKi9cbiAyNjU6XHRcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNjQpKTtcbiAyNjY6XHRcdGlmIChlcnIpIHtcbiAyNjc6XHRcdFx0cGNpX2VycihwZGV2LCBcJiMzNDtETUEgY29uZmlndXJhdGlvbiBmYWlsZWQ6ICVwZVxcblwmIzM0OywgRVJSX1BUUihlcnIpKTtcbiAyNjg6XHRcbiAyNjk6XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyNzA6XHRcdH1cbiAyNzE6XHRcbiAyNzI6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIDI3MzpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpO1xuIDI3NDpcdFxuIDI3NTpcdFx0YWRhcHRlci1cdTAwM2Vpbml0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzLSVzLWluaXRcJiMzNDssXG4gMjc2Olx0XHRcdFx0XHRcdCAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCxcbiAyNzc6XHRcdFx0XHRcdFx0ICAgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSxcbiAyNzg6XHRcdFx0XHRcdFx0ICAgZGV2X25hbWUoZGV2KSk7XG4gMjc5Olx0XHRpZiAoIWFkYXB0ZXItXHUwMDNlaW5pdF93cSkge1xuIDI4MDpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIGluaXQgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiAyODE6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAyODI6XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyODM6XHRcdH1cbiAyODQ6XHRcbiAyODU6XHRcdGFkYXB0ZXItXHUwMDNlc2Vydl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslcy0lcy1zZXJ2aWNlXCYjMzQ7LFxuIDI4NjpcdFx0XHRcdFx0XHQgICBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDAsXG4gMjg3Olx0XHRcdFx0XHRcdCAgIGRldl9kcml2ZXJfc3RyaW5nKGRldiksXG4gMjg4Olx0XHRcdFx0XHRcdCAgIGRldl9uYW1lKGRldikpO1xuIDI4OTpcdFx0aWYgKCFhZGFwdGVyLVx1MDAzZXNlcnZfd3EpIHtcbiAyOTA6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBzZXJ2aWNlIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4gMjkxOlx0XHRcdGVyciA9IC1FTk9NRU07XG4gMjkyOlx0XHRcdGdvdG8gZXJyX3NlcnZfd3FfYWxsb2M7XG4gMjkzOlx0XHR9XG4gMjk0Olx0XG4gMjk1Olx0XHRhZGFwdGVyLVx1MDAzZW1ieF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslcy0lcy1tYnhcJiMzNDssIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxuIDI5NjpcdFx0XHRcdFx0XHQgIDAsIGRldl9kcml2ZXJfc3RyaW5nKGRldiksXG4gMjk3Olx0XHRcdFx0XHRcdCAgZGV2X25hbWUoZGV2KSk7XG4gMjk4Olx0XHRpZiAoIWFkYXB0ZXItXHUwMDNlbWJ4X3dxKSB7XG4gMjk5Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgbWFpbGJveCB3b3JrcXVldWVcXG5cJiMzNDspO1xuIDMwMDpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDMwMTpcdFx0XHRnb3RvIGVycl9tYnhfd3FfYWxsb2M7XG4gMzAyOlx0XHR9XG4gMzAzOlx0XG4gMzA0Olx0XHRhZGFwdGVyLVx1MDAzZXN0YXRzX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzLSVzLXN0YXRzXCYjMzQ7LFxuIDMwNTpcdFx0XHRcdFx0XHQgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAwLFxuIDMwNjpcdFx0XHRcdFx0XHQgICAgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSxcbiAzMDc6XHRcdFx0XHRcdFx0ICAgIGRldl9uYW1lKGRldikpO1xuIDMwODpcdFx0aWYgKCFhZGFwdGVyLVx1MDAzZXN0YXRzX3dxKSB7XG4gMzA5Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiAzMTA6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAzMTE6XHRcdFx0Z290byBlcnJfc3RhdHNfd3FfYWxsb2M7XG4gMzEyOlx0XHR9XG4gMzEzOlx0XG4gMzE0Olx0XHRhZGFwdGVyLVx1MDAzZXZjX2V2ZW50X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzLSVzLXZjX2V2ZW50XCYjMzQ7LFxuIDMxNTpcdFx0XHRcdFx0XHQgICAgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAwLFxuIDMxNjpcdFx0XHRcdFx0XHQgICAgICAgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSxcbiAzMTc6XHRcdFx0XHRcdFx0ICAgICAgIGRldl9uYW1lKGRldikpO1xuIDMxODpcdFx0aWYgKCFhZGFwdGVyLVx1MDAzZXZjX2V2ZW50X3dxKSB7XG4gMzE5Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgdmlydGNobmwgZXZlbnQgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiAzMjA6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAzMjE6XHRcdFx0Z290byBlcnJfdmNfZXZlbnRfd3FfYWxsb2M7XG4gMzIyOlx0XHR9XG4gMzIzOlx0XG4gMzI0Olx0XHQvKiBzZXR1cCBtc2dsdmwgKi9cbiAzMjU6XHRcdGFkYXB0ZXItXHUwMDNlbXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KC0xLCBJRFBGX0FWQUlMX05FVElGX00pO1xuIDMyNjpcdFxuIDMyNzpcdFx0ZXJyID0gaWRwZl9kZXZfaW5pdChhZGFwdGVyLCBlbnQpO1xuIDMyODpcdFx0aWYgKGVycikge1xuIDMyOTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmV4cGVjdGVkIGRldiBJRCAweCV4IGluIGlkcGYgcHJvYmVcXG5cJiMzNDssXG4gMzMwOlx0XHRcdFx0ZW50LVx1MDAzZWRldmljZSk7XG4gMzMxOlx0XHRcdGdvdG8gZGVzdHJveV92Y19ldmVudF93cTtcbiAzMzI6XHRcdH1cbiAzMzM6XHRcbiAzMzQ6XHRcdGVyciA9IGlkcGZfY2ZnX2h3KGFkYXB0ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBJbnRlcnJ1cHQgSW5pdGlhbGl6YXRpb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlkcGZfY2ZnX2h3YC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3RzIHdpdGggaW50ZXJydXB0IGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0aGUgY29kZSB0YWtlcy4gVGhlIHNwZWNpZmljIHF1ZXN0aW9uIEkgaGF2ZSBpcyB3aGV0aGVyIG9yIG5vdCBgaWRwZl9jZmdfaHdgIGRpcmVjdGx5IGNhbGxzIGBpZHBmX21iX2ludHJfaW5pdGAuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBgaWRwZl9tYl9pbnRyX2luaXRgIGxpa2VseSBoYW5kbGVzIHRoZSBzZXR1cCBvZiB0aGUgbWFpbGJveCBpbnRlcnJ1cHQsIGEgY29yZSBjb21wb25lbnQgZm9yIGNvbW11bmljYXRpb24gaW4gdGhpcyBlbnZpcm9ubWVudC4gVW5kZXJzdGFuZGluZyB0aGF0IGNvbm5lY3Rpb24gaXMga2V5IHRvIGRlYnVnZ2luZyBpbnRlcnJ1cHQtcmVsYXRlZCBpc3N1ZXMgb3Igb3B0aW1pemluZyB0aGUgZHJpdmVyLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93ICp3aGVyZSogYGlkcGZfbWJfaW50cl9pbml0YCBpcyBjYWxsZWQgKGFuZCBpZikuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg5Olx0c3RhdGljIGludCBpZHBmX2NmZ19odyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuIDE5MDpcdHtcbiAxOTE6XHRcdHJlc291cmNlX3NpemVfdCByZXNfc3RhcnQsIG1ieF9zdGFydCwgcnN0YXRfc3RhcnQ7XG4gMTkyOlx0XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItXHUwMDNlcGRldjtcbiAxOTM6XHRcdHN0cnVjdCBpZHBmX2h3ICpodyA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlaHc7XG4gMTk0Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiAxOTU6XHRcdGxvbmcgbGVuO1xuIDE5NjpcdFxuIDE5NzpcdFx0cmVzX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApO1xuIDE5ODpcdFxuIDE5OTpcdFx0LyogTWFwIG1haWxib3ggc3BhY2UgZm9yIHZpcnRjaG5sIGNvbW11bmljYXRpb24gKi9cbiAyMDA6XHRcdG1ieF9zdGFydCA9IHJlc19zdGFydCAmIzQzOyBhZGFwdGVyLVx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzBdLnN0YXJ0O1xuIDIwMTpcdFx0bGVuID0gcmVzb3VyY2Vfc2l6ZShcdTAwMjZhZGFwdGVyLVx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzBdKTtcbiAyMDI6XHRcdGh3LVx1MDAzZW1ieC52YWRkciA9IGRldm1faW9yZW1hcChkZXYsIG1ieF9zdGFydCwgbGVuKTtcbiAyMDM6XHRcdGlmICghaHctXHUwMDNlbWJ4LnZhZGRyKSB7XG4gMjA0Olx0XHRcdHBjaV9lcnIocGRldiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIEJBUjAgbWJ4IHJlZ2lvblxcblwmIzM0Oyk7XG4gMjA1Olx0XG4gMjA2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDIwNzpcdFx0fVxuIDIwODpcdFx0aHctXHUwMDNlbWJ4LmFkZHJfc3RhcnQgPSBhZGFwdGVyLVx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzBdLnN0YXJ0O1xuIDIwOTpcdFx0aHctXHUwMDNlbWJ4LmFkZHJfbGVuID0gbGVuO1xuIDIxMDpcdFxuIDIxMTpcdFx0LyogTWFwIHJzdGF0IHNwYWNlIGZvciByZXNldHMgKi9cbiAyMTI6XHRcdHJzdGF0X3N0YXJ0ID0gcmVzX3N0YXJ0ICYjNDM7IGFkYXB0ZXItXHUwMDNlZGV2X29wcy5zdGF0aWNfcmVnX2luZm9bMV0uc3RhcnQ7XG4gMjEzOlx0XHRsZW4gPSByZXNvdXJjZV9zaXplKFx1MDAyNmFkYXB0ZXItXHUwMDNlZGV2X29wcy5zdGF0aWNfcmVnX2luZm9bMV0pO1xuIDIxNDpcdFx0aHctXHUwMDNlcnN0YXQudmFkZHIgPSBkZXZtX2lvcmVtYXAoZGV2LCByc3RhdF9zdGFydCwgbGVuKTtcbiAyMTU6XHRcdGlmICghaHctXHUwMDNlcnN0YXQudmFkZHIpIHtcbiAyMTY6XHRcdFx0cGNpX2VycihwZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgQkFSMCByc3RhdCByZWdpb25cXG5cJiMzNDspO1xuIDIxNzpcdFxuIDIxODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMTk6XHRcdH1cbiAyMjA6XHRcdGh3LVx1MDAzZXJzdGF0LmFkZHJfc3RhcnQgPSBhZGFwdGVyLVx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzFdLnN0YXJ0O1xuIDIyMTpcdFx0aHctXHUwMDNlcnN0YXQuYWRkcl9sZW4gPSBsZW47XG4gMjIyOlx0XG4gMjIzOlx0XHRody1cdTAwM2ViYWNrID0gYWRhcHRlcjtcbiAyMjQ6XHRcbiAyMjU6XHRcdHJldHVybiAwO1xuIDIyNjpcdH1cbiAyMjc6XHRcbiAyMjg6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MzEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGlkcGZfY2ZnX2h3YCBTZXF1ZW5jZSoqCgpIbW0sIGludGVyZXN0aW5nLiBJJiMzOTttIG5vdGljaW5nIHRoYXQgdGhlIGBpZHBmX2NmZ19od2AgZnVuY3Rpb24gZG9lc24mIzM5O3Qgc2VlbSB0byBleHBsaWNpdGx5IGNhbGwgYGlkcGZfbWJfaW50cl9pbml0YC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiwgYW5kIGl0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIHNvbWUgcXVlc3Rpb25zLiBXaGVyZSBhbmQgaG93IGFyZSB0aGUgTWVzc2FnZSBCdWZmZXIgKE1CKSBpbnRlcnJ1cHRzIGJlaW5nIGluaXRpYWxpemVkIGluIHJlbGF0aW9uIHRvIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24/IElmIG5vdCBjYWxsZWQgZGlyZWN0bHkgdGhlcmUsIGl0IG1lYW5zIHRoZSBpbml0aWFsaXphdGlvbiBtdXN0IGJlIGhhcHBlbmluZyBzb21ld2hlcmUgZWxzZSBpbiB0aGUgY29kZSBwYXRoICphZnRlciogYGlkcGZfY2ZnX2h3YCBleGVjdXRlcywgb3IgcGVyaGFwcyBldmVuICpiZWZvcmUqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nLiBJdCBjb3VsZCBiZSB0cmlnZ2VyZWQgZnJvbSB0aGUgUENJIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIG9yIHNvbWUgaW50ZXJydXB0IGhhbmRsZXIgb3IgYW5vdGhlciBpbml0aWFsaXphdGlvbiByb3V0aW5lIC0gbmVlZCB0byBmaW5kIHRoYXQgc3BvdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBhdm9pZCBtYWtpbmcgYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24uIFRoaXMgaXMgbGlrZWx5IGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgYmVoYXZpb3IuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgdGhlbiBtaWdodCBuZWVkIHRvIGRvIHNvbWUgZHluYW1pYyBhbmFseXNpcyBvciBkZWJ1Z2dpbmcgdG8gdHJ1bHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzQ6XHRcdGVyciA9IGlkcGZfY2ZnX2h3KGFkYXB0ZXIpO1xuIDMzNTpcdFx0aWYgKGVycikge1xuIDMzNjpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGNvbmZpZ3VyZSBIVyBzdHJ1Y3R1cmUgZm9yIGFkYXB0ZXI6ICVkXFxuXCYjMzQ7LFxuIDMzNzpcdFx0XHRcdGVycik7XG4gMzM4Olx0XHRcdGdvdG8gZGVzdHJveV92Y19ldmVudF93cTtcbiAzMzk6XHRcdH1cbiAzNDA6XHRcbiAzNDE6XHRcdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2V2cG9ydF9jdHJsX2xvY2spO1xuIDM0MjpcdFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZXZlY3Rvcl9sb2NrKTtcbiAzNDM6XHRcdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2VxdWV1ZV9sb2NrKTtcbiAzNDQ6XHRcdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2V2Y19idWZfbG9jayk7XG4gMzQ1Olx0XG4gMzQ2Olx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZhZGFwdGVyLVx1MDAzZWluaXRfdGFzaywgaWRwZl9pbml0X3Rhc2spO1xuIDM0NzpcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YWRhcHRlci1cdTAwM2VzZXJ2X3Rhc2ssIGlkcGZfc2VydmljZV90YXNrKTtcbiAzNDg6XHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWJ4X3Rhc2ssIGlkcGZfbWJ4X3Rhc2spO1xuIDM0OTpcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0c190YXNrLCBpZHBmX3N0YXRpc3RpY3NfdGFzayk7XG4gMzUwOlx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZhZGFwdGVyLVx1MDAzZXZjX2V2ZW50X3Rhc2ssIGlkcGZfdmNfZXZlbnRfdGFzayk7XG4gMzUxOlx0XG4gMzUyOlx0XHRhZGFwdGVyLVx1MDAzZWRldl9vcHMucmVnX29wcy5yZXNldF9yZWdfaW5pdChhZGFwdGVyKTtcbiAzNTM6XHRcdHNldF9iaXQoSURQRl9IUl9EUlZfTE9BRCwgYWRhcHRlci1cdTAwM2VmbGFncyk7XG4gMzU0Olx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoYWRhcHRlci1cdTAwM2V2Y19ldmVudF93cSwgXHUwMDI2YWRhcHRlci1cdTAwM2V2Y19ldmVudF90YXNrLFxuIDM1NTpcdFx0XHRcdCAgIG1zZWNzX3RvX2ppZmZpZXMoMTAgKiAocGRldi1cdTAwM2VkZXZmbiBcdTAwMjYgMHgwNykpKTtcbiAzNTY6XHRcbiAzNTc6XHRcdHJldHVybiAwO1xuIDM1ODpcdFxuIDM1OTpcdGRlc3Ryb3lfdmNfZXZlbnRfd3E6XG4gMzYwOlx0XHRkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLVx1MDAzZXZjX2V2ZW50X3dxKTtcbiAzNjE6XHRlcnJfdmNfZXZlbnRfd3FfYWxsb2M6XG4gMzYyOlx0XHRkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLVx1MDAzZXN0YXRzX3dxKTtcbiAzNjM6XHRlcnJfc3RhdHNfd3FfYWxsb2M6XG4gMzY0Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLVx1MDAzZW1ieF93cSk7XG4gMzY1Olx0ZXJyX21ieF93cV9hbGxvYzpcbiAzNjY6XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGFkYXB0ZXItXHUwMDNlc2Vydl93cSk7XG4gMzY3Olx0ZXJyX3NlcnZfd3FfYWxsb2M6XG4gMzY4Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLVx1MDAzZWluaXRfd3EpO1xuIDM2OTpcdGVycl9mcmVlOlxuIDM3MDpcdFx0a2ZyZWUoYWRhcHRlcik7XG4gMzcxOlx0XHRyZXR1cm4gZXJyO1xuIDM3MjpcdH1cbiAzNzM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NTkKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAzOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJRFBGIERyaXZlciBJbml0aWFsaXphdGlvbiBQYXRoKioKCk9rYXksIHNvIGBpZHBmX3Byb2JlYCBldmVudHVhbGx5IGVucXVldWVzIGBpZHBmX3ZjX2V2ZW50X3Rhc2tgLiBUaGF0IHRhc2sgdGhlbiBkaXZlcyBpbnRvIGBpZHBmX2luaXRfaGFyZF9yZXNldChhZGFwdGVyKWAsIHdoaWNoIGJyYW5jaGVzIGludG8gYGlkcGZfdmNfY29yZV9pbml0KGFkYXB0ZXIpYCwgd2hpY2ggbGVhZHMgdG8gYGlkcGZfaW50cl9yZXEoYWRhcHRlcilgLCBhbmQgZG93biB0aGUgcmFiYml0IGhvbGUgdG8gYGlkcGZfbWJfaW50cl9pbml0KGFkYXB0ZXIpYCBhbmQgZmluYWxseSBgaWRwZl9tYl9pbnRyX3JlcV9pcnEoYWRhcHRlcilgLiBUaGlzIHN1Z2dlc3RzIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gQnV0IGNhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBzZXF1ZW5jZSB1c2luZyBTeXprYWxsZXI/CgpUaGUgY3JpdGljYWwgcGFydCBpcyBnZXR0aW5nIGBpZHBmX3Byb2JlYCBjYWxsZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGluamVjdGluZyBhIFBDSSBkZXZpY2Ugd2l0aCBTeXprYWxsZXIsIGJ1dCBTeXprYWxsZXIgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGEgZ2VuZXJpYyBQQ0kgZGV2aWNlIGluamVjdG9yIGNhcGFibGUgb2YgZW11bGF0aW5nIGFyYml0cmFyeSBCQVJzIGFuZCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbnMsIGFuZCBkZWZpbml0ZWx5IG5vIGB2aGNpYCBmb3IgUENJIGluIHRoZSBtYWlubGluZS4gSSByZW1lbWJlciB0aGVyZSYjMzk7cyBzb21lIGxpbWl0ZWQgUENJIGZ1enppbmcgc3VwcG9ydCBsZXZlcmFnaW5nIGB2ZmlvYCBvciBzaW1pbGFyIG1lY2hhbmlzbXMsIGJ1dCB0aGF0JiMzOTtzIHByZXR0eSByZXN0cmljdGVkLgoKQWgsIGJ1dCB3YWl0ISBTeXprYWxsZXIgKmNhbiogdHJpZ2dlciBQQ0kgcHJvYmluZyB0aHJvdWdoIGBzeXNmc2AgYnkgd3JpdGluZyB0byBgbmV3X2lkYCBvciBgYmluZGAuIFRoZSBpZGVhIGlzIHRvIGJpbmQgYW4gZXhpc3RpbmcgUENJIGRldmljZeKAlHBlcmhhcHMgYSBkdW1teSBkZXZpY2Ugb3Igc29tZSBvdGhlciBhdmFpbGFibGUgZGV2aWNl4oCUdG8gdGhlIElEUEYgZHJpdmVyLiBJZiBzdWNjZXNzZnVsLCBgaWRwZl9wcm9iZWAgd291bGQgYmUgaW52b2tlZC4gSG93ZXZlciwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBzaWRlIGVmZmVjdHMuCgpgaWRwZl9wcm9iZWAgY2FsbHMgcm91dGluZXMgbGlrZSBgcGNpbV9lbmFibGVfZGV2aWNlYCwgYHBjaW1fcmVxdWVzdF9yZWdpb25gLCBhbmQgYGRldm1faW9yZW1hcGAuIFRoZW4sIGl0IHF1ZXVlcyB0aGF0IGBpZHBmX3ZjX2V2ZW50X3Rhc2tgLCB3aGljaCBzdGFydHMgdGhpcyB3aG9sZSBpbml0aWFsaXphdGlvbiBmbG93LiBOZXh0IHN0ZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2YgYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODkzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTM6XHRzdGF0aWMgdm9pZCBpZHBmX2luaXRfaGFyZF9yZXNldChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuMTg5NDpcdHtcbjE4OTU6XHRcdHN0cnVjdCBpZHBmX3JlZ19vcHMgKnJlZ19vcHMgPSBcdTAwMjZhZGFwdGVyLVx1MDAzZWRldl9vcHMucmVnX29wcztcbjE4OTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4xODk3Olx0XHRpbnQgZXJyO1xuMTg5ODpcdFxuMTg5OTpcdFx0aWRwZl9kZXRhY2hfYW5kX2Nsb3NlKGFkYXB0ZXIpO1xuMTkwMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZhZGFwdGVyLVx1MDAzZXZwb3J0X2N0cmxfbG9jayk7XG4xOTAxOlx0XG4xOTAyOlx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O0RldmljZSBIVyBSZXNldCBpbml0aWF0ZWRcXG5cJiMzNDspO1xuMTkwMzpcdFxuMTkwNDpcdFx0LyogUHJlcGFyZSBmb3IgcmVzZXQgKi9cbjE5MDU6XHRcdGlmICh0ZXN0X2JpdChJRFBGX0hSX0RSVl9MT0FELCBhZGFwdGVyLVx1MDAzZWZsYWdzKSkge1xuMTkwNjpcdFx0XHRyZWdfb3BzLVx1MDAzZXRyaWdnZXJfcmVzZXQoYWRhcHRlciwgSURQRl9IUl9EUlZfTE9BRCk7XG4xOTA3Olx0XHR9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRFBGX0hSX0ZVTkNfUkVTRVQsIGFkYXB0ZXItXHUwMDNlZmxhZ3MpKSB7XG4xOTA4Olx0XHRcdGJvb2wgaXNfcmVzZXQgPSBpZHBmX2lzX3Jlc2V0X2RldGVjdGVkKGFkYXB0ZXIpO1xuMTkwOTpcdFxuMTkxMDpcdFx0XHRpZHBmX2lkY19pc3N1ZV9yZXNldF9ldmVudChhZGFwdGVyLVx1MDAzZWNkZXZfaW5mbyk7XG4xOTExOlx0XG4xOTEyOlx0XHRcdGlkcGZfdmNfY29yZV9kZWluaXQoYWRhcHRlcik7XG4xOTEzOlx0XHRcdGlmICghaXNfcmVzZXQpXG4xOTE0Olx0XHRcdFx0cmVnX29wcy1cdTAwM2V0cmlnZ2VyX3Jlc2V0KGFkYXB0ZXIsIElEUEZfSFJfRlVOQ19SRVNFVCk7XG4xOTE1Olx0XHRcdGlkcGZfZGVpbml0X2RmbHRfbWJ4KGFkYXB0ZXIpO1xuMTkxNjpcdFx0fSBlbHNlIHtcbjE5MTc6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VuaGFuZGxlZCBoYXJkIHJlc2V0IGNhdXNlXFxuXCYjMzQ7KTtcbjE5MTg6XHRcdFx0ZXJyID0gLUVCQURSUUM7XG4xOTE5Olx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuMTkyMDpcdFx0fVxuMTkyMTpcdFxuMTkyMjpcdFx0LyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi9cbjE5MjM6XHRcdGVyciA9IGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGUoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgXHUwMDI2YWRhcHRlci1cdTAwM2VyZXNldF9yZWcpO1xuMTkyNDpcdFx0aWYgKGVycikge1xuMTkyNTpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VGhlIGRyaXZlciB3YXMgdW5hYmxlIHRvIGNvbnRhY3QgdGhlIGRldmljZSYjMzk7cyBmaXJtd2FyZS4gQ2hlY2sgdGhhdCB0aGUgRlcgaXMgcnVubmluZy4gRHJpdmVyIHN0YXRlPSAweCV4XFxuXCYjMzQ7LFxuMTkyNjpcdFx0XHRcdGFkYXB0ZXItXHUwMDNlc3RhdGUpO1xuMTkyNzpcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbjE5Mjg6XHRcdH1cbjE5Mjk6XHRcbjE5MzA6XHRcdC8qIFJlc2V0IGlzIGNvbXBsZXRlIGFuZCBzbyBzdGFydCBidWlsZGluZyB0aGUgZHJpdmVyIHJlc291cmNlcyBhZ2FpbiAqL1xuMTkzMTpcdFx0ZXJyID0gaWRwZl9pbml0X2RmbHRfbWJ4KGFkYXB0ZXIpO1xuMTkzMjpcdFx0aWYgKGVycikge1xuMTkzMzpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBtYWlsYm94OiAlZFxcblwmIzM0OywgZXJyKTtcbjE5MzQ6XHRcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4xOTM1Olx0XHR9XG4xOTM2Olx0XG4xOTM3Olx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoYWRhcHRlci1cdTAwM2VtYnhfd3EsIFx1MDAyNmFkYXB0ZXItXHUwMDNlbWJ4X3Rhc2ssIDApO1xuMTkzODpcdFxuMTkzOTpcdFx0LyogSW5pdGlhbGl6ZSB0aGUgc3RhdGUgbWFjaGluZSwgYWxzbyBhbGxvY2F0ZSBtZW1vcnkgYW5kIHJlcXVlc3RcbjE5NDA6XHRcdCAqIHJlc291cmNlc1xuMTk0MTpcdFx0ICovXG4xOTQyOlx0XHRlcnIgPSBpZHBmX3ZjX2NvcmVfaW5pdChhZGFwdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NDEKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIFBvdGVudGlhbCBEcml2ZXIgUmVzZXQgSXNzdWVzIHdpdGggYSBOb24tSURQRiBEZXZpY2UqKgoKSG1tLCBzbyBgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWAuLi4gdGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7cmUgcmVhZGluZyBmcm9tIHRoZSBoYXJkd2FyZSByZWdpc3RlciwgcmlnaHQ/IEFuZCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0ICppc24mIzM5O3QqIGEgcHJvcGVyIElEUEYgZGV2aWNlIOKAkyBzYXksIGEgZHVtbXkgUENJIGRldmljZSBqdXN0IGJvdW5kIHRvIHRoZSBkcml2ZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMgb3Igc29tZSBvdGhlciBzY2VuYXJpbyB3aGVyZSB0aGUgaGFyZHdhcmUgZG9lc24mIzM5O3QgYWRoZXJlIHRvIHRoZSBleGFjdCBJRFBGIHN0YW5kYXJkIOKAkyB3ZWxsLCB0aGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGdvaW5nIHRvIHRyaXAgdXAuIEl0JiMzOTtzIGV4cGVjdGluZyBhIHNwZWNpZmljIHZhbHVlIGZyb20gdGhhdCByZWdpc3RlciwgYW5kIGlmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBwcm92aWRlIGl0LCB0aGUgY2hlY2sgd2lsbCBvYnZpb3VzbHkgZmFpbC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcuIExldCYjMzk7cyBzdGFydCB3aXRoIHZlcmlmeWluZyB0aGUgbG9naWMgb2YgYGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg1NzpcdHN0YXRpYyBpbnQgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZShzdHJ1Y3QgaWRwZl9odyAqaHcsXG4xODU4Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBpZHBmX3Jlc2V0X3JlZyAqcmVzZXRfcmVnKVxuMTg1OTpcdHtcbjE4NjA6XHRcdHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody1cdTAwM2ViYWNrO1xuMTg2MTpcdFx0aW50IGk7XG4xODYyOlx0XG4xODYzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyMDAwOyBpJiM0MzsmIzQzOykge1xuMTg2NDpcdFx0XHR1MzIgcmVnX3ZhbCA9IHJlYWRsKHJlc2V0X3JlZy1cdTAwM2Vyc3RhdCk7XG4xODY1Olx0XG4xODY2Olx0XHRcdC8qIDB4RkZGRkZGRkYgbWlnaHQgYmUgcmVhZCBpZiBvdGhlciBzaWRlIGhhc24mIzM5O3QgY2xlYXJlZCB0aGVcbjE4Njc6XHRcdFx0ICogcmVnaXN0ZXIgZm9yIHVzIHlldCBhbmQgMHhGRkZGRkZGRiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3JcbjE4Njg6XHRcdFx0ICogdGhlIHJlZ2lzdGVyLCBzbyB0cmVhdCB0aGF0IGFzIGludmFsaWQuXG4xODY5Olx0XHRcdCAqL1xuMTg3MDpcdFx0XHRpZiAocmVnX3ZhbCAhPSAweEZGRkZGRkZGIFx1MDAyNlx1MDAyNiAocmVnX3ZhbCBcdTAwMjYgcmVzZXRfcmVnLVx1MDAzZXJzdGF0X20pKVxuMTg3MTpcdFx0XHRcdHJldHVybiAwO1xuMTg3MjpcdFxuMTg3MzpcdFx0XHR1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApO1xuMTg3NDpcdFx0fVxuMTg3NTpcdFxuMTg3NjpcdFx0ZGV2X3dhcm4oXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7RGV2aWNlIHJlc2V0IHRpbWVvdXQhXFxuXCYjMzQ7KTtcbjE4Nzc6XHRcdC8qIENsZWFyIHRoZSByZXNldCBmbGFnIHVuY29uZGl0aW9uYWxseSBoZXJlIHNpbmNlIHRoZSByZXNldFxuMTg3ODpcdFx0ICogdGVjaG5pY2FsbHkgaXNuJiMzOTt0IGluIHByb2dyZXNzIGFueW1vcmUgZnJvbSB0aGUgZHJpdmVyJiMzOTtzIHBlcnNwZWN0aXZlXG4xODc5Olx0XHQgKi9cbjE4ODA6XHRcdGNsZWFyX2JpdChJRFBGX0hSX1JFU0VUX0lOX1BST0csIGFkYXB0ZXItXHUwMDNlZmxhZ3MpO1xuMTg4MTpcdFxuMTg4MjpcdFx0cmV0dXJuIC1FQlVTWTtcbjE4ODM6XHR9XG4xODg0Olx0XG4xODg1Olx0LyoqXG4xODg2Olx0ICogaWRwZl9pbml0X2hhcmRfcmVzZXQgLSBJbml0aWF0ZSBhIGhhcmR3YXJlIHJlc2V0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJRFBGIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpZHBmX2luaXRfaGFyZF9yZXNldGAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBiZWNvbWluZyBjbGVhciBob3cgaXQgd29ya3MuIFRoZSBjcml0aWNhbCBwYXRoIGRlcGVuZHMgb24gdGhlIGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCBmdW5jdGlvbi4gSWYgKnRoYXQqIGNhbGwgZmFpbHMsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYC1FQlVTWWAuIFRoZSBjb2RlIHRoZW4ganVtcHMgc3RyYWlnaHQgdG8gYHVubG9ja19tdXRleGAgd2l0aG91dCBldmVyIGNhbGxpbmcgYGlkcGZfdmNfY29yZV9pbml0YC4gVGhhdCYjMzk7cyBhIG1ham9yIHBvaW50IC0gYGlkcGZfdmNfY29yZV9pbml0YCBpcyBlZmZlY3RpdmVseSBza2lwcGVkIGlmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBwbGF5IGJhbGwgd2l0aCB0aGUgcmVzZXQgY2hlY2suCgpOb3csIGNvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2UgYW5kIGhvdyBzeXprYWxsZXIgb3BlcmF0ZXMsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXaXRob3V0IGEgcHJvcGVyIElEUEYgZW11bGF0b3IsIGByZWFkbChyZXNldF9yZWctJmd0O3JzdGF0KWAgaXMgZ29pbmcgdG8gbGlrZWx5IHJldHVybiBlaXRoZXIgYDB4RkZGRkZGRkZgICh1bm1hcHBlZCBvciBkdW1teSBtZW1vcnkpIG9yIHNpbXBseSBgMGAgKGEgemVyb2VkIHBhZ2UpLiBJZiBpdCYjMzk7cyB6ZXJvLCB0aGUgYml0d2lzZSBBTkQgd2l0aCBgcmVzZXRfcmVnLSZndDtyc3RhdF9tYCB3aWxsIGFsc28gYmUgemVybywgYW5kIHRoYXQgbG9vcCBpcyBnb2luZyB0byBydW4gZm9yIHRoZSBmdWxsIDIwMDAgaXRlcmF0aW9ucyBiZWZvcmUgcmV0dXJuaW5nIGAtRUJVU1lgLiBTYW1lIGdvZXMgZm9yIHRoYXQgYDB4RkZGRkZGRkZgIHJlc3VsdCEgSXQmIzM5O3Mgc3RpbGwgZ29pbmcgdG8gbG9vcC4gVGhpcyBtZWFucyB0aGF0IHVuZGVyIHZpcnR1YWxpemF0aW9uLCBgaWRwZl92Y19jb3JlX2luaXRgIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5yZWFjaGFibGUgd2l0aG91dCBzb21lIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uIHRvIG1ha2UgdGhlIHJlc2V0IGNoZWNrIHBhc3MuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBpZHBmX3ZjX2NvcmVfaW5pdGAgdGhlICpvbmx5KiBlbnRyeSBwb2ludCB0byBgaWRwZl9tYl9pbnRyX3JlcV9pcnFgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgY2FsbGluZyB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBiYWNrZG9vciBpbnRvIHRoYXQgY3JpdGljYWwgYXJlYSBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl9tYl9pbnRyX3JlcV9pcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTE1PXN0YXRpYyB2b2lkIGlkcGZfbWJfaXJxX2VuYWJsZShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xMjUtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTI2OiAqIGlkcGZfbWJfaW50cl9yZXFfaXJxIC0gUmVxdWVzdCBpcnEgZm9yIHRoZSBtYWlsYm94IGludGVycnVwdFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyNy0gKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmUgdG8gcGFzcyB0byB0aGUgbWFpbGJveCBpcnEgaGFuZGxlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyOC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxMjk6c3RhdGljIGludCBpZHBmX21iX2ludHJfcmVxX2lycShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEzMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE1NT1zdGF0aWMgaW50IGlkcGZfbWJfaW50cl9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxNjA6XHRyZXR1cm4gaWRwZl9tYl9pbnRyX3JlcV9pcnEoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MjMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBJbnRlcnJ1cHQgSGFuZGxpbmcgQ2hhaW4qKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyBkb3duIHRoZSBvcmlnaW5zIG9mIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiwgbGV0JiMzOTtzIGNhbGwgaXQgdGhlICYjMzQ7VGFyZ2V0IEZ1bmN0aW9uLiYjMzQ7IEkgc2VlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYGlkcGZfbWJfaW50cl9pbml0YC4gVGhhdCYjMzk7cyBhIHByZXR0eSBsaW1pdGVkIHNjb3BlLCB3aGljaCBpcyBoZWxwZnVsLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGVyZSogYGlkcGZfbWJfaW50cl9pbml0YCBpcyBjb21pbmcgZnJvbS4gVGhlIGNvZGUgc2hvd3MgbWUgdGhhdCBgaWRwZl9tYl9pbnRyX2luaXRgIGl0c2VsZiBpcyBvbmx5IGNhbGxlZCBmcm9tIGBpZHBmX2ludHJfcmVxYC4gU28sIEkgaGF2ZSBhIGNsZWFyLCBjb25jaXNlIGNhbGwgc3RhY2s6IHRoZSBUYXJnZXQgRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQgYnkgYGlkcGZfbWJfaW50cl9pbml0YCwgYW5kIGBpZHBmX21iX2ludHJfaW5pdGAgaXMgY2FsbGVkIGJ5IGBpZHBmX2ludHJfcmVxYC4gVGhpcyBnaXZlcyBtZSBhIGZhaXJseSBuYXJyb3cgdmlldyBvZiBob3cgdGhlIFRhcmdldCBGdW5jdGlvbiBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGludGVycnVwdCBoYW5kbGluZyBmcmFtZXdvcmsuIE5vdyBJIGNhbiBidWlsZCBteSBtZW50YWwgbW9kZWwsIHRoaXMgaXMgdGhlIHBhdGggYW5kIHNjb3BlIG9mIG15IGRlYnVnZ2luZyBvciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl9tYl9pbnRyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTI5PXN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX3JlcV9pcnEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE1MjogKiBpZHBmX21iX2ludHJfaW5pdCAtIEluaXRpYWxpemUgdGhlIG1haWxib3ggaW50ZXJydXB0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUzLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZSB0byBzdG9yZSB0aGUgbWFpbGJveCB2ZWN0b3JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTQtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTU1OnN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0zMDQ9aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtNDE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjQxNzpcdGVyciA9IGlkcGZfbWJfaW50cl9pbml0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTQxOC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTE3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC4KCioqQW5hbHl6aW5nIHRoZSBDYWxsIEdyYXBoKioKCkFscmlnaHQsIGxldCBtZSBzZWUuLi4gc28sIGBpZHBmX2ludHJfcmVxYCwgdGhhdCBpbnRlcnJ1cHQgcmVxdWVzdCBmdW5jdGlvbiwgaXMgb25seSBjYWxsZWQgZnJvbSBgaWRwZl92Y19jb3JlX2luaXRgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5pdGlhbGl6YXRpb24sIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIHdpdGhpbiB0aGF0IGNvbnRleHQgZ2l2ZXMgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbi4gS25vd2luZyB0aGUgY2FsbCBncmFwaCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCwgYW5kIHRoaXMgc2ltcGxlIG9ic2VydmF0aW9uIGFscmVhZHkgZm9jdXNlcyBteSBhdHRlbnRpb24gb24gdGhlIHN0YXJ0dXAgc2VxdWVuY2Ugb2YgdGhlIHZpcnR1YWwgY2hhbm5lbCBjb3JlLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHdoYXQgZXhhY3RseSBoYXBwZW5zIGR1cmluZyB0aGF0IGBpZHBmX3ZjX2NvcmVfaW5pdGAgdG8gdW5kZXJzdGFuZCAqd2h5KiBgaWRwZl9pbnRyX3JlcWAgaXMgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGl0cyBzaWduaWZpY2FuY2UgaXMuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIGludGVycnVwdCBoYW5kbGluZyBmb3IgdGhpcyB2aXJ0dWFsIGNoYW5uZWwuIE1ha2VzIGl0IGEgZm9jYWwgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyBpbnRlcnJ1cHQgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl9pbnRyX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oPTEwNDk9dm9pZCBpZHBmX3ZmX2Rldl9vcHNfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oOjEwNTA6aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaC0xMDUxLXZvaWQgaWRwZl9pbnRyX3JlbChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MjU0PWludCBpZHBmX3JlcV9yZWxfdmVjdG9yX2luZGV4ZXMoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMjk4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjI5OTogKiBpZHBmX2ludHJfcmVxIC0gUmVxdWVzdCBpbnRlcnJ1cHQgY2FwYWJpbGl0aWVzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMzAwLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIG9uXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTMwMy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzozMDQ6aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0zMDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTM0ODA9aW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzU4Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jOjM1ODc6XHRlcnIgPSBpZHBmX2ludHJfcmVxKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzU4OC1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIENhbGwgR3JhcGgqKgoKQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBzbywgYGlkcGZfdmNfY29yZV9pbml0YCBpcyAqb25seSogY2FsbGVkIGZyb20gYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIHRpZ2h0bHkgY291cGxlZCB3aXRoIGEgaGFyZCByZXNldCBwcm9jZWR1cmUuIE5vIGRpcmVjdCwgaW5kZXBlbmRlbnQgY2FsbHMgdG8gYGlkcGZfdmNfY29yZV9pbml0YCBmcm9tIGVsc2V3aGVyZS4gVGhpcyBzaW1wbGlmaWVzIGRlYnVnZ2luZyBhbmQgdW5kZXJzdGFuZGluZyBleGVjdXRpb24gZmxvdyBhdCBmaXJzdCBnbGFuY2UsIGJ1dCBhbHNvIG1lYW5zIGFueSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBhcmUgYWx3YXlzIHRpZWQgdG8gcmVzZXQgaXNzdWVzLiBJIG5lZWQgdG8ga2VlcCB0aGlzIHJlbGF0aW9uc2hpcCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gVGhpcyBzdWdnZXN0cyBhIHZlcnkgcGFydGljdWxhciBsaWZlY3ljbGUgZm9yIHRoZSBjb3JlLCBhbmQgZGV2aWF0aW9uIG1pZ2h0IGluZGljYXRlIGEgc2VyaW91cyBwcm9ibGVtLiBJdCBpbXBsaWVzIGEgY2xlYW4gc3RhdGUgaXMgcmVxdWlyZWQsIG9yIGVsc2UgeW91IHNob3VsZCBuZXZlciBjYWxsIHRoZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl92Y19jb3JlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTg5Mz1zdGF0aWMgdm9pZCBpZHBmX2luaXRfaGFyZF9yZXNldChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xOTQxLVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTk0MjpcdGVyciA9IGlkcGZfdmNfY29yZV9pbml0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDMtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MzQzMz1zdGF0aWMgaW50IGlkcGZfdnBvcnRfcGFyYW1zX2J1Zl9hbGxvYyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0NjctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNDY4OiAqIGlkcGZfdmNfY29yZV9pbml0IC0gSW5pdGlhbGl6ZSBzdGF0ZSBtYWNoaW5lIGFuZCBnZXQgZHJpdmVyIHNwZWNpZmljXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDY5LSAqIHJlc291cmNlc1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0NzktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNDgwOmludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ4MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmg9MTAyPXZvaWQgaWRwZl9kZWluaXRfZGZsdF9tYngoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuaDoxMDM6aW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmgtMTA0LXZvaWQgaWRwZl92Y19jb3JlX2RlaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgdGhlICpvbmx5KiB3YXkgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIHRocm91Z2ggYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YC4gVGhhdCBmdW5jdGlvbiBoYXMgYSBkZXBlbmRlbmN5IG9uIGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCBzdWNjZWVkaW5nIGZpcnN0LCBhbmQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZWFkIGEgc3BlY2lmaWMgdmFsdWUgZnJvbSBhIGhhcmR3YXJlIHJlZ2lzdGVyLgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCBzaW5jZSBzeXprYWxsZXIgZG9lc24mIzM5O3QgZW11bGF0ZSBJRFBGIGhhcmR3YXJlLCB0aGlzIHBhdGggaXMgcHJhY3RpY2FsbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBCdXQgaG9sZCBvbiwgaXMgdGhlcmUgKmFueSogcmVtb3RlIGNoYW5jZSBgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWAgYWN0dWFsbHkgc3VjY2VlZHM/IExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpJZiBgcmVhZGwocmVzZXRfcmVnLSZndDtyc3RhdClgIHJldHVybnMgMCBhbmQgYHJlc2V0X3JlZy0mZ3Q7cnN0YXRfbWAgaXMgbm9uLXplcm8sIHRoZW4gdGhlIGJpdHdpc2UgQU5EIG9wZXJhdGlvbiBgcmVnX3ZhbCAmYW1wOyByZXNldF9yZWctJmd0O3JzdGF0X21gIGlzIGdvaW5nIHRvIGJlIDAsIHNvIGl0JiMzOTtsbCBsb29wIGFuZCByZXR1cm4gYC1FQlVTWWAuIEFuZCBpZiBgcmVhZGxgIHJldHVybnMgYDB4RkZGRkZGRkZgLCBzYW1lIGRlYWwuIExvb3AgYW5kIHJldHVybiBgLUVCVVNZYC4gU28gdGhhdCBpcyBub3QgaGVscGZ1bC4KCkhvd2V2ZXIsIGlmIGByZWFkbGAgcmV0dXJucyBzb21ldGhpbmcgY29tcGxldGVseSByYW5kb20sIGxpa2UsIHNheSwgaWYgdGhlIG1lbW9yeSByZWdpb24gaXMgbWFwcGVkIHRvIGFub3RoZXIgZGV2aWNlIG9yIHJhbmRvbSBtZW1vcnksIGl0ICptaWdodCogc3VjY2VlZC4gQnV0IHN5emthbGxlciB0eXBpY2FsbHkgZG9lc24mIzM5O3QgbWFwIFBDSSBCQVJzIHRvIHJhbmRvbSwgY2hhbmdpbmcgbWVtb3J5IG9yIG1lbW9yeSB3aXRoIHNwZWNpZmljIGJpdHMgc2V0IHVubGVzcyBpdCYjMzk7cyBkZXNpZ25lZCB0byBmdXp6IHRoYXQgc3BlY2lmaWMgYXJlYS4gSG1tLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjay4gSWYgYHJlYWRsYCByZXR1cm5zIGEgdmFsdWUgc3VjaCB0aGF0IGAocmVnX3ZhbCAmYW1wOyByZXNldF9yZWctJmd0O3JzdGF0X20pID09IDBgLCBpdCBsb29wcywgbm8gc3VjY2Vzcy4gQnV0IGlmIGAocmVnX3ZhbCAmYW1wOyByZXNldF9yZWctJmd0O3JzdGF0X20pICE9IDBgIGFuZCBgcmVnX3ZhbGAgaXMgbm90IGAweEZGRkZGRkZGYCwgaXQgKnJldHVybnMgMCosIG1lYW5pbmcgc3VjY2Vzcy4gVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhlIGByZXNldF9yZWctJmd0O3JzdGF0X21gLiBXaGF0IGV4YWN0bHkgaXMgdGhhdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBiaXRzIGFyZSBiZWluZyBtYXNrZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgZmVhc2libGUgc2NlbmFyaW8gaGVyZSB3aGVyZSB0aGlzIGNvZGUgcGF0aCBjb3VsZCBiZSB0cmlnZ2VyZWQgd2l0aCBteSBmdXp6ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzdGF0X20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaD0xNTc9c3RydWN0IGlkcGZfbmV0ZGV2X3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oLTE3Mi0gKiBAcnN0YXQ6IFJlc2V0IHN0YXR1cyByZWdpc3RlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg6MTczOiAqIEByc3RhdF9tOiBSZXNldCBzdGF0dXMgbWFza1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtMTc0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg9MTc1PXN0cnVjdCBpZHBmX3Jlc2V0X3JlZyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaC0xNzYtXHR2b2lkIF9faW9tZW0gKnJzdGF0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg6MTc3Olx0dTMyIHJzdGF0X207XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaC0xNzgtfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZGV2LmM9MTQ0PXN0YXRpYyB2b2lkIGlkcGZfcmVzZXRfcmVnX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZGV2LmMtMTQ2LVx0YWRhcHRlci1cdTAwM2VyZXNldF9yZWcucnN0YXQgPSBpZHBmX2dldF9yc3RhdF9yZWdfYWRkcihhZGFwdGVyLCBQRkdFTl9SU1RBVCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZGV2LmM6MTQ3Olx0YWRhcHRlci1cdTAwM2VyZXNldF9yZWcucnN0YXRfbSA9IFBGR0VOX1JTVEFUX1BGUl9TVEFURV9NO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2Rldi5jLTE0OC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE4NTc9c3RhdGljIGludCBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlKHN0cnVjdCBpZHBmX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTg2OS1cdFx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTg3MDpcdFx0aWYgKHJlZ192YWwgIT0gMHhGRkZGRkZGRiBcdTAwMjZcdTAwMjYgKHJlZ192YWwgXHUwMDI2IHJlc2V0X3JlZy1cdTAwM2Vyc3RhdF9tKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xODcxLVx0XHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92Zl9kZXYuYz0xNDM9c3RhdGljIHZvaWQgaWRwZl92Zl9yZXNldF9yZWdfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92Zl9kZXYuYy0xNDUtXHRhZGFwdGVyLVx1MDAzZXJlc2V0X3JlZy5yc3RhdCA9IGlkcGZfZ2V0X3JzdGF0X3JlZ19hZGRyKGFkYXB0ZXIsIFZGR0VOX1JTVEFUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92Zl9kZXYuYzoxNDY6XHRhZGFwdGVyLVx1MDAzZXJlc2V0X3JlZy5yc3RhdF9tID0gVkZHRU5fUlNUQVRfVkZSX1NUQVRFX007XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmZfZGV2LmMtMTQ3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDQKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogMjY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTeXprYWxsZXIgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgc3l6a2FsbGVyIGNhbiByZWFjaCBhIHNwZWNpZmljIHBhcnQgb2YgaXQsIHNwZWNpZmljYWxseSBhIHJlc2V0IGZhaWx1cmUgcGF0aC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhpczogaWYgc3l6a2FsbGVyIGJpbmRzIGEgZHJpdmVyIHRvIGEgZHVtbXkgZGV2aWNlLCB0aGUgbWVtb3J5IG1hcHBlZCBieSBgZGV2bV9pb3JlbWFwYCDigJMgdGhhdCYjMzk7cyBwb3RlbnRpYWxseSBqdXN0IHplcm9lZCBtZW1vcnkuIElmIGByZWFkbGAgcmV0dXJucyB6ZXJvIGZyb20gdGhhdCB6ZXJvZWQgcmVnaW9uLCB0aGUgc3Vic2VxdWVudCBiaXR3aXNlIEFORCBvcGVyYXRpb24gKGByZWdfdmFsICZhbXA7IHJlc2V0X3JlZy0mZ3Q7cnN0YXRfbWApIHdpbGwgcmVzdWx0IGluIHplcm8uIFRoYXQsIGluIHR1cm4sIGNhdXNlcyBhIGxvb3AsIGFuZCBldmVudHVhbGx5IGEgYC1FQlVTWWAgZXJyb3IgaXMgcmV0dXJuZWQuIENvbnNlcXVlbnRseSwgdGhlIGBpZHBmX3ZjX2NvcmVfaW5pdGAgZnVuY3Rpb24gKndvbiYjMzk7dCogYmUgY2FsbGVkLiBUaGVyZWZvcmUsIGBpZHBmX21iX2ludHJfcmVxX2lycWAgaXMsIHByYWN0aWNhbGx5LCB1bnJlYWNoYWJsZS4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmlsaXRpZXMuIFdoYXQgaWYgc3l6a2FsbGVyIGVtcGxveXMgZmF1bHQgaW5qZWN0aW9uIG9yIHNvbWUgY2xldmVyIG1lbW9yeSBtYXBwaW5nIHRyaWNrIHRvIGZvcmNlIGByZWFkbGAgdG8gcmV0dXJuIGEgbm9uLXplcm8gdmFsdWU/IEhvd2V2ZXIsIHN5emthbGxlciAqcmFyZWx5KiBkb2VzIHRoYXQgZm9yIFBDSSBCQVJzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljYWxseSBjcmFmdGVkIHBzZXVkby1kZXZpY2UgaW52b2x2ZWQuIEFsc28sIHJlbWVtYmVyLCB0aGlzIGlzIGEgbWVtb3J5IGxlYWsgZml4ICp3aXRoaW4qIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggKGBpZiAoZXJyKWAgYWZ0ZXIgYHBjaV9yZXF1ZXN0X2lycWApLiBFdmVuIGlmLCBieSBzb21lIHdpbGQgY2hhbmNlLCB3ZSBjb3VsZCB0cmlnZ2VyIGl0LCB0aGlzIGlzIGEgaGlnaGx5IHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4gSXQmIzM5O3Mgbm90IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHRlc3RhYmxlIGluIHN5emthbGxlciYjMzk7cyBzdGFuZGFyZCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgdHlwaWNhbGx5IHZpcnR1YWxpemVkLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIGFuZCB0aGUgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgZGVwZW5kZW5jeSwgSSYjMzk7bSBnb2luZyB0byBtYXJrIHRoaXMgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0JiMzOTtzIGFuIHVucmVhY2hhYmxlLCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgcGF0aCB3aXRoaW4gdGhlIGNvbnN0cmFpbnRzIG9mIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQmIzM5O3Mgbm90IGEgZnJ1aXRmdWwgYXZlbnVlIGZvciBmdXp6aW5nLCBhdCBsZWFzdCBpbiB0aGUgZGVmYXVsdCBzeXprYWxsZXIgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgaWRwZl9tYl9pbnRyX3JlcV9pcnFgIHdpdGhpbiB0aGUgSW50ZWwgSURQRiAoSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uKSBQQ0kgZHJpdmVyLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBzdWNjZXNzZnVsIGhhcmR3YXJlIHJlc2V0IGNoZWNrIChgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWApLCB3aGljaCByZXF1aXJlcyByZWFkaW5nIHNwZWNpZmljIHZhbHVlcyBmcm9tIGhhcmR3YXJlIHJlZ2lzdGVycyAoUENJIEJBUnMpLiBTaW5jZSBzeXprYWxsZXIgYW5kIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSBkbyBub3QgZW11bGF0ZSBJRFBGIGhhcmR3YXJlLCB0aGUgcmVzZXQgY2hlY2sgd2lsbCBmYWlsLCBtYWtpbmcgdGhpcyBjb2RlIHBhdGggdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIGBpZHBmX21iX2ludHJfcmVxX2lycWAgd2l0aGluIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIFBDSSBkcml2ZXIuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiBhZnRlciBhIHN1Y2Nlc3NmdWwgaGFyZHdhcmUgcmVzZXQgY2hlY2sgKGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCksIHdoaWNoIHJlcXVpcmVzIHJlYWRpbmcgc3BlY2lmaWMgdmFsdWVzIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzIChQQ0kgQkFScykuIFNpbmNlIHN5emthbGxlciBhbmQgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIGRvIG5vdCBlbXVsYXRlIElEUEYgaGFyZHdhcmUsIHRoZSByZXNldCBjaGVjayB3aWxsIGZhaWwsIG1ha2luZyB0aGlzIGNvZGUgcGF0aCB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MTo0MC4wMzgzMDM2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzAzODY5NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIGBpZHBmX21iX2ludHJfcmVxX2lycWAgd2l0aGluIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIFBDSSBkcml2ZXIuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiBhZnRlciBhIHN1Y2Nlc3NmdWwgaGFyZHdhcmUgcmVzZXQgY2hlY2sgKGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCksIHdoaWNoIHJlcXVpcmVzIHJlYWRpbmcgc3BlY2lmaWMgdmFsdWVzIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzIChQQ0kgQkFScykuIFNpbmNlIHN5emthbGxlciBhbmQgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIGRvIG5vdCBlbXVsYXRlIElEUEYgaGFyZHdhcmUsIHRoZSByZXNldCBjaGVjayB3aWxsIGZhaWwsIG1ha2luZyB0aGlzIGNvZGUgcGF0aCB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjQwLjAzODMwODIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzU2OTk0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmM2NjNDI5ZDI4MjRjYmQ0YjYxNmZlZDUzNzQ2OTJhNzMyZGI2NDc2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMDU6NDE6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXFxuaW5kZXggY2Y5NjZmZTZjNzU5Y2UuLmJiODFlNjIwYzVjODdhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xcbkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIGludCBpZHBmX21iX2ludHJfcmVxX2lycShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFxcIklSUSByZXF1ZXN0IGZvciBtYWlsYm94IGZhaWxlZCwgZXJyb3I6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXG4rXFx0XFx0a2ZyZWUobmFtZSk7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjQwLjYxNDY4OTA4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ3Mjc0NzI4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgYGlkcGZfbWJfaW50cl9yZXFfaXJxYCB3aXRoaW4gdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgUENJIGRyaXZlci4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uIGFmdGVyIGEgc3VjY2Vzc2Z1bCBoYXJkd2FyZSByZXNldCBjaGVjayAoYGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGVgKSwgd2hpY2ggcmVxdWlyZXMgcmVhZGluZyBzcGVjaWZpYyB2YWx1ZXMgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMgKFBDSSBCQVJzKS4gU2luY2Ugc3l6a2FsbGVyIGFuZCB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgZG8gbm90IGVtdWxhdGUgSURQRiBoYXJkd2FyZSwgdGhlIHJlc2V0IGNoZWNrIHdpbGwgZmFpbCwgbWFraW5nIHRoaXMgY29kZSBwYXRoIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmM2NjNDI5ZDI4MjRjYmQ0YjYxNmZlZDUzNzQ2OTJhNzMyZGI2NDc2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwNTo0MTozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuaW5kZXggY2Y5NjZmZTZjNzU5Y2UuLmJiODFlNjIwYzVjODdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIGludCBpZHBmX21iX2ludHJfcmVxX2lycShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XCJJUlEgcmVxdWVzdCBmb3IgbWFpbGJveCBmYWlsZWQsIGVycm9yOiAlZFxcblwiLCBlcnIpO1xuLVxuK1x0XHRrZnJlZShuYW1lKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjQwLjYxNDY5MDM5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODExMjU2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgRml4IGluIHRoZSBJbnRlbCBJRFBGIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiB0aGV5J3ZlIGFkZGVkIGBrZnJlZShuYW1lKTtgIGluIHRoZSBlcnJvciBwYXRoIG9mIGBpZHBmX21iX2ludHJfcmVxX2lycWAuIFRoYXQncyBhIGNsYXNzaWMgbWVtb3J5IGxlYWsgZml4LiBHb29kIGNhdGNoLlxuXG5Ob3csIG15IG1pbmQgc3RhcnRzIHJhY2luZyDigJMgaXMgdGhpcyBJbnRlbCBJRFBGIGRyaXZlciBldmVuICpyZWxldmFudCogaW4gdGhlIGVudmlyb25tZW50cyBJIHR5cGljYWxseSBkZWFsIHdpdGg/IElEUEYgaXMgYW4gSW50ZWwgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIGRyaXZlciwgcmlnaHQ/IE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBhcmUgdXN1YWxseSB0cmlja3kgdG8gdHJpZ2dlciBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgdW5sZXNzIHdlJ3JlIGRlYWxpbmcgd2l0aCB2ZXJ5IHNwZWNpZmljIGVtdWxhdGlvbiBvciBhIGdlbmVyaWMgZnJhbWV3b3JrIHRyaWNrZXJ5LiBCdXQgd2FpdCBhIG1pbnV0ZSwgdGhlIHBlbm55IGp1c3QgZHJvcHBlZC4gSURQRiBpcyBhIFBDSSBkZXZpY2UgZHJpdmVyLCBpc24ndCBpdD8gT2theSwgdGhhdCBjaGFuZ2VzIHRoaW5ncy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2x1ZXMgdGhlcmUgYWJvdXQgaXRzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGRlcGVuZGVuY2llcy4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiBpdCdzIG1vcmUgd2lkZWx5IHVzZWQgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDE6NDQuNzk1ODE4NDk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MDQ1NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJRFBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWc6NDpjb25maWcgSURQRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZz0xNz1pZiBJRFBGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzoxOTpjb25maWcgSURQRl9TSU5HTEVRXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTIwLVxcdGJvb2wgXFxcImlkcGYgc2luZ2xlcSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MTo0NC44ODQ4NzA2NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIwNTg0MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklEUEYgRW11bGF0aW9uIEZlYXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIHdvbmRlcmluZyBhYm91dCB0ZXN0aW5nIElEUEYgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBJRFBGIGlzIGEgUENJIGRyaXZlci4gVGhhdCBtZWFucywgcmVhbGlzdGljYWxseSwgSSBuZWVkIGEgc3BlY2lmaWMgZW11bGF0ZWQgZGV2aWNlIGluIFFFTVUgdGhhdCAqcmVwcmVzZW50cyogSURQRi4gV2l0aG91dCB0aGF0LCB0aGVyZSdzIG5vIGRpcmVjdCBwYXRoIGZvciBtZSB0byBhY3R1YWxseSByZWFjaCB0aGUgZHJpdmVyLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGFjdHVhbGx5IGludmVzdGlnYXRlIGlmIGFueSBmb3JtIG9mIElEUEYgZW11bGF0aW9uIGV4aXN0cyB3aXRoaW4gUUVNVS5cblxuR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdkIHVzdWFsbHkgY2hlY2sgZm9yIHRoZSBjb21tb24gSW50ZWwgTklDIGVtdWxhdGlvbnMgZmlyc3Qg4oCTIGUxMDAwLCBlMTAwMGUsIGlnYiwgdGhvc2UgYXJlIHByZXR0eSBzdGFuZGFyZC4gQnV0IElEUEYgaXMgcmVsYXRpdmVseSBuZXcsIHNwZWNpZmljYWxseSBmb3IgSW50ZWwncyBJUFUsIG9yIEluZnJhc3RydWN0dXJlIFByb2Nlc3NpbmcgVW5pdC4gSXQncyBub3QgYSBjb21tb24gTklDLiBJJ2QgYmUgc3VycHJpc2VkIGlmIFFFTVUgKmRpZCogaGF2ZSBhbnl0aGluZyBvdXQgb2YgdGhlIGJveCBmb3IgSURQRi5cblxuTm93LCBsZXQncyBleHBsb3JlIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBzdXBwb3J0LiBBcyBhIFBDSSBkcml2ZXIsIGl0IHdvdWxkIHJlcXVpcmUgYSBzcGVjaWZpYyBQQ0kgSUQgdG8gZnVuY3Rpb24sIHJpZ2h0PyBTbywgbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUgZm9yIGEgbW9tZW50IGFuZCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uY2AgdG8gbG9vayBmb3IgdGhvc2UgUENJIElEcy4gVGhhdCB3b3VsZCBnaXZlIG1lIHNvbWV0aGluZyBjb25jcmV0ZSB0byB3b3JrIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDE6NDkuMzA1NDU3MDY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzc4NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDSV9ERVZJQ0UuKklEUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz0zNzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkcGZfcGNpX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zNzgtXFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSURQRl9ERVZfSURfVkYpfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjM3OTpcXHR7IFBDSV9ERVZJQ0VfQ0xBU1MoSURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRiwgfjApfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM4MC1cXHR7IC8qIFNlbnRpbmVsICovIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDE6NDkuMzY4ODQwOTU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3MDU0NDQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBhIE5ldHdvcmsgRGV2aWNlIENsYXNzIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCB0aGF0IGxpbmUgLSBgUENJX0RFVklDRV9DTEFTUyhJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGLCB+MClgIC0gaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGF0dGVudGlvbi4gVGhlIGBQQ0lfREVWSUNFX0NMQVNTYCBtYWNybyBpcywgb2YgY291cnNlLCBhIHdheSB0byBkZWZpbmUgdGhlIFBDSSBkZXZpY2UgY2xhc3MgY29kZS4gQnV0IHdoYXQncyB0aGUgc2lnbmlmaWNhbmNlIG9mIGBJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGYCBzcGVjaWZpY2FsbHk/IEFuZCBtb3JlIGNydWNpYWxseSwgdGhhdCBiaXRtYXNrIGB+MGAgaXMgZ29pbmcgdG8gcmVxdWlyZSBmdXJ0aGVyIGluc3BlY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIGNsYXNzLiBXZSBhcmUgbG9va2luZyBhdCBhICp2ZXJ5IHNwZWNpZmljKiBFdGhlcm5ldCBkZXZpY2UgY2xhc3MgaGVyZS4gTGV0J3MgZGVsdmUgaW50byB3aGF0IHRoaXMgcGFydGljdWxhciBpZGVudGlmaWVyIHJlcHJlc2VudHMuIE5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgSURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRmAgdG8gdW5kZXJzdGFuZCB0aGlzIGRldmljZSdzIGludGVuZGVkIGZ1bmN0aW9uIG1vcmUgY29tcGxldGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0NSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjUyLjMzOTM4NzQ2M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzExOTUyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMTEtI2RlZmluZSBJRFBGX05FVFdPUktfRVRIRVJORVRfUFJPR0lGXFx0XFx0XFx0XFx0MHgwMVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM6MTI6I2RlZmluZSBJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGXFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMTMtXFx0KFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIFxcdTAwM2NcXHUwMDNjIDggfCBJRFBGX05FVFdPUktfRVRIRVJORVRfUFJPR0lGKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz01Nj1zdGF0aWMgaW50IGlkcGZfZGV2X2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzo2MTpcXHRpZiAoZW50LVxcdTAwM2VjbGFzcyA9PSBJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy02Mi1cXHRcXHRyZXQgPSBpZHBmX2dldF9kZXZpY2VfdHlwZShhZGFwdGVyLVxcdTAwM2VwZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHBmX3BjaV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzc4LVxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElEUEZfREVWX0lEX1ZGKX0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozNzk6XFx0eyBQQ0lfREVWSUNFX0NMQVNTKElEUEZfQ0xBU1NfTkVUV09SS19FVEhFUk5FVF9QUk9HSUYsIH4wKX0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODAtXFx0eyAvKiBTZW50aW5lbCAqLyB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjUyLjQwMjUxMjQ2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NzYzOTk0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIFN5emthbGxlci1UcmlnZ2VyZWQgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBjb2RlIHRhcmdldHMgUENJIGRldmljZXMsIHNwZWNpZmljYWxseSB0aG9zZSBjbGFzc2lmaWVkIGFzIG5ldHdvcmsgRXRoZXJuZXQgKGBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVGApIHdpdGggYSBwcm9ncmFtbWluZyBpbnRlcmZhY2Ugb2YgYDB4MDFgLiBIbW0sIG15IGluaXRpYWwgdGhvdWdodCBpcywgY291bGQgdGhpcyBiZSB0cmlnZ2VyZWQgYnkgYSBnZW5lcmljIFBDSSBkZXZpY2Ugd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudD8gSWYgc3l6a2FsbGVyIHdlcmUgdG8gaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIHRoaXMgY2xhc3MsIGNvdWxkIGl0IHBvdGVudGlhbGx5IHByb2JlIHRoaXMgZHJpdmVyPyBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBzeXprYWxsZXIgKnVzdWFsbHkqIGRvZXNuJ3QgZ28gYXJvdW5kIGluamVjdGluZyBhcmJpdHJhcnkgUENJIGRldmljZXMgd2l0aCBhIHZlcnkgc3BlY2lmaWMgY2xhc3MgdW5sZXNzIHRoZXJlJ3MgYW4gZXN0YWJsaXNoZWQgUENJIGZ1enppbmcgZnJhbWV3b3JrIGluIHBsYWNlLiBOb3csIHZoY2kgaXMgb25lLCBidXQgdGhlcmUgaXNuJ3Qgb25lIHVwc3RyZWFtIGluIExpbnV4IGZvciBQQ0kuXG5cblJpZ2h0LCBJJ20gcmVtaW5kaW5nIG15c2VsZiBub3csIHRoZXJlIGlzICpzb21lKiBQQ0kgZnV6emluZyBjYXBhYmlsaXR5IHdpdGhpbiBzeXprYWxsZXIsIGJ1dCBpdCdzIHJhdGhlciBsaW1pdGVkLiBBbmQgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciwgSURQRiwgZGVtYW5kcyBjZXJ0YWluIGhhcmR3YXJlIGludGVyYWN0aW9ucyAtIGEgbWFpbGJveCBzeXN0ZW0gYW5kIHNvIGZvcnRoLiBUaGUgY3J1Y2lhbCB0aGluZyB0byB2ZXJpZnkgaXMgd2hldGhlciBgaWRwZl9tYl9pbnRyX3JlcV9pcnFgIGlzIGFjY2Vzc2libGUuIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiwgSSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgcmVhY2hhYmxlLiBUaGF0J3MgdGhlIGtleTogY2FuIHdlIGdldCB0aGlzIGludGVycnVwdCByZXF1ZXN0IGZ1bmN0aW9uIHRvIGJlIGludm9rZWQ/IElmIHNvLCB0aGlzIG1pZ2h0IHByb3ZpZGUgdXMgd2l0aCBhIHN0YXJ0aW5nIHBvaW50IGZvciB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODgyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjU3LjE3ODkxNDY1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5NTAyNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWRwZl9tYl9pbnRyX3JlcV9pcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTExNT1zdGF0aWMgdm9pZCBpZHBmX21iX2lycV9lbmFibGUoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xMjUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjEyNjogKiBpZHBmX21iX2ludHJfcmVxX2lycSAtIFJlcXVlc3QgaXJxIGZvciB0aGUgbWFpbGJveCBpbnRlcnJ1cHRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTI3LSAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZSB0byBwYXNzIHRvIHRoZSBtYWlsYm94IGlycSBoYW5kbGVyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyOC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTI5OnN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX3JlcV9pcnEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0xNTU9c3RhdGljIGludCBpZHBmX21iX2ludHJfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE1OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTYwOlxcdHJldHVybiBpZHBmX21iX2ludHJfcmVxX2lycShhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTYxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDE6NTcuMjUwODcxNTY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0OTM3Nzc3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgQ2FsbCB0byBgaWRwZl9tYl9pbnRyX2luaXRgKipcblxuT2theSwgc28gSSBzZWUgYGlkcGZfbWJfaW50cl9pbml0YC4gIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cywgKndoZXJlKiBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0LiBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjayB0byBmaWd1cmUgb3V0IHdoYXQncyBpbml0aWF0aW5nIHRoaXMgaW50ZXJydXB0IGluaXRpYWxpemF0aW9uIHJvdXRpbmUuIElzIGl0IGR1cmluZyBkcml2ZXIgcHJvYmUsIGEgbW9kdWxlIGxvYWQsIG9yIHBlcmhhcHMgc29tZSBsYXRlciBzdGFnZSBvZiBzeXN0ZW0gaW5pdGlhbGl6YXRpb24/ICBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgZGV2aWNlLCBvciBpcyBpdCBhIG1vcmUgZ2VuZXJhbCBzZXR1cD8gR2V0dGluZyB0aGF0IGJyb2FkZXIgcGljdHVyZSBpcyB0aGUga2V5IHRvIGVmZmljaWVudCBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9ucy4gSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIHVwc3RyZWFtIGNvZGUgdGhhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MTo1OS43NDQ2NTE1NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2NjAzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWRwZl9tYl9pbnRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTEyOT1zdGF0aWMgaW50IGlkcGZfbWJfaW50cl9yZXFfaXJxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUxLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxNTI6ICogaWRwZl9tYl9pbnRyX2luaXQgLSBJbml0aWFsaXplIHRoZSBtYWlsYm94IGludGVycnVwdFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTMtICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlIHRvIHN0b3JlIHRoZSBtYWlsYm94IHZlY3RvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE1NTpzdGF0aWMgaW50IGlkcGZfbWJfaW50cl9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MzA0PWludCBpZHBmX2ludHJfcmVxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtNDE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzo0MTc6XFx0ZXJyID0gaWRwZl9tYl9pbnRyX2luaXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTQxOC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MTo1OS44MTAzMjE5NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3MzYwODY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBgaWRwZl9pbnRyX3JlcWAgQ2FsbCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6IFwiRnJvbSB3aGVyZSBpcyBgaWRwZl9pbnRyX3JlcWAgYmVpbmcgY2FsbGVkP1wiIFRoaXMgaXNuJ3QgYSBjb21wbGV4IHF1ZXN0aW9uIGluIGl0c2VsZiwgYnV0IGl0J3MgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbihzKSB3aWxsIGltbWVkaWF0ZWx5IHRlbGwgbWUgd2hhdCBhcmVhIG9mIHRoZSBjb2RlIGlzIGluaXRpYXRpbmcgdGhpcyBpbnRlcnJ1cHQgcmVxdWVzdC4gSXMgaXQgcmVsYXRlZCB0byB0aGUgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24sIGEgc3BlY2lmaWMgZHJpdmVyLCB0aGUga2VybmVsJ3MgaW50ZXJydXB0IG1hbmFnZW1lbnQgc3lzdGVtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGFuc3dlciB3aWxsIGd1aWRlIG15IGludmVzdGlnYXRpb24uIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBkZXRlcm1pbmUgdGhlIHNvdXJjZS4gT25jZSBJIGhhdmUgaWRlbnRpZmllZCB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20sIEkgY2FuIHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGRlZHVjZSB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjAyLjM4MzkzMzEwOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcxODAyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWRwZl9pbnRyX3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaD0xMDQ5PXZvaWQgaWRwZl92Zl9kZXZfb3BzX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg6MTA1MDppbnQgaWRwZl9pbnRyX3JlcShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaC0xMDUxLXZvaWQgaWRwZl9pbnRyX3JlbChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0yNTQ9aW50IGlkcGZfcmVxX3JlbF92ZWN0b3JfaW5kZXhlcyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTI5OC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6Mjk5OiAqIGlkcGZfaW50cl9yZXEgLSBSZXF1ZXN0IGludGVycnVwdCBjYXBhYmlsaXRpZXNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMzAwLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIG9uXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMzAzLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzozMDQ6aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMzA1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTM0ODA9aW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNTg2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jOjM1ODc6XFx0ZXJyID0gaWRwZl9pbnRyX3JlcShhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNTg4LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MDIuNDQxMTE4MTY0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNDMxODQ0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgSW5pdGlhbGl6YXRpb24gb2YgdGhlIENvcmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGlkcGZfdmNfY29yZV9pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaXRzIG9yaWdpbi4gV2hlcmUgaXMgdGhpcyB0aGluZyBiZWluZyBjYWxsZWQgZnJvbT8gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIGZvbGxvdyB0aGUgb3ZlcmFsbCBwcm9ncmFtIGZsb3cuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyB0cmlnZ2VyaW5nIGl0cyBleGVjdXRpb24uIElzIGl0IGNhbGxlZCBkaXJlY3RseSBmcm9tIGEgbWFpbiByb3V0aW5lPyBJcyBpdCBpbnZva2VkIGFzIHBhcnQgb2Ygc29tZSBsYXJnZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb3IgZnJhbWV3b3JrPyBEb2VzIGFub3RoZXIgZnVuY3Rpb24sIHdoaWNoIGluIHR1cm4gY2FsbHMgdGhpcyBvbmUsIGhhbmRsZSBzb21lIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbiBvciByZXNvdXJjZSBhbGxvY2F0aW9uPyBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgZ29pbmcgdG8gcHJvdmlkZSBzaWduaWZpY2FudCBjbHVlcyBhYm91dCB0aGUgcHVycG9zZSBhbmQgZGVwZW5kZW5jaWVzIG9mIHRoZSBgaWRwZl92Y19jb3JlX2luaXRgIGZ1bmN0aW9uIGl0c2VsZiwgd2hpY2ggaXMgd2hhdCBJIG5lZWQgdG8gdHJ1bHkgY29tcHJlaGVuZCB0aGlzIG1vZHVsZS4gSSBzaG91bGQgdXNlIG15IHRvb2xzIHRvIHVuZGVyc3RhbmQgdGhpcyBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQ4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MDYuNDg0MzA1ODc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE5Njc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZHBmX3ZjX2NvcmVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTg5Mz1zdGF0aWMgdm9pZCBpZHBmX2luaXRfaGFyZF9yZXNldChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDEtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE5NDI6XFx0ZXJyID0gaWRwZl92Y19jb3JlX2luaXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDMtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MzQzMz1zdGF0aWMgaW50IGlkcGZfdnBvcnRfcGFyYW1zX2J1Zl9hbGxvYyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNDY4OiAqIGlkcGZfdmNfY29yZV9pbml0IC0gSW5pdGlhbGl6ZSBzdGF0ZSBtYWNoaW5lIGFuZCBnZXQgZHJpdmVyIHNwZWNpZmljXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2OS0gKiByZXNvdXJjZXNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0NzktICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ4MDppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oPTEwMj12b2lkIGlkcGZfZGVpbml0X2RmbHRfbWJ4KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oOjEwMzppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmgtMTA0LXZvaWQgaWRwZl92Y19jb3JlX2RlaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MDYuNTQwNTA4MDQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTQ4Njg3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIE9yaWdpbiBvZiBgaWRwZl9pbml0X2hhcmRfcmVzZXRgKipcblxuT2theSwgc28gdGhlIHByb21wdCBkaXJlY3RzIG15IGF0dGVudGlvbiB0byBgaWRwZl9pbml0X2hhcmRfcmVzZXRgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBXaGVyZSAqaXMqIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/IEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LCBlc3BlY2lhbGx5IGluIGEgc3lzdGVtIGxpa2UgdGhpcy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2l0aGluIHRoZSBjb2RlIHdoZXJlIGBpZHBmX2luaXRfaGFyZF9yZXNldGAgaXMgaW52b2tlZC4gSXMgaXQgcGFydCBvZiB0aGUgbm9ybWFsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBJcyBpdCB0cmlnZ2VyZWQgYnkgc29tZSBzcGVjaWZpYyBldmVudCBvciBjb25kaXRpb24/IEtub3dpbmcgdGhlICpjb250ZXh0KiBvZiBpdHMgZXhlY3V0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byBpbnRlcnByZXRpbmcgd2hhdCBpdCAqZG9lcyouIEkgbmVlZCB0byBpbW1lZGlhdGVseSBpbml0aWF0ZSBhIHNlYXJjaCBmb3IgaXRzIGNhbGwgc2l0ZXMgdG8gcGFpbnQgdGhlIHBpY3R1cmUgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTQwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MTEuNjM1Mzc5Nzg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTAwMzU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZHBmX2luaXRfaGFyZF9yZXNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTg1Nz1zdGF0aWMgaW50IGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGUoc3RydWN0IGlkcGZfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE4ODUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE4ODY6ICogaWRwZl9pbml0X2hhcmRfcmVzZXQgLSBJbml0aWF0ZSBhIGhhcmR3YXJlIHJlc2V0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE4ODctICogQGFkYXB0ZXI6IERyaXZlciBzcGVjaWZpYyBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE4OTItICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE4OTM6c3RhdGljIHZvaWQgaWRwZl9pbml0X2hhcmRfcmVzZXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTg5NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTk3Mj12b2lkIGlkcGZfdmNfZXZlbnRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTk5Mi1cXHRzZXRfYml0KElEUEZfSFJfUkVTRVRfSU5fUFJPRywgYWRhcHRlci1cXHUwMDNlZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxOTkzOlxcdGlkcGZfaW5pdF9oYXJkX3Jlc2V0KGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xOTk0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MTEuNzA2MzkxNDc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTgwMjMwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgYGlkcGZfdmNfZXZlbnRfdGFza2AgQ29udW5kcnVtKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYGlkcGZfdmNfZXZlbnRfdGFza2AuIFJpZ2h0LCB0aGF0J3MgYSB3b3JrIHF1ZXVlIHRhc2ssIGdvdCBpdC4gSXQncyBkZXNpZ25lZCB0byBmdW5jdGlvbiBpbiB0aGF0IHNwZWNpZmljIHdheS4gQnV0IEknbSBhbHNvIHRoaW5raW5nLCBpcyB0aGlzICp0aGUqIG9ubHkgcGF0aD8gVGhpcyBzcGVjaWZpYyB0YXNrIHNlZW1zIGxpa2UgYSBzaW5ndWxhciBwb2ludCBvZiByZXNwb25zaWJpbGl0eSBpbiB0aGUgZmxvdy4gSWYgdGhlcmUncyBhbiBpc3N1ZSB3aXRoIGl0LCBhcmUgd2UgYm90dGxlbmVja2VkPyBBcmUgdGhlcmUgYW55IGFsdGVybmF0aXZlIHN0cmF0ZWdpZXMgb3IgcmVkdW5kYW50IHBhdGhzIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMsIGFueSBvdGhlciBmdW5jdGlvbnMgb3IgcHJvY2Vzc2VzIHRoYXQgY2FuIGhhbmRsZSBzaW1pbGFyIHJlc3BvbnNpYmlsaXRpZXM/IFdlIGNhbid0IGxldCB0aGlzIGJlIHRoZSBvbmx5IHNvbHV0aW9uLiBNeSBqb2Igbm93IGlzIHRvIGRldGVybWluZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIG9yIHByb2Nlc3NlcyBtYXkgYWNjb21wbGlzaCBhIHNpbWlsYXIgYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MTUuMzI0NDE3MzQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDA0MDQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZHBmX3ZjX2NvcmVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTg5Mz1zdGF0aWMgdm9pZCBpZHBmX2luaXRfaGFyZF9yZXNldChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDEtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE5NDI6XFx0ZXJyID0gaWRwZl92Y19jb3JlX2luaXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDMtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MzQzMz1zdGF0aWMgaW50IGlkcGZfdnBvcnRfcGFyYW1zX2J1Zl9hbGxvYyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNDY4OiAqIGlkcGZfdmNfY29yZV9pbml0IC0gSW5pdGlhbGl6ZSBzdGF0ZSBtYWNoaW5lIGFuZCBnZXQgZHJpdmVyIHNwZWNpZmljXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2OS0gKiByZXNvdXJjZXNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0NzktICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ4MDppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oPTEwMj12b2lkIGlkcGZfZGVpbml0X2RmbHRfbWJ4KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oOjEwMzppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmgtMTA0LXZvaWQgaWRwZl92Y19jb3JlX2RlaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MTUuMzk0NDY1MDA4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzY3OTIwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIEluaXRpYWxpemF0aW9uIEZsb3cqKlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBJJ20gbm90aWNpbmcgc29tZXRoaW5nIGhlcmUuIEl0IGxvb2tzIGxpa2UgYGlkcGZfdmNfY29yZV9pbml0YCBpcyAqb25seSogY2FsbGVkIGZyb20gYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YC4gVGhhdCBzZWVtcyBhIGJpdC4uLiByZXN0cmljdGl2ZSwgZG9lc24ndCBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgaW5pdGlhbGl6YXRpb24uIFdoYXQgYW0gSSBtaXNzaW5nP1xuXG5BbHJpZ2h0LCBsZXQncyBiYWNrIHVwLiBXaGVyZSAqZWxzZSogbWlnaHQgdGhpcyBpbml0aWFsaXphdGlvbiBiZSBoYXBwZW5pbmcsIG9yIGF0IGxlYXN0IGJlIGEgbG9naWNhbCBjYW5kaWRhdGU/IEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHRoZSBjYWxsIHN0cnVjdHVyZSBmcm9tIHRoZSBkcml2ZXIncyBlbnRyeSBwb2ludHMuIEkgd2lsbCBsb29rIGludG8gYm90aCBgaWRwZl9wcm9iZWAgYW5kIGBpZHBmX2Rldl9pbml0YC4gSSBiZXQgdGhlIGFuc3dlciBsaWVzIHRoZXJlLiBMZXQncyBzZWUgaWYgZWl0aGVyIG9mIHRoZW0gdG91Y2hlcyB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBpbiBhIGRpZmZlcmVudCB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjoxOC40MzEyNTk5MjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTAwMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlkcGZfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz0xODk9c3RhdGljIGludCBpZHBmX2NmZ19odyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0yMjgtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzoyMjk6ICogaWRwZl9wcm9iZSAtIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0yMzAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTIzNC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjIzNTpzdGF0aWMgaW50IGlkcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0yMzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz0zODQ9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlkcGZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODYtXFx0LmlkX3RhYmxlXFx0XFx0PSBpZHBmX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozODc6XFx0LnByb2JlXFx0XFx0XFx0PSBpZHBmX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzg4LVxcdC5zcmlvdl9jb25maWd1cmVcXHQ9IGlkcGZfc3Jpb3ZfY29uZmlndXJlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjoxOC41MDYxNjc4NzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MTYyNDAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgaWRwZl9wcm9iZWAgQ2FsbCBTdGFjayoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEknbSB0YWtpbmcgYSBsb29rIGF0IGBpZHBmX3Byb2JlYCBhbmQgbmVlZCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nLCBcIndoYXQgb3RoZXIgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgZG9lcyB0aGlzIHRoaW5nIHJlbHkgb24/XCIgSSBuZWVkIHRvIHNlZSB0aGUgY2FsbHMgaXQgbWFrZXMsIHRoZSBmdW5jdGlvbnMgaXQgaW52b2tlcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgZXhlY3V0aW9uIGZsb3cuIElzIGl0IG1ha2luZyBkaXJlY3QgY2FsbHMsIG9yIGlzIHRoZXJlIGFuIGludGVybWVkaWF0ZSBsYXllciBJIG5lZWQgdG8gZXhwbG9yZT8gQmFzaWNhbGx5LCBJIG5lZWQgYSBxdWljayBoaWdoLWxldmVsIHZpZXcgb2YgaXRzIGNvbnRyb2wgZmxvdyBncmFwaC4gVW5kZXJzdGFuZGluZyB0aGF0IGNhbGwgc3RhY2sgcXVpY2tseSBpcyBrZXkgdG8gZWZmaWNpZW50bHkgZGVidWdnaW5nIGFueSBpc3N1ZSByZWxhdGVkIHRvIEludGVsIGRyaXZlciBwcm9iaW5nIG9yIGl0cyBpbml0aWFsaXphdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgSSB0YWtlIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyBkZWVwbHkgbmVzdGVkIGFueSBwb3RlbnRpYWwgcHJvYmxlbSBtaWdodCBiZS4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgdG91Y2hlcyBhbmQgd2hhdCBpdCByZWxpZXMgdXBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzNSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjIxLjU4Nzc5NDIzN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdHN0YXRpYyBpbnQgaWRwZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gMjM2OlxcdHtcXG4gMjM3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIDIzODpcXHRcXHRzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyO1xcbiAyMzk6XFx0XFx0aW50IGVycjtcXG4gMjQwOlxcdFxcbiAyNDE6XFx0XFx0YWRhcHRlciA9IGt6YWxsb2Nfb2JqKCphZGFwdGVyKTtcXG4gMjQyOlxcdFxcdGlmICghYWRhcHRlcilcXG4gMjQzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyNDQ6XFx0XFxuIDI0NTpcXHRcXHRhZGFwdGVyLVxcdTAwM2VyZXFfdHhfc3BsaXRxID0gdHJ1ZTtcXG4gMjQ2OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXJlcV9yeF9zcGxpdHEgPSB0cnVlO1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRhZGFwdGVyLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4gMjQ5OlxcdFxcdGVyciA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTtcXG4gMjUwOlxcdFxcdGlmIChlcnIpXFxuIDI1MTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyNTI6XFx0XFxuIDI1MzpcXHRcXHRlcnIgPSBwY2ltX3JlcXVlc3RfcmVnaW9uKHBkZXYsIDAsIHBjaV9uYW1lKHBkZXYpKTtcXG4gMjU0OlxcdFxcdGlmIChlcnIpIHtcXG4gMjU1OlxcdFxcdFxcdHBjaV9lcnIocGRldiwgXFxcInBjaW1fcmVxdWVzdF9yZWdpb24gZmFpbGVkICVwZVxcXFxuXFxcIiwgRVJSX1BUUihlcnIpKTtcXG4gMjU2OlxcdFxcbiAyNTc6XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMjU4OlxcdFxcdH1cXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0ZXJyID0gcGNpX2VuYWJsZV9wdG0ocGRldik7XFxuIDI2MTpcXHRcXHRpZiAoZXJyKVxcbiAyNjI6XFx0XFx0XFx0cGNpX2RiZyhwZGV2LCBcXFwiUENJZSBQVE0gaXMgbm90IHN1cHBvcnRlZCBieSBQQ0llIGJ1cy9jb250cm9sbGVyXFxcXG5cXFwiKTtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0Lyogc2V0IHVwIGZvciBoaWdoIG9yIGxvdyBkbWEgKi9cXG4gMjY1OlxcdFxcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNjQpKTtcXG4gMjY2OlxcdFxcdGlmIChlcnIpIHtcXG4gMjY3OlxcdFxcdFxcdHBjaV9lcnIocGRldiwgXFxcIkRNQSBjb25maWd1cmF0aW9uIGZhaWxlZDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKGVycikpO1xcbiAyNjg6XFx0XFxuIDI2OTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyNzA6XFx0XFx0fVxcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG4gMjczOlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhZGFwdGVyKTtcXG4gMjc0OlxcdFxcbiAyNzU6XFx0XFx0YWRhcHRlci1cXHUwMDNlaW5pdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiJXMtJXMtaW5pdFxcXCIsXFxuIDI3NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDAsXFxuIDI3NzpcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLFxcbiAyNzg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgZGV2X25hbWUoZGV2KSk7XFxuIDI3OTpcXHRcXHRpZiAoIWFkYXB0ZXItXFx1MDAzZWluaXRfd3EpIHtcXG4gMjgwOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIGluaXQgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4gMjgxOlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDI4MjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyODM6XFx0XFx0fVxcbiAyODQ6XFx0XFxuIDI4NTpcXHRcXHRhZGFwdGVyLVxcdTAwM2VzZXJ2X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCIlcy0lcy1zZXJ2aWNlXFxcIixcXG4gMjg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCxcXG4gMjg3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGRldl9kcml2ZXJfc3RyaW5nKGRldiksXFxuIDI4ODpcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXZfbmFtZShkZXYpKTtcXG4gMjg5OlxcdFxcdGlmICghYWRhcHRlci1cXHUwMDNlc2Vydl93cSkge1xcbiAyOTA6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgc2VydmljZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbiAyOTE6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMjkyOlxcdFxcdFxcdGdvdG8gZXJyX3NlcnZfd3FfYWxsb2M7XFxuIDI5MzpcXHRcXHR9XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdGFkYXB0ZXItXFx1MDAzZW1ieF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiJXMtJXMtbWJ4XFxcIiwgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXFxuIDI5NjpcXHRcXHRcXHRcXHRcXHRcXHQgIDAsIGRldl9kcml2ZXJfc3RyaW5nKGRldiksXFxuIDI5NzpcXHRcXHRcXHRcXHRcXHRcXHQgIGRldl9uYW1lKGRldikpO1xcbiAyOTg6XFx0XFx0aWYgKCFhZGFwdGVyLVxcdTAwM2VtYnhfd3EpIHtcXG4gMjk5OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1haWxib3ggd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4gMzAwOlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDMwMTpcXHRcXHRcXHRnb3RvIGVycl9tYnhfd3FfYWxsb2M7XFxuIDMwMjpcXHRcXHR9XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXN0YXRzX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCIlcy0lcy1zdGF0c1xcXCIsXFxuIDMwNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAwLFxcbiAzMDY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRldl9kcml2ZXJfc3RyaW5nKGRldiksXFxuIDMwNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGV2X25hbWUoZGV2KSk7XFxuIDMwODpcXHRcXHRpZiAoIWFkYXB0ZXItXFx1MDAzZXN0YXRzX3dxKSB7XFxuIDMwOTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbiAzMTA6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMzExOlxcdFxcdFxcdGdvdG8gZXJyX3N0YXRzX3dxX2FsbG9jO1xcbiAzMTI6XFx0XFx0fVxcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRhZGFwdGVyLVxcdTAwM2V2Y19ldmVudF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiJXMtJXMtdmNfZXZlbnRcXFwiLFxcbiAzMTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCxcXG4gMzE2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLFxcbiAzMTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGRldl9uYW1lKGRldikpO1xcbiAzMTg6XFx0XFx0aWYgKCFhZGFwdGVyLVxcdTAwM2V2Y19ldmVudF93cSkge1xcbiAzMTk6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgdmlydGNobmwgZXZlbnQgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4gMzIwOlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDMyMTpcXHRcXHRcXHRnb3RvIGVycl92Y19ldmVudF93cV9hbGxvYztcXG4gMzIyOlxcdFxcdH1cXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0Lyogc2V0dXAgbXNnbHZsICovXFxuIDMyNTpcXHRcXHRhZGFwdGVyLVxcdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoLTEsIElEUEZfQVZBSUxfTkVUSUZfTSk7XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdGVyciA9IGlkcGZfZGV2X2luaXQoYWRhcHRlciwgZW50KTtcXG4gMzI4OlxcdFxcdGlmIChlcnIpIHtcXG4gMzI5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlVuZXhwZWN0ZWQgZGV2IElEIDB4JXggaW4gaWRwZiBwcm9iZVxcXFxuXFxcIixcXG4gMzMwOlxcdFxcdFxcdFxcdGVudC1cXHUwMDNlZGV2aWNlKTtcXG4gMzMxOlxcdFxcdFxcdGdvdG8gZGVzdHJveV92Y19ldmVudF93cTtcXG4gMzMyOlxcdFxcdH1cXG4gMzMzOlxcdFxcbiAzMzQ6XFx0XFx0ZXJyID0gaWRwZl9jZmdfaHcoYWRhcHRlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjIxLjU4Nzk3ODI3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgwMDQ1MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgSW50ZXJydXB0IEluaXRpYWxpemF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaWRwZl9jZmdfaHdgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCBpbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXRoIHRoZSBjb2RlIHRha2VzLiBUaGUgc3BlY2lmaWMgcXVlc3Rpb24gSSBoYXZlIGlzIHdoZXRoZXIgb3Igbm90IGBpZHBmX2NmZ19od2AgZGlyZWN0bHkgY2FsbHMgYGlkcGZfbWJfaW50cl9pbml0YC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGBpZHBmX21iX2ludHJfaW5pdGAgbGlrZWx5IGhhbmRsZXMgdGhlIHNldHVwIG9mIHRoZSBtYWlsYm94IGludGVycnVwdCwgYSBjb3JlIGNvbXBvbmVudCBmb3IgY29tbXVuaWNhdGlvbiBpbiB0aGlzIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoYXQgY29ubmVjdGlvbiBpcyBrZXkgdG8gZGVidWdnaW5nIGludGVycnVwdC1yZWxhdGVkIGlzc3VlcyBvciBvcHRpbWl6aW5nIHRoZSBkcml2ZXIuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiBgaWRwZl9tYl9pbnRyX2luaXRgIGlzIGNhbGxlZCAoYW5kIGlmKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjI0Ljk2ODAyNzkyOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4OTpcXHRzdGF0aWMgaW50IGlkcGZfY2ZnX2h3KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIDE5MDpcXHR7XFxuIDE5MTpcXHRcXHRyZXNvdXJjZV9zaXplX3QgcmVzX3N0YXJ0LCBtYnhfc3RhcnQsIHJzdGF0X3N0YXJ0O1xcbiAxOTI6XFx0XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLVxcdTAwM2VwZGV2O1xcbiAxOTM6XFx0XFx0c3RydWN0IGlkcGZfaHcgKmh3ID0gXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3O1xcbiAxOTQ6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gMTk1OlxcdFxcdGxvbmcgbGVuO1xcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRyZXNfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdC8qIE1hcCBtYWlsYm94IHNwYWNlIGZvciB2aXJ0Y2hubCBjb21tdW5pY2F0aW9uICovXFxuIDIwMDpcXHRcXHRtYnhfc3RhcnQgPSByZXNfc3RhcnQgKyBhZGFwdGVyLVxcdTAwM2VkZXZfb3BzLnN0YXRpY19yZWdfaW5mb1swXS5zdGFydDtcXG4gMjAxOlxcdFxcdGxlbiA9IHJlc291cmNlX3NpemUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzBdKTtcXG4gMjAyOlxcdFxcdGh3LVxcdTAwM2VtYngudmFkZHIgPSBkZXZtX2lvcmVtYXAoZGV2LCBtYnhfc3RhcnQsIGxlbik7XFxuIDIwMzpcXHRcXHRpZiAoIWh3LVxcdTAwM2VtYngudmFkZHIpIHtcXG4gMjA0OlxcdFxcdFxcdHBjaV9lcnIocGRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBCQVIwIG1ieCByZWdpb25cXFxcblxcXCIpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjA3OlxcdFxcdH1cXG4gMjA4OlxcdFxcdGh3LVxcdTAwM2VtYnguYWRkcl9zdGFydCA9IGFkYXB0ZXItXFx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzBdLnN0YXJ0O1xcbiAyMDk6XFx0XFx0aHctXFx1MDAzZW1ieC5hZGRyX2xlbiA9IGxlbjtcXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0LyogTWFwIHJzdGF0IHNwYWNlIGZvciByZXNldHMgKi9cXG4gMjEyOlxcdFxcdHJzdGF0X3N0YXJ0ID0gcmVzX3N0YXJ0ICsgYWRhcHRlci1cXHUwMDNlZGV2X29wcy5zdGF0aWNfcmVnX2luZm9bMV0uc3RhcnQ7XFxuIDIxMzpcXHRcXHRsZW4gPSByZXNvdXJjZV9zaXplKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VkZXZfb3BzLnN0YXRpY19yZWdfaW5mb1sxXSk7XFxuIDIxNDpcXHRcXHRody1cXHUwMDNlcnN0YXQudmFkZHIgPSBkZXZtX2lvcmVtYXAoZGV2LCByc3RhdF9zdGFydCwgbGVuKTtcXG4gMjE1OlxcdFxcdGlmICghaHctXFx1MDAzZXJzdGF0LnZhZGRyKSB7XFxuIDIxNjpcXHRcXHRcXHRwY2lfZXJyKHBkZXYsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgQkFSMCByc3RhdCByZWdpb25cXFxcblxcXCIpO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcdGh3LVxcdTAwM2Vyc3RhdC5hZGRyX3N0YXJ0ID0gYWRhcHRlci1cXHUwMDNlZGV2X29wcy5zdGF0aWNfcmVnX2luZm9bMV0uc3RhcnQ7XFxuIDIyMTpcXHRcXHRody1cXHUwMDNlcnN0YXQuYWRkcl9sZW4gPSBsZW47XFxuIDIyMjpcXHRcXG4gMjIzOlxcdFxcdGh3LVxcdTAwM2ViYWNrID0gYWRhcHRlcjtcXG4gMjI0OlxcdFxcbiAyMjU6XFx0XFx0cmV0dXJuIDA7XFxuIDIyNjpcXHR9XFxuIDIyNzpcXHRcXG4gMjI4OlxcdC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjoyNC45NjgxMjIxMDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwMTM3NDE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGlkcGZfY2ZnX2h3YCBTZXF1ZW5jZSoqXG5cbkhtbSwgaW50ZXJlc3RpbmcuIEknbSBub3RpY2luZyB0aGF0IHRoZSBgaWRwZl9jZmdfaHdgIGZ1bmN0aW9uIGRvZXNuJ3Qgc2VlbSB0byBleHBsaWNpdGx5IGNhbGwgYGlkcGZfbWJfaW50cl9pbml0YC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLCBhbmQgaXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZSBxdWVzdGlvbnMuIFdoZXJlIGFuZCBob3cgYXJlIHRoZSBNZXNzYWdlIEJ1ZmZlciAoTUIpIGludGVycnVwdHMgYmVpbmcgaW5pdGlhbGl6ZWQgaW4gcmVsYXRpb24gdG8gaGFyZHdhcmUgY29uZmlndXJhdGlvbj8gSWYgbm90IGNhbGxlZCBkaXJlY3RseSB0aGVyZSwgaXQgbWVhbnMgdGhlIGluaXRpYWxpemF0aW9uIG11c3QgYmUgaGFwcGVuaW5nIHNvbWV3aGVyZSBlbHNlIGluIHRoZSBjb2RlIHBhdGggKmFmdGVyKiBgaWRwZl9jZmdfaHdgIGV4ZWN1dGVzLCBvciBwZXJoYXBzIGV2ZW4gKmJlZm9yZSouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcuIEl0IGNvdWxkIGJlIHRyaWdnZXJlZCBmcm9tIHRoZSBQQ0kgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgb3Igc29tZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBhbm90aGVyIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgLSBuZWVkIHRvIGZpbmQgdGhhdCBzcG90LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIGF2b2lkIG1ha2luZyBhbiBpbmNvcnJlY3QgYXNzdW1wdGlvbi4gVGhpcyBpcyBsaWtlbHkgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycnVwdCBoYW5kbGluZyBiZWhhdmlvci4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIHRoZW4gbWlnaHQgbmVlZCB0byBkbyBzb21lIGR5bmFtaWMgYW5hbHlzaXMgb3IgZGVidWdnaW5nIHRvIHRydWx5IHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MzEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjI5LjA2OTUwMDI4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzQ6XFx0XFx0ZXJyID0gaWRwZl9jZmdfaHcoYWRhcHRlcik7XFxuIDMzNTpcXHRcXHRpZiAoZXJyKSB7XFxuIDMzNjpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBjb25maWd1cmUgSFcgc3RydWN0dXJlIGZvciBhZGFwdGVyOiAlZFxcXFxuXFxcIixcXG4gMzM3OlxcdFxcdFxcdFxcdGVycik7XFxuIDMzODpcXHRcXHRcXHRnb3RvIGRlc3Ryb3lfdmNfZXZlbnRfd3E7XFxuIDMzOTpcXHRcXHR9XFxuIDM0MDpcXHRcXG4gMzQxOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXZwb3J0X2N0cmxfbG9jayk7XFxuIDM0MjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2ZWN0b3JfbG9jayk7XFxuIDM0MzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gMzQ0OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXZjX2J1Zl9sb2NrKTtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWluaXRfdGFzaywgaWRwZl9pbml0X3Rhc2spO1xcbiAzNDc6XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXNlcnZfdGFzaywgaWRwZl9zZXJ2aWNlX3Rhc2spO1xcbiAzNDg6XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW1ieF90YXNrLCBpZHBmX21ieF90YXNrKTtcXG4gMzQ5OlxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzdGF0c190YXNrLCBpZHBmX3N0YXRpc3RpY3NfdGFzayk7XFxuIDM1MDpcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2YWRhcHRlci1cXHUwMDNldmNfZXZlbnRfdGFzaywgaWRwZl92Y19ldmVudF90YXNrKTtcXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0YWRhcHRlci1cXHUwMDNlZGV2X29wcy5yZWdfb3BzLnJlc2V0X3JlZ19pbml0KGFkYXB0ZXIpO1xcbiAzNTM6XFx0XFx0c2V0X2JpdChJRFBGX0hSX0RSVl9MT0FELCBhZGFwdGVyLVxcdTAwM2VmbGFncyk7XFxuIDM1NDpcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoYWRhcHRlci1cXHUwMDNldmNfZXZlbnRfd3EsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2Y19ldmVudF90YXNrLFxcbiAzNTU6XFx0XFx0XFx0XFx0ICAgbXNlY3NfdG9famlmZmllcygxMCAqIChwZGV2LVxcdTAwM2VkZXZmbiBcXHUwMDI2IDB4MDcpKSk7XFxuIDM1NjpcXHRcXG4gMzU3OlxcdFxcdHJldHVybiAwO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRkZXN0cm95X3ZjX2V2ZW50X3dxOlxcbiAzNjA6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci1cXHUwMDNldmNfZXZlbnRfd3EpO1xcbiAzNjE6XFx0ZXJyX3ZjX2V2ZW50X3dxX2FsbG9jOlxcbiAzNjI6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci1cXHUwMDNlc3RhdHNfd3EpO1xcbiAzNjM6XFx0ZXJyX3N0YXRzX3dxX2FsbG9jOlxcbiAzNjQ6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci1cXHUwMDNlbWJ4X3dxKTtcXG4gMzY1OlxcdGVycl9tYnhfd3FfYWxsb2M6XFxuIDM2NjpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLVxcdTAwM2VzZXJ2X3dxKTtcXG4gMzY3OlxcdGVycl9zZXJ2X3dxX2FsbG9jOlxcbiAzNjg6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci1cXHUwMDNlaW5pdF93cSk7XFxuIDM2OTpcXHRlcnJfZnJlZTpcXG4gMzcwOlxcdFxcdGtmcmVlKGFkYXB0ZXIpO1xcbiAzNzE6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzcyOlxcdH1cXG4gMzczOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjoyOS4wNjk2NjIxNjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE5ODA5MDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElEUEYgRHJpdmVyIEluaXRpYWxpemF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBgaWRwZl9wcm9iZWAgZXZlbnR1YWxseSBlbnF1ZXVlcyBgaWRwZl92Y19ldmVudF90YXNrYC4gVGhhdCB0YXNrIHRoZW4gZGl2ZXMgaW50byBgaWRwZl9pbml0X2hhcmRfcmVzZXQoYWRhcHRlcilgLCB3aGljaCBicmFuY2hlcyBpbnRvIGBpZHBmX3ZjX2NvcmVfaW5pdChhZGFwdGVyKWAsIHdoaWNoIGxlYWRzIHRvIGBpZHBmX2ludHJfcmVxKGFkYXB0ZXIpYCwgYW5kIGRvd24gdGhlIHJhYmJpdCBob2xlIHRvIGBpZHBmX21iX2ludHJfaW5pdChhZGFwdGVyKWAgYW5kIGZpbmFsbHkgYGlkcGZfbWJfaW50cl9yZXFfaXJxKGFkYXB0ZXIpYC4gVGhpcyBzdWdnZXN0cyB0aGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gQnV0IGNhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBzZXF1ZW5jZSB1c2luZyBTeXprYWxsZXI/XG5cblRoZSBjcml0aWNhbCBwYXJ0IGlzIGdldHRpbmcgYGlkcGZfcHJvYmVgIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgaW5qZWN0aW5nIGEgUENJIGRldmljZSB3aXRoIFN5emthbGxlciwgYnV0IFN5emthbGxlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIGdlbmVyaWMgUENJIGRldmljZSBpbmplY3RvciBjYXBhYmxlIG9mIGVtdWxhdGluZyBhcmJpdHJhcnkgQkFScyBhbmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLCBhbmQgZGVmaW5pdGVseSBubyBgdmhjaWAgZm9yIFBDSSBpbiB0aGUgbWFpbmxpbmUuIEkgcmVtZW1iZXIgdGhlcmUncyBzb21lIGxpbWl0ZWQgUENJIGZ1enppbmcgc3VwcG9ydCBsZXZlcmFnaW5nIGB2ZmlvYCBvciBzaW1pbGFyIG1lY2hhbmlzbXMsIGJ1dCB0aGF0J3MgcHJldHR5IHJlc3RyaWN0ZWQuXG5cbkFoLCBidXQgd2FpdCEgU3l6a2FsbGVyICpjYW4qIHRyaWdnZXIgUENJIHByb2JpbmcgdGhyb3VnaCBgc3lzZnNgIGJ5IHdyaXRpbmcgdG8gYG5ld19pZGAgb3IgYGJpbmRgLiBUaGUgaWRlYSBpcyB0byBiaW5kIGFuIGV4aXN0aW5nIFBDSSBkZXZpY2XigJRwZXJoYXBzIGEgZHVtbXkgZGV2aWNlIG9yIHNvbWUgb3RoZXIgYXZhaWxhYmxlIGRldmljZeKAlHRvIHRoZSBJRFBGIGRyaXZlci4gSWYgc3VjY2Vzc2Z1bCwgYGlkcGZfcHJvYmVgIHdvdWxkIGJlIGludm9rZWQuIEhvd2V2ZXIsIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgc2lkZSBlZmZlY3RzLlxuXG5gaWRwZl9wcm9iZWAgY2FsbHMgcm91dGluZXMgbGlrZSBgcGNpbV9lbmFibGVfZGV2aWNlYCwgYHBjaW1fcmVxdWVzdF9yZWdpb25gLCBhbmQgYGRldm1faW9yZW1hcGAuIFRoZW4sIGl0IHF1ZXVlcyB0aGF0IGBpZHBmX3ZjX2V2ZW50X3Rhc2tgLCB3aGljaCBzdGFydHMgdGhpcyB3aG9sZSBpbml0aWFsaXphdGlvbiBmbG93LiBOZXh0IHN0ZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2YgYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTksIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjozNS4yNjc3NTUxMDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODkzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODkzOlxcdHN0YXRpYyB2b2lkIGlkcGZfaW5pdF9oYXJkX3Jlc2V0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuMTg5NDpcXHR7XFxuMTg5NTpcXHRcXHRzdHJ1Y3QgaWRwZl9yZWdfb3BzICpyZWdfb3BzID0gXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWRldl9vcHMucmVnX29wcztcXG4xODk2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuMTg5NzpcXHRcXHRpbnQgZXJyO1xcbjE4OTg6XFx0XFxuMTg5OTpcXHRcXHRpZHBmX2RldGFjaF9hbmRfY2xvc2UoYWRhcHRlcik7XFxuMTkwMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2cG9ydF9jdHJsX2xvY2spO1xcbjE5MDE6XFx0XFxuMTkwMjpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJEZXZpY2UgSFcgUmVzZXQgaW5pdGlhdGVkXFxcXG5cXFwiKTtcXG4xOTAzOlxcdFxcbjE5MDQ6XFx0XFx0LyogUHJlcGFyZSBmb3IgcmVzZXQgKi9cXG4xOTA1OlxcdFxcdGlmICh0ZXN0X2JpdChJRFBGX0hSX0RSVl9MT0FELCBhZGFwdGVyLVxcdTAwM2VmbGFncykpIHtcXG4xOTA2OlxcdFxcdFxcdHJlZ19vcHMtXFx1MDAzZXRyaWdnZXJfcmVzZXQoYWRhcHRlciwgSURQRl9IUl9EUlZfTE9BRCk7XFxuMTkwNzpcXHRcXHR9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRFBGX0hSX0ZVTkNfUkVTRVQsIGFkYXB0ZXItXFx1MDAzZWZsYWdzKSkge1xcbjE5MDg6XFx0XFx0XFx0Ym9vbCBpc19yZXNldCA9IGlkcGZfaXNfcmVzZXRfZGV0ZWN0ZWQoYWRhcHRlcik7XFxuMTkwOTpcXHRcXG4xOTEwOlxcdFxcdFxcdGlkcGZfaWRjX2lzc3VlX3Jlc2V0X2V2ZW50KGFkYXB0ZXItXFx1MDAzZWNkZXZfaW5mbyk7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdFxcdGlkcGZfdmNfY29yZV9kZWluaXQoYWRhcHRlcik7XFxuMTkxMzpcXHRcXHRcXHRpZiAoIWlzX3Jlc2V0KVxcbjE5MTQ6XFx0XFx0XFx0XFx0cmVnX29wcy1cXHUwMDNldHJpZ2dlcl9yZXNldChhZGFwdGVyLCBJRFBGX0hSX0ZVTkNfUkVTRVQpO1xcbjE5MTU6XFx0XFx0XFx0aWRwZl9kZWluaXRfZGZsdF9tYngoYWRhcHRlcik7XFxuMTkxNjpcXHRcXHR9IGVsc2Uge1xcbjE5MTc6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJVbmhhbmRsZWQgaGFyZCByZXNldCBjYXVzZVxcXFxuXFxcIik7XFxuMTkxODpcXHRcXHRcXHRlcnIgPSAtRUJBRFJRQztcXG4xOTE5OlxcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbjE5MjA6XFx0XFx0fVxcbjE5MjE6XFx0XFxuMTkyMjpcXHRcXHQvKiBXYWl0IGZvciByZXNldCB0byBjb21wbGV0ZSAqL1xcbjE5MjM6XFx0XFx0ZXJyID0gaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyZXNldF9yZWcpO1xcbjE5MjQ6XFx0XFx0aWYgKGVycikge1xcbjE5MjU6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJUaGUgZHJpdmVyIHdhcyB1bmFibGUgdG8gY29udGFjdCB0aGUgZGV2aWNlJ3MgZmlybXdhcmUuIENoZWNrIHRoYXQgdGhlIEZXIGlzIHJ1bm5pbmcuIERyaXZlciBzdGF0ZT0gMHgleFxcXFxuXFxcIixcXG4xOTI2OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXN0YXRlKTtcXG4xOTI3OlxcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbjE5Mjg6XFx0XFx0fVxcbjE5Mjk6XFx0XFxuMTkzMDpcXHRcXHQvKiBSZXNldCBpcyBjb21wbGV0ZSBhbmQgc28gc3RhcnQgYnVpbGRpbmcgdGhlIGRyaXZlciByZXNvdXJjZXMgYWdhaW4gKi9cXG4xOTMxOlxcdFxcdGVyciA9IGlkcGZfaW5pdF9kZmx0X21ieChhZGFwdGVyKTtcXG4xOTMyOlxcdFxcdGlmIChlcnIpIHtcXG4xOTMzOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBtYWlsYm94OiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4xOTM0OlxcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbjE5MzU6XFx0XFx0fVxcbjE5MzY6XFx0XFxuMTkzNzpcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoYWRhcHRlci1cXHUwMDNlbWJ4X3dxLCBcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWJ4X3Rhc2ssIDApO1xcbjE5Mzg6XFx0XFxuMTkzOTpcXHRcXHQvKiBJbml0aWFsaXplIHRoZSBzdGF0ZSBtYWNoaW5lLCBhbHNvIGFsbG9jYXRlIG1lbW9yeSBhbmQgcmVxdWVzdFxcbjE5NDA6XFx0XFx0ICogcmVzb3VyY2VzXFxuMTk0MTpcXHRcXHQgKi9cXG4xOTQyOlxcdFxcdGVyciA9IGlkcGZfdmNfY29yZV9pbml0KGFkYXB0ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjozNS4yNjc5Mzc0OTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2OTUxNzMyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgUG90ZW50aWFsIERyaXZlciBSZXNldCBJc3N1ZXMgd2l0aCBhIE5vbi1JRFBGIERldmljZSoqXG5cbkhtbSwgc28gYGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGVgLi4uIHRoYXQncyB3aGVyZSB3ZSdyZSByZWFkaW5nIGZyb20gdGhlIGhhcmR3YXJlIHJlZ2lzdGVyLCByaWdodD8gQW5kIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCAqaXNuJ3QqIGEgcHJvcGVyIElEUEYgZGV2aWNlIOKAkyBzYXksIGEgZHVtbXkgUENJIGRldmljZSBqdXN0IGJvdW5kIHRvIHRoZSBkcml2ZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMgb3Igc29tZSBvdGhlciBzY2VuYXJpbyB3aGVyZSB0aGUgaGFyZHdhcmUgZG9lc24ndCBhZGhlcmUgdG8gdGhlIGV4YWN0IElEUEYgc3RhbmRhcmQg4oCTIHdlbGwsIHRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgZ29pbmcgdG8gdHJpcCB1cC4gSXQncyBleHBlY3RpbmcgYSBzcGVjaWZpYyB2YWx1ZSBmcm9tIHRoYXQgcmVnaXN0ZXIsIGFuZCBpZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBwcm92aWRlIGl0LCB0aGUgY2hlY2sgd2lsbCBvYnZpb3VzbHkgZmFpbC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcuIExldCdzIHN0YXJ0IHdpdGggdmVyaWZ5aW5nIHRoZSBsb2dpYyBvZiBgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTQxLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjozOC4zMzc0NTc0MTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODU3LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODU3OlxcdHN0YXRpYyBpbnQgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZShzdHJ1Y3QgaWRwZl9odyAqaHcsXFxuMTg1ODpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpZHBmX3Jlc2V0X3JlZyAqcmVzZXRfcmVnKVxcbjE4NTk6XFx0e1xcbjE4NjA6XFx0XFx0c3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlciA9IGh3LVxcdTAwM2ViYWNrO1xcbjE4NjE6XFx0XFx0aW50IGk7XFxuMTg2MjpcXHRcXG4xODYzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAyMDAwOyBpKyspIHtcXG4xODY0OlxcdFxcdFxcdHUzMiByZWdfdmFsID0gcmVhZGwocmVzZXRfcmVnLVxcdTAwM2Vyc3RhdCk7XFxuMTg2NTpcXHRcXG4xODY2OlxcdFxcdFxcdC8qIDB4RkZGRkZGRkYgbWlnaHQgYmUgcmVhZCBpZiBvdGhlciBzaWRlIGhhc24ndCBjbGVhcmVkIHRoZVxcbjE4Njc6XFx0XFx0XFx0ICogcmVnaXN0ZXIgZm9yIHVzIHlldCBhbmQgMHhGRkZGRkZGRiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3JcXG4xODY4OlxcdFxcdFxcdCAqIHRoZSByZWdpc3Rlciwgc28gdHJlYXQgdGhhdCBhcyBpbnZhbGlkLlxcbjE4Njk6XFx0XFx0XFx0ICovXFxuMTg3MDpcXHRcXHRcXHRpZiAocmVnX3ZhbCAhPSAweEZGRkZGRkZGIFxcdTAwMjZcXHUwMDI2IChyZWdfdmFsIFxcdTAwMjYgcmVzZXRfcmVnLVxcdTAwM2Vyc3RhdF9tKSlcXG4xODcxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjE4NzI6XFx0XFxuMTg3MzpcXHRcXHRcXHR1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApO1xcbjE4NzQ6XFx0XFx0fVxcbjE4NzU6XFx0XFxuMTg3NjpcXHRcXHRkZXZfd2FybihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwiRGV2aWNlIHJlc2V0IHRpbWVvdXQhXFxcXG5cXFwiKTtcXG4xODc3OlxcdFxcdC8qIENsZWFyIHRoZSByZXNldCBmbGFnIHVuY29uZGl0aW9uYWxseSBoZXJlIHNpbmNlIHRoZSByZXNldFxcbjE4Nzg6XFx0XFx0ICogdGVjaG5pY2FsbHkgaXNuJ3QgaW4gcHJvZ3Jlc3MgYW55bW9yZSBmcm9tIHRoZSBkcml2ZXIncyBwZXJzcGVjdGl2ZVxcbjE4Nzk6XFx0XFx0ICovXFxuMTg4MDpcXHRcXHRjbGVhcl9iaXQoSURQRl9IUl9SRVNFVF9JTl9QUk9HLCBhZGFwdGVyLVxcdTAwM2VmbGFncyk7XFxuMTg4MTpcXHRcXG4xODgyOlxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTg4MzpcXHR9XFxuMTg4NDpcXHRcXG4xODg1OlxcdC8qKlxcbjE4ODY6XFx0ICogaWRwZl9pbml0X2hhcmRfcmVzZXQgLSBJbml0aWF0ZSBhIGhhcmR3YXJlIHJlc2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjM4LjMzNzY0NzAzMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjEyNzQzMDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJRFBGIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaWRwZl9pbml0X2hhcmRfcmVzZXRgIGZ1bmN0aW9uLCBhbmQgaXQncyBiZWNvbWluZyBjbGVhciBob3cgaXQgd29ya3MuIFRoZSBjcml0aWNhbCBwYXRoIGRlcGVuZHMgb24gdGhlIGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCBmdW5jdGlvbi4gSWYgKnRoYXQqIGNhbGwgZmFpbHMsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYC1FQlVTWWAuIFRoZSBjb2RlIHRoZW4ganVtcHMgc3RyYWlnaHQgdG8gYHVubG9ja19tdXRleGAgd2l0aG91dCBldmVyIGNhbGxpbmcgYGlkcGZfdmNfY29yZV9pbml0YC4gVGhhdCdzIGEgbWFqb3IgcG9pbnQgLSBgaWRwZl92Y19jb3JlX2luaXRgIGlzIGVmZmVjdGl2ZWx5IHNraXBwZWQgaWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgcGxheSBiYWxsIHdpdGggdGhlIHJlc2V0IGNoZWNrLlxuXG5Ob3csIGNvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2UgYW5kIGhvdyBzeXprYWxsZXIgb3BlcmF0ZXMsIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGhvdXQgYSBwcm9wZXIgSURQRiBlbXVsYXRvciwgYHJlYWRsKHJlc2V0X3JlZy1cdTAwM2Vyc3RhdClgIGlzIGdvaW5nIHRvIGxpa2VseSByZXR1cm4gZWl0aGVyIGAweEZGRkZGRkZGYCAodW5tYXBwZWQgb3IgZHVtbXkgbWVtb3J5KSBvciBzaW1wbHkgYDBgIChhIHplcm9lZCBwYWdlKS4gSWYgaXQncyB6ZXJvLCB0aGUgYml0d2lzZSBBTkQgd2l0aCBgcmVzZXRfcmVnLVx1MDAzZXJzdGF0X21gIHdpbGwgYWxzbyBiZSB6ZXJvLCBhbmQgdGhhdCBsb29wIGlzIGdvaW5nIHRvIHJ1biBmb3IgdGhlIGZ1bGwgMjAwMCBpdGVyYXRpb25zIGJlZm9yZSByZXR1cm5pbmcgYC1FQlVTWWAuIFNhbWUgZ29lcyBmb3IgdGhhdCBgMHhGRkZGRkZGRmAgcmVzdWx0ISBJdCdzIHN0aWxsIGdvaW5nIHRvIGxvb3AuIFRoaXMgbWVhbnMgdGhhdCB1bmRlciB2aXJ0dWFsaXphdGlvbiwgYGlkcGZfdmNfY29yZV9pbml0YCBpcyBhbG1vc3QgY2VydGFpbmx5IHVucmVhY2hhYmxlIHdpdGhvdXQgc29tZSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiB0byBtYWtlIHRoZSByZXNldCBjaGVjayBwYXNzLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBpZHBmX3ZjX2NvcmVfaW5pdGAgdGhlICpvbmx5KiBlbnRyeSBwb2ludCB0byBgaWRwZl9tYl9pbnRyX3JlcV9pcnFgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgY2FsbGluZyB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGJhY2tkb29yIGludG8gdGhhdCBjcml0aWNhbCBhcmVhIG9mIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMzMCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjQzLjU1MDM5MzQzNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMzAwOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlkcGZfbWJfaW50cl9yZXFfaXJxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0xMTU9c3RhdGljIHZvaWQgaWRwZl9tYl9pcnFfZW5hYmxlKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTI1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxMjY6ICogaWRwZl9tYl9pbnRyX3JlcV9pcnEgLSBSZXF1ZXN0IGlycSBmb3IgdGhlIG1haWxib3ggaW50ZXJydXB0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyNy0gKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmUgdG8gcGFzcyB0byB0aGUgbWFpbGJveCBpcnEgaGFuZGxlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xMjgtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjEyOTpzdGF0aWMgaW50IGlkcGZfbWJfaW50cl9yZXFfaXJxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEzMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTU1PXN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE2MDpcXHRyZXR1cm4gaWRwZl9tYl9pbnRyX3JlcV9pcnEoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE2MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjQzLjgwMjcwMjgxNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM1ODM1MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBJbnRlcnJ1cHQgSGFuZGxpbmcgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2tpbmcgZG93biB0aGUgb3JpZ2lucyBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGxldCdzIGNhbGwgaXQgdGhlIFwiVGFyZ2V0IEZ1bmN0aW9uLlwiIEkgc2VlIGl0J3Mgb25seSBjYWxsZWQgZnJvbSBgaWRwZl9tYl9pbnRyX2luaXRgLiBUaGF0J3MgYSBwcmV0dHkgbGltaXRlZCBzY29wZSwgd2hpY2ggaXMgaGVscGZ1bC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGBpZHBmX21iX2ludHJfaW5pdGAgaXMgY29taW5nIGZyb20uIFRoZSBjb2RlIHNob3dzIG1lIHRoYXQgYGlkcGZfbWJfaW50cl9pbml0YCBpdHNlbGYgaXMgb25seSBjYWxsZWQgZnJvbSBgaWRwZl9pbnRyX3JlcWAuIFNvLCBJIGhhdmUgYSBjbGVhciwgY29uY2lzZSBjYWxsIHN0YWNrOiB0aGUgVGFyZ2V0IEZ1bmN0aW9uIGlzIGluaXRpYWxpemVkIGJ5IGBpZHBmX21iX2ludHJfaW5pdGAsIGFuZCBgaWRwZl9tYl9pbnRyX2luaXRgIGlzIGNhbGxlZCBieSBgaWRwZl9pbnRyX3JlcWAuIFRoaXMgZ2l2ZXMgbWUgYSBmYWlybHkgbmFycm93IHZpZXcgb2YgaG93IHRoZSBUYXJnZXQgRnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgZnJhbWV3b3JrLiBOb3cgSSBjYW4gYnVpbGQgbXkgbWVudGFsIG1vZGVsLCB0aGlzIGlzIHRoZSBwYXRoIGFuZCBzY29wZSBvZiBteSBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDIzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6NDcuMDM4NTQwMTM5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg0MDcyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWRwZl9tYl9pbnRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTEyOT1zdGF0aWMgaW50IGlkcGZfbWJfaW50cl9yZXFfaXJxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUxLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxNTI6ICogaWRwZl9tYl9pbnRyX2luaXQgLSBJbml0aWFsaXplIHRoZSBtYWlsYm94IGludGVycnVwdFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTMtICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlIHRvIHN0b3JlIHRoZSBtYWlsYm94IHZlY3RvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE1NTpzdGF0aWMgaW50IGlkcGZfbWJfaW50cl9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MzA0PWludCBpZHBmX2ludHJfcmVxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtNDE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzo0MTc6XFx0ZXJyID0gaWRwZl9tYl9pbnRyX2luaXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTQxOC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0Mjo0Ny4xNDY5NTM0ODFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2MDA2NjY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIEdyYXBoKipcblxuQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBzbywgYGlkcGZfaW50cl9yZXFgLCB0aGF0IGludGVycnVwdCByZXF1ZXN0IGZ1bmN0aW9uLCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBpZHBmX3ZjX2NvcmVfaW5pdGAuIFRoYXQncyBpbXBvcnRhbnQuIEl0J3MgYSBrZXkgcGllY2Ugb2YgaW5pdGlhbGl6YXRpb24sIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIHdpdGhpbiB0aGF0IGNvbnRleHQgZ2l2ZXMgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbi4gS25vd2luZyB0aGUgY2FsbCBncmFwaCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCwgYW5kIHRoaXMgc2ltcGxlIG9ic2VydmF0aW9uIGFscmVhZHkgZm9jdXNlcyBteSBhdHRlbnRpb24gb24gdGhlIHN0YXJ0dXAgc2VxdWVuY2Ugb2YgdGhlIHZpcnR1YWwgY2hhbm5lbCBjb3JlLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHdoYXQgZXhhY3RseSBoYXBwZW5zIGR1cmluZyB0aGF0IGBpZHBmX3ZjX2NvcmVfaW5pdGAgdG8gdW5kZXJzdGFuZCAqd2h5KiBgaWRwZl9pbnRyX3JlcWAgaXMgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGl0cyBzaWduaWZpY2FuY2UgaXMuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHNldHRpbmcgdXAgaW50ZXJydXB0IGhhbmRsaW5nIGZvciB0aGlzIHZpcnR1YWwgY2hhbm5lbC4gTWFrZXMgaXQgYSBmb2NhbCBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgaW50ZXJydXB0IG1hbmFnZW1lbnQuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0Mjo1MC4yMDcwMjI2NzhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTA5NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlkcGZfaW50cl9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg9MTA0OT12b2lkIGlkcGZfdmZfZGV2X29wc19pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oOjEwNTA6aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtMTA1MS12b2lkIGlkcGZfaW50cl9yZWwoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MjU0PWludCBpZHBmX3JlcV9yZWxfdmVjdG9yX2luZGV4ZXMoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0yOTgtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjI5OTogKiBpZHBmX2ludHJfcmVxIC0gUmVxdWVzdCBpbnRlcnJ1cHQgY2FwYWJpbGl0aWVzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTMwMC0gKiBAYWRhcHRlcjogYWRhcHRlciB0byBlbmFibGUgaW50ZXJydXB0cyBvblxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTMwMy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MzA0OmludCBpZHBmX2ludHJfcmVxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTMwNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYz0zNDgwPWludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzU4Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNTg3OlxcdGVyciA9IGlkcGZfaW50cl9yZXEoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzU4OC1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjUwLjI5MzUzNjg4MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQ1MzIxMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIENhbGwgR3JhcGgqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIHNvLCBgaWRwZl92Y19jb3JlX2luaXRgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSBgaWRwZl9pbml0X2hhcmRfcmVzZXRgLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCBhIGhhcmQgcmVzZXQgcHJvY2VkdXJlLiBObyBkaXJlY3QsIGluZGVwZW5kZW50IGNhbGxzIHRvIGBpZHBmX3ZjX2NvcmVfaW5pdGAgZnJvbSBlbHNld2hlcmUuIFRoaXMgc2ltcGxpZmllcyBkZWJ1Z2dpbmcgYW5kIHVuZGVyc3RhbmRpbmcgZXhlY3V0aW9uIGZsb3cgYXQgZmlyc3QgZ2xhbmNlLCBidXQgYWxzbyBtZWFucyBhbnkgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMgYXJlIGFsd2F5cyB0aWVkIHRvIHJlc2V0IGlzc3Vlcy4gSSBuZWVkIHRvIGtlZXAgdGhpcyByZWxhdGlvbnNoaXAgaW4gbWluZCBhcyBJIGRpZyBkZWVwZXIuIFRoaXMgc3VnZ2VzdHMgYSB2ZXJ5IHBhcnRpY3VsYXIgbGlmZWN5Y2xlIGZvciB0aGUgY29yZSwgYW5kIGRldmlhdGlvbiBtaWdodCBpbmRpY2F0ZSBhIHNlcmlvdXMgcHJvYmxlbS4gSXQgaW1wbGllcyBhIGNsZWFuIHN0YXRlIGlzIHJlcXVpcmVkLCBvciBlbHNlIHlvdSBzaG91bGQgbmV2ZXIgY2FsbCB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6NTMuMDM4ODY0OTEyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc0NTk4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZHBmX3ZjX2NvcmVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTg5Mz1zdGF0aWMgdm9pZCBpZHBmX2luaXRfaGFyZF9yZXNldChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDEtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE5NDI6XFx0ZXJyID0gaWRwZl92Y19jb3JlX2luaXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDMtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MzQzMz1zdGF0aWMgaW50IGlkcGZfdnBvcnRfcGFyYW1zX2J1Zl9hbGxvYyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNDY4OiAqIGlkcGZfdmNfY29yZV9pbml0IC0gSW5pdGlhbGl6ZSBzdGF0ZSBtYWNoaW5lIGFuZCBnZXQgZHJpdmVyIHNwZWNpZmljXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2OS0gKiByZXNvdXJjZXNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0NzktICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ4MDppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oPTEwMj12b2lkIGlkcGZfZGVpbml0X2RmbHRfbWJ4KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oOjEwMzppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmgtMTA0LXZvaWQgaWRwZl92Y19jb3JlX2RlaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6NTMuMTAxNjE2NzQ4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzU3NjAyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIHRoZSAqb25seSogd2F5IHRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlIEknbSBpbnRlcmVzdGVkIGluIGlzIHRocm91Z2ggYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YC4gVGhhdCBmdW5jdGlvbiBoYXMgYSBkZXBlbmRlbmN5IG9uIGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCBzdWNjZWVkaW5nIGZpcnN0LCBhbmQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZWFkIGEgc3BlY2lmaWMgdmFsdWUgZnJvbSBhIGhhcmR3YXJlIHJlZ2lzdGVyLlxuXG5Ob3csIEknbSB0aGlua2luZywgc2luY2Ugc3l6a2FsbGVyIGRvZXNuJ3QgZW11bGF0ZSBJRFBGIGhhcmR3YXJlLCB0aGlzIHBhdGggaXMgcHJhY3RpY2FsbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBCdXQgaG9sZCBvbiwgaXMgdGhlcmUgKmFueSogcmVtb3RlIGNoYW5jZSBgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWAgYWN0dWFsbHkgc3VjY2VlZHM/IExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuSWYgYHJlYWRsKHJlc2V0X3JlZy1cdTAwM2Vyc3RhdClgIHJldHVybnMgMCBhbmQgYHJlc2V0X3JlZy1cdTAwM2Vyc3RhdF9tYCBpcyBub24temVybywgdGhlbiB0aGUgYml0d2lzZSBBTkQgb3BlcmF0aW9uIGByZWdfdmFsIFx1MDAyNiByZXNldF9yZWctXHUwMDNlcnN0YXRfbWAgaXMgZ29pbmcgdG8gYmUgMCwgc28gaXQnbGwgbG9vcCBhbmQgcmV0dXJuIGAtRUJVU1lgLiBBbmQgaWYgYHJlYWRsYCByZXR1cm5zIGAweEZGRkZGRkZGYCwgc2FtZSBkZWFsLiBMb29wIGFuZCByZXR1cm4gYC1FQlVTWWAuIFNvIHRoYXQgaXMgbm90IGhlbHBmdWwuXG5cbkhvd2V2ZXIsIGlmIGByZWFkbGAgcmV0dXJucyBzb21ldGhpbmcgY29tcGxldGVseSByYW5kb20sIGxpa2UsIHNheSwgaWYgdGhlIG1lbW9yeSByZWdpb24gaXMgbWFwcGVkIHRvIGFub3RoZXIgZGV2aWNlIG9yIHJhbmRvbSBtZW1vcnksIGl0ICptaWdodCogc3VjY2VlZC4gQnV0IHN5emthbGxlciB0eXBpY2FsbHkgZG9lc24ndCBtYXAgUENJIEJBUnMgdG8gcmFuZG9tLCBjaGFuZ2luZyBtZW1vcnkgb3IgbWVtb3J5IHdpdGggc3BlY2lmaWMgYml0cyBzZXQgdW5sZXNzIGl0J3MgZGVzaWduZWQgdG8gZnV6eiB0aGF0IHNwZWNpZmljIGFyZWEuIEhtbS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrLiBJZiBgcmVhZGxgIHJldHVybnMgYSB2YWx1ZSBzdWNoIHRoYXQgYChyZWdfdmFsIFx1MDAyNiByZXNldF9yZWctXHUwMDNlcnN0YXRfbSkgPT0gMGAsIGl0IGxvb3BzLCBubyBzdWNjZXNzLiBCdXQgaWYgYChyZWdfdmFsIFx1MDAyNiByZXNldF9yZWctXHUwMDNlcnN0YXRfbSkgIT0gMGAgYW5kIGByZWdfdmFsYCBpcyBub3QgYDB4RkZGRkZGRkZgLCBpdCAqcmV0dXJucyAwKiwgbWVhbmluZyBzdWNjZXNzLiBUaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgYHJlc2V0X3JlZy1cdTAwM2Vyc3RhdF9tYC4gV2hhdCBleGFjdGx5IGlzIHRoYXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYml0cyBhcmUgYmVpbmcgbWFza2VkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgZmVhc2libGUgc2NlbmFyaW8gaGVyZSB3aGVyZSB0aGlzIGNvZGUgcGF0aCBjb3VsZCBiZSB0cmlnZ2VyZWQgd2l0aCBteSBmdXp6ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjY4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjU4LjkzNzM4NDcyM1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0MzY3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnN0YXRfbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaD0xNTc9c3RydWN0IGlkcGZfbmV0ZGV2X3ByaXYge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtMTcyLSAqIEByc3RhdDogUmVzZXQgc3RhdHVzIHJlZ2lzdGVyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg6MTczOiAqIEByc3RhdF9tOiBSZXNldCBzdGF0dXMgbWFza1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oLTE3NC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaD0xNzU9c3RydWN0IGlkcGZfcmVzZXRfcmVnIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaC0xNzYtXFx0dm9pZCBfX2lvbWVtICpyc3RhdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaDoxNzc6XFx0dTMyIHJzdGF0X207XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtMTc4LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZGV2LmM9MTQ0PXN0YXRpYyB2b2lkIGlkcGZfcmVzZXRfcmVnX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9kZXYuYy0xNDYtXFx0YWRhcHRlci1cXHUwMDNlcmVzZXRfcmVnLnJzdGF0ID0gaWRwZl9nZXRfcnN0YXRfcmVnX2FkZHIoYWRhcHRlciwgUEZHRU5fUlNUQVQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9kZXYuYzoxNDc6XFx0YWRhcHRlci1cXHUwMDNlcmVzZXRfcmVnLnJzdGF0X20gPSBQRkdFTl9SU1RBVF9QRlJfU1RBVEVfTTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZGV2LmMtMTQ4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0xODU3PXN0YXRpYyBpbnQgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZShzdHJ1Y3QgaWRwZl9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTg2OS1cXHRcXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTg3MDpcXHRcXHRpZiAocmVnX3ZhbCAhPSAweEZGRkZGRkZGIFxcdTAwMjZcXHUwMDI2IChyZWdfdmFsIFxcdTAwMjYgcmVzZXRfcmVnLVxcdTAwM2Vyc3RhdF9tKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTg3MS1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92Zl9kZXYuYz0xNDM9c3RhdGljIHZvaWQgaWRwZl92Zl9yZXNldF9yZWdfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZmX2Rldi5jLTE0NS1cXHRhZGFwdGVyLVxcdTAwM2VyZXNldF9yZWcucnN0YXQgPSBpZHBmX2dldF9yc3RhdF9yZWdfYWRkcihhZGFwdGVyLCBWRkdFTl9SU1RBVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZmX2Rldi5jOjE0NjpcXHRhZGFwdGVyLVxcdTAwM2VyZXNldF9yZWcucnN0YXRfbSA9IFZGR0VOX1JTVEFUX1ZGUl9TVEFURV9NO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92Zl9kZXYuYy0xNDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0Mjo1OS4wMDg4Mjk4MzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMzMzI4OTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBzeXprYWxsZXIgY2FuIHJlYWNoIGEgc3BlY2lmaWMgcGFydCBvZiBpdCwgc3BlY2lmaWNhbGx5IGEgcmVzZXQgZmFpbHVyZSBwYXRoLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGlzOiBpZiBzeXprYWxsZXIgYmluZHMgYSBkcml2ZXIgdG8gYSBkdW1teSBkZXZpY2UsIHRoZSBtZW1vcnkgbWFwcGVkIGJ5IGBkZXZtX2lvcmVtYXBgIOKAkyB0aGF0J3MgcG90ZW50aWFsbHkganVzdCB6ZXJvZWQgbWVtb3J5LiBJZiBgcmVhZGxgIHJldHVybnMgemVybyBmcm9tIHRoYXQgemVyb2VkIHJlZ2lvbiwgdGhlIHN1YnNlcXVlbnQgYml0d2lzZSBBTkQgb3BlcmF0aW9uIChgcmVnX3ZhbCBcdTAwMjYgcmVzZXRfcmVnLVx1MDAzZXJzdGF0X21gKSB3aWxsIHJlc3VsdCBpbiB6ZXJvLiBUaGF0LCBpbiB0dXJuLCBjYXVzZXMgYSBsb29wLCBhbmQgZXZlbnR1YWxseSBhIGAtRUJVU1lgIGVycm9yIGlzIHJldHVybmVkLiBDb25zZXF1ZW50bHksIHRoZSBgaWRwZl92Y19jb3JlX2luaXRgIGZ1bmN0aW9uICp3b24ndCogYmUgY2FsbGVkLiBUaGVyZWZvcmUsIGBpZHBmX21iX2ludHJfcmVxX2lycWAgaXMsIHByYWN0aWNhbGx5LCB1bnJlYWNoYWJsZS5cblxuQnV0IHdhaXQsIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2liaWxpdGllcy4gV2hhdCBpZiBzeXprYWxsZXIgZW1wbG95cyBmYXVsdCBpbmplY3Rpb24gb3Igc29tZSBjbGV2ZXIgbWVtb3J5IG1hcHBpbmcgdHJpY2sgdG8gZm9yY2UgYHJlYWRsYCB0byByZXR1cm4gYSBub24temVybyB2YWx1ZT8gSG93ZXZlciwgc3l6a2FsbGVyICpyYXJlbHkqIGRvZXMgdGhhdCBmb3IgUENJIEJBUnMgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpY2FsbHkgY3JhZnRlZCBwc2V1ZG8tZGV2aWNlIGludm9sdmVkLiBBbHNvLCByZW1lbWJlciwgdGhpcyBpcyBhIG1lbW9yeSBsZWFrIGZpeCAqd2l0aGluKiBhbiBlcnJvciBoYW5kbGluZyBwYXRoIChgaWYgKGVycilgIGFmdGVyIGBwY2lfcmVxdWVzdF9pcnFgKS4gRXZlbiBpZiwgYnkgc29tZSB3aWxkIGNoYW5jZSwgd2UgY291bGQgdHJpZ2dlciBpdCwgdGhpcyBpcyBhIGhpZ2hseSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuIEl0J3Mgbm90IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQncyBnZW5lcmFsbHkgdGVzdGFibGUgaW4gc3l6a2FsbGVyJ3Mgc3RhbmRhcmQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHR5cGljYWxseSB2aXJ0dWFsaXplZC5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIGFuZCB0aGUgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgZGVwZW5kZW5jeSwgSSdtIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQncyBhbiB1bnJlYWNoYWJsZSwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHBhdGggd2l0aGluIHRoZSBjb25zdHJhaW50cyBvZiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0J3Mgbm90IGEgZnJ1aXRmdWwgYXZlbnVlIGZvciBmdXp6aW5nLCBhdCBsZWFzdCBpbiB0aGUgZGVmYXVsdCBzeXprYWxsZXIgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQ0LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MzowNS4zNDIxMjMyMTZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIGBpZHBmX21iX2ludHJfcmVxX2lycWAgd2l0aGluIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIFBDSSBkcml2ZXIuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiBhZnRlciBhIHN1Y2Nlc3NmdWwgaGFyZHdhcmUgcmVzZXQgY2hlY2sgKGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCksIHdoaWNoIHJlcXVpcmVzIHJlYWRpbmcgc3BlY2lmaWMgdmFsdWVzIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzIChQQ0kgQkFScykuIFNpbmNlIHN5emthbGxlciBhbmQgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIGRvIG5vdCBlbXVsYXRlIElEUEYgaGFyZHdhcmUsIHRoZSByZXNldCBjaGVjayB3aWxsIGZhaWwsIG1ha2luZyB0aGlzIGNvZGUgcGF0aCB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgYGlkcGZfbWJfaW50cl9yZXFfaXJxYCB3aXRoaW4gdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgUENJIGRyaXZlci4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uIGFmdGVyIGEgc3VjY2Vzc2Z1bCBoYXJkd2FyZSByZXNldCBjaGVjayAoYGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGVgKSwgd2hpY2ggcmVxdWlyZXMgcmVhZGluZyBzcGVjaWZpYyB2YWx1ZXMgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMgKFBDSSBCQVJzKS4gU2luY2Ugc3l6a2FsbGVyIGFuZCB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgZG8gbm90IGVtdWxhdGUgSURQRiBoYXJkd2FyZSwgdGhlIHJlc2V0IGNoZWNrIHdpbGwgZmFpbCwgbWFraW5nIHRoaXMgY29kZSBwYXRoIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownxgbs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 05:17:13 +0000 UTC FinishedAt: 2026-07-03 05:43:06 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgYGlkcGZfbWJfaW50cl9yZXFfaXJxYCB3aXRoaW4gdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgUENJIGRyaXZlci4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uIGFmdGVyIGEgc3VjY2Vzc2Z1bCBoYXJkd2FyZSByZXNldCBjaGVjayAoYGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGVgKSwgd2hpY2ggcmVxdWlyZXMgcmVhZGluZyBzcGVjaWZpYyB2YWx1ZXMgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMgKFBDSSBCQVJzKS4gU2luY2Ugc3l6a2FsbGVyIGFuZCB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgZG8gbm90IGVtdWxhdGUgSURQRiBoYXJkd2FyZSwgdGhlIHJlc2V0IGNoZWNrIHdpbGwgZmFpbCwgbWFraW5nIHRoaXMgY29kZSBwYXRoIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYzY2M0MjlkMjgyNGNiZDRiNjE2ZmVkNTM3NDY5MmE3MzJkYjY0NzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDA1OjQxOjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuaW5kZXggY2Y5NjZmZTZjNzU5Y2UuLmJiODFlNjIwYzVjODdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbkBAIC0xMzksNyAmIzQzOzEzOSw3IEBAIHN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX3JlcV9pcnEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFwmIzM0O0lSUSByZXF1ZXN0IGZvciBtYWlsYm94IGZhaWxlZCwgZXJyb3I6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuLVxuJiM0MztcdFx0a2ZyZWUobmFtZSk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgaWRwZl9tYl9pbnRyX3JlcV9pcnFgIHdpdGhpbiB0aGUgSW50ZWwgSURQRiAoSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uKSBQQ0kgZHJpdmVyLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBzdWNjZXNzZnVsIGhhcmR3YXJlIHJlc2V0IGNoZWNrIChgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWApLCB3aGljaCByZXF1aXJlcyByZWFkaW5nIHNwZWNpZmljIHZhbHVlcyBmcm9tIGhhcmR3YXJlIHJlZ2lzdGVycyAoUENJIEJBUnMpLiBTaW5jZSBzeXprYWxsZXIgYW5kIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSBkbyBub3QgZW11bGF0ZSBJRFBGIGhhcmR3YXJlLCB0aGUgcmVzZXQgY2hlY2sgd2lsbCBmYWlsLCBtYWtpbmcgdGhpcyBjb2RlIHBhdGggdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmM2NjNDI5ZDI4MjRjYmQ0YjYxNmZlZDUzNzQ2OTJhNzMyZGI2NDc2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAwNTo0MTozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYwppbmRleCBjZjk2NmZlNmM3NTljZS4uYmI4MWU2MjBjNWM4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMKQEAgLTEzOSw3ICYjNDM7MTM5LDcgQEAgc3RhdGljIGludCBpZHBmX21iX2ludHJfcmVxX2lycShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKQogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwKIAkJCSYjMzQ7SVJRIHJlcXVlc3QgZm9yIG1haWxib3ggZmFpbGVkLCBlcnJvcjogJWRcbiYjMzQ7LCBlcnIpOwotCiYjNDM7CQlrZnJlZShuYW1lKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBGaXggaW4gdGhlIEludGVsIElEUEYgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDogdGhleSYjMzk7dmUgYWRkZWQgYGtmcmVlKG5hbWUpO2AgaW4gdGhlIGVycm9yIHBhdGggb2YgYGlkcGZfbWJfaW50cl9yZXFfaXJxYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgbWVtb3J5IGxlYWsgZml4LiBHb29kIGNhdGNoLgoKTm93LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcg4oCTIGlzIHRoaXMgSW50ZWwgSURQRiBkcml2ZXIgZXZlbiAqcmVsZXZhbnQqIGluIHRoZSBlbnZpcm9ubWVudHMgSSB0eXBpY2FsbHkgZGVhbCB3aXRoPyBJRFBGIGlzIGFuIEludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBkcml2ZXIsIHJpZ2h0PyBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgYXJlIHVzdWFsbHkgdHJpY2t5IHRvIHRyaWdnZXIgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHVubGVzcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHZlcnkgc3BlY2lmaWMgZW11bGF0aW9uIG9yIGEgZ2VuZXJpYyBmcmFtZXdvcmsgdHJpY2tlcnkuIEJ1dCB3YWl0IGEgbWludXRlLCB0aGUgcGVubnkganVzdCBkcm9wcGVkLiBJRFBGIGlzIGEgUENJIGRldmljZSBkcml2ZXIsIGlzbiYjMzk7dCBpdD8gT2theSwgdGhhdCBjaGFuZ2VzIHRoaW5ncy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2x1ZXMgdGhlcmUgYWJvdXQgaXRzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGRlcGVuZGVuY2llcy4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiBpdCYjMzk7cyBtb3JlIHdpZGVseSB1c2VkIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSURQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzo0OmNvbmZpZyBJRFBGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbiBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnPTE3PWlmIElEUEZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0xOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzoxOTpjb25maWcgSURQRl9TSU5HTEVRXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMjAtXHRib29sIFwmIzM0O2lkcGYgc2luZ2xlcSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJRFBGIEVtdWxhdGlvbiBGZWFzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0ZXN0aW5nIElEUEYgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBJRFBGIGlzIGEgUENJIGRyaXZlci4gVGhhdCBtZWFucywgcmVhbGlzdGljYWxseSwgSSBuZWVkIGEgc3BlY2lmaWMgZW11bGF0ZWQgZGV2aWNlIGluIFFFTVUgdGhhdCAqcmVwcmVzZW50cyogSURQRi4gV2l0aG91dCB0aGF0LCB0aGVyZSYjMzk7cyBubyBkaXJlY3QgcGF0aCBmb3IgbWUgdG8gYWN0dWFsbHkgcmVhY2ggdGhlIGRyaXZlci4gU28sIG15IG5leHQgc3RlcCBpcyB0byBhY3R1YWxseSBpbnZlc3RpZ2F0ZSBpZiBhbnkgZm9ybSBvZiBJRFBGIGVtdWxhdGlvbiBleGlzdHMgd2l0aGluIFFFTVUuCgpHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIHVzdWFsbHkgY2hlY2sgZm9yIHRoZSBjb21tb24gSW50ZWwgTklDIGVtdWxhdGlvbnMgZmlyc3Qg4oCTIGUxMDAwLCBlMTAwMGUsIGlnYiwgdGhvc2UgYXJlIHByZXR0eSBzdGFuZGFyZC4gQnV0IElEUEYgaXMgcmVsYXRpdmVseSBuZXcsIHNwZWNpZmljYWxseSBmb3IgSW50ZWwmIzM5O3MgSVBVLCBvciBJbmZyYXN0cnVjdHVyZSBQcm9jZXNzaW5nIFVuaXQuIEl0JiMzOTtzIG5vdCBhIGNvbW1vbiBOSUMuIEkmIzM5O2QgYmUgc3VycHJpc2VkIGlmIFFFTVUgKmRpZCogaGF2ZSBhbnl0aGluZyBvdXQgb2YgdGhlIGJveCBmb3IgSURQRi4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHN1cHBvcnQuIEFzIGEgUENJIGRyaXZlciwgaXQgd291bGQgcmVxdWlyZSBhIHNwZWNpZmljIFBDSSBJRCB0byBmdW5jdGlvbiwgcmlnaHQ/IFNvLCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGNvZGUgZm9yIGEgbW9tZW50IGFuZCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uY2AgdG8gbG9vayBmb3IgdGhvc2UgUENJIElEcy4gVGhhdCB3b3VsZCBnaXZlIG1lIHNvbWV0aGluZyBjb25jcmV0ZSB0byB3b3JrIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UENJX0RFVklDRS4qSURQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHBmX3BjaV90YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM3OC1cdHsgUENJX1ZERVZJQ0UoSU5URUwsIElEUEZfREVWX0lEX1ZGKX0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjM3OTpcdHsgUENJX0RFVklDRV9DTEFTUyhJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGLCB+MCl9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODAtXHR7IC8qIFNlbnRpbmVsICovIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIE5ldHdvcmsgRGV2aWNlIENsYXNzIERlZmluaXRpb24qKgoKQWxyaWdodCwgdGhhdCBsaW5lIC0gYFBDSV9ERVZJQ0VfQ0xBU1MoSURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRiwgfjApYCAtIGltbWVkaWF0ZWx5IGNhdWdodCBteSBhdHRlbnRpb24uIFRoZSBgUENJX0RFVklDRV9DTEFTU2AgbWFjcm8gaXMsIG9mIGNvdXJzZSwgYSB3YXkgdG8gZGVmaW5lIHRoZSBQQ0kgZGV2aWNlIGNsYXNzIGNvZGUuIEJ1dCB3aGF0JiMzOTtzIHRoZSBzaWduaWZpY2FuY2Ugb2YgYElEUEZfQ0xBU1NfTkVUV09SS19FVEhFUk5FVF9QUk9HSUZgIHNwZWNpZmljYWxseT8gQW5kIG1vcmUgY3J1Y2lhbGx5LCB0aGF0IGJpdG1hc2sgYH4wYCBpcyBnb2luZyB0byByZXF1aXJlIGZ1cnRoZXIgaW5zcGVjdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgY2xhc3MuIFdlIGFyZSBsb29raW5nIGF0IGEgKnZlcnkgc3BlY2lmaWMqIEV0aGVybmV0IGRldmljZSBjbGFzcyBoZXJlLiBMZXQmIzM5O3MgZGVsdmUgaW50byB3aGF0IHRoaXMgcGFydGljdWxhciBpZGVudGlmaWVyIHJlcHJlc2VudHMuIE5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgSURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRmAgdG8gdW5kZXJzdGFuZCB0aGlzIGRldmljZSYjMzk7cyBpbnRlbmRlZCBmdW5jdGlvbiBtb3JlIGNvbXBsZXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMTEtI2RlZmluZSBJRFBGX05FVFdPUktfRVRIRVJORVRfUFJPR0lGXHRcdFx0XHQweDAxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjEyOiNkZWZpbmUgSURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRlx0XHRcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTEzLVx0KFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIFx1MDAzY1x1MDAzYyA4IHwgSURQRl9ORVRXT1JLX0VUSEVSTkVUX1BST0dJRilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jPTU2PXN0YXRpYyBpbnQgaWRwZl9kZXZfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjYxOlx0aWYgKGVudC1cdTAwM2VjbGFzcyA9PSBJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTYyLVx0XHRyZXQgPSBpZHBmX2dldF9kZXZpY2VfdHlwZShhZGFwdGVyLVx1MDAzZXBkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHBmX3BjaV90YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM3OC1cdHsgUENJX1ZERVZJQ0UoSU5URUwsIElEUEZfREVWX0lEX1ZGKX0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjM3OTpcdHsgUENJX0RFVklDRV9DTEFTUyhJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGLCB+MCl9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODAtXHR7IC8qIFNlbnRpbmVsICovIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBTeXprYWxsZXItVHJpZ2dlcmVkIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGNvZGUgdGFyZ2V0cyBQQ0kgZGV2aWNlcywgc3BlY2lmaWNhbGx5IHRob3NlIGNsYXNzaWZpZWQgYXMgbmV0d29yayBFdGhlcm5ldCAoYFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUYCkgd2l0aCBhIHByb2dyYW1taW5nIGludGVyZmFjZSBvZiBgMHgwMWAuIEhtbSwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjb3VsZCB0aGlzIGJlIHRyaWdnZXJlZCBieSBhIGdlbmVyaWMgUENJIGRldmljZSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBJZiBzeXprYWxsZXIgd2VyZSB0byBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggdGhpcyBjbGFzcywgY291bGQgaXQgcG90ZW50aWFsbHkgcHJvYmUgdGhpcyBkcml2ZXI/IFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0IHN5emthbGxlciAqdXN1YWxseSogZG9lc24mIzM5O3QgZ28gYXJvdW5kIGluamVjdGluZyBhcmJpdHJhcnkgUENJIGRldmljZXMgd2l0aCBhIHZlcnkgc3BlY2lmaWMgY2xhc3MgdW5sZXNzIHRoZXJlJiMzOTtzIGFuIGVzdGFibGlzaGVkIFBDSSBmdXp6aW5nIGZyYW1ld29yayBpbiBwbGFjZS4gTm93LCB2aGNpIGlzIG9uZSwgYnV0IHRoZXJlIGlzbiYjMzk7dCBvbmUgdXBzdHJlYW0gaW4gTGludXggZm9yIFBDSS4KClJpZ2h0LCBJJiMzOTttIHJlbWluZGluZyBteXNlbGYgbm93LCB0aGVyZSBpcyAqc29tZSogUENJIGZ1enppbmcgY2FwYWJpbGl0eSB3aXRoaW4gc3l6a2FsbGVyLCBidXQgaXQmIzM5O3MgcmF0aGVyIGxpbWl0ZWQuIEFuZCB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyLCBJRFBGLCBkZW1hbmRzIGNlcnRhaW4gaGFyZHdhcmUgaW50ZXJhY3Rpb25zIC0gYSBtYWlsYm94IHN5c3RlbSBhbmQgc28gZm9ydGguIFRoZSBjcnVjaWFsIHRoaW5nIHRvIHZlcmlmeSBpcyB3aGV0aGVyIGBpZHBmX21iX2ludHJfcmVxX2lycWAgaXMgYWNjZXNzaWJsZS4gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBJIG5lZWQgdG8gY2hlY2sgaWYgaXQmIzM5O3MgcmVhY2hhYmxlLiBUaGF0JiMzOTtzIHRoZSBrZXk6IGNhbiB3ZSBnZXQgdGhpcyBpbnRlcnJ1cHQgcmVxdWVzdCBmdW5jdGlvbiB0byBiZSBpbnZva2VkPyBJZiBzbywgdGhpcyBtaWdodCBwcm92aWRlIHVzIHdpdGggYSBzdGFydGluZyBwb2ludCBmb3IgdnVsbmVyYWJpbGl0eSByZXNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl9tYl9pbnRyX3JlcV9pcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTE1PXN0YXRpYyB2b2lkIGlkcGZfbWJfaXJxX2VuYWJsZShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xMjUtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTI2OiAqIGlkcGZfbWJfaW50cl9yZXFfaXJxIC0gUmVxdWVzdCBpcnEgZm9yIHRoZSBtYWlsYm94IGludGVycnVwdFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyNy0gKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmUgdG8gcGFzcyB0byB0aGUgbWFpbGJveCBpcnEgaGFuZGxlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyOC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxMjk6c3RhdGljIGludCBpZHBmX21iX2ludHJfcmVxX2lycShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEzMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE1NT1zdGF0aWMgaW50IGlkcGZfbWJfaW50cl9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxNjA6XHRyZXR1cm4gaWRwZl9tYl9pbnRyX3JlcV9pcnEoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgQ2FsbCB0byBgaWRwZl9tYl9pbnRyX2luaXRgKioKCk9rYXksIHNvIEkgc2VlIGBpZHBmX21iX2ludHJfaW5pdGAuICBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXMsICp3aGVyZSogaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2sgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGluaXRpYXRpbmcgdGhpcyBpbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gSXMgaXQgZHVyaW5nIGRyaXZlciBwcm9iZSwgYSBtb2R1bGUgbG9hZCwgb3IgcGVyaGFwcyBzb21lIGxhdGVyIHN0YWdlIG9mIHN5c3RlbSBpbml0aWFsaXphdGlvbj8gIElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBkZXZpY2UsIG9yIGlzIGl0IGEgbW9yZSBnZW5lcmFsIHNldHVwPyBHZXR0aW5nIHRoYXQgYnJvYWRlciBwaWN0dXJlIGlzIHRoZSBrZXkgdG8gZWZmaWNpZW50IGRlYnVnZ2luZyBvciBtb2RpZmljYXRpb25zLiBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgdXBzdHJlYW0gY29kZSB0aGF0IHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl9tYl9pbnRyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTI5PXN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX3JlcV9pcnEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE1MjogKiBpZHBmX21iX2ludHJfaW5pdCAtIEluaXRpYWxpemUgdGhlIG1haWxib3ggaW50ZXJydXB0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUzLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZSB0byBzdG9yZSB0aGUgbWFpbGJveCB2ZWN0b3JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTQtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTU1OnN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0zMDQ9aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtNDE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjQxNzpcdGVyciA9IGlkcGZfbWJfaW50cl9pbml0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTQxOC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBpZHBmX2ludHJfcmVxYCBDYWxsKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6ICYjMzQ7RnJvbSB3aGVyZSBpcyBgaWRwZl9pbnRyX3JlcWAgYmVpbmcgY2FsbGVkPyYjMzQ7IFRoaXMgaXNuJiMzOTt0IGEgY29tcGxleCBxdWVzdGlvbiBpbiBpdHNlbGYsIGJ1dCBpdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9uKHMpIHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSB3aGF0IGFyZWEgb2YgdGhlIGNvZGUgaXMgaW5pdGlhdGluZyB0aGlzIGludGVycnVwdCByZXF1ZXN0LiBJcyBpdCByZWxhdGVkIHRvIHRoZSBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiwgYSBzcGVjaWZpYyBkcml2ZXIsIHRoZSBrZXJuZWwmIzM5O3MgaW50ZXJydXB0IG1hbmFnZW1lbnQgc3lzdGVtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGFuc3dlciB3aWxsIGd1aWRlIG15IGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHRoZSBzb3VyY2UuIE9uY2UgSSBoYXZlIGlkZW50aWZpZWQgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLCBJIGNhbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBkZWR1Y2UgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkcGZfaW50cl9yZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaD0xMDQ5PXZvaWQgaWRwZl92Zl9kZXZfb3BzX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaDoxMDUwOmludCBpZHBmX2ludHJfcmVxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtMTA1MS12b2lkIGlkcGZfaW50cl9yZWwoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTI1ND1pbnQgaWRwZl9yZXFfcmVsX3ZlY3Rvcl9pbmRleGVzKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTI5OC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoyOTk6ICogaWRwZl9pbnRyX3JlcSAtIFJlcXVlc3QgaW50ZXJydXB0IGNhcGFiaWxpdGllc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTMwMC0gKiBAYWRhcHRlcjogYWRhcHRlciB0byBlbmFibGUgaW50ZXJydXB0cyBvblxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0zMDMtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MzA0OmludCBpZHBmX2ludHJfcmVxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMzA1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYz0zNDgwPWludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM1ODYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNTg3Olx0ZXJyID0gaWRwZl9pbnRyX3JlcShhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM1ODgtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIHRoZSBDb3JlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGlkcGZfdmNfY29yZV9pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaXRzIG9yaWdpbi4gV2hlcmUgaXMgdGhpcyB0aGluZyBiZWluZyBjYWxsZWQgZnJvbT8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSB0byBmb2xsb3cgdGhlIG92ZXJhbGwgcHJvZ3JhbSBmbG93LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZnVuY3Rpb24gYW5kIHNlZSB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgaXRzIGV4ZWN1dGlvbi4gSXMgaXQgY2FsbGVkIGRpcmVjdGx5IGZyb20gYSBtYWluIHJvdXRpbmU/IElzIGl0IGludm9rZWQgYXMgcGFydCBvZiBzb21lIGxhcmdlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvciBmcmFtZXdvcms/IERvZXMgYW5vdGhlciBmdW5jdGlvbiwgd2hpY2ggaW4gdHVybiBjYWxscyB0aGlzIG9uZSwgaGFuZGxlIHNvbWUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uIG9yIHJlc291cmNlIGFsbG9jYXRpb24/IEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBnb2luZyB0byBwcm92aWRlIHNpZ25pZmljYW50IGNsdWVzIGFib3V0IHRoZSBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMgb2YgdGhlIGBpZHBmX3ZjX2NvcmVfaW5pdGAgZnVuY3Rpb24gaXRzZWxmLCB3aGljaCBpcyB3aGF0IEkgbmVlZCB0byB0cnVseSBjb21wcmVoZW5kIHRoaXMgbW9kdWxlLiBJIHNob3VsZCB1c2UgbXkgdG9vbHMgdG8gdW5kZXJzdGFuZCB0aGlzIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkcGZfdmNfY29yZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE4OTM9c3RhdGljIHZvaWQgaWRwZl9pbml0X2hhcmRfcmVzZXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTk0MS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE5NDI6XHRlcnIgPSBpZHBmX3ZjX2NvcmVfaW5pdChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xOTQzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTM0MzM9c3RhdGljIGludCBpZHBmX3Zwb3J0X3BhcmFtc19idWZfYWxsb2Moc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDY3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ2ODogKiBpZHBmX3ZjX2NvcmVfaW5pdCAtIEluaXRpYWxpemUgc3RhdGUgbWFjaGluZSBhbmQgZ2V0IGRyaXZlciBzcGVjaWZpY1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2OS0gKiByZXNvdXJjZXNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDc5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ4MDppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0ODEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oPTEwMj12b2lkIGlkcGZfZGVpbml0X2RmbHRfbWJ4KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmg6MTAzOmludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oLTEwNC12b2lkIGlkcGZfdmNfY29yZV9kZWluaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipUcmFjaW5nIHRoZSBPcmlnaW4gb2YgYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YCoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGRpcmVjdHMgbXkgYXR0ZW50aW9uIHRvIGBpZHBmX2luaXRfaGFyZF9yZXNldGAuIE15IGZpcnN0IHRob3VnaHQgaXM6IFdoZXJlICppcyogdGhpcyBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gS25vd2luZyB0aGUgY2FsbCBncmFwaCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3QsIGVzcGVjaWFsbHkgaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aXRoaW4gdGhlIGNvZGUgd2hlcmUgYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YCBpcyBpbnZva2VkLiBJcyBpdCBwYXJ0IG9mIHRoZSBub3JtYWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IElzIGl0IHRyaWdnZXJlZCBieSBzb21lIHNwZWNpZmljIGV2ZW50IG9yIGNvbmRpdGlvbj8gS25vd2luZyB0aGUgKmNvbnRleHQqIG9mIGl0cyBleGVjdXRpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGludGVycHJldGluZyB3aGF0IGl0ICpkb2VzKi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGluaXRpYXRlIGEgc2VhcmNoIGZvciBpdHMgY2FsbCBzaXRlcyB0byBwYWludCB0aGUgcGljdHVyZSBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkcGZfaW5pdF9oYXJkX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE4NTc9c3RhdGljIGludCBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlKHN0cnVjdCBpZHBmX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTg4NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxODg2OiAqIGlkcGZfaW5pdF9oYXJkX3Jlc2V0IC0gSW5pdGlhdGUgYSBoYXJkd2FyZSByZXNldFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE4ODctICogQGFkYXB0ZXI6IERyaXZlciBzcGVjaWZpYyBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xODkyLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE4OTM6c3RhdGljIHZvaWQgaWRwZl9pbml0X2hhcmRfcmVzZXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xODk0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTk3Mj12b2lkIGlkcGZfdmNfZXZlbnRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5OTItXHRzZXRfYml0KElEUEZfSFJfUkVTRVRfSU5fUFJPRywgYWRhcHRlci1cdTAwM2VmbGFncyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTk5MzpcdGlkcGZfaW5pdF9oYXJkX3Jlc2V0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5OTQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgYGlkcGZfdmNfZXZlbnRfdGFza2AgQ29udW5kcnVtKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgaWRwZl92Y19ldmVudF90YXNrYC4gUmlnaHQsIHRoYXQmIzM5O3MgYSB3b3JrIHF1ZXVlIHRhc2ssIGdvdCBpdC4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZnVuY3Rpb24gaW4gdGhhdCBzcGVjaWZpYyB3YXkuIEJ1dCBJJiMzOTttIGFsc28gdGhpbmtpbmcsIGlzIHRoaXMgKnRoZSogb25seSBwYXRoPyBUaGlzIHNwZWNpZmljIHRhc2sgc2VlbXMgbGlrZSBhIHNpbmd1bGFyIHBvaW50IG9mIHJlc3BvbnNpYmlsaXR5IGluIHRoZSBmbG93LiBJZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoIGl0LCBhcmUgd2UgYm90dGxlbmVja2VkPyBBcmUgdGhlcmUgYW55IGFsdGVybmF0aXZlIHN0cmF0ZWdpZXMgb3IgcmVkdW5kYW50IHBhdGhzIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBvYnZpb3VzLCBhbnkgb3RoZXIgZnVuY3Rpb25zIG9yIHByb2Nlc3NlcyB0aGF0IGNhbiBoYW5kbGUgc2ltaWxhciByZXNwb25zaWJpbGl0aWVzPyBXZSBjYW4mIzM5O3QgbGV0IHRoaXMgYmUgdGhlIG9ubHkgc29sdXRpb24uIE15IGpvYiBub3cgaXMgdG8gZGV0ZXJtaW5lIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgb3IgcHJvY2Vzc2VzIG1heSBhY2NvbXBsaXNoIGEgc2ltaWxhciBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkcGZfdmNfY29yZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE4OTM9c3RhdGljIHZvaWQgaWRwZl9pbml0X2hhcmRfcmVzZXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTk0MS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE5NDI6XHRlcnIgPSBpZHBmX3ZjX2NvcmVfaW5pdChhZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xOTQzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTM0MzM9c3RhdGljIGludCBpZHBmX3Zwb3J0X3BhcmFtc19idWZfYWxsb2Moc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDY3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ2ODogKiBpZHBmX3ZjX2NvcmVfaW5pdCAtIEluaXRpYWxpemUgc3RhdGUgbWFjaGluZSBhbmQgZ2V0IGRyaXZlciBzcGVjaWZpY1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2OS0gKiByZXNvdXJjZXNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDc5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ4MDppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0ODEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oPTEwMj12b2lkIGlkcGZfZGVpbml0X2RmbHRfbWJ4KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmg6MTAzOmludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oLTEwNC12b2lkIGlkcGZfdmNfY29yZV9kZWluaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBJbml0aWFsaXphdGlvbiBGbG93KioKCkhhbmcgb24gYSBzZWNvbmQuIEkmIzM5O20gbm90aWNpbmcgc29tZXRoaW5nIGhlcmUuIEl0IGxvb2tzIGxpa2UgYGlkcGZfdmNfY29yZV9pbml0YCBpcyAqb25seSogY2FsbGVkIGZyb20gYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YC4gVGhhdCBzZWVtcyBhIGJpdC4uLiByZXN0cmljdGl2ZSwgZG9lc24mIzM5O3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0IG9mIGluaXRpYWxpemF0aW9uLiBXaGF0IGFtIEkgbWlzc2luZz8KCkFscmlnaHQsIGxldCYjMzk7cyBiYWNrIHVwLiBXaGVyZSAqZWxzZSogbWlnaHQgdGhpcyBpbml0aWFsaXphdGlvbiBiZSBoYXBwZW5pbmcsIG9yIGF0IGxlYXN0IGJlIGEgbG9naWNhbCBjYW5kaWRhdGU/IEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBjaGVjayB0aGUgY2FsbCBzdHJ1Y3R1cmUgZnJvbSB0aGUgZHJpdmVyJiMzOTtzIGVudHJ5IHBvaW50cy4gSSB3aWxsIGxvb2sgaW50byBib3RoIGBpZHBmX3Byb2JlYCBhbmQgYGlkcGZfZGV2X2luaXRgLiBJIGJldCB0aGUgYW5zd2VyIGxpZXMgdGhlcmUuIExldCYjMzk7cyBzZWUgaWYgZWl0aGVyIG9mIHRoZW0gdG91Y2hlcyB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBpbiBhIGRpZmZlcmVudCB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkcGZfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jPTE4OT1zdGF0aWMgaW50IGlkcGZfY2ZnX2h3KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0yMjgtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjIyOTogKiBpZHBmX3Byb2JlIC0gRGV2aWNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMjMwLSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMjM0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzoyMzU6c3RhdGljIGludCBpZHBmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0yMzYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzg0PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpZHBmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM4Ni1cdC5pZF90YWJsZVx0XHQ9IGlkcGZfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM6Mzg3Olx0LnByb2JlXHRcdFx0PSBpZHBmX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODgtXHQuc3Jpb3ZfY29uZmlndXJlXHQ9IGlkcGZfc3Jpb3ZfY29uZmlndXJlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDM1CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgaWRwZl9wcm9iZWAgQ2FsbCBTdGFjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBpZHBmX3Byb2JlYCBhbmQgbmVlZCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IG90aGVyIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgdGhpcyB0aGluZyByZWx5IG9uPyYjMzQ7IEkgbmVlZCB0byBzZWUgdGhlIGNhbGxzIGl0IG1ha2VzLCB0aGUgZnVuY3Rpb25zIGl0IGludm9rZXMuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGV4ZWN1dGlvbiBmbG93LiBJcyBpdCBtYWtpbmcgZGlyZWN0IGNhbGxzLCBvciBpcyB0aGVyZSBhbiBpbnRlcm1lZGlhdGUgbGF5ZXIgSSBuZWVkIHRvIGV4cGxvcmU/IEJhc2ljYWxseSwgSSBuZWVkIGEgcXVpY2sgaGlnaC1sZXZlbCB2aWV3IG9mIGl0cyBjb250cm9sIGZsb3cgZ3JhcGguIFVuZGVyc3RhbmRpbmcgdGhhdCBjYWxsIHN0YWNrIHF1aWNrbHkgaXMga2V5IHRvIGVmZmljaWVudGx5IGRlYnVnZ2luZyBhbnkgaXNzdWUgcmVsYXRlZCB0byBJbnRlbCBkcml2ZXIgcHJvYmluZyBvciBpdHMgaW5pdGlhbGl6YXRpb24uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcCBJIHRha2UgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgaG93IGRlZXBseSBuZXN0ZWQgYW55IHBvdGVudGlhbCBwcm9ibGVtIG1pZ2h0IGJlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCB0b3VjaGVzIGFuZCB3aGF0IGl0IHJlbGllcyB1cG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzU6XHRzdGF0aWMgaW50IGlkcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gMjM2Olx0e1xuIDIzNzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gMjM4Olx0XHRzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyO1xuIDIzOTpcdFx0aW50IGVycjtcbiAyNDA6XHRcbiAyNDE6XHRcdGFkYXB0ZXIgPSBremFsbG9jX29iaigqYWRhcHRlcik7XG4gMjQyOlx0XHRpZiAoIWFkYXB0ZXIpXG4gMjQzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI0NDpcdFxuIDI0NTpcdFx0YWRhcHRlci1cdTAwM2VyZXFfdHhfc3BsaXRxID0gdHJ1ZTtcbiAyNDY6XHRcdGFkYXB0ZXItXHUwMDNlcmVxX3J4X3NwbGl0cSA9IHRydWU7XG4gMjQ3Olx0XG4gMjQ4Olx0XHRhZGFwdGVyLVx1MDAzZXBkZXYgPSBwZGV2O1xuIDI0OTpcdFx0ZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpO1xuIDI1MDpcdFx0aWYgKGVycilcbiAyNTE6XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyNTI6XHRcbiAyNTM6XHRcdGVyciA9IHBjaW1fcmVxdWVzdF9yZWdpb24ocGRldiwgMCwgcGNpX25hbWUocGRldikpO1xuIDI1NDpcdFx0aWYgKGVycikge1xuIDI1NTpcdFx0XHRwY2lfZXJyKHBkZXYsIFwmIzM0O3BjaW1fcmVxdWVzdF9yZWdpb24gZmFpbGVkICVwZVxcblwmIzM0OywgRVJSX1BUUihlcnIpKTtcbiAyNTY6XHRcbiAyNTc6XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyNTg6XHRcdH1cbiAyNTk6XHRcbiAyNjA6XHRcdGVyciA9IHBjaV9lbmFibGVfcHRtKHBkZXYpO1xuIDI2MTpcdFx0aWYgKGVycilcbiAyNjI6XHRcdFx0cGNpX2RiZyhwZGV2LCBcJiMzNDtQQ0llIFBUTSBpcyBub3Qgc3VwcG9ydGVkIGJ5IFBDSWUgYnVzL2NvbnRyb2xsZXJcXG5cJiMzNDspO1xuIDI2MzpcdFxuIDI2NDpcdFx0Lyogc2V0IHVwIGZvciBoaWdoIG9yIGxvdyBkbWEgKi9cbiAyNjU6XHRcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNjQpKTtcbiAyNjY6XHRcdGlmIChlcnIpIHtcbiAyNjc6XHRcdFx0cGNpX2VycihwZGV2LCBcJiMzNDtETUEgY29uZmlndXJhdGlvbiBmYWlsZWQ6ICVwZVxcblwmIzM0OywgRVJSX1BUUihlcnIpKTtcbiAyNjg6XHRcbiAyNjk6XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyNzA6XHRcdH1cbiAyNzE6XHRcbiAyNzI6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIDI3MzpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpO1xuIDI3NDpcdFxuIDI3NTpcdFx0YWRhcHRlci1cdTAwM2Vpbml0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzLSVzLWluaXRcJiMzNDssXG4gMjc2Olx0XHRcdFx0XHRcdCAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCxcbiAyNzc6XHRcdFx0XHRcdFx0ICAgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSxcbiAyNzg6XHRcdFx0XHRcdFx0ICAgZGV2X25hbWUoZGV2KSk7XG4gMjc5Olx0XHRpZiAoIWFkYXB0ZXItXHUwMDNlaW5pdF93cSkge1xuIDI4MDpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIGluaXQgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiAyODE6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAyODI6XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyODM6XHRcdH1cbiAyODQ6XHRcbiAyODU6XHRcdGFkYXB0ZXItXHUwMDNlc2Vydl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslcy0lcy1zZXJ2aWNlXCYjMzQ7LFxuIDI4NjpcdFx0XHRcdFx0XHQgICBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDAsXG4gMjg3Olx0XHRcdFx0XHRcdCAgIGRldl9kcml2ZXJfc3RyaW5nKGRldiksXG4gMjg4Olx0XHRcdFx0XHRcdCAgIGRldl9uYW1lKGRldikpO1xuIDI4OTpcdFx0aWYgKCFhZGFwdGVyLVx1MDAzZXNlcnZfd3EpIHtcbiAyOTA6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBzZXJ2aWNlIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4gMjkxOlx0XHRcdGVyciA9IC1FTk9NRU07XG4gMjkyOlx0XHRcdGdvdG8gZXJyX3NlcnZfd3FfYWxsb2M7XG4gMjkzOlx0XHR9XG4gMjk0Olx0XG4gMjk1Olx0XHRhZGFwdGVyLVx1MDAzZW1ieF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslcy0lcy1tYnhcJiMzNDssIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxuIDI5NjpcdFx0XHRcdFx0XHQgIDAsIGRldl9kcml2ZXJfc3RyaW5nKGRldiksXG4gMjk3Olx0XHRcdFx0XHRcdCAgZGV2X25hbWUoZGV2KSk7XG4gMjk4Olx0XHRpZiAoIWFkYXB0ZXItXHUwMDNlbWJ4X3dxKSB7XG4gMjk5Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgbWFpbGJveCB3b3JrcXVldWVcXG5cJiMzNDspO1xuIDMwMDpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDMwMTpcdFx0XHRnb3RvIGVycl9tYnhfd3FfYWxsb2M7XG4gMzAyOlx0XHR9XG4gMzAzOlx0XG4gMzA0Olx0XHRhZGFwdGVyLVx1MDAzZXN0YXRzX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzLSVzLXN0YXRzXCYjMzQ7LFxuIDMwNTpcdFx0XHRcdFx0XHQgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAwLFxuIDMwNjpcdFx0XHRcdFx0XHQgICAgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSxcbiAzMDc6XHRcdFx0XHRcdFx0ICAgIGRldl9uYW1lKGRldikpO1xuIDMwODpcdFx0aWYgKCFhZGFwdGVyLVx1MDAzZXN0YXRzX3dxKSB7XG4gMzA5Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiAzMTA6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAzMTE6XHRcdFx0Z290byBlcnJfc3RhdHNfd3FfYWxsb2M7XG4gMzEyOlx0XHR9XG4gMzEzOlx0XG4gMzE0Olx0XHRhZGFwdGVyLVx1MDAzZXZjX2V2ZW50X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzLSVzLXZjX2V2ZW50XCYjMzQ7LFxuIDMxNTpcdFx0XHRcdFx0XHQgICAgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAwLFxuIDMxNjpcdFx0XHRcdFx0XHQgICAgICAgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSxcbiAzMTc6XHRcdFx0XHRcdFx0ICAgICAgIGRldl9uYW1lKGRldikpO1xuIDMxODpcdFx0aWYgKCFhZGFwdGVyLVx1MDAzZXZjX2V2ZW50X3dxKSB7XG4gMzE5Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgdmlydGNobmwgZXZlbnQgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbiAzMjA6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAzMjE6XHRcdFx0Z290byBlcnJfdmNfZXZlbnRfd3FfYWxsb2M7XG4gMzIyOlx0XHR9XG4gMzIzOlx0XG4gMzI0Olx0XHQvKiBzZXR1cCBtc2dsdmwgKi9cbiAzMjU6XHRcdGFkYXB0ZXItXHUwMDNlbXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KC0xLCBJRFBGX0FWQUlMX05FVElGX00pO1xuIDMyNjpcdFxuIDMyNzpcdFx0ZXJyID0gaWRwZl9kZXZfaW5pdChhZGFwdGVyLCBlbnQpO1xuIDMyODpcdFx0aWYgKGVycikge1xuIDMyOTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmV4cGVjdGVkIGRldiBJRCAweCV4IGluIGlkcGYgcHJvYmVcXG5cJiMzNDssXG4gMzMwOlx0XHRcdFx0ZW50LVx1MDAzZWRldmljZSk7XG4gMzMxOlx0XHRcdGdvdG8gZGVzdHJveV92Y19ldmVudF93cTtcbiAzMzI6XHRcdH1cbiAzMzM6XHRcbiAzMzQ6XHRcdGVyciA9IGlkcGZfY2ZnX2h3KGFkYXB0ZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBJbnRlcnJ1cHQgSW5pdGlhbGl6YXRpb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlkcGZfY2ZnX2h3YC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3RzIHdpdGggaW50ZXJydXB0IGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcGF0aCB0aGUgY29kZSB0YWtlcy4gVGhlIHNwZWNpZmljIHF1ZXN0aW9uIEkgaGF2ZSBpcyB3aGV0aGVyIG9yIG5vdCBgaWRwZl9jZmdfaHdgIGRpcmVjdGx5IGNhbGxzIGBpZHBmX21iX2ludHJfaW5pdGAuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBgaWRwZl9tYl9pbnRyX2luaXRgIGxpa2VseSBoYW5kbGVzIHRoZSBzZXR1cCBvZiB0aGUgbWFpbGJveCBpbnRlcnJ1cHQsIGEgY29yZSBjb21wb25lbnQgZm9yIGNvbW11bmljYXRpb24gaW4gdGhpcyBlbnZpcm9ubWVudC4gVW5kZXJzdGFuZGluZyB0aGF0IGNvbm5lY3Rpb24gaXMga2V5IHRvIGRlYnVnZ2luZyBpbnRlcnJ1cHQtcmVsYXRlZCBpc3N1ZXMgb3Igb3B0aW1pemluZyB0aGUgZHJpdmVyLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93ICp3aGVyZSogYGlkcGZfbWJfaW50cl9pbml0YCBpcyBjYWxsZWQgKGFuZCBpZikuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg5Olx0c3RhdGljIGludCBpZHBmX2NmZ19odyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuIDE5MDpcdHtcbiAxOTE6XHRcdHJlc291cmNlX3NpemVfdCByZXNfc3RhcnQsIG1ieF9zdGFydCwgcnN0YXRfc3RhcnQ7XG4gMTkyOlx0XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItXHUwMDNlcGRldjtcbiAxOTM6XHRcdHN0cnVjdCBpZHBmX2h3ICpodyA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlaHc7XG4gMTk0Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiAxOTU6XHRcdGxvbmcgbGVuO1xuIDE5NjpcdFxuIDE5NzpcdFx0cmVzX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApO1xuIDE5ODpcdFxuIDE5OTpcdFx0LyogTWFwIG1haWxib3ggc3BhY2UgZm9yIHZpcnRjaG5sIGNvbW11bmljYXRpb24gKi9cbiAyMDA6XHRcdG1ieF9zdGFydCA9IHJlc19zdGFydCAmIzQzOyBhZGFwdGVyLVx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzBdLnN0YXJ0O1xuIDIwMTpcdFx0bGVuID0gcmVzb3VyY2Vfc2l6ZShcdTAwMjZhZGFwdGVyLVx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzBdKTtcbiAyMDI6XHRcdGh3LVx1MDAzZW1ieC52YWRkciA9IGRldm1faW9yZW1hcChkZXYsIG1ieF9zdGFydCwgbGVuKTtcbiAyMDM6XHRcdGlmICghaHctXHUwMDNlbWJ4LnZhZGRyKSB7XG4gMjA0Olx0XHRcdHBjaV9lcnIocGRldiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIEJBUjAgbWJ4IHJlZ2lvblxcblwmIzM0Oyk7XG4gMjA1Olx0XG4gMjA2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDIwNzpcdFx0fVxuIDIwODpcdFx0aHctXHUwMDNlbWJ4LmFkZHJfc3RhcnQgPSBhZGFwdGVyLVx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzBdLnN0YXJ0O1xuIDIwOTpcdFx0aHctXHUwMDNlbWJ4LmFkZHJfbGVuID0gbGVuO1xuIDIxMDpcdFxuIDIxMTpcdFx0LyogTWFwIHJzdGF0IHNwYWNlIGZvciByZXNldHMgKi9cbiAyMTI6XHRcdHJzdGF0X3N0YXJ0ID0gcmVzX3N0YXJ0ICYjNDM7IGFkYXB0ZXItXHUwMDNlZGV2X29wcy5zdGF0aWNfcmVnX2luZm9bMV0uc3RhcnQ7XG4gMjEzOlx0XHRsZW4gPSByZXNvdXJjZV9zaXplKFx1MDAyNmFkYXB0ZXItXHUwMDNlZGV2X29wcy5zdGF0aWNfcmVnX2luZm9bMV0pO1xuIDIxNDpcdFx0aHctXHUwMDNlcnN0YXQudmFkZHIgPSBkZXZtX2lvcmVtYXAoZGV2LCByc3RhdF9zdGFydCwgbGVuKTtcbiAyMTU6XHRcdGlmICghaHctXHUwMDNlcnN0YXQudmFkZHIpIHtcbiAyMTY6XHRcdFx0cGNpX2VycihwZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgQkFSMCByc3RhdCByZWdpb25cXG5cJiMzNDspO1xuIDIxNzpcdFxuIDIxODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMTk6XHRcdH1cbiAyMjA6XHRcdGh3LVx1MDAzZXJzdGF0LmFkZHJfc3RhcnQgPSBhZGFwdGVyLVx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzFdLnN0YXJ0O1xuIDIyMTpcdFx0aHctXHUwMDNlcnN0YXQuYWRkcl9sZW4gPSBsZW47XG4gMjIyOlx0XG4gMjIzOlx0XHRody1cdTAwM2ViYWNrID0gYWRhcHRlcjtcbiAyMjQ6XHRcbiAyMjU6XHRcdHJldHVybiAwO1xuIDIyNjpcdH1cbiAyMjc6XHRcbiAyMjg6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MzEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGlkcGZfY2ZnX2h3YCBTZXF1ZW5jZSoqCgpIbW0sIGludGVyZXN0aW5nLiBJJiMzOTttIG5vdGljaW5nIHRoYXQgdGhlIGBpZHBmX2NmZ19od2AgZnVuY3Rpb24gZG9lc24mIzM5O3Qgc2VlbSB0byBleHBsaWNpdGx5IGNhbGwgYGlkcGZfbWJfaW50cl9pbml0YC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiwgYW5kIGl0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIHNvbWUgcXVlc3Rpb25zLiBXaGVyZSBhbmQgaG93IGFyZSB0aGUgTWVzc2FnZSBCdWZmZXIgKE1CKSBpbnRlcnJ1cHRzIGJlaW5nIGluaXRpYWxpemVkIGluIHJlbGF0aW9uIHRvIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24/IElmIG5vdCBjYWxsZWQgZGlyZWN0bHkgdGhlcmUsIGl0IG1lYW5zIHRoZSBpbml0aWFsaXphdGlvbiBtdXN0IGJlIGhhcHBlbmluZyBzb21ld2hlcmUgZWxzZSBpbiB0aGUgY29kZSBwYXRoICphZnRlciogYGlkcGZfY2ZnX2h3YCBleGVjdXRlcywgb3IgcGVyaGFwcyBldmVuICpiZWZvcmUqLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nLiBJdCBjb3VsZCBiZSB0cmlnZ2VyZWQgZnJvbSB0aGUgUENJIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIG9yIHNvbWUgaW50ZXJydXB0IGhhbmRsZXIgb3IgYW5vdGhlciBpbml0aWFsaXphdGlvbiByb3V0aW5lIC0gbmVlZCB0byBmaW5kIHRoYXQgc3BvdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBhdm9pZCBtYWtpbmcgYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24uIFRoaXMgaXMgbGlrZWx5IGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgYmVoYXZpb3IuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgdGhlbiBtaWdodCBuZWVkIHRvIGRvIHNvbWUgZHluYW1pYyBhbmFseXNpcyBvciBkZWJ1Z2dpbmcgdG8gdHJ1bHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzQ6XHRcdGVyciA9IGlkcGZfY2ZnX2h3KGFkYXB0ZXIpO1xuIDMzNTpcdFx0aWYgKGVycikge1xuIDMzNjpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGNvbmZpZ3VyZSBIVyBzdHJ1Y3R1cmUgZm9yIGFkYXB0ZXI6ICVkXFxuXCYjMzQ7LFxuIDMzNzpcdFx0XHRcdGVycik7XG4gMzM4Olx0XHRcdGdvdG8gZGVzdHJveV92Y19ldmVudF93cTtcbiAzMzk6XHRcdH1cbiAzNDA6XHRcbiAzNDE6XHRcdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2V2cG9ydF9jdHJsX2xvY2spO1xuIDM0MjpcdFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZXZlY3Rvcl9sb2NrKTtcbiAzNDM6XHRcdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2VxdWV1ZV9sb2NrKTtcbiAzNDQ6XHRcdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2V2Y19idWZfbG9jayk7XG4gMzQ1Olx0XG4gMzQ2Olx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZhZGFwdGVyLVx1MDAzZWluaXRfdGFzaywgaWRwZl9pbml0X3Rhc2spO1xuIDM0NzpcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YWRhcHRlci1cdTAwM2VzZXJ2X3Rhc2ssIGlkcGZfc2VydmljZV90YXNrKTtcbiAzNDg6XHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWJ4X3Rhc2ssIGlkcGZfbWJ4X3Rhc2spO1xuIDM0OTpcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YWRhcHRlci1cdTAwM2VzdGF0c190YXNrLCBpZHBmX3N0YXRpc3RpY3NfdGFzayk7XG4gMzUwOlx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZhZGFwdGVyLVx1MDAzZXZjX2V2ZW50X3Rhc2ssIGlkcGZfdmNfZXZlbnRfdGFzayk7XG4gMzUxOlx0XG4gMzUyOlx0XHRhZGFwdGVyLVx1MDAzZWRldl9vcHMucmVnX29wcy5yZXNldF9yZWdfaW5pdChhZGFwdGVyKTtcbiAzNTM6XHRcdHNldF9iaXQoSURQRl9IUl9EUlZfTE9BRCwgYWRhcHRlci1cdTAwM2VmbGFncyk7XG4gMzU0Olx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoYWRhcHRlci1cdTAwM2V2Y19ldmVudF93cSwgXHUwMDI2YWRhcHRlci1cdTAwM2V2Y19ldmVudF90YXNrLFxuIDM1NTpcdFx0XHRcdCAgIG1zZWNzX3RvX2ppZmZpZXMoMTAgKiAocGRldi1cdTAwM2VkZXZmbiBcdTAwMjYgMHgwNykpKTtcbiAzNTY6XHRcbiAzNTc6XHRcdHJldHVybiAwO1xuIDM1ODpcdFxuIDM1OTpcdGRlc3Ryb3lfdmNfZXZlbnRfd3E6XG4gMzYwOlx0XHRkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLVx1MDAzZXZjX2V2ZW50X3dxKTtcbiAzNjE6XHRlcnJfdmNfZXZlbnRfd3FfYWxsb2M6XG4gMzYyOlx0XHRkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLVx1MDAzZXN0YXRzX3dxKTtcbiAzNjM6XHRlcnJfc3RhdHNfd3FfYWxsb2M6XG4gMzY0Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLVx1MDAzZW1ieF93cSk7XG4gMzY1Olx0ZXJyX21ieF93cV9hbGxvYzpcbiAzNjY6XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGFkYXB0ZXItXHUwMDNlc2Vydl93cSk7XG4gMzY3Olx0ZXJyX3NlcnZfd3FfYWxsb2M6XG4gMzY4Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLVx1MDAzZWluaXRfd3EpO1xuIDM2OTpcdGVycl9mcmVlOlxuIDM3MDpcdFx0a2ZyZWUoYWRhcHRlcik7XG4gMzcxOlx0XHRyZXR1cm4gZXJyO1xuIDM3MjpcdH1cbiAzNzM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NTkKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAzOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJRFBGIERyaXZlciBJbml0aWFsaXphdGlvbiBQYXRoKioKCk9rYXksIHNvIGBpZHBmX3Byb2JlYCBldmVudHVhbGx5IGVucXVldWVzIGBpZHBmX3ZjX2V2ZW50X3Rhc2tgLiBUaGF0IHRhc2sgdGhlbiBkaXZlcyBpbnRvIGBpZHBmX2luaXRfaGFyZF9yZXNldChhZGFwdGVyKWAsIHdoaWNoIGJyYW5jaGVzIGludG8gYGlkcGZfdmNfY29yZV9pbml0KGFkYXB0ZXIpYCwgd2hpY2ggbGVhZHMgdG8gYGlkcGZfaW50cl9yZXEoYWRhcHRlcilgLCBhbmQgZG93biB0aGUgcmFiYml0IGhvbGUgdG8gYGlkcGZfbWJfaW50cl9pbml0KGFkYXB0ZXIpYCBhbmQgZmluYWxseSBgaWRwZl9tYl9pbnRyX3JlcV9pcnEoYWRhcHRlcilgLiBUaGlzIHN1Z2dlc3RzIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gQnV0IGNhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBzZXF1ZW5jZSB1c2luZyBTeXprYWxsZXI/CgpUaGUgY3JpdGljYWwgcGFydCBpcyBnZXR0aW5nIGBpZHBmX3Byb2JlYCBjYWxsZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGluamVjdGluZyBhIFBDSSBkZXZpY2Ugd2l0aCBTeXprYWxsZXIsIGJ1dCBTeXprYWxsZXIgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGEgZ2VuZXJpYyBQQ0kgZGV2aWNlIGluamVjdG9yIGNhcGFibGUgb2YgZW11bGF0aW5nIGFyYml0cmFyeSBCQVJzIGFuZCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbnMsIGFuZCBkZWZpbml0ZWx5IG5vIGB2aGNpYCBmb3IgUENJIGluIHRoZSBtYWlubGluZS4gSSByZW1lbWJlciB0aGVyZSYjMzk7cyBzb21lIGxpbWl0ZWQgUENJIGZ1enppbmcgc3VwcG9ydCBsZXZlcmFnaW5nIGB2ZmlvYCBvciBzaW1pbGFyIG1lY2hhbmlzbXMsIGJ1dCB0aGF0JiMzOTtzIHByZXR0eSByZXN0cmljdGVkLgoKQWgsIGJ1dCB3YWl0ISBTeXprYWxsZXIgKmNhbiogdHJpZ2dlciBQQ0kgcHJvYmluZyB0aHJvdWdoIGBzeXNmc2AgYnkgd3JpdGluZyB0byBgbmV3X2lkYCBvciBgYmluZGAuIFRoZSBpZGVhIGlzIHRvIGJpbmQgYW4gZXhpc3RpbmcgUENJIGRldmljZeKAlHBlcmhhcHMgYSBkdW1teSBkZXZpY2Ugb3Igc29tZSBvdGhlciBhdmFpbGFibGUgZGV2aWNl4oCUdG8gdGhlIElEUEYgZHJpdmVyLiBJZiBzdWNjZXNzZnVsLCBgaWRwZl9wcm9iZWAgd291bGQgYmUgaW52b2tlZC4gSG93ZXZlciwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBzaWRlIGVmZmVjdHMuCgpgaWRwZl9wcm9iZWAgY2FsbHMgcm91dGluZXMgbGlrZSBgcGNpbV9lbmFibGVfZGV2aWNlYCwgYHBjaW1fcmVxdWVzdF9yZWdpb25gLCBhbmQgYGRldm1faW9yZW1hcGAuIFRoZW4sIGl0IHF1ZXVlcyB0aGF0IGBpZHBmX3ZjX2V2ZW50X3Rhc2tgLCB3aGljaCBzdGFydHMgdGhpcyB3aG9sZSBpbml0aWFsaXphdGlvbiBmbG93LiBOZXh0IHN0ZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2YgYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODkzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTM6XHRzdGF0aWMgdm9pZCBpZHBmX2luaXRfaGFyZF9yZXNldChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuMTg5NDpcdHtcbjE4OTU6XHRcdHN0cnVjdCBpZHBmX3JlZ19vcHMgKnJlZ19vcHMgPSBcdTAwMjZhZGFwdGVyLVx1MDAzZWRldl9vcHMucmVnX29wcztcbjE4OTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4xODk3Olx0XHRpbnQgZXJyO1xuMTg5ODpcdFxuMTg5OTpcdFx0aWRwZl9kZXRhY2hfYW5kX2Nsb3NlKGFkYXB0ZXIpO1xuMTkwMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZhZGFwdGVyLVx1MDAzZXZwb3J0X2N0cmxfbG9jayk7XG4xOTAxOlx0XG4xOTAyOlx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O0RldmljZSBIVyBSZXNldCBpbml0aWF0ZWRcXG5cJiMzNDspO1xuMTkwMzpcdFxuMTkwNDpcdFx0LyogUHJlcGFyZSBmb3IgcmVzZXQgKi9cbjE5MDU6XHRcdGlmICh0ZXN0X2JpdChJRFBGX0hSX0RSVl9MT0FELCBhZGFwdGVyLVx1MDAzZWZsYWdzKSkge1xuMTkwNjpcdFx0XHRyZWdfb3BzLVx1MDAzZXRyaWdnZXJfcmVzZXQoYWRhcHRlciwgSURQRl9IUl9EUlZfTE9BRCk7XG4xOTA3Olx0XHR9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRFBGX0hSX0ZVTkNfUkVTRVQsIGFkYXB0ZXItXHUwMDNlZmxhZ3MpKSB7XG4xOTA4Olx0XHRcdGJvb2wgaXNfcmVzZXQgPSBpZHBmX2lzX3Jlc2V0X2RldGVjdGVkKGFkYXB0ZXIpO1xuMTkwOTpcdFxuMTkxMDpcdFx0XHRpZHBmX2lkY19pc3N1ZV9yZXNldF9ldmVudChhZGFwdGVyLVx1MDAzZWNkZXZfaW5mbyk7XG4xOTExOlx0XG4xOTEyOlx0XHRcdGlkcGZfdmNfY29yZV9kZWluaXQoYWRhcHRlcik7XG4xOTEzOlx0XHRcdGlmICghaXNfcmVzZXQpXG4xOTE0Olx0XHRcdFx0cmVnX29wcy1cdTAwM2V0cmlnZ2VyX3Jlc2V0KGFkYXB0ZXIsIElEUEZfSFJfRlVOQ19SRVNFVCk7XG4xOTE1Olx0XHRcdGlkcGZfZGVpbml0X2RmbHRfbWJ4KGFkYXB0ZXIpO1xuMTkxNjpcdFx0fSBlbHNlIHtcbjE5MTc6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VuaGFuZGxlZCBoYXJkIHJlc2V0IGNhdXNlXFxuXCYjMzQ7KTtcbjE5MTg6XHRcdFx0ZXJyID0gLUVCQURSUUM7XG4xOTE5Olx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuMTkyMDpcdFx0fVxuMTkyMTpcdFxuMTkyMjpcdFx0LyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi9cbjE5MjM6XHRcdGVyciA9IGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGUoXHUwMDI2YWRhcHRlci1cdTAwM2VodywgXHUwMDI2YWRhcHRlci1cdTAwM2VyZXNldF9yZWcpO1xuMTkyNDpcdFx0aWYgKGVycikge1xuMTkyNTpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VGhlIGRyaXZlciB3YXMgdW5hYmxlIHRvIGNvbnRhY3QgdGhlIGRldmljZSYjMzk7cyBmaXJtd2FyZS4gQ2hlY2sgdGhhdCB0aGUgRlcgaXMgcnVubmluZy4gRHJpdmVyIHN0YXRlPSAweCV4XFxuXCYjMzQ7LFxuMTkyNjpcdFx0XHRcdGFkYXB0ZXItXHUwMDNlc3RhdGUpO1xuMTkyNzpcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbjE5Mjg6XHRcdH1cbjE5Mjk6XHRcbjE5MzA6XHRcdC8qIFJlc2V0IGlzIGNvbXBsZXRlIGFuZCBzbyBzdGFydCBidWlsZGluZyB0aGUgZHJpdmVyIHJlc291cmNlcyBhZ2FpbiAqL1xuMTkzMTpcdFx0ZXJyID0gaWRwZl9pbml0X2RmbHRfbWJ4KGFkYXB0ZXIpO1xuMTkzMjpcdFx0aWYgKGVycikge1xuMTkzMzpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBtYWlsYm94OiAlZFxcblwmIzM0OywgZXJyKTtcbjE5MzQ6XHRcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4xOTM1Olx0XHR9XG4xOTM2Olx0XG4xOTM3Olx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoYWRhcHRlci1cdTAwM2VtYnhfd3EsIFx1MDAyNmFkYXB0ZXItXHUwMDNlbWJ4X3Rhc2ssIDApO1xuMTkzODpcdFxuMTkzOTpcdFx0LyogSW5pdGlhbGl6ZSB0aGUgc3RhdGUgbWFjaGluZSwgYWxzbyBhbGxvY2F0ZSBtZW1vcnkgYW5kIHJlcXVlc3RcbjE5NDA6XHRcdCAqIHJlc291cmNlc1xuMTk0MTpcdFx0ICovXG4xOTQyOlx0XHRlcnIgPSBpZHBmX3ZjX2NvcmVfaW5pdChhZGFwdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NDEKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIFBvdGVudGlhbCBEcml2ZXIgUmVzZXQgSXNzdWVzIHdpdGggYSBOb24tSURQRiBEZXZpY2UqKgoKSG1tLCBzbyBgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWAuLi4gdGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7cmUgcmVhZGluZyBmcm9tIHRoZSBoYXJkd2FyZSByZWdpc3RlciwgcmlnaHQ/IEFuZCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0ICppc24mIzM5O3QqIGEgcHJvcGVyIElEUEYgZGV2aWNlIOKAkyBzYXksIGEgZHVtbXkgUENJIGRldmljZSBqdXN0IGJvdW5kIHRvIHRoZSBkcml2ZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMgb3Igc29tZSBvdGhlciBzY2VuYXJpbyB3aGVyZSB0aGUgaGFyZHdhcmUgZG9lc24mIzM5O3QgYWRoZXJlIHRvIHRoZSBleGFjdCBJRFBGIHN0YW5kYXJkIOKAkyB3ZWxsLCB0aGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGdvaW5nIHRvIHRyaXAgdXAuIEl0JiMzOTtzIGV4cGVjdGluZyBhIHNwZWNpZmljIHZhbHVlIGZyb20gdGhhdCByZWdpc3RlciwgYW5kIGlmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBwcm92aWRlIGl0LCB0aGUgY2hlY2sgd2lsbCBvYnZpb3VzbHkgZmFpbC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcuIExldCYjMzk7cyBzdGFydCB3aXRoIHZlcmlmeWluZyB0aGUgbG9naWMgb2YgYGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg1NzpcdHN0YXRpYyBpbnQgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZShzdHJ1Y3QgaWRwZl9odyAqaHcsXG4xODU4Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBpZHBmX3Jlc2V0X3JlZyAqcmVzZXRfcmVnKVxuMTg1OTpcdHtcbjE4NjA6XHRcdHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody1cdTAwM2ViYWNrO1xuMTg2MTpcdFx0aW50IGk7XG4xODYyOlx0XG4xODYzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyMDAwOyBpJiM0MzsmIzQzOykge1xuMTg2NDpcdFx0XHR1MzIgcmVnX3ZhbCA9IHJlYWRsKHJlc2V0X3JlZy1cdTAwM2Vyc3RhdCk7XG4xODY1Olx0XG4xODY2Olx0XHRcdC8qIDB4RkZGRkZGRkYgbWlnaHQgYmUgcmVhZCBpZiBvdGhlciBzaWRlIGhhc24mIzM5O3QgY2xlYXJlZCB0aGVcbjE4Njc6XHRcdFx0ICogcmVnaXN0ZXIgZm9yIHVzIHlldCBhbmQgMHhGRkZGRkZGRiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3JcbjE4Njg6XHRcdFx0ICogdGhlIHJlZ2lzdGVyLCBzbyB0cmVhdCB0aGF0IGFzIGludmFsaWQuXG4xODY5Olx0XHRcdCAqL1xuMTg3MDpcdFx0XHRpZiAocmVnX3ZhbCAhPSAweEZGRkZGRkZGIFx1MDAyNlx1MDAyNiAocmVnX3ZhbCBcdTAwMjYgcmVzZXRfcmVnLVx1MDAzZXJzdGF0X20pKVxuMTg3MTpcdFx0XHRcdHJldHVybiAwO1xuMTg3MjpcdFxuMTg3MzpcdFx0XHR1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApO1xuMTg3NDpcdFx0fVxuMTg3NTpcdFxuMTg3NjpcdFx0ZGV2X3dhcm4oXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7RGV2aWNlIHJlc2V0IHRpbWVvdXQhXFxuXCYjMzQ7KTtcbjE4Nzc6XHRcdC8qIENsZWFyIHRoZSByZXNldCBmbGFnIHVuY29uZGl0aW9uYWxseSBoZXJlIHNpbmNlIHRoZSByZXNldFxuMTg3ODpcdFx0ICogdGVjaG5pY2FsbHkgaXNuJiMzOTt0IGluIHByb2dyZXNzIGFueW1vcmUgZnJvbSB0aGUgZHJpdmVyJiMzOTtzIHBlcnNwZWN0aXZlXG4xODc5Olx0XHQgKi9cbjE4ODA6XHRcdGNsZWFyX2JpdChJRFBGX0hSX1JFU0VUX0lOX1BST0csIGFkYXB0ZXItXHUwMDNlZmxhZ3MpO1xuMTg4MTpcdFxuMTg4MjpcdFx0cmV0dXJuIC1FQlVTWTtcbjE4ODM6XHR9XG4xODg0Olx0XG4xODg1Olx0LyoqXG4xODg2Olx0ICogaWRwZl9pbml0X2hhcmRfcmVzZXQgLSBJbml0aWF0ZSBhIGhhcmR3YXJlIHJlc2V0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJRFBGIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpZHBmX2luaXRfaGFyZF9yZXNldGAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBiZWNvbWluZyBjbGVhciBob3cgaXQgd29ya3MuIFRoZSBjcml0aWNhbCBwYXRoIGRlcGVuZHMgb24gdGhlIGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCBmdW5jdGlvbi4gSWYgKnRoYXQqIGNhbGwgZmFpbHMsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYC1FQlVTWWAuIFRoZSBjb2RlIHRoZW4ganVtcHMgc3RyYWlnaHQgdG8gYHVubG9ja19tdXRleGAgd2l0aG91dCBldmVyIGNhbGxpbmcgYGlkcGZfdmNfY29yZV9pbml0YC4gVGhhdCYjMzk7cyBhIG1ham9yIHBvaW50IC0gYGlkcGZfdmNfY29yZV9pbml0YCBpcyBlZmZlY3RpdmVseSBza2lwcGVkIGlmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBwbGF5IGJhbGwgd2l0aCB0aGUgcmVzZXQgY2hlY2suCgpOb3csIGNvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2UgYW5kIGhvdyBzeXprYWxsZXIgb3BlcmF0ZXMsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXaXRob3V0IGEgcHJvcGVyIElEUEYgZW11bGF0b3IsIGByZWFkbChyZXNldF9yZWctJmd0O3JzdGF0KWAgaXMgZ29pbmcgdG8gbGlrZWx5IHJldHVybiBlaXRoZXIgYDB4RkZGRkZGRkZgICh1bm1hcHBlZCBvciBkdW1teSBtZW1vcnkpIG9yIHNpbXBseSBgMGAgKGEgemVyb2VkIHBhZ2UpLiBJZiBpdCYjMzk7cyB6ZXJvLCB0aGUgYml0d2lzZSBBTkQgd2l0aCBgcmVzZXRfcmVnLSZndDtyc3RhdF9tYCB3aWxsIGFsc28gYmUgemVybywgYW5kIHRoYXQgbG9vcCBpcyBnb2luZyB0byBydW4gZm9yIHRoZSBmdWxsIDIwMDAgaXRlcmF0aW9ucyBiZWZvcmUgcmV0dXJuaW5nIGAtRUJVU1lgLiBTYW1lIGdvZXMgZm9yIHRoYXQgYDB4RkZGRkZGRkZgIHJlc3VsdCEgSXQmIzM5O3Mgc3RpbGwgZ29pbmcgdG8gbG9vcC4gVGhpcyBtZWFucyB0aGF0IHVuZGVyIHZpcnR1YWxpemF0aW9uLCBgaWRwZl92Y19jb3JlX2luaXRgIGlzIGFsbW9zdCBjZXJ0YWlubHkgdW5yZWFjaGFibGUgd2l0aG91dCBzb21lIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uIHRvIG1ha2UgdGhlIHJlc2V0IGNoZWNrIHBhc3MuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBpZHBmX3ZjX2NvcmVfaW5pdGAgdGhlICpvbmx5KiBlbnRyeSBwb2ludCB0byBgaWRwZl9tYl9pbnRyX3JlcV9pcnFgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgY2FsbGluZyB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBiYWNrZG9vciBpbnRvIHRoYXQgY3JpdGljYWwgYXJlYSBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl9tYl9pbnRyX3JlcV9pcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTE1PXN0YXRpYyB2b2lkIGlkcGZfbWJfaXJxX2VuYWJsZShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xMjUtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTI2OiAqIGlkcGZfbWJfaW50cl9yZXFfaXJxIC0gUmVxdWVzdCBpcnEgZm9yIHRoZSBtYWlsYm94IGludGVycnVwdFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyNy0gKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmUgdG8gcGFzcyB0byB0aGUgbWFpbGJveCBpcnEgaGFuZGxlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyOC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxMjk6c3RhdGljIGludCBpZHBmX21iX2ludHJfcmVxX2lycShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEzMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE1NT1zdGF0aWMgaW50IGlkcGZfbWJfaW50cl9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE1OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxNjA6XHRyZXR1cm4gaWRwZl9tYl9pbnRyX3JlcV9pcnEoYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MjMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBJbnRlcnJ1cHQgSGFuZGxpbmcgQ2hhaW4qKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyBkb3duIHRoZSBvcmlnaW5zIG9mIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiwgbGV0JiMzOTtzIGNhbGwgaXQgdGhlICYjMzQ7VGFyZ2V0IEZ1bmN0aW9uLiYjMzQ7IEkgc2VlIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYGlkcGZfbWJfaW50cl9pbml0YC4gVGhhdCYjMzk7cyBhIHByZXR0eSBsaW1pdGVkIHNjb3BlLCB3aGljaCBpcyBoZWxwZnVsLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGVyZSogYGlkcGZfbWJfaW50cl9pbml0YCBpcyBjb21pbmcgZnJvbS4gVGhlIGNvZGUgc2hvd3MgbWUgdGhhdCBgaWRwZl9tYl9pbnRyX2luaXRgIGl0c2VsZiBpcyBvbmx5IGNhbGxlZCBmcm9tIGBpZHBmX2ludHJfcmVxYC4gU28sIEkgaGF2ZSBhIGNsZWFyLCBjb25jaXNlIGNhbGwgc3RhY2s6IHRoZSBUYXJnZXQgRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQgYnkgYGlkcGZfbWJfaW50cl9pbml0YCwgYW5kIGBpZHBmX21iX2ludHJfaW5pdGAgaXMgY2FsbGVkIGJ5IGBpZHBmX2ludHJfcmVxYC4gVGhpcyBnaXZlcyBtZSBhIGZhaXJseSBuYXJyb3cgdmlldyBvZiBob3cgdGhlIFRhcmdldCBGdW5jdGlvbiBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGludGVycnVwdCBoYW5kbGluZyBmcmFtZXdvcmsuIE5vdyBJIGNhbiBidWlsZCBteSBtZW50YWwgbW9kZWwsIHRoaXMgaXMgdGhlIHBhdGggYW5kIHNjb3BlIG9mIG15IGRlYnVnZ2luZyBvciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl9tYl9pbnRyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTI5PXN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX3JlcV9pcnEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE1MjogKiBpZHBmX21iX2ludHJfaW5pdCAtIEluaXRpYWxpemUgdGhlIG1haWxib3ggaW50ZXJydXB0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUzLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZSB0byBzdG9yZSB0aGUgbWFpbGJveCB2ZWN0b3JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTQtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTU1OnN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0zMDQ9aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtNDE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjQxNzpcdGVyciA9IGlkcGZfbWJfaW50cl9pbml0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTQxOC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTE3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC4KCioqQW5hbHl6aW5nIHRoZSBDYWxsIEdyYXBoKioKCkFscmlnaHQsIGxldCBtZSBzZWUuLi4gc28sIGBpZHBmX2ludHJfcmVxYCwgdGhhdCBpbnRlcnJ1cHQgcmVxdWVzdCBmdW5jdGlvbiwgaXMgb25seSBjYWxsZWQgZnJvbSBgaWRwZl92Y19jb3JlX2luaXRgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5pdGlhbGl6YXRpb24sIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIHdpdGhpbiB0aGF0IGNvbnRleHQgZ2l2ZXMgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbi4gS25vd2luZyB0aGUgY2FsbCBncmFwaCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCwgYW5kIHRoaXMgc2ltcGxlIG9ic2VydmF0aW9uIGFscmVhZHkgZm9jdXNlcyBteSBhdHRlbnRpb24gb24gdGhlIHN0YXJ0dXAgc2VxdWVuY2Ugb2YgdGhlIHZpcnR1YWwgY2hhbm5lbCBjb3JlLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHdoYXQgZXhhY3RseSBoYXBwZW5zIGR1cmluZyB0aGF0IGBpZHBmX3ZjX2NvcmVfaW5pdGAgdG8gdW5kZXJzdGFuZCAqd2h5KiBgaWRwZl9pbnRyX3JlcWAgaXMgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGl0cyBzaWduaWZpY2FuY2UgaXMuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIGludGVycnVwdCBoYW5kbGluZyBmb3IgdGhpcyB2aXJ0dWFsIGNoYW5uZWwuIE1ha2VzIGl0IGEgZm9jYWwgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyBpbnRlcnJ1cHQgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl9pbnRyX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oPTEwNDk9dm9pZCBpZHBmX3ZmX2Rldl9vcHNfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oOjEwNTA6aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaC0xMDUxLXZvaWQgaWRwZl9pbnRyX3JlbChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MjU0PWludCBpZHBmX3JlcV9yZWxfdmVjdG9yX2luZGV4ZXMoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMjk4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjI5OTogKiBpZHBmX2ludHJfcmVxIC0gUmVxdWVzdCBpbnRlcnJ1cHQgY2FwYWJpbGl0aWVzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMzAwLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIG9uXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTMwMy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzozMDQ6aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0zMDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTM0ODA9aW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzU4Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jOjM1ODc6XHRlcnIgPSBpZHBmX2ludHJfcmVxKGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzU4OC1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgdGhlIENhbGwgR3JhcGgqKgoKQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBzbywgYGlkcGZfdmNfY29yZV9pbml0YCBpcyAqb25seSogY2FsbGVkIGZyb20gYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBjb3JlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIHRpZ2h0bHkgY291cGxlZCB3aXRoIGEgaGFyZCByZXNldCBwcm9jZWR1cmUuIE5vIGRpcmVjdCwgaW5kZXBlbmRlbnQgY2FsbHMgdG8gYGlkcGZfdmNfY29yZV9pbml0YCBmcm9tIGVsc2V3aGVyZS4gVGhpcyBzaW1wbGlmaWVzIGRlYnVnZ2luZyBhbmQgdW5kZXJzdGFuZGluZyBleGVjdXRpb24gZmxvdyBhdCBmaXJzdCBnbGFuY2UsIGJ1dCBhbHNvIG1lYW5zIGFueSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBhcmUgYWx3YXlzIHRpZWQgdG8gcmVzZXQgaXNzdWVzLiBJIG5lZWQgdG8ga2VlcCB0aGlzIHJlbGF0aW9uc2hpcCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gVGhpcyBzdWdnZXN0cyBhIHZlcnkgcGFydGljdWxhciBsaWZlY3ljbGUgZm9yIHRoZSBjb3JlLCBhbmQgZGV2aWF0aW9uIG1pZ2h0IGluZGljYXRlIGEgc2VyaW91cyBwcm9ibGVtLiBJdCBpbXBsaWVzIGEgY2xlYW4gc3RhdGUgaXMgcmVxdWlyZWQsIG9yIGVsc2UgeW91IHNob3VsZCBuZXZlciBjYWxsIHRoZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZl92Y19jb3JlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTg5Mz1zdGF0aWMgdm9pZCBpZHBmX2luaXRfaGFyZF9yZXNldChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xOTQxLVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTk0MjpcdGVyciA9IGlkcGZfdmNfY29yZV9pbml0KGFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDMtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MzQzMz1zdGF0aWMgaW50IGlkcGZfdnBvcnRfcGFyYW1zX2J1Zl9hbGxvYyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0NjctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNDY4OiAqIGlkcGZfdmNfY29yZV9pbml0IC0gSW5pdGlhbGl6ZSBzdGF0ZSBtYWNoaW5lIGFuZCBnZXQgZHJpdmVyIHNwZWNpZmljXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDY5LSAqIHJlc291cmNlc1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0NzktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNDgwOmludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ4MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmg9MTAyPXZvaWQgaWRwZl9kZWluaXRfZGZsdF9tYngoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuaDoxMDM6aW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmgtMTA0LXZvaWQgaWRwZl92Y19jb3JlX2RlaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgdGhlICpvbmx5KiB3YXkgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIHRocm91Z2ggYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YC4gVGhhdCBmdW5jdGlvbiBoYXMgYSBkZXBlbmRlbmN5IG9uIGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCBzdWNjZWVkaW5nIGZpcnN0LCBhbmQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZWFkIGEgc3BlY2lmaWMgdmFsdWUgZnJvbSBhIGhhcmR3YXJlIHJlZ2lzdGVyLgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCBzaW5jZSBzeXprYWxsZXIgZG9lc24mIzM5O3QgZW11bGF0ZSBJRFBGIGhhcmR3YXJlLCB0aGlzIHBhdGggaXMgcHJhY3RpY2FsbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBCdXQgaG9sZCBvbiwgaXMgdGhlcmUgKmFueSogcmVtb3RlIGNoYW5jZSBgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWAgYWN0dWFsbHkgc3VjY2VlZHM/IExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpJZiBgcmVhZGwocmVzZXRfcmVnLSZndDtyc3RhdClgIHJldHVybnMgMCBhbmQgYHJlc2V0X3JlZy0mZ3Q7cnN0YXRfbWAgaXMgbm9uLXplcm8sIHRoZW4gdGhlIGJpdHdpc2UgQU5EIG9wZXJhdGlvbiBgcmVnX3ZhbCAmYW1wOyByZXNldF9yZWctJmd0O3JzdGF0X21gIGlzIGdvaW5nIHRvIGJlIDAsIHNvIGl0JiMzOTtsbCBsb29wIGFuZCByZXR1cm4gYC1FQlVTWWAuIEFuZCBpZiBgcmVhZGxgIHJldHVybnMgYDB4RkZGRkZGRkZgLCBzYW1lIGRlYWwuIExvb3AgYW5kIHJldHVybiBgLUVCVVNZYC4gU28gdGhhdCBpcyBub3QgaGVscGZ1bC4KCkhvd2V2ZXIsIGlmIGByZWFkbGAgcmV0dXJucyBzb21ldGhpbmcgY29tcGxldGVseSByYW5kb20sIGxpa2UsIHNheSwgaWYgdGhlIG1lbW9yeSByZWdpb24gaXMgbWFwcGVkIHRvIGFub3RoZXIgZGV2aWNlIG9yIHJhbmRvbSBtZW1vcnksIGl0ICptaWdodCogc3VjY2VlZC4gQnV0IHN5emthbGxlciB0eXBpY2FsbHkgZG9lc24mIzM5O3QgbWFwIFBDSSBCQVJzIHRvIHJhbmRvbSwgY2hhbmdpbmcgbWVtb3J5IG9yIG1lbW9yeSB3aXRoIHNwZWNpZmljIGJpdHMgc2V0IHVubGVzcyBpdCYjMzk7cyBkZXNpZ25lZCB0byBmdXp6IHRoYXQgc3BlY2lmaWMgYXJlYS4gSG1tLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjay4gSWYgYHJlYWRsYCByZXR1cm5zIGEgdmFsdWUgc3VjaCB0aGF0IGAocmVnX3ZhbCAmYW1wOyByZXNldF9yZWctJmd0O3JzdGF0X20pID09IDBgLCBpdCBsb29wcywgbm8gc3VjY2Vzcy4gQnV0IGlmIGAocmVnX3ZhbCAmYW1wOyByZXNldF9yZWctJmd0O3JzdGF0X20pICE9IDBgIGFuZCBgcmVnX3ZhbGAgaXMgbm90IGAweEZGRkZGRkZGYCwgaXQgKnJldHVybnMgMCosIG1lYW5pbmcgc3VjY2Vzcy4gVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhlIGByZXNldF9yZWctJmd0O3JzdGF0X21gLiBXaGF0IGV4YWN0bHkgaXMgdGhhdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBiaXRzIGFyZSBiZWluZyBtYXNrZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgZmVhc2libGUgc2NlbmFyaW8gaGVyZSB3aGVyZSB0aGlzIGNvZGUgcGF0aCBjb3VsZCBiZSB0cmlnZ2VyZWQgd2l0aCBteSBmdXp6ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzdGF0X20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaD0xNTc9c3RydWN0IGlkcGZfbmV0ZGV2X3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oLTE3Mi0gKiBAcnN0YXQ6IFJlc2V0IHN0YXR1cyByZWdpc3RlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg6MTczOiAqIEByc3RhdF9tOiBSZXNldCBzdGF0dXMgbWFza1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtMTc0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg9MTc1PXN0cnVjdCBpZHBmX3Jlc2V0X3JlZyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaC0xNzYtXHR2b2lkIF9faW9tZW0gKnJzdGF0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg6MTc3Olx0dTMyIHJzdGF0X207XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaC0xNzgtfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZGV2LmM9MTQ0PXN0YXRpYyB2b2lkIGlkcGZfcmVzZXRfcmVnX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZGV2LmMtMTQ2LVx0YWRhcHRlci1cdTAwM2VyZXNldF9yZWcucnN0YXQgPSBpZHBmX2dldF9yc3RhdF9yZWdfYWRkcihhZGFwdGVyLCBQRkdFTl9SU1RBVCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZGV2LmM6MTQ3Olx0YWRhcHRlci1cdTAwM2VyZXNldF9yZWcucnN0YXRfbSA9IFBGR0VOX1JTVEFUX1BGUl9TVEFURV9NO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2Rldi5jLTE0OC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTE4NTc9c3RhdGljIGludCBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlKHN0cnVjdCBpZHBmX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTg2OS1cdFx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTg3MDpcdFx0aWYgKHJlZ192YWwgIT0gMHhGRkZGRkZGRiBcdTAwMjZcdTAwMjYgKHJlZ192YWwgXHUwMDI2IHJlc2V0X3JlZy1cdTAwM2Vyc3RhdF9tKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xODcxLVx0XHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92Zl9kZXYuYz0xNDM9c3RhdGljIHZvaWQgaWRwZl92Zl9yZXNldF9yZWdfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92Zl9kZXYuYy0xNDUtXHRhZGFwdGVyLVx1MDAzZXJlc2V0X3JlZy5yc3RhdCA9IGlkcGZfZ2V0X3JzdGF0X3JlZ19hZGRyKGFkYXB0ZXIsIFZGR0VOX1JTVEFUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92Zl9kZXYuYzoxNDY6XHRhZGFwdGVyLVx1MDAzZXJlc2V0X3JlZy5yc3RhdF9tID0gVkZHRU5fUlNUQVRfVkZSX1NUQVRFX007XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmZfZGV2LmMtMTQ3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDQKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogMjY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTeXprYWxsZXIgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgc3l6a2FsbGVyIGNhbiByZWFjaCBhIHNwZWNpZmljIHBhcnQgb2YgaXQsIHNwZWNpZmljYWxseSBhIHJlc2V0IGZhaWx1cmUgcGF0aC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhpczogaWYgc3l6a2FsbGVyIGJpbmRzIGEgZHJpdmVyIHRvIGEgZHVtbXkgZGV2aWNlLCB0aGUgbWVtb3J5IG1hcHBlZCBieSBgZGV2bV9pb3JlbWFwYCDigJMgdGhhdCYjMzk7cyBwb3RlbnRpYWxseSBqdXN0IHplcm9lZCBtZW1vcnkuIElmIGByZWFkbGAgcmV0dXJucyB6ZXJvIGZyb20gdGhhdCB6ZXJvZWQgcmVnaW9uLCB0aGUgc3Vic2VxdWVudCBiaXR3aXNlIEFORCBvcGVyYXRpb24gKGByZWdfdmFsICZhbXA7IHJlc2V0X3JlZy0mZ3Q7cnN0YXRfbWApIHdpbGwgcmVzdWx0IGluIHplcm8uIFRoYXQsIGluIHR1cm4sIGNhdXNlcyBhIGxvb3AsIGFuZCBldmVudHVhbGx5IGEgYC1FQlVTWWAgZXJyb3IgaXMgcmV0dXJuZWQuIENvbnNlcXVlbnRseSwgdGhlIGBpZHBmX3ZjX2NvcmVfaW5pdGAgZnVuY3Rpb24gKndvbiYjMzk7dCogYmUgY2FsbGVkLiBUaGVyZWZvcmUsIGBpZHBmX21iX2ludHJfcmVxX2lycWAgaXMsIHByYWN0aWNhbGx5LCB1bnJlYWNoYWJsZS4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmlsaXRpZXMuIFdoYXQgaWYgc3l6a2FsbGVyIGVtcGxveXMgZmF1bHQgaW5qZWN0aW9uIG9yIHNvbWUgY2xldmVyIG1lbW9yeSBtYXBwaW5nIHRyaWNrIHRvIGZvcmNlIGByZWFkbGAgdG8gcmV0dXJuIGEgbm9uLXplcm8gdmFsdWU/IEhvd2V2ZXIsIHN5emthbGxlciAqcmFyZWx5KiBkb2VzIHRoYXQgZm9yIFBDSSBCQVJzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljYWxseSBjcmFmdGVkIHBzZXVkby1kZXZpY2UgaW52b2x2ZWQuIEFsc28sIHJlbWVtYmVyLCB0aGlzIGlzIGEgbWVtb3J5IGxlYWsgZml4ICp3aXRoaW4qIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggKGBpZiAoZXJyKWAgYWZ0ZXIgYHBjaV9yZXF1ZXN0X2lycWApLiBFdmVuIGlmLCBieSBzb21lIHdpbGQgY2hhbmNlLCB3ZSBjb3VsZCB0cmlnZ2VyIGl0LCB0aGlzIGlzIGEgaGlnaGx5IHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4gSXQmIzM5O3Mgbm90IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHRlc3RhYmxlIGluIHN5emthbGxlciYjMzk7cyBzdGFuZGFyZCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgdHlwaWNhbGx5IHZpcnR1YWxpemVkLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIGFuZCB0aGUgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgZGVwZW5kZW5jeSwgSSYjMzk7bSBnb2luZyB0byBtYXJrIHRoaXMgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0JiMzOTtzIGFuIHVucmVhY2hhYmxlLCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgcGF0aCB3aXRoaW4gdGhlIGNvbnN0cmFpbnRzIG9mIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQmIzM5O3Mgbm90IGEgZnJ1aXRmdWwgYXZlbnVlIGZvciBmdXp6aW5nLCBhdCBsZWFzdCBpbiB0aGUgZGVmYXVsdCBzeXprYWxsZXIgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA1OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgaWRwZl9tYl9pbnRyX3JlcV9pcnFgIHdpdGhpbiB0aGUgSW50ZWwgSURQRiAoSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uKSBQQ0kgZHJpdmVyLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBzdWNjZXNzZnVsIGhhcmR3YXJlIHJlc2V0IGNoZWNrIChgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWApLCB3aGljaCByZXF1aXJlcyByZWFkaW5nIHNwZWNpZmljIHZhbHVlcyBmcm9tIGhhcmR3YXJlIHJlZ2lzdGVycyAoUENJIEJBUnMpLiBTaW5jZSBzeXprYWxsZXIgYW5kIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKSBkbyBub3QgZW11bGF0ZSBJRFBGIGhhcmR3YXJlLCB0aGUgcmVzZXQgY2hlY2sgd2lsbCBmYWlsLCBtYWtpbmcgdGhpcyBjb2RlIHBhdGggdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIGBpZHBmX21iX2ludHJfcmVxX2lycWAgd2l0aGluIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIFBDSSBkcml2ZXIuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiBhZnRlciBhIHN1Y2Nlc3NmdWwgaGFyZHdhcmUgcmVzZXQgY2hlY2sgKGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCksIHdoaWNoIHJlcXVpcmVzIHJlYWRpbmcgc3BlY2lmaWMgdmFsdWVzIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzIChQQ0kgQkFScykuIFNpbmNlIHN5emthbGxlciBhbmQgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIGRvIG5vdCBlbXVsYXRlIElEUEYgaGFyZHdhcmUsIHRoZSByZXNldCBjaGVjayB3aWxsIGZhaWwsIG1ha2luZyB0aGlzIGNvZGUgcGF0aCB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MTo0MC4wMzgzMDM2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzAzODY5NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIGBpZHBmX21iX2ludHJfcmVxX2lycWAgd2l0aGluIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIFBDSSBkcml2ZXIuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiBhZnRlciBhIHN1Y2Nlc3NmdWwgaGFyZHdhcmUgcmVzZXQgY2hlY2sgKGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCksIHdoaWNoIHJlcXVpcmVzIHJlYWRpbmcgc3BlY2lmaWMgdmFsdWVzIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzIChQQ0kgQkFScykuIFNpbmNlIHN5emthbGxlciBhbmQgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIGRvIG5vdCBlbXVsYXRlIElEUEYgaGFyZHdhcmUsIHRoZSByZXNldCBjaGVjayB3aWxsIGZhaWwsIG1ha2luZyB0aGlzIGNvZGUgcGF0aCB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjQwLjAzODMwODIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzU2OTk0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmM2NjNDI5ZDI4MjRjYmQ0YjYxNmZlZDUzNzQ2OTJhNzMyZGI2NDc2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMDU6NDE6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXFxuaW5kZXggY2Y5NjZmZTZjNzU5Y2UuLmJiODFlNjIwYzVjODdhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xcbkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIGludCBpZHBmX21iX2ludHJfcmVxX2lycShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFxcIklSUSByZXF1ZXN0IGZvciBtYWlsYm94IGZhaWxlZCwgZXJyb3I6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXG4rXFx0XFx0a2ZyZWUobmFtZSk7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjQwLjYxNDY4OTA4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ3Mjc0NzI4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgYGlkcGZfbWJfaW50cl9yZXFfaXJxYCB3aXRoaW4gdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgUENJIGRyaXZlci4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uIGFmdGVyIGEgc3VjY2Vzc2Z1bCBoYXJkd2FyZSByZXNldCBjaGVjayAoYGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGVgKSwgd2hpY2ggcmVxdWlyZXMgcmVhZGluZyBzcGVjaWZpYyB2YWx1ZXMgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMgKFBDSSBCQVJzKS4gU2luY2Ugc3l6a2FsbGVyIGFuZCB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgZG8gbm90IGVtdWxhdGUgSURQRiBoYXJkd2FyZSwgdGhlIHJlc2V0IGNoZWNrIHdpbGwgZmFpbCwgbWFraW5nIHRoaXMgY29kZSBwYXRoIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmM2NjNDI5ZDI4MjRjYmQ0YjYxNmZlZDUzNzQ2OTJhNzMyZGI2NDc2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwNTo0MTozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1xuaW5kZXggY2Y5NjZmZTZjNzU5Y2UuLmJiODFlNjIwYzVjODdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNcbkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIGludCBpZHBmX21iX2ludHJfcmVxX2lycShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XCJJUlEgcmVxdWVzdCBmb3IgbWFpbGJveCBmYWlsZWQsIGVycm9yOiAlZFxcblwiLCBlcnIpO1xuLVxuK1x0XHRrZnJlZShuYW1lKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjQwLjYxNDY5MDM5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODExMjU2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgRml4IGluIHRoZSBJbnRlbCBJRFBGIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOiB0aGV5J3ZlIGFkZGVkIGBrZnJlZShuYW1lKTtgIGluIHRoZSBlcnJvciBwYXRoIG9mIGBpZHBmX21iX2ludHJfcmVxX2lycWAuIFRoYXQncyBhIGNsYXNzaWMgbWVtb3J5IGxlYWsgZml4LiBHb29kIGNhdGNoLlxuXG5Ob3csIG15IG1pbmQgc3RhcnRzIHJhY2luZyDigJMgaXMgdGhpcyBJbnRlbCBJRFBGIGRyaXZlciBldmVuICpyZWxldmFudCogaW4gdGhlIGVudmlyb25tZW50cyBJIHR5cGljYWxseSBkZWFsIHdpdGg/IElEUEYgaXMgYW4gSW50ZWwgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIGRyaXZlciwgcmlnaHQ/IE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBhcmUgdXN1YWxseSB0cmlja3kgdG8gdHJpZ2dlciBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgdW5sZXNzIHdlJ3JlIGRlYWxpbmcgd2l0aCB2ZXJ5IHNwZWNpZmljIGVtdWxhdGlvbiBvciBhIGdlbmVyaWMgZnJhbWV3b3JrIHRyaWNrZXJ5LiBCdXQgd2FpdCBhIG1pbnV0ZSwgdGhlIHBlbm55IGp1c3QgZHJvcHBlZC4gSURQRiBpcyBhIFBDSSBkZXZpY2UgZHJpdmVyLCBpc24ndCBpdD8gT2theSwgdGhhdCBjaGFuZ2VzIHRoaW5ncy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2x1ZXMgdGhlcmUgYWJvdXQgaXRzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGRlcGVuZGVuY2llcy4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiBpdCdzIG1vcmUgd2lkZWx5IHVzZWQgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDE6NDQuNzk1ODE4NDk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MDQ1NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJRFBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWc6NDpjb25maWcgSURQRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZz0xNz1pZiBJRFBGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzoxOTpjb25maWcgSURQRl9TSU5HTEVRXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTIwLVxcdGJvb2wgXFxcImlkcGYgc2luZ2xlcSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MTo0NC44ODQ4NzA2NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIwNTg0MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklEUEYgRW11bGF0aW9uIEZlYXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIHdvbmRlcmluZyBhYm91dCB0ZXN0aW5nIElEUEYgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBJRFBGIGlzIGEgUENJIGRyaXZlci4gVGhhdCBtZWFucywgcmVhbGlzdGljYWxseSwgSSBuZWVkIGEgc3BlY2lmaWMgZW11bGF0ZWQgZGV2aWNlIGluIFFFTVUgdGhhdCAqcmVwcmVzZW50cyogSURQRi4gV2l0aG91dCB0aGF0LCB0aGVyZSdzIG5vIGRpcmVjdCBwYXRoIGZvciBtZSB0byBhY3R1YWxseSByZWFjaCB0aGUgZHJpdmVyLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGFjdHVhbGx5IGludmVzdGlnYXRlIGlmIGFueSBmb3JtIG9mIElEUEYgZW11bGF0aW9uIGV4aXN0cyB3aXRoaW4gUUVNVS5cblxuR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdkIHVzdWFsbHkgY2hlY2sgZm9yIHRoZSBjb21tb24gSW50ZWwgTklDIGVtdWxhdGlvbnMgZmlyc3Qg4oCTIGUxMDAwLCBlMTAwMGUsIGlnYiwgdGhvc2UgYXJlIHByZXR0eSBzdGFuZGFyZC4gQnV0IElEUEYgaXMgcmVsYXRpdmVseSBuZXcsIHNwZWNpZmljYWxseSBmb3IgSW50ZWwncyBJUFUsIG9yIEluZnJhc3RydWN0dXJlIFByb2Nlc3NpbmcgVW5pdC4gSXQncyBub3QgYSBjb21tb24gTklDLiBJJ2QgYmUgc3VycHJpc2VkIGlmIFFFTVUgKmRpZCogaGF2ZSBhbnl0aGluZyBvdXQgb2YgdGhlIGJveCBmb3IgSURQRi5cblxuTm93LCBsZXQncyBleHBsb3JlIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBzdXBwb3J0LiBBcyBhIFBDSSBkcml2ZXIsIGl0IHdvdWxkIHJlcXVpcmUgYSBzcGVjaWZpYyBQQ0kgSUQgdG8gZnVuY3Rpb24sIHJpZ2h0PyBTbywgbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUgZm9yIGEgbW9tZW50IGFuZCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uY2AgdG8gbG9vayBmb3IgdGhvc2UgUENJIElEcy4gVGhhdCB3b3VsZCBnaXZlIG1lIHNvbWV0aGluZyBjb25jcmV0ZSB0byB3b3JrIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDE6NDkuMzA1NDU3MDY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzc4NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDSV9ERVZJQ0UuKklEUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz0zNzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkcGZfcGNpX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zNzgtXFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSURQRl9ERVZfSURfVkYpfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjM3OTpcXHR7IFBDSV9ERVZJQ0VfQ0xBU1MoSURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRiwgfjApfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM4MC1cXHR7IC8qIFNlbnRpbmVsICovIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDE6NDkuMzY4ODQwOTU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3MDU0NDQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBhIE5ldHdvcmsgRGV2aWNlIENsYXNzIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCB0aGF0IGxpbmUgLSBgUENJX0RFVklDRV9DTEFTUyhJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGLCB+MClgIC0gaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGF0dGVudGlvbi4gVGhlIGBQQ0lfREVWSUNFX0NMQVNTYCBtYWNybyBpcywgb2YgY291cnNlLCBhIHdheSB0byBkZWZpbmUgdGhlIFBDSSBkZXZpY2UgY2xhc3MgY29kZS4gQnV0IHdoYXQncyB0aGUgc2lnbmlmaWNhbmNlIG9mIGBJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGYCBzcGVjaWZpY2FsbHk/IEFuZCBtb3JlIGNydWNpYWxseSwgdGhhdCBiaXRtYXNrIGB+MGAgaXMgZ29pbmcgdG8gcmVxdWlyZSBmdXJ0aGVyIGluc3BlY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIGNsYXNzLiBXZSBhcmUgbG9va2luZyBhdCBhICp2ZXJ5IHNwZWNpZmljKiBFdGhlcm5ldCBkZXZpY2UgY2xhc3MgaGVyZS4gTGV0J3MgZGVsdmUgaW50byB3aGF0IHRoaXMgcGFydGljdWxhciBpZGVudGlmaWVyIHJlcHJlc2VudHMuIE5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgSURQRl9DTEFTU19ORVRXT1JLX0VUSEVSTkVUX1BST0dJRmAgdG8gdW5kZXJzdGFuZCB0aGlzIGRldmljZSdzIGludGVuZGVkIGZ1bmN0aW9uIG1vcmUgY29tcGxldGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0NSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjUyLjMzOTM4NzQ2M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzExOTUyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMTEtI2RlZmluZSBJRFBGX05FVFdPUktfRVRIRVJORVRfUFJPR0lGXFx0XFx0XFx0XFx0MHgwMVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM6MTI6I2RlZmluZSBJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGXFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMTMtXFx0KFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIFxcdTAwM2NcXHUwMDNjIDggfCBJRFBGX05FVFdPUktfRVRIRVJORVRfUFJPR0lGKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz01Nj1zdGF0aWMgaW50IGlkcGZfZGV2X2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzo2MTpcXHRpZiAoZW50LVxcdTAwM2VjbGFzcyA9PSBJRFBGX0NMQVNTX05FVFdPUktfRVRIRVJORVRfUFJPR0lGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy02Mi1cXHRcXHRyZXQgPSBpZHBmX2dldF9kZXZpY2VfdHlwZShhZGFwdGVyLVxcdTAwM2VwZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM9Mzc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHBmX3BjaV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzc4LVxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElEUEZfREVWX0lEX1ZGKX0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozNzk6XFx0eyBQQ0lfREVWSUNFX0NMQVNTKElEUEZfQ0xBU1NfTkVUV09SS19FVEhFUk5FVF9QUk9HSUYsIH4wKX0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODAtXFx0eyAvKiBTZW50aW5lbCAqLyB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjUyLjQwMjUxMjQ2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NzYzOTk0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIFN5emthbGxlci1UcmlnZ2VyZWQgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBjb2RlIHRhcmdldHMgUENJIGRldmljZXMsIHNwZWNpZmljYWxseSB0aG9zZSBjbGFzc2lmaWVkIGFzIG5ldHdvcmsgRXRoZXJuZXQgKGBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVGApIHdpdGggYSBwcm9ncmFtbWluZyBpbnRlcmZhY2Ugb2YgYDB4MDFgLiBIbW0sIG15IGluaXRpYWwgdGhvdWdodCBpcywgY291bGQgdGhpcyBiZSB0cmlnZ2VyZWQgYnkgYSBnZW5lcmljIFBDSSBkZXZpY2Ugd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudD8gSWYgc3l6a2FsbGVyIHdlcmUgdG8gaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIHRoaXMgY2xhc3MsIGNvdWxkIGl0IHBvdGVudGlhbGx5IHByb2JlIHRoaXMgZHJpdmVyPyBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBzeXprYWxsZXIgKnVzdWFsbHkqIGRvZXNuJ3QgZ28gYXJvdW5kIGluamVjdGluZyBhcmJpdHJhcnkgUENJIGRldmljZXMgd2l0aCBhIHZlcnkgc3BlY2lmaWMgY2xhc3MgdW5sZXNzIHRoZXJlJ3MgYW4gZXN0YWJsaXNoZWQgUENJIGZ1enppbmcgZnJhbWV3b3JrIGluIHBsYWNlLiBOb3csIHZoY2kgaXMgb25lLCBidXQgdGhlcmUgaXNuJ3Qgb25lIHVwc3RyZWFtIGluIExpbnV4IGZvciBQQ0kuXG5cblJpZ2h0LCBJJ20gcmVtaW5kaW5nIG15c2VsZiBub3csIHRoZXJlIGlzICpzb21lKiBQQ0kgZnV6emluZyBjYXBhYmlsaXR5IHdpdGhpbiBzeXprYWxsZXIsIGJ1dCBpdCdzIHJhdGhlciBsaW1pdGVkLiBBbmQgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciwgSURQRiwgZGVtYW5kcyBjZXJ0YWluIGhhcmR3YXJlIGludGVyYWN0aW9ucyAtIGEgbWFpbGJveCBzeXN0ZW0gYW5kIHNvIGZvcnRoLiBUaGUgY3J1Y2lhbCB0aGluZyB0byB2ZXJpZnkgaXMgd2hldGhlciBgaWRwZl9tYl9pbnRyX3JlcV9pcnFgIGlzIGFjY2Vzc2libGUuIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiwgSSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgcmVhY2hhYmxlLiBUaGF0J3MgdGhlIGtleTogY2FuIHdlIGdldCB0aGlzIGludGVycnVwdCByZXF1ZXN0IGZ1bmN0aW9uIHRvIGJlIGludm9rZWQ/IElmIHNvLCB0aGlzIG1pZ2h0IHByb3ZpZGUgdXMgd2l0aCBhIHN0YXJ0aW5nIHBvaW50IGZvciB2dWxuZXJhYmlsaXR5IHJlc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODgyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQxOjU3LjE3ODkxNDY1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5NTAyNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWRwZl9tYl9pbnRyX3JlcV9pcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTExNT1zdGF0aWMgdm9pZCBpZHBmX21iX2lycV9lbmFibGUoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xMjUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjEyNjogKiBpZHBmX21iX2ludHJfcmVxX2lycSAtIFJlcXVlc3QgaXJxIGZvciB0aGUgbWFpbGJveCBpbnRlcnJ1cHRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTI3LSAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZSB0byBwYXNzIHRvIHRoZSBtYWlsYm94IGlycSBoYW5kbGVyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyOC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTI5OnN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX3JlcV9pcnEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0xNTU9c3RhdGljIGludCBpZHBmX21iX2ludHJfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE1OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTYwOlxcdHJldHVybiBpZHBmX21iX2ludHJfcmVxX2lycShhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTYxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDE6NTcuMjUwODcxNTY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0OTM3Nzc3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgQ2FsbCB0byBgaWRwZl9tYl9pbnRyX2luaXRgKipcblxuT2theSwgc28gSSBzZWUgYGlkcGZfbWJfaW50cl9pbml0YC4gIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cywgKndoZXJlKiBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0LiBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjayB0byBmaWd1cmUgb3V0IHdoYXQncyBpbml0aWF0aW5nIHRoaXMgaW50ZXJydXB0IGluaXRpYWxpemF0aW9uIHJvdXRpbmUuIElzIGl0IGR1cmluZyBkcml2ZXIgcHJvYmUsIGEgbW9kdWxlIGxvYWQsIG9yIHBlcmhhcHMgc29tZSBsYXRlciBzdGFnZSBvZiBzeXN0ZW0gaW5pdGlhbGl6YXRpb24/ICBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgZGV2aWNlLCBvciBpcyBpdCBhIG1vcmUgZ2VuZXJhbCBzZXR1cD8gR2V0dGluZyB0aGF0IGJyb2FkZXIgcGljdHVyZSBpcyB0aGUga2V5IHRvIGVmZmljaWVudCBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9ucy4gSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIHVwc3RyZWFtIGNvZGUgdGhhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MTo1OS43NDQ2NTE1NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2NjAzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWRwZl9tYl9pbnRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTEyOT1zdGF0aWMgaW50IGlkcGZfbWJfaW50cl9yZXFfaXJxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUxLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxNTI6ICogaWRwZl9tYl9pbnRyX2luaXQgLSBJbml0aWFsaXplIHRoZSBtYWlsYm94IGludGVycnVwdFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTMtICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlIHRvIHN0b3JlIHRoZSBtYWlsYm94IHZlY3RvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE1NTpzdGF0aWMgaW50IGlkcGZfbWJfaW50cl9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MzA0PWludCBpZHBmX2ludHJfcmVxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtNDE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzo0MTc6XFx0ZXJyID0gaWRwZl9tYl9pbnRyX2luaXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTQxOC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MTo1OS44MTAzMjE5NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3MzYwODY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBgaWRwZl9pbnRyX3JlcWAgQ2FsbCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXM6IFwiRnJvbSB3aGVyZSBpcyBgaWRwZl9pbnRyX3JlcWAgYmVpbmcgY2FsbGVkP1wiIFRoaXMgaXNuJ3QgYSBjb21wbGV4IHF1ZXN0aW9uIGluIGl0c2VsZiwgYnV0IGl0J3MgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbihzKSB3aWxsIGltbWVkaWF0ZWx5IHRlbGwgbWUgd2hhdCBhcmVhIG9mIHRoZSBjb2RlIGlzIGluaXRpYXRpbmcgdGhpcyBpbnRlcnJ1cHQgcmVxdWVzdC4gSXMgaXQgcmVsYXRlZCB0byB0aGUgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24sIGEgc3BlY2lmaWMgZHJpdmVyLCB0aGUga2VybmVsJ3MgaW50ZXJydXB0IG1hbmFnZW1lbnQgc3lzdGVtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGFuc3dlciB3aWxsIGd1aWRlIG15IGludmVzdGlnYXRpb24uIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBkZXRlcm1pbmUgdGhlIHNvdXJjZS4gT25jZSBJIGhhdmUgaWRlbnRpZmllZCB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20sIEkgY2FuIHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGRlZHVjZSB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjAyLjM4MzkzMzEwOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcxODAyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWRwZl9pbnRyX3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaD0xMDQ5PXZvaWQgaWRwZl92Zl9kZXZfb3BzX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg6MTA1MDppbnQgaWRwZl9pbnRyX3JlcShzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaC0xMDUxLXZvaWQgaWRwZl9pbnRyX3JlbChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0yNTQ9aW50IGlkcGZfcmVxX3JlbF92ZWN0b3JfaW5kZXhlcyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTI5OC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6Mjk5OiAqIGlkcGZfaW50cl9yZXEgLSBSZXF1ZXN0IGludGVycnVwdCBjYXBhYmlsaXRpZXNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMzAwLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIG9uXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMzAzLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzozMDQ6aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMzA1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jPTM0ODA9aW50IGlkcGZfdmNfY29yZV9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNTg2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jOjM1ODc6XFx0ZXJyID0gaWRwZl9pbnRyX3JlcShhZGFwdGVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNTg4LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MDIuNDQxMTE4MTY0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNDMxODQ0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgSW5pdGlhbGl6YXRpb24gb2YgdGhlIENvcmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGlkcGZfdmNfY29yZV9pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaXRzIG9yaWdpbi4gV2hlcmUgaXMgdGhpcyB0aGluZyBiZWluZyBjYWxsZWQgZnJvbT8gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIGZvbGxvdyB0aGUgb3ZlcmFsbCBwcm9ncmFtIGZsb3cuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyB0cmlnZ2VyaW5nIGl0cyBleGVjdXRpb24uIElzIGl0IGNhbGxlZCBkaXJlY3RseSBmcm9tIGEgbWFpbiByb3V0aW5lPyBJcyBpdCBpbnZva2VkIGFzIHBhcnQgb2Ygc29tZSBsYXJnZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb3IgZnJhbWV3b3JrPyBEb2VzIGFub3RoZXIgZnVuY3Rpb24sIHdoaWNoIGluIHR1cm4gY2FsbHMgdGhpcyBvbmUsIGhhbmRsZSBzb21lIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbiBvciByZXNvdXJjZSBhbGxvY2F0aW9uPyBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgZ29pbmcgdG8gcHJvdmlkZSBzaWduaWZpY2FudCBjbHVlcyBhYm91dCB0aGUgcHVycG9zZSBhbmQgZGVwZW5kZW5jaWVzIG9mIHRoZSBgaWRwZl92Y19jb3JlX2luaXRgIGZ1bmN0aW9uIGl0c2VsZiwgd2hpY2ggaXMgd2hhdCBJIG5lZWQgdG8gdHJ1bHkgY29tcHJlaGVuZCB0aGlzIG1vZHVsZS4gSSBzaG91bGQgdXNlIG15IHRvb2xzIHRvIHVuZGVyc3RhbmQgdGhpcyBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQ4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MDYuNDg0MzA1ODc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE5Njc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZHBmX3ZjX2NvcmVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTg5Mz1zdGF0aWMgdm9pZCBpZHBmX2luaXRfaGFyZF9yZXNldChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDEtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE5NDI6XFx0ZXJyID0gaWRwZl92Y19jb3JlX2luaXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDMtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MzQzMz1zdGF0aWMgaW50IGlkcGZfdnBvcnRfcGFyYW1zX2J1Zl9hbGxvYyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNDY4OiAqIGlkcGZfdmNfY29yZV9pbml0IC0gSW5pdGlhbGl6ZSBzdGF0ZSBtYWNoaW5lIGFuZCBnZXQgZHJpdmVyIHNwZWNpZmljXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2OS0gKiByZXNvdXJjZXNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0NzktICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ4MDppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oPTEwMj12b2lkIGlkcGZfZGVpbml0X2RmbHRfbWJ4KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oOjEwMzppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmgtMTA0LXZvaWQgaWRwZl92Y19jb3JlX2RlaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MDYuNTQwNTA4MDQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTQ4Njg3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIE9yaWdpbiBvZiBgaWRwZl9pbml0X2hhcmRfcmVzZXRgKipcblxuT2theSwgc28gdGhlIHByb21wdCBkaXJlY3RzIG15IGF0dGVudGlvbiB0byBgaWRwZl9pbml0X2hhcmRfcmVzZXRgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBXaGVyZSAqaXMqIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/IEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LCBlc3BlY2lhbGx5IGluIGEgc3lzdGVtIGxpa2UgdGhpcy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2l0aGluIHRoZSBjb2RlIHdoZXJlIGBpZHBmX2luaXRfaGFyZF9yZXNldGAgaXMgaW52b2tlZC4gSXMgaXQgcGFydCBvZiB0aGUgbm9ybWFsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBJcyBpdCB0cmlnZ2VyZWQgYnkgc29tZSBzcGVjaWZpYyBldmVudCBvciBjb25kaXRpb24/IEtub3dpbmcgdGhlICpjb250ZXh0KiBvZiBpdHMgZXhlY3V0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byBpbnRlcnByZXRpbmcgd2hhdCBpdCAqZG9lcyouIEkgbmVlZCB0byBpbW1lZGlhdGVseSBpbml0aWF0ZSBhIHNlYXJjaCBmb3IgaXRzIGNhbGwgc2l0ZXMgdG8gcGFpbnQgdGhlIHBpY3R1cmUgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTQwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MTEuNjM1Mzc5Nzg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTAwMzU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZHBmX2luaXRfaGFyZF9yZXNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTg1Nz1zdGF0aWMgaW50IGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGUoc3RydWN0IGlkcGZfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE4ODUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE4ODY6ICogaWRwZl9pbml0X2hhcmRfcmVzZXQgLSBJbml0aWF0ZSBhIGhhcmR3YXJlIHJlc2V0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE4ODctICogQGFkYXB0ZXI6IERyaXZlciBzcGVjaWZpYyBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE4OTItICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE4OTM6c3RhdGljIHZvaWQgaWRwZl9pbml0X2hhcmRfcmVzZXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTg5NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTk3Mj12b2lkIGlkcGZfdmNfZXZlbnRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTk5Mi1cXHRzZXRfYml0KElEUEZfSFJfUkVTRVRfSU5fUFJPRywgYWRhcHRlci1cXHUwMDNlZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxOTkzOlxcdGlkcGZfaW5pdF9oYXJkX3Jlc2V0KGFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xOTk0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MTEuNzA2MzkxNDc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTgwMjMwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgYGlkcGZfdmNfZXZlbnRfdGFza2AgQ29udW5kcnVtKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYGlkcGZfdmNfZXZlbnRfdGFza2AuIFJpZ2h0LCB0aGF0J3MgYSB3b3JrIHF1ZXVlIHRhc2ssIGdvdCBpdC4gSXQncyBkZXNpZ25lZCB0byBmdW5jdGlvbiBpbiB0aGF0IHNwZWNpZmljIHdheS4gQnV0IEknbSBhbHNvIHRoaW5raW5nLCBpcyB0aGlzICp0aGUqIG9ubHkgcGF0aD8gVGhpcyBzcGVjaWZpYyB0YXNrIHNlZW1zIGxpa2UgYSBzaW5ndWxhciBwb2ludCBvZiByZXNwb25zaWJpbGl0eSBpbiB0aGUgZmxvdy4gSWYgdGhlcmUncyBhbiBpc3N1ZSB3aXRoIGl0LCBhcmUgd2UgYm90dGxlbmVja2VkPyBBcmUgdGhlcmUgYW55IGFsdGVybmF0aXZlIHN0cmF0ZWdpZXMgb3IgcmVkdW5kYW50IHBhdGhzIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMsIGFueSBvdGhlciBmdW5jdGlvbnMgb3IgcHJvY2Vzc2VzIHRoYXQgY2FuIGhhbmRsZSBzaW1pbGFyIHJlc3BvbnNpYmlsaXRpZXM/IFdlIGNhbid0IGxldCB0aGlzIGJlIHRoZSBvbmx5IHNvbHV0aW9uLiBNeSBqb2Igbm93IGlzIHRvIGRldGVybWluZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIG9yIHByb2Nlc3NlcyBtYXkgYWNjb21wbGlzaCBhIHNpbWlsYXIgYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MTUuMzI0NDE3MzQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDA0MDQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZHBmX3ZjX2NvcmVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTg5Mz1zdGF0aWMgdm9pZCBpZHBmX2luaXRfaGFyZF9yZXNldChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDEtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE5NDI6XFx0ZXJyID0gaWRwZl92Y19jb3JlX2luaXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDMtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MzQzMz1zdGF0aWMgaW50IGlkcGZfdnBvcnRfcGFyYW1zX2J1Zl9hbGxvYyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNDY4OiAqIGlkcGZfdmNfY29yZV9pbml0IC0gSW5pdGlhbGl6ZSBzdGF0ZSBtYWNoaW5lIGFuZCBnZXQgZHJpdmVyIHNwZWNpZmljXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2OS0gKiByZXNvdXJjZXNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0NzktICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ4MDppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oPTEwMj12b2lkIGlkcGZfZGVpbml0X2RmbHRfbWJ4KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oOjEwMzppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmgtMTA0LXZvaWQgaWRwZl92Y19jb3JlX2RlaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6MTUuMzk0NDY1MDA4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzY3OTIwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIEluaXRpYWxpemF0aW9uIEZsb3cqKlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBJJ20gbm90aWNpbmcgc29tZXRoaW5nIGhlcmUuIEl0IGxvb2tzIGxpa2UgYGlkcGZfdmNfY29yZV9pbml0YCBpcyAqb25seSogY2FsbGVkIGZyb20gYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YC4gVGhhdCBzZWVtcyBhIGJpdC4uLiByZXN0cmljdGl2ZSwgZG9lc24ndCBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQgb2YgaW5pdGlhbGl6YXRpb24uIFdoYXQgYW0gSSBtaXNzaW5nP1xuXG5BbHJpZ2h0LCBsZXQncyBiYWNrIHVwLiBXaGVyZSAqZWxzZSogbWlnaHQgdGhpcyBpbml0aWFsaXphdGlvbiBiZSBoYXBwZW5pbmcsIG9yIGF0IGxlYXN0IGJlIGEgbG9naWNhbCBjYW5kaWRhdGU/IEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHRoZSBjYWxsIHN0cnVjdHVyZSBmcm9tIHRoZSBkcml2ZXIncyBlbnRyeSBwb2ludHMuIEkgd2lsbCBsb29rIGludG8gYm90aCBgaWRwZl9wcm9iZWAgYW5kIGBpZHBmX2Rldl9pbml0YC4gSSBiZXQgdGhlIGFuc3dlciBsaWVzIHRoZXJlLiBMZXQncyBzZWUgaWYgZWl0aGVyIG9mIHRoZW0gdG91Y2hlcyB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBpbiBhIGRpZmZlcmVudCB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjoxOC40MzEyNTk5MjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTAwMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlkcGZfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz0xODk9c3RhdGljIGludCBpZHBmX2NmZ19odyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0yMjgtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzoyMjk6ICogaWRwZl9wcm9iZSAtIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0yMzAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTIzNC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjIzNTpzdGF0aWMgaW50IGlkcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0yMzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz0zODQ9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlkcGZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODYtXFx0LmlkX3RhYmxlXFx0XFx0PSBpZHBmX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozODc6XFx0LnByb2JlXFx0XFx0XFx0PSBpZHBmX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzg4LVxcdC5zcmlvdl9jb25maWd1cmVcXHQ9IGlkcGZfc3Jpb3ZfY29uZmlndXJlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjoxOC41MDYxNjc4NzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MTYyNDAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgaWRwZl9wcm9iZWAgQ2FsbCBTdGFjayoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEknbSB0YWtpbmcgYSBsb29rIGF0IGBpZHBmX3Byb2JlYCBhbmQgbmVlZCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nLCBcIndoYXQgb3RoZXIgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgZG9lcyB0aGlzIHRoaW5nIHJlbHkgb24/XCIgSSBuZWVkIHRvIHNlZSB0aGUgY2FsbHMgaXQgbWFrZXMsIHRoZSBmdW5jdGlvbnMgaXQgaW52b2tlcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgZXhlY3V0aW9uIGZsb3cuIElzIGl0IG1ha2luZyBkaXJlY3QgY2FsbHMsIG9yIGlzIHRoZXJlIGFuIGludGVybWVkaWF0ZSBsYXllciBJIG5lZWQgdG8gZXhwbG9yZT8gQmFzaWNhbGx5LCBJIG5lZWQgYSBxdWljayBoaWdoLWxldmVsIHZpZXcgb2YgaXRzIGNvbnRyb2wgZmxvdyBncmFwaC4gVW5kZXJzdGFuZGluZyB0aGF0IGNhbGwgc3RhY2sgcXVpY2tseSBpcyBrZXkgdG8gZWZmaWNpZW50bHkgZGVidWdnaW5nIGFueSBpc3N1ZSByZWxhdGVkIHRvIEludGVsIGRyaXZlciBwcm9iaW5nIG9yIGl0cyBpbml0aWFsaXphdGlvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgSSB0YWtlIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyBkZWVwbHkgbmVzdGVkIGFueSBwb3RlbnRpYWwgcHJvYmxlbSBtaWdodCBiZS4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgdG91Y2hlcyBhbmQgd2hhdCBpdCByZWxpZXMgdXBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzNSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjIxLjU4Nzc5NDIzN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdHN0YXRpYyBpbnQgaWRwZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gMjM2OlxcdHtcXG4gMjM3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIDIzODpcXHRcXHRzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyO1xcbiAyMzk6XFx0XFx0aW50IGVycjtcXG4gMjQwOlxcdFxcbiAyNDE6XFx0XFx0YWRhcHRlciA9IGt6YWxsb2Nfb2JqKCphZGFwdGVyKTtcXG4gMjQyOlxcdFxcdGlmICghYWRhcHRlcilcXG4gMjQzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyNDQ6XFx0XFxuIDI0NTpcXHRcXHRhZGFwdGVyLVxcdTAwM2VyZXFfdHhfc3BsaXRxID0gdHJ1ZTtcXG4gMjQ2OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXJlcV9yeF9zcGxpdHEgPSB0cnVlO1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRhZGFwdGVyLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4gMjQ5OlxcdFxcdGVyciA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTtcXG4gMjUwOlxcdFxcdGlmIChlcnIpXFxuIDI1MTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyNTI6XFx0XFxuIDI1MzpcXHRcXHRlcnIgPSBwY2ltX3JlcXVlc3RfcmVnaW9uKHBkZXYsIDAsIHBjaV9uYW1lKHBkZXYpKTtcXG4gMjU0OlxcdFxcdGlmIChlcnIpIHtcXG4gMjU1OlxcdFxcdFxcdHBjaV9lcnIocGRldiwgXFxcInBjaW1fcmVxdWVzdF9yZWdpb24gZmFpbGVkICVwZVxcXFxuXFxcIiwgRVJSX1BUUihlcnIpKTtcXG4gMjU2OlxcdFxcbiAyNTc6XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMjU4OlxcdFxcdH1cXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0ZXJyID0gcGNpX2VuYWJsZV9wdG0ocGRldik7XFxuIDI2MTpcXHRcXHRpZiAoZXJyKVxcbiAyNjI6XFx0XFx0XFx0cGNpX2RiZyhwZGV2LCBcXFwiUENJZSBQVE0gaXMgbm90IHN1cHBvcnRlZCBieSBQQ0llIGJ1cy9jb250cm9sbGVyXFxcXG5cXFwiKTtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0Lyogc2V0IHVwIGZvciBoaWdoIG9yIGxvdyBkbWEgKi9cXG4gMjY1OlxcdFxcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNjQpKTtcXG4gMjY2OlxcdFxcdGlmIChlcnIpIHtcXG4gMjY3OlxcdFxcdFxcdHBjaV9lcnIocGRldiwgXFxcIkRNQSBjb25maWd1cmF0aW9uIGZhaWxlZDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKGVycikpO1xcbiAyNjg6XFx0XFxuIDI2OTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyNzA6XFx0XFx0fVxcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG4gMjczOlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhZGFwdGVyKTtcXG4gMjc0OlxcdFxcbiAyNzU6XFx0XFx0YWRhcHRlci1cXHUwMDNlaW5pdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiJXMtJXMtaW5pdFxcXCIsXFxuIDI3NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDAsXFxuIDI3NzpcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLFxcbiAyNzg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgZGV2X25hbWUoZGV2KSk7XFxuIDI3OTpcXHRcXHRpZiAoIWFkYXB0ZXItXFx1MDAzZWluaXRfd3EpIHtcXG4gMjgwOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIGluaXQgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4gMjgxOlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDI4MjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyODM6XFx0XFx0fVxcbiAyODQ6XFx0XFxuIDI4NTpcXHRcXHRhZGFwdGVyLVxcdTAwM2VzZXJ2X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCIlcy0lcy1zZXJ2aWNlXFxcIixcXG4gMjg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCxcXG4gMjg3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGRldl9kcml2ZXJfc3RyaW5nKGRldiksXFxuIDI4ODpcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXZfbmFtZShkZXYpKTtcXG4gMjg5OlxcdFxcdGlmICghYWRhcHRlci1cXHUwMDNlc2Vydl93cSkge1xcbiAyOTA6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgc2VydmljZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbiAyOTE6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMjkyOlxcdFxcdFxcdGdvdG8gZXJyX3NlcnZfd3FfYWxsb2M7XFxuIDI5MzpcXHRcXHR9XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdGFkYXB0ZXItXFx1MDAzZW1ieF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiJXMtJXMtbWJ4XFxcIiwgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXFxuIDI5NjpcXHRcXHRcXHRcXHRcXHRcXHQgIDAsIGRldl9kcml2ZXJfc3RyaW5nKGRldiksXFxuIDI5NzpcXHRcXHRcXHRcXHRcXHRcXHQgIGRldl9uYW1lKGRldikpO1xcbiAyOTg6XFx0XFx0aWYgKCFhZGFwdGVyLVxcdTAwM2VtYnhfd3EpIHtcXG4gMjk5OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1haWxib3ggd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4gMzAwOlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDMwMTpcXHRcXHRcXHRnb3RvIGVycl9tYnhfd3FfYWxsb2M7XFxuIDMwMjpcXHRcXHR9XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdGFkYXB0ZXItXFx1MDAzZXN0YXRzX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCIlcy0lcy1zdGF0c1xcXCIsXFxuIDMwNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAwLFxcbiAzMDY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRldl9kcml2ZXJfc3RyaW5nKGRldiksXFxuIDMwNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGV2X25hbWUoZGV2KSk7XFxuIDMwODpcXHRcXHRpZiAoIWFkYXB0ZXItXFx1MDAzZXN0YXRzX3dxKSB7XFxuIDMwOTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbiAzMTA6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMzExOlxcdFxcdFxcdGdvdG8gZXJyX3N0YXRzX3dxX2FsbG9jO1xcbiAzMTI6XFx0XFx0fVxcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRhZGFwdGVyLVxcdTAwM2V2Y19ldmVudF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwiJXMtJXMtdmNfZXZlbnRcXFwiLFxcbiAzMTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCxcXG4gMzE2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLFxcbiAzMTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGRldl9uYW1lKGRldikpO1xcbiAzMTg6XFx0XFx0aWYgKCFhZGFwdGVyLVxcdTAwM2V2Y19ldmVudF93cSkge1xcbiAzMTk6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgdmlydGNobmwgZXZlbnQgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG4gMzIwOlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDMyMTpcXHRcXHRcXHRnb3RvIGVycl92Y19ldmVudF93cV9hbGxvYztcXG4gMzIyOlxcdFxcdH1cXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0Lyogc2V0dXAgbXNnbHZsICovXFxuIDMyNTpcXHRcXHRhZGFwdGVyLVxcdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoLTEsIElEUEZfQVZBSUxfTkVUSUZfTSk7XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdGVyciA9IGlkcGZfZGV2X2luaXQoYWRhcHRlciwgZW50KTtcXG4gMzI4OlxcdFxcdGlmIChlcnIpIHtcXG4gMzI5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlVuZXhwZWN0ZWQgZGV2IElEIDB4JXggaW4gaWRwZiBwcm9iZVxcXFxuXFxcIixcXG4gMzMwOlxcdFxcdFxcdFxcdGVudC1cXHUwMDNlZGV2aWNlKTtcXG4gMzMxOlxcdFxcdFxcdGdvdG8gZGVzdHJveV92Y19ldmVudF93cTtcXG4gMzMyOlxcdFxcdH1cXG4gMzMzOlxcdFxcbiAzMzQ6XFx0XFx0ZXJyID0gaWRwZl9jZmdfaHcoYWRhcHRlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjIxLjU4Nzk3ODI3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgwMDQ1MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgSW50ZXJydXB0IEluaXRpYWxpemF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaWRwZl9jZmdfaHdgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCBpbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXRoIHRoZSBjb2RlIHRha2VzLiBUaGUgc3BlY2lmaWMgcXVlc3Rpb24gSSBoYXZlIGlzIHdoZXRoZXIgb3Igbm90IGBpZHBmX2NmZ19od2AgZGlyZWN0bHkgY2FsbHMgYGlkcGZfbWJfaW50cl9pbml0YC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGBpZHBmX21iX2ludHJfaW5pdGAgbGlrZWx5IGhhbmRsZXMgdGhlIHNldHVwIG9mIHRoZSBtYWlsYm94IGludGVycnVwdCwgYSBjb3JlIGNvbXBvbmVudCBmb3IgY29tbXVuaWNhdGlvbiBpbiB0aGlzIGVudmlyb25tZW50LiBVbmRlcnN0YW5kaW5nIHRoYXQgY29ubmVjdGlvbiBpcyBrZXkgdG8gZGVidWdnaW5nIGludGVycnVwdC1yZWxhdGVkIGlzc3VlcyBvciBvcHRpbWl6aW5nIHRoZSBkcml2ZXIuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiBgaWRwZl9tYl9pbnRyX2luaXRgIGlzIGNhbGxlZCAoYW5kIGlmKS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjI0Ljk2ODAyNzkyOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4OTpcXHRzdGF0aWMgaW50IGlkcGZfY2ZnX2h3KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIDE5MDpcXHR7XFxuIDE5MTpcXHRcXHRyZXNvdXJjZV9zaXplX3QgcmVzX3N0YXJ0LCBtYnhfc3RhcnQsIHJzdGF0X3N0YXJ0O1xcbiAxOTI6XFx0XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLVxcdTAwM2VwZGV2O1xcbiAxOTM6XFx0XFx0c3RydWN0IGlkcGZfaHcgKmh3ID0gXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWh3O1xcbiAxOTQ6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gMTk1OlxcdFxcdGxvbmcgbGVuO1xcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRyZXNfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdC8qIE1hcCBtYWlsYm94IHNwYWNlIGZvciB2aXJ0Y2hubCBjb21tdW5pY2F0aW9uICovXFxuIDIwMDpcXHRcXHRtYnhfc3RhcnQgPSByZXNfc3RhcnQgKyBhZGFwdGVyLVxcdTAwM2VkZXZfb3BzLnN0YXRpY19yZWdfaW5mb1swXS5zdGFydDtcXG4gMjAxOlxcdFxcdGxlbiA9IHJlc291cmNlX3NpemUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzBdKTtcXG4gMjAyOlxcdFxcdGh3LVxcdTAwM2VtYngudmFkZHIgPSBkZXZtX2lvcmVtYXAoZGV2LCBtYnhfc3RhcnQsIGxlbik7XFxuIDIwMzpcXHRcXHRpZiAoIWh3LVxcdTAwM2VtYngudmFkZHIpIHtcXG4gMjA0OlxcdFxcdFxcdHBjaV9lcnIocGRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBCQVIwIG1ieCByZWdpb25cXFxcblxcXCIpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjA3OlxcdFxcdH1cXG4gMjA4OlxcdFxcdGh3LVxcdTAwM2VtYnguYWRkcl9zdGFydCA9IGFkYXB0ZXItXFx1MDAzZWRldl9vcHMuc3RhdGljX3JlZ19pbmZvWzBdLnN0YXJ0O1xcbiAyMDk6XFx0XFx0aHctXFx1MDAzZW1ieC5hZGRyX2xlbiA9IGxlbjtcXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0LyogTWFwIHJzdGF0IHNwYWNlIGZvciByZXNldHMgKi9cXG4gMjEyOlxcdFxcdHJzdGF0X3N0YXJ0ID0gcmVzX3N0YXJ0ICsgYWRhcHRlci1cXHUwMDNlZGV2X29wcy5zdGF0aWNfcmVnX2luZm9bMV0uc3RhcnQ7XFxuIDIxMzpcXHRcXHRsZW4gPSByZXNvdXJjZV9zaXplKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VkZXZfb3BzLnN0YXRpY19yZWdfaW5mb1sxXSk7XFxuIDIxNDpcXHRcXHRody1cXHUwMDNlcnN0YXQudmFkZHIgPSBkZXZtX2lvcmVtYXAoZGV2LCByc3RhdF9zdGFydCwgbGVuKTtcXG4gMjE1OlxcdFxcdGlmICghaHctXFx1MDAzZXJzdGF0LnZhZGRyKSB7XFxuIDIxNjpcXHRcXHRcXHRwY2lfZXJyKHBkZXYsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgQkFSMCByc3RhdCByZWdpb25cXFxcblxcXCIpO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcdGh3LVxcdTAwM2Vyc3RhdC5hZGRyX3N0YXJ0ID0gYWRhcHRlci1cXHUwMDNlZGV2X29wcy5zdGF0aWNfcmVnX2luZm9bMV0uc3RhcnQ7XFxuIDIyMTpcXHRcXHRody1cXHUwMDNlcnN0YXQuYWRkcl9sZW4gPSBsZW47XFxuIDIyMjpcXHRcXG4gMjIzOlxcdFxcdGh3LVxcdTAwM2ViYWNrID0gYWRhcHRlcjtcXG4gMjI0OlxcdFxcbiAyMjU6XFx0XFx0cmV0dXJuIDA7XFxuIDIyNjpcXHR9XFxuIDIyNzpcXHRcXG4gMjI4OlxcdC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjoyNC45NjgxMjIxMDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwMTM3NDE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGlkcGZfY2ZnX2h3YCBTZXF1ZW5jZSoqXG5cbkhtbSwgaW50ZXJlc3RpbmcuIEknbSBub3RpY2luZyB0aGF0IHRoZSBgaWRwZl9jZmdfaHdgIGZ1bmN0aW9uIGRvZXNuJ3Qgc2VlbSB0byBleHBsaWNpdGx5IGNhbGwgYGlkcGZfbWJfaW50cl9pbml0YC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLCBhbmQgaXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgc29tZSBxdWVzdGlvbnMuIFdoZXJlIGFuZCBob3cgYXJlIHRoZSBNZXNzYWdlIEJ1ZmZlciAoTUIpIGludGVycnVwdHMgYmVpbmcgaW5pdGlhbGl6ZWQgaW4gcmVsYXRpb24gdG8gaGFyZHdhcmUgY29uZmlndXJhdGlvbj8gSWYgbm90IGNhbGxlZCBkaXJlY3RseSB0aGVyZSwgaXQgbWVhbnMgdGhlIGluaXRpYWxpemF0aW9uIG11c3QgYmUgaGFwcGVuaW5nIHNvbWV3aGVyZSBlbHNlIGluIHRoZSBjb2RlIHBhdGggKmFmdGVyKiBgaWRwZl9jZmdfaHdgIGV4ZWN1dGVzLCBvciBwZXJoYXBzIGV2ZW4gKmJlZm9yZSouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcuIEl0IGNvdWxkIGJlIHRyaWdnZXJlZCBmcm9tIHRoZSBQQ0kgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgb3Igc29tZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBhbm90aGVyIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgLSBuZWVkIHRvIGZpbmQgdGhhdCBzcG90LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIGF2b2lkIG1ha2luZyBhbiBpbmNvcnJlY3QgYXNzdW1wdGlvbi4gVGhpcyBpcyBsaWtlbHkgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycnVwdCBoYW5kbGluZyBiZWhhdmlvci4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIHRoZW4gbWlnaHQgbmVlZCB0byBkbyBzb21lIGR5bmFtaWMgYW5hbHlzaXMgb3IgZGVidWdnaW5nIHRvIHRydWx5IHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MzEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjI5LjA2OTUwMDI4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzQ6XFx0XFx0ZXJyID0gaWRwZl9jZmdfaHcoYWRhcHRlcik7XFxuIDMzNTpcXHRcXHRpZiAoZXJyKSB7XFxuIDMzNjpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBjb25maWd1cmUgSFcgc3RydWN0dXJlIGZvciBhZGFwdGVyOiAlZFxcXFxuXFxcIixcXG4gMzM3OlxcdFxcdFxcdFxcdGVycik7XFxuIDMzODpcXHRcXHRcXHRnb3RvIGRlc3Ryb3lfdmNfZXZlbnRfd3E7XFxuIDMzOTpcXHRcXHR9XFxuIDM0MDpcXHRcXG4gMzQxOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXZwb3J0X2N0cmxfbG9jayk7XFxuIDM0MjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2ZWN0b3JfbG9jayk7XFxuIDM0MzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gMzQ0OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXZjX2J1Zl9sb2NrKTtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWluaXRfdGFzaywgaWRwZl9pbml0X3Rhc2spO1xcbiAzNDc6XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXNlcnZfdGFzaywgaWRwZl9zZXJ2aWNlX3Rhc2spO1xcbiAzNDg6XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW1ieF90YXNrLCBpZHBmX21ieF90YXNrKTtcXG4gMzQ5OlxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VzdGF0c190YXNrLCBpZHBmX3N0YXRpc3RpY3NfdGFzayk7XFxuIDM1MDpcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2YWRhcHRlci1cXHUwMDNldmNfZXZlbnRfdGFzaywgaWRwZl92Y19ldmVudF90YXNrKTtcXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0YWRhcHRlci1cXHUwMDNlZGV2X29wcy5yZWdfb3BzLnJlc2V0X3JlZ19pbml0KGFkYXB0ZXIpO1xcbiAzNTM6XFx0XFx0c2V0X2JpdChJRFBGX0hSX0RSVl9MT0FELCBhZGFwdGVyLVxcdTAwM2VmbGFncyk7XFxuIDM1NDpcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoYWRhcHRlci1cXHUwMDNldmNfZXZlbnRfd3EsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2Y19ldmVudF90YXNrLFxcbiAzNTU6XFx0XFx0XFx0XFx0ICAgbXNlY3NfdG9famlmZmllcygxMCAqIChwZGV2LVxcdTAwM2VkZXZmbiBcXHUwMDI2IDB4MDcpKSk7XFxuIDM1NjpcXHRcXG4gMzU3OlxcdFxcdHJldHVybiAwO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRkZXN0cm95X3ZjX2V2ZW50X3dxOlxcbiAzNjA6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci1cXHUwMDNldmNfZXZlbnRfd3EpO1xcbiAzNjE6XFx0ZXJyX3ZjX2V2ZW50X3dxX2FsbG9jOlxcbiAzNjI6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci1cXHUwMDNlc3RhdHNfd3EpO1xcbiAzNjM6XFx0ZXJyX3N0YXRzX3dxX2FsbG9jOlxcbiAzNjQ6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci1cXHUwMDNlbWJ4X3dxKTtcXG4gMzY1OlxcdGVycl9tYnhfd3FfYWxsb2M6XFxuIDM2NjpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLVxcdTAwM2VzZXJ2X3dxKTtcXG4gMzY3OlxcdGVycl9zZXJ2X3dxX2FsbG9jOlxcbiAzNjg6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci1cXHUwMDNlaW5pdF93cSk7XFxuIDM2OTpcXHRlcnJfZnJlZTpcXG4gMzcwOlxcdFxcdGtmcmVlKGFkYXB0ZXIpO1xcbiAzNzE6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzcyOlxcdH1cXG4gMzczOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjoyOS4wNjk2NjIxNjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE5ODA5MDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElEUEYgRHJpdmVyIEluaXRpYWxpemF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBgaWRwZl9wcm9iZWAgZXZlbnR1YWxseSBlbnF1ZXVlcyBgaWRwZl92Y19ldmVudF90YXNrYC4gVGhhdCB0YXNrIHRoZW4gZGl2ZXMgaW50byBgaWRwZl9pbml0X2hhcmRfcmVzZXQoYWRhcHRlcilgLCB3aGljaCBicmFuY2hlcyBpbnRvIGBpZHBmX3ZjX2NvcmVfaW5pdChhZGFwdGVyKWAsIHdoaWNoIGxlYWRzIHRvIGBpZHBmX2ludHJfcmVxKGFkYXB0ZXIpYCwgYW5kIGRvd24gdGhlIHJhYmJpdCBob2xlIHRvIGBpZHBmX21iX2ludHJfaW5pdChhZGFwdGVyKWAgYW5kIGZpbmFsbHkgYGlkcGZfbWJfaW50cl9yZXFfaXJxKGFkYXB0ZXIpYC4gVGhpcyBzdWdnZXN0cyB0aGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gQnV0IGNhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBzZXF1ZW5jZSB1c2luZyBTeXprYWxsZXI/XG5cblRoZSBjcml0aWNhbCBwYXJ0IGlzIGdldHRpbmcgYGlkcGZfcHJvYmVgIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgaW5qZWN0aW5nIGEgUENJIGRldmljZSB3aXRoIFN5emthbGxlciwgYnV0IFN5emthbGxlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIGdlbmVyaWMgUENJIGRldmljZSBpbmplY3RvciBjYXBhYmxlIG9mIGVtdWxhdGluZyBhcmJpdHJhcnkgQkFScyBhbmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLCBhbmQgZGVmaW5pdGVseSBubyBgdmhjaWAgZm9yIFBDSSBpbiB0aGUgbWFpbmxpbmUuIEkgcmVtZW1iZXIgdGhlcmUncyBzb21lIGxpbWl0ZWQgUENJIGZ1enppbmcgc3VwcG9ydCBsZXZlcmFnaW5nIGB2ZmlvYCBvciBzaW1pbGFyIG1lY2hhbmlzbXMsIGJ1dCB0aGF0J3MgcHJldHR5IHJlc3RyaWN0ZWQuXG5cbkFoLCBidXQgd2FpdCEgU3l6a2FsbGVyICpjYW4qIHRyaWdnZXIgUENJIHByb2JpbmcgdGhyb3VnaCBgc3lzZnNgIGJ5IHdyaXRpbmcgdG8gYG5ld19pZGAgb3IgYGJpbmRgLiBUaGUgaWRlYSBpcyB0byBiaW5kIGFuIGV4aXN0aW5nIFBDSSBkZXZpY2XigJRwZXJoYXBzIGEgZHVtbXkgZGV2aWNlIG9yIHNvbWUgb3RoZXIgYXZhaWxhYmxlIGRldmljZeKAlHRvIHRoZSBJRFBGIGRyaXZlci4gSWYgc3VjY2Vzc2Z1bCwgYGlkcGZfcHJvYmVgIHdvdWxkIGJlIGludm9rZWQuIEhvd2V2ZXIsIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgc2lkZSBlZmZlY3RzLlxuXG5gaWRwZl9wcm9iZWAgY2FsbHMgcm91dGluZXMgbGlrZSBgcGNpbV9lbmFibGVfZGV2aWNlYCwgYHBjaW1fcmVxdWVzdF9yZWdpb25gLCBhbmQgYGRldm1faW9yZW1hcGAuIFRoZW4sIGl0IHF1ZXVlcyB0aGF0IGBpZHBmX3ZjX2V2ZW50X3Rhc2tgLCB3aGljaCBzdGFydHMgdGhpcyB3aG9sZSBpbml0aWFsaXphdGlvbiBmbG93LiBOZXh0IHN0ZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2YgYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTksIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjozNS4yNjc3NTUxMDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODkzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODkzOlxcdHN0YXRpYyB2b2lkIGlkcGZfaW5pdF9oYXJkX3Jlc2V0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuMTg5NDpcXHR7XFxuMTg5NTpcXHRcXHRzdHJ1Y3QgaWRwZl9yZWdfb3BzICpyZWdfb3BzID0gXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWRldl9vcHMucmVnX29wcztcXG4xODk2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuMTg5NzpcXHRcXHRpbnQgZXJyO1xcbjE4OTg6XFx0XFxuMTg5OTpcXHRcXHRpZHBmX2RldGFjaF9hbmRfY2xvc2UoYWRhcHRlcik7XFxuMTkwMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2cG9ydF9jdHJsX2xvY2spO1xcbjE5MDE6XFx0XFxuMTkwMjpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJEZXZpY2UgSFcgUmVzZXQgaW5pdGlhdGVkXFxcXG5cXFwiKTtcXG4xOTAzOlxcdFxcbjE5MDQ6XFx0XFx0LyogUHJlcGFyZSBmb3IgcmVzZXQgKi9cXG4xOTA1OlxcdFxcdGlmICh0ZXN0X2JpdChJRFBGX0hSX0RSVl9MT0FELCBhZGFwdGVyLVxcdTAwM2VmbGFncykpIHtcXG4xOTA2OlxcdFxcdFxcdHJlZ19vcHMtXFx1MDAzZXRyaWdnZXJfcmVzZXQoYWRhcHRlciwgSURQRl9IUl9EUlZfTE9BRCk7XFxuMTkwNzpcXHRcXHR9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRFBGX0hSX0ZVTkNfUkVTRVQsIGFkYXB0ZXItXFx1MDAzZWZsYWdzKSkge1xcbjE5MDg6XFx0XFx0XFx0Ym9vbCBpc19yZXNldCA9IGlkcGZfaXNfcmVzZXRfZGV0ZWN0ZWQoYWRhcHRlcik7XFxuMTkwOTpcXHRcXG4xOTEwOlxcdFxcdFxcdGlkcGZfaWRjX2lzc3VlX3Jlc2V0X2V2ZW50KGFkYXB0ZXItXFx1MDAzZWNkZXZfaW5mbyk7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdFxcdGlkcGZfdmNfY29yZV9kZWluaXQoYWRhcHRlcik7XFxuMTkxMzpcXHRcXHRcXHRpZiAoIWlzX3Jlc2V0KVxcbjE5MTQ6XFx0XFx0XFx0XFx0cmVnX29wcy1cXHUwMDNldHJpZ2dlcl9yZXNldChhZGFwdGVyLCBJRFBGX0hSX0ZVTkNfUkVTRVQpO1xcbjE5MTU6XFx0XFx0XFx0aWRwZl9kZWluaXRfZGZsdF9tYngoYWRhcHRlcik7XFxuMTkxNjpcXHRcXHR9IGVsc2Uge1xcbjE5MTc6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJVbmhhbmRsZWQgaGFyZCByZXNldCBjYXVzZVxcXFxuXFxcIik7XFxuMTkxODpcXHRcXHRcXHRlcnIgPSAtRUJBRFJRQztcXG4xOTE5OlxcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbjE5MjA6XFx0XFx0fVxcbjE5MjE6XFx0XFxuMTkyMjpcXHRcXHQvKiBXYWl0IGZvciByZXNldCB0byBjb21wbGV0ZSAqL1xcbjE5MjM6XFx0XFx0ZXJyID0gaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHcsIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyZXNldF9yZWcpO1xcbjE5MjQ6XFx0XFx0aWYgKGVycikge1xcbjE5MjU6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJUaGUgZHJpdmVyIHdhcyB1bmFibGUgdG8gY29udGFjdCB0aGUgZGV2aWNlJ3MgZmlybXdhcmUuIENoZWNrIHRoYXQgdGhlIEZXIGlzIHJ1bm5pbmcuIERyaXZlciBzdGF0ZT0gMHgleFxcXFxuXFxcIixcXG4xOTI2OlxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXN0YXRlKTtcXG4xOTI3OlxcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbjE5Mjg6XFx0XFx0fVxcbjE5Mjk6XFx0XFxuMTkzMDpcXHRcXHQvKiBSZXNldCBpcyBjb21wbGV0ZSBhbmQgc28gc3RhcnQgYnVpbGRpbmcgdGhlIGRyaXZlciByZXNvdXJjZXMgYWdhaW4gKi9cXG4xOTMxOlxcdFxcdGVyciA9IGlkcGZfaW5pdF9kZmx0X21ieChhZGFwdGVyKTtcXG4xOTMyOlxcdFxcdGlmIChlcnIpIHtcXG4xOTMzOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBtYWlsYm94OiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4xOTM0OlxcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbjE5MzU6XFx0XFx0fVxcbjE5MzY6XFx0XFxuMTkzNzpcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsoYWRhcHRlci1cXHUwMDNlbWJ4X3dxLCBcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWJ4X3Rhc2ssIDApO1xcbjE5Mzg6XFx0XFxuMTkzOTpcXHRcXHQvKiBJbml0aWFsaXplIHRoZSBzdGF0ZSBtYWNoaW5lLCBhbHNvIGFsbG9jYXRlIG1lbW9yeSBhbmQgcmVxdWVzdFxcbjE5NDA6XFx0XFx0ICogcmVzb3VyY2VzXFxuMTk0MTpcXHRcXHQgKi9cXG4xOTQyOlxcdFxcdGVyciA9IGlkcGZfdmNfY29yZV9pbml0KGFkYXB0ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjozNS4yNjc5Mzc0OTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2OTUxNzMyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgUG90ZW50aWFsIERyaXZlciBSZXNldCBJc3N1ZXMgd2l0aCBhIE5vbi1JRFBGIERldmljZSoqXG5cbkhtbSwgc28gYGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGVgLi4uIHRoYXQncyB3aGVyZSB3ZSdyZSByZWFkaW5nIGZyb20gdGhlIGhhcmR3YXJlIHJlZ2lzdGVyLCByaWdodD8gQW5kIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCAqaXNuJ3QqIGEgcHJvcGVyIElEUEYgZGV2aWNlIOKAkyBzYXksIGEgZHVtbXkgUENJIGRldmljZSBqdXN0IGJvdW5kIHRvIHRoZSBkcml2ZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMgb3Igc29tZSBvdGhlciBzY2VuYXJpbyB3aGVyZSB0aGUgaGFyZHdhcmUgZG9lc24ndCBhZGhlcmUgdG8gdGhlIGV4YWN0IElEUEYgc3RhbmRhcmQg4oCTIHdlbGwsIHRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgZ29pbmcgdG8gdHJpcCB1cC4gSXQncyBleHBlY3RpbmcgYSBzcGVjaWZpYyB2YWx1ZSBmcm9tIHRoYXQgcmVnaXN0ZXIsIGFuZCBpZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBwcm92aWRlIGl0LCB0aGUgY2hlY2sgd2lsbCBvYnZpb3VzbHkgZmFpbC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcuIExldCdzIHN0YXJ0IHdpdGggdmVyaWZ5aW5nIHRoZSBsb2dpYyBvZiBgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTQxLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MjozOC4zMzc0NTc0MTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODU3LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODU3OlxcdHN0YXRpYyBpbnQgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZShzdHJ1Y3QgaWRwZl9odyAqaHcsXFxuMTg1ODpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpZHBmX3Jlc2V0X3JlZyAqcmVzZXRfcmVnKVxcbjE4NTk6XFx0e1xcbjE4NjA6XFx0XFx0c3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlciA9IGh3LVxcdTAwM2ViYWNrO1xcbjE4NjE6XFx0XFx0aW50IGk7XFxuMTg2MjpcXHRcXG4xODYzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAyMDAwOyBpKyspIHtcXG4xODY0OlxcdFxcdFxcdHUzMiByZWdfdmFsID0gcmVhZGwocmVzZXRfcmVnLVxcdTAwM2Vyc3RhdCk7XFxuMTg2NTpcXHRcXG4xODY2OlxcdFxcdFxcdC8qIDB4RkZGRkZGRkYgbWlnaHQgYmUgcmVhZCBpZiBvdGhlciBzaWRlIGhhc24ndCBjbGVhcmVkIHRoZVxcbjE4Njc6XFx0XFx0XFx0ICogcmVnaXN0ZXIgZm9yIHVzIHlldCBhbmQgMHhGRkZGRkZGRiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3JcXG4xODY4OlxcdFxcdFxcdCAqIHRoZSByZWdpc3Rlciwgc28gdHJlYXQgdGhhdCBhcyBpbnZhbGlkLlxcbjE4Njk6XFx0XFx0XFx0ICovXFxuMTg3MDpcXHRcXHRcXHRpZiAocmVnX3ZhbCAhPSAweEZGRkZGRkZGIFxcdTAwMjZcXHUwMDI2IChyZWdfdmFsIFxcdTAwMjYgcmVzZXRfcmVnLVxcdTAwM2Vyc3RhdF9tKSlcXG4xODcxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjE4NzI6XFx0XFxuMTg3MzpcXHRcXHRcXHR1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApO1xcbjE4NzQ6XFx0XFx0fVxcbjE4NzU6XFx0XFxuMTg3NjpcXHRcXHRkZXZfd2FybihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwiRGV2aWNlIHJlc2V0IHRpbWVvdXQhXFxcXG5cXFwiKTtcXG4xODc3OlxcdFxcdC8qIENsZWFyIHRoZSByZXNldCBmbGFnIHVuY29uZGl0aW9uYWxseSBoZXJlIHNpbmNlIHRoZSByZXNldFxcbjE4Nzg6XFx0XFx0ICogdGVjaG5pY2FsbHkgaXNuJ3QgaW4gcHJvZ3Jlc3MgYW55bW9yZSBmcm9tIHRoZSBkcml2ZXIncyBwZXJzcGVjdGl2ZVxcbjE4Nzk6XFx0XFx0ICovXFxuMTg4MDpcXHRcXHRjbGVhcl9iaXQoSURQRl9IUl9SRVNFVF9JTl9QUk9HLCBhZGFwdGVyLVxcdTAwM2VmbGFncyk7XFxuMTg4MTpcXHRcXG4xODgyOlxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTg4MzpcXHR9XFxuMTg4NDpcXHRcXG4xODg1OlxcdC8qKlxcbjE4ODY6XFx0ICogaWRwZl9pbml0X2hhcmRfcmVzZXQgLSBJbml0aWF0ZSBhIGhhcmR3YXJlIHJlc2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjM4LjMzNzY0NzAzMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjEyNzQzMDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJRFBGIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaWRwZl9pbml0X2hhcmRfcmVzZXRgIGZ1bmN0aW9uLCBhbmQgaXQncyBiZWNvbWluZyBjbGVhciBob3cgaXQgd29ya3MuIFRoZSBjcml0aWNhbCBwYXRoIGRlcGVuZHMgb24gdGhlIGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCBmdW5jdGlvbi4gSWYgKnRoYXQqIGNhbGwgZmFpbHMsIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYC1FQlVTWWAuIFRoZSBjb2RlIHRoZW4ganVtcHMgc3RyYWlnaHQgdG8gYHVubG9ja19tdXRleGAgd2l0aG91dCBldmVyIGNhbGxpbmcgYGlkcGZfdmNfY29yZV9pbml0YC4gVGhhdCdzIGEgbWFqb3IgcG9pbnQgLSBgaWRwZl92Y19jb3JlX2luaXRgIGlzIGVmZmVjdGl2ZWx5IHNraXBwZWQgaWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgcGxheSBiYWxsIHdpdGggdGhlIHJlc2V0IGNoZWNrLlxuXG5Ob3csIGNvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2UgYW5kIGhvdyBzeXprYWxsZXIgb3BlcmF0ZXMsIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGhvdXQgYSBwcm9wZXIgSURQRiBlbXVsYXRvciwgYHJlYWRsKHJlc2V0X3JlZy1cdTAwM2Vyc3RhdClgIGlzIGdvaW5nIHRvIGxpa2VseSByZXR1cm4gZWl0aGVyIGAweEZGRkZGRkZGYCAodW5tYXBwZWQgb3IgZHVtbXkgbWVtb3J5KSBvciBzaW1wbHkgYDBgIChhIHplcm9lZCBwYWdlKS4gSWYgaXQncyB6ZXJvLCB0aGUgYml0d2lzZSBBTkQgd2l0aCBgcmVzZXRfcmVnLVx1MDAzZXJzdGF0X21gIHdpbGwgYWxzbyBiZSB6ZXJvLCBhbmQgdGhhdCBsb29wIGlzIGdvaW5nIHRvIHJ1biBmb3IgdGhlIGZ1bGwgMjAwMCBpdGVyYXRpb25zIGJlZm9yZSByZXR1cm5pbmcgYC1FQlVTWWAuIFNhbWUgZ29lcyBmb3IgdGhhdCBgMHhGRkZGRkZGRmAgcmVzdWx0ISBJdCdzIHN0aWxsIGdvaW5nIHRvIGxvb3AuIFRoaXMgbWVhbnMgdGhhdCB1bmRlciB2aXJ0dWFsaXphdGlvbiwgYGlkcGZfdmNfY29yZV9pbml0YCBpcyBhbG1vc3QgY2VydGFpbmx5IHVucmVhY2hhYmxlIHdpdGhvdXQgc29tZSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiB0byBtYWtlIHRoZSByZXNldCBjaGVjayBwYXNzLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBpZHBmX3ZjX2NvcmVfaW5pdGAgdGhlICpvbmx5KiBlbnRyeSBwb2ludCB0byBgaWRwZl9tYl9pbnRyX3JlcV9pcnFgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgY2FsbGluZyB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGJhY2tkb29yIGludG8gdGhhdCBjcml0aWNhbCBhcmVhIG9mIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMzMCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjQzLjU1MDM5MzQzNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMzAwOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlkcGZfbWJfaW50cl9yZXFfaXJxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0xMTU9c3RhdGljIHZvaWQgaWRwZl9tYl9pcnFfZW5hYmxlKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTI1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxMjY6ICogaWRwZl9tYl9pbnRyX3JlcV9pcnEgLSBSZXF1ZXN0IGlycSBmb3IgdGhlIG1haWxib3ggaW50ZXJydXB0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEyNy0gKiBAYWRhcHRlcjogYWRhcHRlciBzdHJ1Y3R1cmUgdG8gcGFzcyB0byB0aGUgbWFpbGJveCBpcnEgaGFuZGxlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xMjgtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjEyOTpzdGF0aWMgaW50IGlkcGZfbWJfaW50cl9yZXFfaXJxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTEzMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTU1PXN0YXRpYyBpbnQgaWRwZl9tYl9pbnRyX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE2MDpcXHRyZXR1cm4gaWRwZl9tYl9pbnRyX3JlcV9pcnEoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE2MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjQzLjgwMjcwMjgxNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM1ODM1MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBJbnRlcnJ1cHQgSGFuZGxpbmcgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2tpbmcgZG93biB0aGUgb3JpZ2lucyBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGxldCdzIGNhbGwgaXQgdGhlIFwiVGFyZ2V0IEZ1bmN0aW9uLlwiIEkgc2VlIGl0J3Mgb25seSBjYWxsZWQgZnJvbSBgaWRwZl9tYl9pbnRyX2luaXRgLiBUaGF0J3MgYSBwcmV0dHkgbGltaXRlZCBzY29wZSwgd2hpY2ggaXMgaGVscGZ1bC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGBpZHBmX21iX2ludHJfaW5pdGAgaXMgY29taW5nIGZyb20uIFRoZSBjb2RlIHNob3dzIG1lIHRoYXQgYGlkcGZfbWJfaW50cl9pbml0YCBpdHNlbGYgaXMgb25seSBjYWxsZWQgZnJvbSBgaWRwZl9pbnRyX3JlcWAuIFNvLCBJIGhhdmUgYSBjbGVhciwgY29uY2lzZSBjYWxsIHN0YWNrOiB0aGUgVGFyZ2V0IEZ1bmN0aW9uIGlzIGluaXRpYWxpemVkIGJ5IGBpZHBmX21iX2ludHJfaW5pdGAsIGFuZCBgaWRwZl9tYl9pbnRyX2luaXRgIGlzIGNhbGxlZCBieSBgaWRwZl9pbnRyX3JlcWAuIFRoaXMgZ2l2ZXMgbWUgYSBmYWlybHkgbmFycm93IHZpZXcgb2YgaG93IHRoZSBUYXJnZXQgRnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgZnJhbWV3b3JrLiBOb3cgSSBjYW4gYnVpbGQgbXkgbWVudGFsIG1vZGVsLCB0aGlzIGlzIHRoZSBwYXRoIGFuZCBzY29wZSBvZiBteSBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDIzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6NDcuMDM4NTQwMTM5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg0MDcyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWRwZl9tYl9pbnRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jPTEyOT1zdGF0aWMgaW50IGlkcGZfbWJfaW50cl9yZXFfaXJxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTUxLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzoxNTI6ICogaWRwZl9tYl9pbnRyX2luaXQgLSBJbml0aWFsaXplIHRoZSBtYWlsYm94IGludGVycnVwdFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTMtICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlIHRvIHN0b3JlIHRoZSBtYWlsYm94IHZlY3RvclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0xNTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE1NTpzdGF0aWMgaW50IGlkcGZfbWJfaW50cl9pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MzA0PWludCBpZHBmX2ludHJfcmVxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtNDE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYzo0MTc6XFx0ZXJyID0gaWRwZl9tYl9pbnRyX2luaXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTQxOC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0Mjo0Ny4xNDY5NTM0ODFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2MDA2NjY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIEdyYXBoKipcblxuQWxyaWdodCwgbGV0IG1lIHNlZS4uLiBzbywgYGlkcGZfaW50cl9yZXFgLCB0aGF0IGludGVycnVwdCByZXF1ZXN0IGZ1bmN0aW9uLCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBpZHBmX3ZjX2NvcmVfaW5pdGAuIFRoYXQncyBpbXBvcnRhbnQuIEl0J3MgYSBrZXkgcGllY2Ugb2YgaW5pdGlhbGl6YXRpb24sIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIHdpdGhpbiB0aGF0IGNvbnRleHQgZ2l2ZXMgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbi4gS25vd2luZyB0aGUgY2FsbCBncmFwaCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCwgYW5kIHRoaXMgc2ltcGxlIG9ic2VydmF0aW9uIGFscmVhZHkgZm9jdXNlcyBteSBhdHRlbnRpb24gb24gdGhlIHN0YXJ0dXAgc2VxdWVuY2Ugb2YgdGhlIHZpcnR1YWwgY2hhbm5lbCBjb3JlLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHdoYXQgZXhhY3RseSBoYXBwZW5zIGR1cmluZyB0aGF0IGBpZHBmX3ZjX2NvcmVfaW5pdGAgdG8gdW5kZXJzdGFuZCAqd2h5KiBgaWRwZl9pbnRyX3JlcWAgaXMgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGl0cyBzaWduaWZpY2FuY2UgaXMuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHNldHRpbmcgdXAgaW50ZXJydXB0IGhhbmRsaW5nIGZvciB0aGlzIHZpcnR1YWwgY2hhbm5lbC4gTWFrZXMgaXQgYSBmb2NhbCBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgaW50ZXJydXB0IG1hbmFnZW1lbnQuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0Mjo1MC4yMDcwMjI2NzhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTA5NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlkcGZfaW50cl9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg9MTA0OT12b2lkIGlkcGZfdmZfZGV2X29wc19pbml0KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oOjEwNTA6aW50IGlkcGZfaW50cl9yZXEoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtMTA1MS12b2lkIGlkcGZfaW50cl9yZWwoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MjU0PWludCBpZHBmX3JlcV9yZWxfdmVjdG9yX2luZGV4ZXMoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYy0yOTgtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjI5OTogKiBpZHBmX2ludHJfcmVxIC0gUmVxdWVzdCBpbnRlcnJ1cHQgY2FwYWJpbGl0aWVzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTMwMC0gKiBAYWRhcHRlcjogYWRhcHRlciB0byBlbmFibGUgaW50ZXJydXB0cyBvblxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTMwMy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MzA0OmludCBpZHBmX2ludHJfcmVxKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTMwNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYz0zNDgwPWludCBpZHBmX3ZjX2NvcmVfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzU4Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNTg3OlxcdGVyciA9IGlkcGZfaW50cl9yZXEoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzU4OC1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjUwLjI5MzUzNjg4MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQ1MzIxMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIENhbGwgR3JhcGgqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIHNvLCBgaWRwZl92Y19jb3JlX2luaXRgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSBgaWRwZl9pbml0X2hhcmRfcmVzZXRgLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCBhIGhhcmQgcmVzZXQgcHJvY2VkdXJlLiBObyBkaXJlY3QsIGluZGVwZW5kZW50IGNhbGxzIHRvIGBpZHBmX3ZjX2NvcmVfaW5pdGAgZnJvbSBlbHNld2hlcmUuIFRoaXMgc2ltcGxpZmllcyBkZWJ1Z2dpbmcgYW5kIHVuZGVyc3RhbmRpbmcgZXhlY3V0aW9uIGZsb3cgYXQgZmlyc3QgZ2xhbmNlLCBidXQgYWxzbyBtZWFucyBhbnkgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMgYXJlIGFsd2F5cyB0aWVkIHRvIHJlc2V0IGlzc3Vlcy4gSSBuZWVkIHRvIGtlZXAgdGhpcyByZWxhdGlvbnNoaXAgaW4gbWluZCBhcyBJIGRpZyBkZWVwZXIuIFRoaXMgc3VnZ2VzdHMgYSB2ZXJ5IHBhcnRpY3VsYXIgbGlmZWN5Y2xlIGZvciB0aGUgY29yZSwgYW5kIGRldmlhdGlvbiBtaWdodCBpbmRpY2F0ZSBhIHNlcmlvdXMgcHJvYmxlbS4gSXQgaW1wbGllcyBhIGNsZWFuIHN0YXRlIGlzIHJlcXVpcmVkLCBvciBlbHNlIHlvdSBzaG91bGQgbmV2ZXIgY2FsbCB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6NTMuMDM4ODY0OTEyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc0NTk4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZHBmX3ZjX2NvcmVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM9MTg5Mz1zdGF0aWMgdm9pZCBpZHBmX2luaXRfaGFyZF9yZXNldChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDEtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jOjE5NDI6XFx0ZXJyID0gaWRwZl92Y19jb3JlX2luaXQoYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX2xpYi5jLTE5NDMtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM9MzQzMz1zdGF0aWMgaW50IGlkcGZfdnBvcnRfcGFyYW1zX2J1Zl9hbGxvYyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYzozNDY4OiAqIGlkcGZfdmNfY29yZV9pbml0IC0gSW5pdGlhbGl6ZSBzdGF0ZSBtYWNoaW5lIGFuZCBnZXQgZHJpdmVyIHNwZWNpZmljXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmMtMzQ2OS0gKiByZXNvdXJjZXNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5jLTM0NzktICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmM6MzQ4MDppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdmlydGNobmwuYy0zNDgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oPTEwMj12b2lkIGlkcGZfZGVpbml0X2RmbHRfbWJ4KHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92aXJ0Y2hubC5oOjEwMzppbnQgaWRwZl92Y19jb3JlX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZpcnRjaG5sLmgtMTA0LXZvaWQgaWRwZl92Y19jb3JlX2RlaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDU6NDI6NTMuMTAxNjE2NzQ4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzU3NjAyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIHRoZSAqb25seSogd2F5IHRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlIEknbSBpbnRlcmVzdGVkIGluIGlzIHRocm91Z2ggYGlkcGZfaW5pdF9oYXJkX3Jlc2V0YC4gVGhhdCBmdW5jdGlvbiBoYXMgYSBkZXBlbmRlbmN5IG9uIGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCBzdWNjZWVkaW5nIGZpcnN0LCBhbmQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZWFkIGEgc3BlY2lmaWMgdmFsdWUgZnJvbSBhIGhhcmR3YXJlIHJlZ2lzdGVyLlxuXG5Ob3csIEknbSB0aGlua2luZywgc2luY2Ugc3l6a2FsbGVyIGRvZXNuJ3QgZW11bGF0ZSBJRFBGIGhhcmR3YXJlLCB0aGlzIHBhdGggaXMgcHJhY3RpY2FsbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBCdXQgaG9sZCBvbiwgaXMgdGhlcmUgKmFueSogcmVtb3RlIGNoYW5jZSBgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZWAgYWN0dWFsbHkgc3VjY2VlZHM/IExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuSWYgYHJlYWRsKHJlc2V0X3JlZy1cdTAwM2Vyc3RhdClgIHJldHVybnMgMCBhbmQgYHJlc2V0X3JlZy1cdTAwM2Vyc3RhdF9tYCBpcyBub24temVybywgdGhlbiB0aGUgYml0d2lzZSBBTkQgb3BlcmF0aW9uIGByZWdfdmFsIFx1MDAyNiByZXNldF9yZWctXHUwMDNlcnN0YXRfbWAgaXMgZ29pbmcgdG8gYmUgMCwgc28gaXQnbGwgbG9vcCBhbmQgcmV0dXJuIGAtRUJVU1lgLiBBbmQgaWYgYHJlYWRsYCByZXR1cm5zIGAweEZGRkZGRkZGYCwgc2FtZSBkZWFsLiBMb29wIGFuZCByZXR1cm4gYC1FQlVTWWAuIFNvIHRoYXQgaXMgbm90IGhlbHBmdWwuXG5cbkhvd2V2ZXIsIGlmIGByZWFkbGAgcmV0dXJucyBzb21ldGhpbmcgY29tcGxldGVseSByYW5kb20sIGxpa2UsIHNheSwgaWYgdGhlIG1lbW9yeSByZWdpb24gaXMgbWFwcGVkIHRvIGFub3RoZXIgZGV2aWNlIG9yIHJhbmRvbSBtZW1vcnksIGl0ICptaWdodCogc3VjY2VlZC4gQnV0IHN5emthbGxlciB0eXBpY2FsbHkgZG9lc24ndCBtYXAgUENJIEJBUnMgdG8gcmFuZG9tLCBjaGFuZ2luZyBtZW1vcnkgb3IgbWVtb3J5IHdpdGggc3BlY2lmaWMgYml0cyBzZXQgdW5sZXNzIGl0J3MgZGVzaWduZWQgdG8gZnV6eiB0aGF0IHNwZWNpZmljIGFyZWEuIEhtbS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrLiBJZiBgcmVhZGxgIHJldHVybnMgYSB2YWx1ZSBzdWNoIHRoYXQgYChyZWdfdmFsIFx1MDAyNiByZXNldF9yZWctXHUwMDNlcnN0YXRfbSkgPT0gMGAsIGl0IGxvb3BzLCBubyBzdWNjZXNzLiBCdXQgaWYgYChyZWdfdmFsIFx1MDAyNiByZXNldF9yZWctXHUwMDNlcnN0YXRfbSkgIT0gMGAgYW5kIGByZWdfdmFsYCBpcyBub3QgYDB4RkZGRkZGRkZgLCBpdCAqcmV0dXJucyAwKiwgbWVhbmluZyBzdWNjZXNzLiBUaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgYHJlc2V0X3JlZy1cdTAwM2Vyc3RhdF9tYC4gV2hhdCBleGFjdGx5IGlzIHRoYXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYml0cyBhcmUgYmVpbmcgbWFza2VkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgZmVhc2libGUgc2NlbmFyaW8gaGVyZSB3aGVyZSB0aGlzIGNvZGUgcGF0aCBjb3VsZCBiZSB0cmlnZ2VyZWQgd2l0aCBteSBmdXp6ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjY4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA1OjQyOjU4LjkzNzM4NDcyM1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0MzY3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnN0YXRfbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaD0xNTc9c3RydWN0IGlkcGZfbmV0ZGV2X3ByaXYge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtMTcyLSAqIEByc3RhdDogUmVzZXQgc3RhdHVzIHJlZ2lzdGVyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmg6MTczOiAqIEByc3RhdF9tOiBSZXNldCBzdGF0dXMgbWFza1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oLTE3NC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaD0xNzU9c3RydWN0IGlkcGZfcmVzZXRfcmVnIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaC0xNzYtXFx0dm9pZCBfX2lvbWVtICpyc3RhdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaDoxNzc6XFx0dTMyIHJzdGF0X207XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgtMTc4LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZGV2LmM9MTQ0PXN0YXRpYyB2b2lkIGlkcGZfcmVzZXRfcmVnX2luaXQoc3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9kZXYuYy0xNDYtXFx0YWRhcHRlci1cXHUwMDNlcmVzZXRfcmVnLnJzdGF0ID0gaWRwZl9nZXRfcnN0YXRfcmVnX2FkZHIoYWRhcHRlciwgUEZHRU5fUlNUQVQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9kZXYuYzoxNDc6XFx0YWRhcHRlci1cXHUwMDNlcmVzZXRfcmVnLnJzdGF0X20gPSBQRkdFTl9SU1RBVF9QRlJfU1RBVEVfTTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfZGV2LmMtMTQ4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9saWIuYz0xODU3PXN0YXRpYyBpbnQgaWRwZl9jaGVja19yZXNldF9jb21wbGV0ZShzdHJ1Y3QgaWRwZl9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTg2OS1cXHRcXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmM6MTg3MDpcXHRcXHRpZiAocmVnX3ZhbCAhPSAweEZGRkZGRkZGIFxcdTAwMjZcXHUwMDI2IChyZWdfdmFsIFxcdTAwMjYgcmVzZXRfcmVnLVxcdTAwM2Vyc3RhdF9tKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbGliLmMtMTg3MS1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92Zl9kZXYuYz0xNDM9c3RhdGljIHZvaWQgaWRwZl92Zl9yZXNldF9yZWdfaW5pdChzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZmX2Rldi5jLTE0NS1cXHRhZGFwdGVyLVxcdTAwM2VyZXNldF9yZWcucnN0YXQgPSBpZHBmX2dldF9yc3RhdF9yZWdfYWRkcihhZGFwdGVyLCBWRkdFTl9SU1RBVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3ZmX2Rldi5jOjE0NjpcXHRhZGFwdGVyLVxcdTAwM2VyZXNldF9yZWcucnN0YXRfbSA9IFZGR0VOX1JTVEFUX1ZGUl9TVEFURV9NO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl92Zl9kZXYuYy0xNDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0Mjo1OS4wMDg4Mjk4MzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMzMzI4OTcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBzeXprYWxsZXIgY2FuIHJlYWNoIGEgc3BlY2lmaWMgcGFydCBvZiBpdCwgc3BlY2lmaWNhbGx5IGEgcmVzZXQgZmFpbHVyZSBwYXRoLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGlzOiBpZiBzeXprYWxsZXIgYmluZHMgYSBkcml2ZXIgdG8gYSBkdW1teSBkZXZpY2UsIHRoZSBtZW1vcnkgbWFwcGVkIGJ5IGBkZXZtX2lvcmVtYXBgIOKAkyB0aGF0J3MgcG90ZW50aWFsbHkganVzdCB6ZXJvZWQgbWVtb3J5LiBJZiBgcmVhZGxgIHJldHVybnMgemVybyBmcm9tIHRoYXQgemVyb2VkIHJlZ2lvbiwgdGhlIHN1YnNlcXVlbnQgYml0d2lzZSBBTkQgb3BlcmF0aW9uIChgcmVnX3ZhbCBcdTAwMjYgcmVzZXRfcmVnLVx1MDAzZXJzdGF0X21gKSB3aWxsIHJlc3VsdCBpbiB6ZXJvLiBUaGF0LCBpbiB0dXJuLCBjYXVzZXMgYSBsb29wLCBhbmQgZXZlbnR1YWxseSBhIGAtRUJVU1lgIGVycm9yIGlzIHJldHVybmVkLiBDb25zZXF1ZW50bHksIHRoZSBgaWRwZl92Y19jb3JlX2luaXRgIGZ1bmN0aW9uICp3b24ndCogYmUgY2FsbGVkLiBUaGVyZWZvcmUsIGBpZHBmX21iX2ludHJfcmVxX2lycWAgaXMsIHByYWN0aWNhbGx5LCB1bnJlYWNoYWJsZS5cblxuQnV0IHdhaXQsIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2liaWxpdGllcy4gV2hhdCBpZiBzeXprYWxsZXIgZW1wbG95cyBmYXVsdCBpbmplY3Rpb24gb3Igc29tZSBjbGV2ZXIgbWVtb3J5IG1hcHBpbmcgdHJpY2sgdG8gZm9yY2UgYHJlYWRsYCB0byByZXR1cm4gYSBub24temVybyB2YWx1ZT8gSG93ZXZlciwgc3l6a2FsbGVyICpyYXJlbHkqIGRvZXMgdGhhdCBmb3IgUENJIEJBUnMgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpY2FsbHkgY3JhZnRlZCBwc2V1ZG8tZGV2aWNlIGludm9sdmVkLiBBbHNvLCByZW1lbWJlciwgdGhpcyBpcyBhIG1lbW9yeSBsZWFrIGZpeCAqd2l0aGluKiBhbiBlcnJvciBoYW5kbGluZyBwYXRoIChgaWYgKGVycilgIGFmdGVyIGBwY2lfcmVxdWVzdF9pcnFgKS4gRXZlbiBpZiwgYnkgc29tZSB3aWxkIGNoYW5jZSwgd2UgY291bGQgdHJpZ2dlciBpdCwgdGhpcyBpcyBhIGhpZ2hseSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuIEl0J3Mgbm90IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQncyBnZW5lcmFsbHkgdGVzdGFibGUgaW4gc3l6a2FsbGVyJ3Mgc3RhbmRhcmQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHR5cGljYWxseSB2aXJ0dWFsaXplZC5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIGFuZCB0aGUgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgZGVwZW5kZW5jeSwgSSdtIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQncyBhbiB1bnJlYWNoYWJsZSwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHBhdGggd2l0aGluIHRoZSBjb25zdHJhaW50cyBvZiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0J3Mgbm90IGEgZnJ1aXRmdWwgYXZlbnVlIGZvciBmdXp6aW5nLCBhdCBsZWFzdCBpbiB0aGUgZGVmYXVsdCBzeXprYWxsZXIgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQ0LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwNTo0MzowNS4zNDIxMjMyMTZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIGBpZHBmX21iX2ludHJfcmVxX2lycWAgd2l0aGluIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIFBDSSBkcml2ZXIuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiBhZnRlciBhIHN1Y2Nlc3NmdWwgaGFyZHdhcmUgcmVzZXQgY2hlY2sgKGBpZHBmX2NoZWNrX3Jlc2V0X2NvbXBsZXRlYCksIHdoaWNoIHJlcXVpcmVzIHJlYWRpbmcgc3BlY2lmaWMgdmFsdWVzIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzIChQQ0kgQkFScykuIFNpbmNlIHN5emthbGxlciBhbmQgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpIGRvIG5vdCBlbXVsYXRlIElEUEYgaGFyZHdhcmUsIHRoZSByZXNldCBjaGVjayB3aWxsIGZhaWwsIG1ha2luZyB0aGlzIGNvZGUgcGF0aCB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgYGlkcGZfbWJfaW50cl9yZXFfaXJxYCB3aXRoaW4gdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgUENJIGRyaXZlci4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uIGFmdGVyIGEgc3VjY2Vzc2Z1bCBoYXJkd2FyZSByZXNldCBjaGVjayAoYGlkcGZfY2hlY2tfcmVzZXRfY29tcGxldGVgKSwgd2hpY2ggcmVxdWlyZXMgcmVhZGluZyBzcGVjaWZpYyB2YWx1ZXMgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMgKFBDSSBCQVJzKS4gU2luY2Ugc3l6a2FsbGVyIGFuZCB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkgZG8gbm90IGVtdWxhdGUgSURQRiBoYXJkd2FyZSwgdGhlIHJlc2V0IGNoZWNrIHdpbGwgZmFpbCwgbWFraW5nIHRoaXMgY29kZSBwYXRoIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownxgbs[1] Phase: Running StartedAt: 2026-07-03 05:43:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownxgbs[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-03 05:43:16 +0000 UTC FinishedAt: 2026-07-03 05:43:22 +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,}