Name: series-workflows4ptn Phase: Failed StartedAt: 2026-06-23 06:25:27 +0000 UTC FinishedAt: 2026-06-23 06:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4ptn[0] Phase: Succeeded StartedAt: 2026-06-23 06:25:27 +0000 UTC FinishedAt: 2026-06-23 06:42:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4ptn[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 06:25:27 +0000 UTC FinishedAt: 2026-06-23 06:42:19 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wIGluIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEJyb2FkY29tIFNvQ3MgKGUuZy4sIFJhc3BiZXJyeSBQaSA0KSBhbmQgcmVsaWVzIG9uIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VICYjMzk7dmlydCYjMzk7IG1hY2hpbmVzKSB1c2VkIGZvciBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBhIHRyaXZpYWwgZXJyb3ItcGF0aCBmaXggZm9yIGhhcmR3YXJlIHRpbWVvdXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI0ZmI2NzRlMGU0NzBlYTQ0MzI2NWUyY2FiNWQ4MGZlNTRlNmI0YzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwNjozODozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jXG5pbmRleCBhNGUwZDVhNjgyNjg3NS4uOTJiNTk5N2QwMGIyNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmNcbkBAIC00MzksMTAgJiM0Mzs0MzksMTIgQEAgc3RhdGljIGludCBiY21nZW5ldF9taWlfd2FpdCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdiA9IHdhaXRfZnVuY19kYXRhO1xuIFxuLVx0d2FpdF9ldmVudF90aW1lb3V0KHByaXYtXHUwMDNld3EsXG4tXHRcdFx0ICAgIShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXG4tXHRcdFx0ICAgXHUwMDI2IE1ESU9fU1RBUlRfQlVTWSksXG4tXHRcdFx0ICAgSFogLyAxMDApO1xuJiM0MztcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KHByaXYtXHUwMDNld3EsXG4mIzQzO1x0XHRcdFx0IShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXG4mIzQzO1x0XHRcdFx0XHUwMDI2IE1ESU9fU1RBUlRfQlVTWSksXG4mIzQzO1x0XHRcdFx0SFogLyAxMDApKVxuJiM0MztcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wIGluIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEJyb2FkY29tIFNvQ3MgKGUuZy4sIFJhc3BiZXJyeSBQaSA0KSBhbmQgcmVsaWVzIG9uIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VICYjMzk7dmlydCYjMzk7IG1hY2hpbmVzKSB1c2VkIGZvciBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBhIHRyaXZpYWwgZXJyb3ItcGF0aCBmaXggZm9yIGhhcmR3YXJlIHRpbWVvdXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjRmYjY3NGUwZTQ3MGVhNDQzMjY1ZTJjYWI1ZDgwZmU1NGU2YjRjMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDA2OjM4OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYwppbmRleCBhNGUwZDVhNjgyNjg3NS4uOTJiNTk5N2QwMGIyNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jCkBAIC00MzksMTAgJiM0Mzs0MzksMTIgQEAgc3RhdGljIGludCBiY21nZW5ldF9taWlfd2FpdCh2b2lkICp3YWl0X2Z1bmNfZGF0YSkKIHsKIAlzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdiA9IHdhaXRfZnVuY19kYXRhOwogCi0Jd2FpdF9ldmVudF90aW1lb3V0KHByaXYtJmd0O3dxLAotCQkJICAgIShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpCi0JCQkgICAmYW1wOyBNRElPX1NUQVJUX0JVU1kpLAotCQkJICAgSFogLyAxMDApOwomIzQzOwlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChwcml2LSZndDt3cSwKJiM0MzsJCQkJIShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpCiYjNDM7CQkJCSZhbXA7IE1ESU9fU1RBUlRfQlVTWSksCiYjNDM7CQkJCUhaIC8gMTAwKSkKJiM0MzsJCXJldHVybiAtRVRJTUVET1VUOwomIzQzOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFN5emthbGxlciBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBgYmNtbWlpLmNgIHdpdGhpbiB0aGUgQnJvYWRjb20gR0VORVQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGEgdGltZW91dCBoYW5kbGluZyBjaGFuZ2UgaW4gYGJjbWdlbmV0X21paV93YWl0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBkcml2ZXIgaXMgZXZlbiAqcmVhY2hhYmxlKiBmb3IgZnV6emluZywgYW5kIGlmIHNvLCBob3cuIEl0JiMzOTtzIGEgQnJvYWRjb20gR0VORVQsIHdoaWNoIEkga25vdyBpcyBhbiBFdGhlcm5ldCBNQUMgdHlwaWNhbGx5IHVzZWQgaW4gQnJvYWRjb20gc2V0LXRvcCBib3ggU29DcyBhbmQgdGhlIFJhc3BiZXJyeSBQaSA0IOKAkyBzbyB0aGF04oCZcyBteSBzdGFydGluZyBwb2ludC4KCkZpcnN0LCB0aGUgdmlydHVhbGl6YXRpb24gYW5nbGUuIENhbiBJIGdldCB0aGlzIHRvIHJ1biB1bmRlciBRRU1VPyBIbW0sIFFFTVUgaGFzIHRoZSBgYmNtMjgzOGAgbW9kZWwsIGJ1dCB1c3VhbGx5IEdFTkVUIGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYgUUVNVSBzZXR1cHMsIHJpZ2h0PyBNYXliZSwganVzdCBtYXliZSwgaXTigJlzIHByZXNlbnQgbm93ISBIb2xkIG9u4oCmIHdhc24mIzM5O3QgdGhlcmUgYSBgcmFzcGk0YmAgUUVNVSBtYWNoaW5lPyBUaGF0ICpjb3VsZCogZW11bGF0ZSBHRU5FVC4gVGhlIGlzc3VlIGlzIHN5emthbGxlciBpcyB1c3VhbGx5IHJ1biBvbiB4ODZfNjQgb3IgYXJtNjQgVk1zLCB0aG91Z2guCgpSaWdodCwgc28gdGhhdCYjMzk7cyB0aGUgb2J2aW91cyByb3V0ZS4gV2hhdCBhYm91dCBsZXNzIGNvbW1vbiBvcHRpb25zPyBMZXQmIzM5O3MgcnVsZSB0aGVtIG91dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGEgdHJpY2suIElzIHRoZXJlIGFueSBQQ0kgb3IgVVNCIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIEdFTkVUPyBTZWVtcyB1bmxpa2VseSBhcyBpdCYjMzk7cyBhIHBsYXRmb3JtIGRldmljZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBwcm9iZWQuIFRoYXQgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byBob3cgSSBtaWdodCBnZXQgdGhlIGRyaXZlciBsb2FkZWQgYW5kIGFjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9NDQwMT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY21nZW5ldF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy00NDExLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjQ0MTI6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihiY21nZW5ldF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy00NDEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlBsYXRmb3JtIERyaXZlciBBbmFseXNpcyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwbGF0Zm9ybSBkcml2ZXIuIEZpcnN0LCBhbmQgYWx3YXlzLCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb21wYXRpYmxlIHN0cmluZ3MuIFRoYXQmIzM5O3MgdGhlIGJlZHJvY2sgb2YgaG93IHRoaXMgZHJpdmVyIGlkZW50aWZpZXMgaXRzZWxmIGFuZCBob3cgdGhlIHN5c3RlbSBrbm93cyBpdCBzaG91bGQgbWFuYWdlIGEgc3BlY2lmaWMgZGV2aWNlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHN0cmluZ3MgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgc2lsaWNvbiBpdCYjMzk7cyBtZWFudCB0byBoYW5kbGUsIGlmIGl0IGlzIHVzaW5nIGFueSBjdXN0b20gbmFtaW5nIHNjaGVtZXMsIGFuZCBpZiB0aGVyZSBhcmUga25vd24gaXNzdWVzIHdpdGggYW55IG9mIHRoZSB2ZW5kb3Igc3BlY2lmaWMgbmFtaW5nIHNjaGVtZXMuIEZyb20gdGhlcmUgd2UgY2FuIG1vdmUgdG8gbG9va2luZyBhdCB0aGUgZGV2aWNlIHRyZWUgYmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuY29tcGF0aWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTM5NTY9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmNtZ2VuZXRfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6Mzk1NzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDticmNtLGdlbmV0LXYxXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnYxX3BsYXRfZGF0YSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozOTU4Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2JyY20sZ2VuZXQtdjJcJiMzNDssIC5kYXRhID0gXHUwMDI2djJfcGxhdF9kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NTk6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YnJjbSxnZW5ldC12M1wmIzM0OywgLmRhdGEgPSBcdTAwMjZ2M19wbGF0X2RhdGEgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6Mzk2MDpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDticmNtLGdlbmV0LXY0XCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnY0X3BsYXRfZGF0YSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozOTYxOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2JyY20sZ2VuZXQtdjVcJiMzNDssIC5kYXRhID0gXHUwMDI2djVfcGxhdF9kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NjI6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YnJjbSxiY20yNzExLWdlbmV0LXY1XCYjMzQ7LCAuZGF0YSA9IFx1MDAyNmJjbTI3MTFfcGxhdF9kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NjM6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YnJjbSxiY203NzEyLWdlbmV0LXY1XCYjMzQ7LCAuZGF0YSA9IFx1MDAyNmJjbTc3MTJfcGxhdF9kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTM5NjQtXHR7IH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBCcm9hZGNvbSBHRU5FVCBQbGF0Zm9ybSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGxhdGZvcm0gZHJpdmVyIGZvciBCcm9hZGNvbSBHRU5FVC4gQ2FuIEkgZXZlbiAqdGhpbmsqIGFib3V0IGZ1enppbmcgdGhpcyB3aXRoIFN5emthbGxlcj8gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGNhbiBTeXprYWxsZXIgaW5qZWN0IHBsYXRmb3JtIGRldmljZXM/IEkga25vdyBpdCBjYW4sIHRocm91Z2ggYHN5el9kZXZfY3JlYXRlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgKmlmKiB0aGUga2VybmVsIHN1cHBvcnRzIGl0LiBCdXQgcGxhdGZvcm0gZGV2aWNlcyB1c3VhbGx5IGNvbWUgZnJvbSBEZXZpY2UgVHJlZSBvciBBQ1BJLCByaWdodD8gU3l6a2FsbGVyIGhhcyBzb21lIG1lY2hhbmlzbXMgZm9yIGluamVjdGluZyB0aGVtLCBlaXRoZXIgd2l0aCBwc2V1ZG8tc3lzY2FsbHMgb3IgY29uZmlndXJhdGlvbnMsIGJ1dCBpdOKAmXMgcmFyZWx5IHN0cmFpZ2h0Zm9yd2FyZCwgZXNwZWNpYWxseSBmb3IgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBvbiBTeXN0ZW0tb24tQ2hpcHMuIFRoZXkgbmVlZCBleHBsaWNpdCB0YXJnZXRpbmcgb3IgYSBnZW5lcmljIGluc3RhbnRpYXRpb24gbWV0aG9kLgoKSG1tLCBsZXQgbWUgY2hlY2vigKYgZG9lcyBTeXprYWxsZXIgaGF2ZSBhbnl0aGluZyBuYW1lZCBgc3l6X2dlbmV0Xy4uLmA/IE5vcGUuIFRoYXQmIzM5O3MgYSBkZWFkIGVuZC4KCk5vdywgY2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJZiB0aGUga2VybmVsIGhhcyBgQ09ORklHX0JDTUdFTkVUYCBlbmFibGVkLCBhbmQgU3l6a2FsbGVyIHJ1bnMgb24gYW4gQVJNNjQgVk0gd2l0aCBhIGRldmljZSB0cmVlIHRoYXQgaW5jbHVkZXMgdGhlIEJyb2FkY29tIGRldmljZSwgdGhlbiAqbWF5YmUqLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSB0eXBpY2FsIHNjZW5hcmlvLCBTeXprYWxsZXIgb2Z0ZW4gcnVucyBpbiBnZW5lcmljIFZNcyBsaWtlIHg4Nl82NCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4KCkJ1dCBob2xkIG9uLCBTeXprYWxsZXIgKmRvZXMqIGZ1enogc29tZSBwbGF0Zm9ybSBkcml2ZXJzIGlmIHRoZXkgY2FuIGJlIGluc3RhbnRpYXRlZC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNr4oCmIGRvZXMgaXQgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgPyBObywgbm90aGluZyBsaWtlIHRoYXQsIGJ1dCBtYXliZSB0aGVyZSYjMzk7cyBhIHdvcmthcm91bmQuCgpJIG5lZWQgdG8gbG9vayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBjbHVlcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBjb25maWcgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJDTUdFTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTYzPWNvbmZpZyBCQ002M1hYX0VORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzo3Mjpjb25maWcgQkNNR0VORVRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctNzMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBHRU5FVCBpbnRlcm5hbCBNQUMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFB1cnBvc2Ugb2YgYGJjbWdlbmV0X21paV93YWl0YCoqCgpPa2F5LCBzbyB0aGUgdGhvdWdodCBwcm9jZXNzIGlzIHplcm9pbmcgaW4gb24gYGJjbWdlbmV0X21paV93YWl0YC4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uJiMzNDsgU2luY2UgSSYjMzk7bSBmYW1pbGlhciB3aXRoIEJyb2FkY29tJiMzOTtzIEV0aGVybmV0IGltcGxlbWVudGF0aW9ucyBhbmQgbGlrZWx5IHRoZSB1bmRlcmx5aW5nIE1JSS9HTUlJL1JHTUlJIGludGVyZmFjZSBudWFuY2VzLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBQSFkvTUFDIGludGVyYWN0aW9uLiBXaGF0IHNwZWNpZmljIHNpdHVhdGlvbnMgd291bGQgbmVjZXNzaXRhdGUgYSB3YWl0PyBJcyBpdCBhIGRlbGF5IGZvciBQSFkgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgcG93ZXItb24/IFBlcmhhcHMgd2FpdGluZyBmb3IgYSBsaW5rIGVzdGFibGlzaG1lbnQgc2lnbmFsIHRvIHN0YWJpbGl6ZT8gT3IgbWF5YmUgaXQmIzM5O3MgYSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHdpdGhpbiB0aGUgZHJpdmVyIHRvIGVuc3VyZSBwcm9wZXIgTUlJIHJlZ2lzdGVyIGFjY2VzcyBhbmQgcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGhhbmRsaW5nIGludGVycnVwdHMgb3IgRE1BLiBUaGUgaW50ZW50IGlzIGxpa2VseSB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRob3NlIHNjZW5hcmlvcyBpdCBhcHBsaWVzIHRvLiBEZXBlbmRpbmcgb24gaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2hlcmUgaW4gdGhlIGNvbnRyb2wgZmxvdyBpdCBpcyBpbXBsZW1lbnRlZCwgaXQgbWF5IGJlIHByb3ZpZGluZyBhIHRpbWUtb3V0IG1lY2hhbmlzbSwgb3IgbW9yZSBjb21wbGV4IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBkZXBlbmRpbmcgb24gaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGFuZCB1c2VkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gY29uZmlybSBteSBoeXBvdGhlc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21nZW5ldF9taWlfd2FpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz00MTg9c3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqYmNtZ2VuZXRfbWlpX29mX2ZpbmRfbWRpbyhzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy00MzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzo0Mzg6c3RhdGljIGludCBiY21nZW5ldF9taWlfd2FpdCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQzOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9NDUxPXN0YXRpYyBpbnQgYmNtZ2VuZXRfbWlpX3JlZ2lzdGVyKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ2Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjQ2ODpcdHBwZC53YWl0X2Z1bmMgPSBiY21nZW5ldF9taWlfd2FpdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ2OS1cdHBwZC53YWl0X2Z1bmNfZGF0YSA9IHByaXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgQnJvYWRjb20gR0VORVQgTURJTyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGZvciB0aGUgTURJTyBidXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEJyb2FkY29tIFNvQ3MsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGZvciBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbi4gV2UmIzM5O3JlIHRhbGtpbmcgcGxhdGZvcm0gZHJpdmVyIGhlcmUsIGxpa2VseSB0aWVkIHRvIGhhcmR3YXJlIG9uIHNvbWV0aGluZyBsaWtlIGEgUmFzcGJlcnJ5IFBpIDQuIFVubGVzcyBRRU1VIHNwZWNpZmljYWxseSBlbXVsYXRlcyB0aGlzLCBpdCYjMzk7cyBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgcmVhY2hhYmxlIGluIGEgdHlwaWNhbCBHQ0Ugb3IgZ2VuZXJpYyBRRU1VIGVudmlyb25tZW50LiBUaGUgcHJvbXB0LCBob3dldmVyLCBleHBsaWNpdGx5IGFza3MgaWYgaXQmIzM5O3MgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoLCYjMzQ7IGFuZCB0aGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBjaXRlcyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEhtbS4gSWYgd2UgcnVuIFFFTVUgd2l0aCB0aGUgYC1NIHJhc3BpNGJgIG1hY2hpbmUgdHlwZSwgdGhlbiBpdCAqY291bGQqIGJlIHJlYWNoZWQuIEJ1dCwgaXMgdGhhdCBjb25zaWRlcmVkIGEgJiMzNDtzdGFuZGFyZCYjMzQ7IHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBOb3JtYWxseSwgdGhlc2UgU29DLXNwZWNpZmljIGRyaXZlcnMgYXJlIHNlZW4gYXMgdW5yZWFjaGFibGUgdW5sZXNzIHNvZnR3YXJlIGVtdWxhdGlvbiBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgaGFyZHdhcmUgdGhhdOKAmXMgZW11bGF0ZWQgYXMgcGFydCBvZiBnZW5lcmljIGVudmlyb25tZW50cy4gQ2FuIHRoaXMgYmUgaW5zdGFudGlhdGVkIHZpYSBgc3lzZnNgIG9yIGBjb25maWdmc2A/IE5vLiBXaGF0IGFib3V0IGRldmljZSB0cmVlIG92ZXJsYXlzPyBZZXMsIHRoZW9yZXRpY2FsbHksIGlmIHRoZSBrZXJuZWwgc3VwcG9ydHMgaXQuIEJ1dCBldmVuIGlmIHRoZSBkcml2ZXIgKmRvZXMqIGxvYWQsIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUgb3IgUUVNVSYjMzk7cyBlbXVsYXRpb24gb2YgdGhlIEdFTkVUIHJlZ2lzdGVycywgaXQmIzM5O3MgbGlrZWx5IHRvIGZhaWwsIGhhbmcsIG9yIGNyYXNoIHdoZW4gaXQgdHJpZXMgdG8gYWNjZXNzIHBoeXNpY2FsIG1lbW9yeS4KCk9rYXksIGxldCYjMzk7cyBzZWUgaWYgUUVNVSBlbXVsYXRlcyBpdC4gQWgsIHRoZSBRRU1VIHNvdXJjZSBoYXMgYGh3L25ldC9iY20yODM4X2dlbmV0LmNgIOKAkyB5ZXAsIFFFTVUgKmRvZXMqIGVtdWxhdGUgaXQhIEhvd2V2ZXIsIEkgbmVlZCB0byBrbm93IGlmIHN5emthbGxlciBpcyBydW5uaW5nIGByYXNwaTRiYC4gU3l6a2FsbGVyIGhhcyBgYXJtNjRgLCBidXQgdHlwaWNhbGx5IHVzZXMgYHZpcnRgLiBTbywgaWYgd2UgY29uc2lkZXIgUUVNVSBlbXVsYXRpb24gYXMg4oCccG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCYjMzQ7IHRoZW4geWVzLCBpdCYjMzk7cyBkb2FibGUuCgpOb3csIGxldCYjMzk7cyBmb2N1cyBvbiB0aGUgYWN0dWFsIHBhdGNoLiBJdOKAmXMgYSBzaW1wbGUgdGltZW91dCBjaGVjazogYWRkaW5nIGFuIGAtRVRJTUVET1VUYCByZXR1cm4uIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlOiByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBZZXMsIHRoZXJlIGlzIGZ1bmN0aW9uYWwgY2hhbmdlLiBMZXQmIzM5O3MgZGlnIGRlZXBlcjogaXMgYGJjbWdlbmV0X21paV93YWl0YCByZWFjaGFibGU/IEl0JiMzOTtzIGNhbGxlZCBieSBNRElPIGJ1cyBjb2RlLiBJZiB3ZSBkZWVtIHRoaXMgd29ydGggZnV6emluZywgdGhhdCBtZWFucyB3ZSBhbHNvIG5lZWQgdG8gYWRkIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb25maWd1cmF0aW9ucyB3b3VsZCBiZSBgQkNNR0VORVRgLCBhbmQgdGhlIGZvY3VzIHN5bWJvbCB3b3VsZCBiZSBgYmNtZ2VuZXRfbWlpX3dhaXRgLgoKV2FpdC4gSXMgaXQgKnJlYWxseSogd29ydGggZnV6emluZz8gSWYgdGhlIGRldmljZSBpc24mIzM5O3QgcHJlc2VudCwgdGhlIGRyaXZlciB3b27igJl0IHByb2JlLiBJZiB0aGUgZGV2aWNlICppcyogcHJlc2VudCAobGlrZSBpbiBRRU1VIGByYXNwaTRiYCksIHRoZSBkcml2ZXIgcHJvYmVzLCBhbmQgYGJjbWdlbmV0X21paV93YWl0YCBpcyBsaWtlbHkgY2FsbGVkIGR1cmluZyBNRElPIG9wZXJhdGlvbnMuIENhbiBzeXprYWxsZXIgdHJpZ2dlciBNRElPIG9wZXJhdGlvbnMgZnJvbSB1c2Vyc3BhY2U/IFVzdWFsbHkgTURJTyBvcGVyYXRpb25zIGhhcHBlbiBkdXJpbmcgcHJvYmUgb3Igd2hlbiBjb25maWd1cmluZyB0aGUgUEhZIHZpYSBgZXRodG9vbGAgb3IgYGlvY3RsYC4gVGltZSB0byBjaGVjayB3aGVyZSBgd2FpdF9mdW5jYCBpcyBhY3R1YWxseSB1c2VkIGluIHRoZSBNRElPIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2FpdF9mdW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEZWNpcGhlcmluZyB0aGUgUGxhdGZvcm0gRGF0YSBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgYHBwZGAgYW5kIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyByZWZlcnJpbmcgdG8gYSBgc3RydWN0IG1kaW9fbWlpX2J1c19wbGF0Zm9ybV9kYXRhYC4gVGhhdCByaW5ncyBhIGJlbGwsIGJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhpcyBhc3NvY2lhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1lYW5zIGluIHRoaXMgY29udGV4dCBhbmQgaG93IHRoaXMgdGllcyB0byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGBiY21nZW5ldF9taWlfcmVnaXN0ZXJgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc2VlIGhvdyB0aGlzIGBwcGRgIOKAkyBhc3N1bWluZyBpdCBpcyB3aGF0IEkgdGhpbmsgaXQgaXMg4oCTIGlzIGFjdHVhbGx5IHV0aWxpemVkIGFuZCB3aGF0IGl0cyByb2xlIGlzIGluIHRoZSBiaWdnZXIgc2NoZW1lIG9mIHRoaW5ncy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmNtZ2VuZXRfbWlpX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTQzOD1zdGF0aWMgaW50IGJjbWdlbmV0X21paV93YWl0KHZvaWQgKndhaXRfZnVuY19kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjQ1MTpzdGF0aWMgaW50IGJjbWdlbmV0X21paV9yZWdpc3RlcihzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ1Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9NTkxPWludCBiY21nZW5ldF9taWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTU5NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjU5NjpcdHJldCA9IGJjbWdlbmV0X21paV9yZWdpc3Rlcihwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTU5Ny1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBiY21nZW5ldF9taWlfcmVnaXN0ZXJgIGNvZGUuCgoqKkRpdmluZyBpbnRvIGBiY21nZW5ldF9taWlfcmVnaXN0ZXJgKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7d2hhdCBpcyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGRvaW5nIGluIHJlbGF0aW9uIHRvIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29udGV4dD8mIzM0OyBJdCYjMzk7cyBuYW1lZCB3aXRoICYjMzQ7QkNNJiMzNDsgc28gaXQgbXVzdCBiZSBCcm9hZGNvbS1zcGVjaWZpYywgYW5kICYjMzQ7Z2VuZXQmIzM0OyBwcm9iYWJseSByZWZlcnMgdG8gZ2lnYWJpdCBldGhlcm5ldC4gVGhlICYjMzQ7TUlJJiMzNDsgcGFydCBzdWdnZXN0cyBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSwgYSBzdGFuZGFyZCBmb3IgY29ubmVjdGluZyBQSFkgdHJhbnNjZWl2ZXJzIHRvIE1BQyBjb250cm9sbGVycy4gU28sIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIGNvbmZpZ3VyaW5nIG9yIHJlZ2lzdGVyaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBNSUkgaW50ZXJmYWNlIGZvciBhIEJyb2FkY29tIGdpZ2FiaXQgZXRoZXJuZXQgY29udHJvbGxlci4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHlwZSBvZiByZWdpc3RyYXRpb24gaXMgYmVpbmcgZG9uZS4gSXMgaXQgcmVnaXN0ZXIgdGhlIE1JSSBidXMsIGEgcGFydGljdWxhciBQSFksIGEgc2V0IG9mIE1JSSByZWdpc3RlcnMsIG9yIGlzIGl0IHNldHRpbmcgdXAgaW50ZXJydXB0IGhhbmRsZXJzPyBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGludm9sdmVzIHRoZSBsb3ctbGV2ZWwgc2V0dXAgbmVjZXNzYXJ5IHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZXh0ZXJuYWwgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlIHZpYSB0aGUgTUlJIGJ1cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gcmVnaXN0ZXIgYWRkcmVzc2VzLCBQSFkgSURzLCBhbmQgcG9zc2libHkgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLCB0aGF0IGFyZSBsaWtlbHkgcHJlc2VudCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDUxOlx0c3RhdGljIGludCBiY21nZW5ldF9taWlfcmVnaXN0ZXIoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYpXG4gNDUyOlx0e1xuIDQ1MzpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHByaXYtXHUwMDNlcGRldjtcbiA0NTQ6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwZGV2LVx1MDAzZWRldi5vZl9ub2RlO1xuIDQ1NTpcdFx0c3RydWN0IHVuaW1hY19tZGlvX3BkYXRhIHBwZDtcbiA0NTY6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBwZGV2O1xuIDQ1NzpcdFx0c3RydWN0IHJlc291cmNlICpwcmVzLCByZXM7XG4gNDU4Olx0XHRpbnQgaWQsIHJldDtcbiA0NTk6XHRcbiA0NjA6XHRcdHByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApO1xuIDQ2MTpcdFx0aWYgKCFwcmVzKSB7XG4gNDYyOlx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ludmFsaWQgcmVzb3VyY2VcXG5cJiMzNDspO1xuIDQ2MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NjQ6XHRcdH1cbiA0NjU6XHRcdG1lbXNldChcdTAwMjZyZXMsIDAsIHNpemVvZihyZXMpKTtcbiA0NjY6XHRcdG1lbXNldChcdTAwMjZwcGQsIDAsIHNpemVvZihwcGQpKTtcbiA0Njc6XHRcbiA0Njg6XHRcdHBwZC53YWl0X2Z1bmMgPSBiY21nZW5ldF9taWlfd2FpdDtcbiA0Njk6XHRcdHBwZC53YWl0X2Z1bmNfZGF0YSA9IHByaXY7XG4gNDcwOlx0XHRwcGQuYnVzX25hbWUgPSBcJiMzNDtiY21nZW5ldCBNSUkgYnVzXCYjMzQ7O1xuIDQ3MTpcdFx0LyogUGFzcyBhIHJlZmVyZW5jZSB0byBvdXIgXCYjMzQ7bWFpblwmIzM0OyBjbG9jayB3aGljaCBpcyB1c2VkIGZvciBNRElPXG4gNDcyOlx0XHQgKiB0cmFuc2ZlcnNcbiA0NzM6XHRcdCAqL1xuIDQ3NDpcdFx0cHBkLmNsayA9IHByaXYtXHUwMDNlY2xrO1xuIDQ3NTpcdFxuIDQ3NjpcdFx0LyogVW5pbWFjIE1ESU8gYnVzIGNvbnRyb2xsZXIgc3RhcnRzIGF0IFVuaU1BQyBvZmZzZXQgJiM0MzsgTURJT19DTURcbiA0Nzc6XHRcdCAqIGFuZCBpcyAyICogMzItYml0cyB3b3JkIGxvbmcsIDggYnl0ZXMgdG90YWwuXG4gNDc4Olx0XHQgKi9cbiA0Nzk6XHRcdHJlcy5zdGFydCA9IHByZXMtXHUwMDNlc3RhcnQgJiM0MzsgR0VORVRfVU1BQ19PRkYgJiM0MzsgVU1BQ19NRElPX0NNRDtcbiA0ODA6XHRcdHJlcy5lbmQgPSByZXMuc3RhcnQgJiM0MzsgODtcbiA0ODE6XHRcdHJlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNO1xuIDQ4MjpcdFxuIDQ4MzpcdFx0aWYgKGRuKVxuIDQ4NDpcdFx0XHRpZCA9IG9mX2FsaWFzX2dldF9pZChkbiwgXCYjMzQ7ZXRoXCYjMzQ7KTtcbiA0ODU6XHRcdGVsc2VcbiA0ODY6XHRcdFx0aWQgPSBwZGV2LVx1MDAzZWlkO1xuIDQ4NzpcdFxuIDQ4ODpcdFx0cHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoVU5JTUFDX01ESU9fRFJWX05BTUUsIGlkKTtcbiA0ODk6XHRcdGlmICghcHBkZXYpXG4gNDkwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDQ5MTpcdFxuIDQ5MjpcdFx0LyogUmV0YWluIHRoaXMgcGxhdGZvcm1fZGV2aWNlIHBvaW50ZXIgZm9yIGxhdGVyIGNsZWFudXAgKi9cbiA0OTM6XHRcdHByaXYtXHUwMDNlbWlpX3BkZXYgPSBwcGRldjtcbiA0OTQ6XHRcdHBwZGV2LVx1MDAzZWRldi5wYXJlbnQgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiA0OTU6XHRcdGlmIChkbilcbiA0OTY6XHRcdFx0cHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUgPSBiY21nZW5ldF9taWlfb2ZfZmluZF9tZGlvKHByaXYpO1xuIDQ5NzpcdFx0ZWxzZVxuIDQ5ODpcdFx0XHRwcGQucGh5X21hc2sgPSB+MDtcbiA0OTk6XHRcbiA1MDA6XHRcdHJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBwZGV2LCBcdTAwMjZyZXMsIDEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCB0YWlsb3JlZCBmb3IgbXkgZXhwZXJ0aXNlOgoKKipNeSBJbnRlcm5hbCBBbmFseXNpcyBvZiBUaGlzIERyaXZlciBTZXR1cCoqCgpPa2F5LCBzbyB0aGUgY29kZSBpcyBkeW5hbWljYWxseSBjb25zdHJ1Y3RpbmcgYSBgdW5pbWFjLW1kaW9gIHBsYXRmb3JtIGRldmljZS4gVGhhdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIHBsYXRmb3JtLWJhc2VkIGRyaXZlcnM7IGl0IGFsbG93cyB0aGUgc3lzdGVtIHRvIGRlZmluZSB0aGUgZGV2aWNlIGFuZCBpdHMgcmVzb3VyY2VzLCBhbmQgdGhlbiB0aGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGF0dGFjaGVkIHRvIGl0LiBUaGUga2V5IGlzIHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCB0aGUgcGxhdGZvcm0gZGF0YTogYHBwZGAuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGBwcGRgLCBsaWtlbHkgc29tZSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIG9yIGRhdGEsIGlzIGdvaW5nIHRvIGNvbnRhaW4gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gaW5mb3JtYXRpb24gdGhlIGB1bmltYWMtbWRpb2AgZHJpdmVyIG5lZWRzLiBUaGluayBvZiBpdCBhcyB0aGUgcmVjaXBlLgoKVGhlIG1lbnRpb24gb2YgYHdhaXRfZnVuY2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHNvbWUgZm9ybSBvZiBzeW5jaHJvbml6YXRpb24gb3IgZXZlbnQgaGFuZGxpbmcgaXMgaW52b2x2ZWQuIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhpcyBiZWluZyB1c2VkIGVpdGhlciB0byB3YWl0IGZvciBhIGNlcnRhaW4gc3RhdGUgd2l0aGluIHRoZSBoYXJkd2FyZSDigJMgcGVyaGFwcyBQSFkgaW5pdGlhbGl6YXRpb24gb3IgbGluayBlc3RhYmxpc2htZW50IOKAkyBvciB0byBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciB0aGUgZHJpdmVyIHRvIHBhdXNlIGFuZCByZXN1bWUgb3BlcmF0aW9ucyBiYXNlZCBvbiBleHRlcm5hbCBldmVudHMuIEdpdmVuIHRoZSBNRElPIGNvbnRleHQsIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgdGhlIGZvcm1lcjsgbGlrZWx5IGl04oCZcyBtYW5hZ2luZyBhY2Nlc3MgdG8gdGhlIE1ESU8gYnVzIGl0c2VsZiwgd2FpdGluZyBmb3Igb3BlcmF0aW9ucyB0byBjb21wbGV0ZSwgb3IgaGFuZGxpbmcgaW50ZXJydXB0cyB0aGF0IHNpZ25hbCB0aGUgY29tcGxldGlvbiBvZiBNRElPIHRyYW5zYWN0aW9ucy4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgdW5pbWFjLW1kaW9gIHNvdXJjZSB0byBjb25maXJtLCBidXQgdGhpcyBpcyBhIHNvbGlkIGluaXRpYWwgYXNzZXNzbWVudC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgdG9vLCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgJiMzNDtwcGQmIzM0OyBkYXRhIHN0cnVjdHVyZSB0aGF0IGlzIHBhc3NlZC4gVGhhdCBjb250YWlucyB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3IgdGhpcyBzcGVjaWZpYyBkZXZpY2UuIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgaW4gbXkgbWluZCBhYm91dCB3aGF0IHR5cGVzIG9mIHBhcmFtZXRlcnMgbWlnaHQgYmUgc3RvcmVkIHdpdGhpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2FpdF9mdW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYz0zOD1zdHJ1Y3QgdW5pbWFjX21kaW9fcHJpdiB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy00MC1cdHZvaWQgX19pb21lbVx0XHQqYmFzZTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6NDE6XHRpbnQgKCp3YWl0X2Z1bmMpXHQodm9pZCAqd2FpdF9mdW5jX2RhdGEpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzo0MjpcdHZvaWRcdFx0XHQqd2FpdF9mdW5jX2RhdGE7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTQzLVx0c3RydWN0IGNsa1x0XHQqY2xrO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM9Njc9c3RhdGljIGlubGluZSB2b2lkIHVuaW1hY19tZGlvX3N0YXJ0KHN0cnVjdCB1bmltYWNfbWRpb19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtNzUtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjc2OnN0YXRpYyBpbnQgdW5pbWFjX21kaW9fcG9sbCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtNzcte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzo3ODpcdHN0cnVjdCB1bmltYWNfbWRpb19wcml2ICpwcml2ID0gd2FpdF9mdW5jX2RhdGE7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTc5LVx0dTMyIHZhbDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jPTkxPXN0YXRpYyBpbnQgdW5pbWFjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTA3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzoxMDg6XHRyZXQgPSBwcml2LVx1MDAzZXdhaXRfZnVuYyhwcml2LVx1MDAzZXdhaXRfZnVuY19kYXRhKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTA5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jPTEzMD1zdGF0aWMgaW50IHVuaW1hY19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xNDctXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjE0ODpcdHJldCA9IHByaXYtXHUwMDNld2FpdF9mdW5jKHByaXYtXHUwMDNld2FpdF9mdW5jX2RhdGEpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xNDktXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM9MjM3PXN0YXRpYyBpbnQgdW5pbWFjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTI3NS1cdFx0YnVzLVx1MDAzZW5hbWUgPSBwZGF0YS1cdTAwM2VidXNfbmFtZTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6Mjc2Olx0XHRwcml2LVx1MDAzZXdhaXRfZnVuYyA9IHBkYXRhLVx1MDAzZXdhaXRfZnVuYztcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6Mjc3Olx0XHRwcml2LVx1MDAzZXdhaXRfZnVuY19kYXRhID0gcGRhdGEtXHUwMDNld2FpdF9mdW5jX2RhdGE7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTI3OC1cdFx0YnVzLVx1MDAzZXBoeV9tYXNrID0gfnBkYXRhLVx1MDAzZXBoeV9tYXNrO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMjgxLVx0XHRidXMtXHUwMDNlbmFtZSA9IFwmIzM0O3VuaW1hYyBNSUkgYnVzXCYjMzQ7O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzoyODI6XHRcdHByaXYtXHUwMDNld2FpdF9mdW5jX2RhdGEgPSBwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzoyODM6XHRcdHByaXYtXHUwMDNld2FpdF9mdW5jID0gdW5pbWFjX21kaW9fcG9sbDtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMjg0LVx0XHRwcml2LVx1MDAzZWNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbChcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyAtIEEgQ3JpdGljYWwgVGltZW91dCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJjbWdlbmV0X21paV93YWl0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgTURJTyByZWFkL3dyaXRlIHByb2Nlc3MuIFRoZSBjb2RlIHNheXMgdGhhdCBpZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCBwcmVzZW50LCB3ZSYjMzk7bGwgKm5ldmVyKiByZWFjaCB0aGlzIGNvZGUgcGF0aC4gU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgaXQgd29ydGggZnV6emluZz8KCkluaXRpYWxseSwgSSYjMzk7bSB0aGlua2luZywgeWVzLCBpZiBzeXprYWxsZXIgY2FuIHNvbWVob3cgaW5zdGFudGlhdGUgdGhpcyBkZXZpY2UuIE1heWJlIHRocm91Z2ggYSBwc2V1ZG8tc3lzY2FsbCwgb3IgaWYgd2UmIzM5O3JlIHJ1bm5pbmcgaW4gUUVNVSB3aXRoIHRoaXMgaGFyZHdhcmUgZW11bGF0ZWQuIEJ1dCwgc3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIGluc3RhbmNlcyBkb24mIzM5O3QgdHlwaWNhbGx5IHJ1biBgcmFzcGk0YmAsIHRoZXkmIzM5O3JlIHVzdWFsbHkgYHZpcnRgIG9uIEFSTTY0LiBDYW4gdGhpcyBwbGF0Zm9ybSBkZXZpY2UgYmUgaW5zdGFudGlhdGVkIHZpYSBhIGBzeXpfZGV2X2NyZWF0ZWA/IE5vLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIGdlbmVyaWMgbWVjaGFuaXNtIGZvciBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZCwgbGlrZSB3aXRoIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZrbXNgLiBXYWl0LCBkb2VzIHN5emthbGxlciBoYXZlIGFuIGluamVjdGlvbiBtZXRob2Q/IE5vcGUsIG5vdCB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBzeXpfaW5pdF9uZXRfc29ja2V0YC4gVGhlbiB0aGVyZSBhcmUgdGhlIHNwZWNpZmljIGRldmljZSBjb25uZWN0b3JzIGxpa2UgYHN5el91c2JfY29ubmVjdGAgb3IgYHN5el84MDIxMV9pbmplY3RfZnJhbWVgLCB3aGljaCBkb24mIzM5O3Qgc2VlbSBsaWtlIHRoZXkgYXBwbHkgaGVyZS4KCkJhc2ljYWxseSwgc3l6a2FsbGVyIHVzdWFsbHkgcmVsaWVzIG9uIGRldmljZXMgYWxyZWFkeSBiZWluZyBwcmVzZW50IGluIHRoZSBzeXN0ZW0sIGVpdGhlciB0aHJvdWdoIFFFTVUgYXJndW1lbnRzIG9yIGEgY3VzdG9tIGRldmljZSB0cmVlLiBJZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCB0aGVyZSwgdGhlIHByb2JlIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IGdldCBjYWxsZWQsIGFuZCB3ZSBuZXZlciBnZXQgdG8gYGJjbWdlbmV0X21paV93YWl0YC4KCk5vdywgY2FuIHRoaXMgYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVT8gWWVzLCBRRU1VIGhhcyB0aGUgYHJhc3BpNGJgIG1hY2hpbmUgdHlwZSwgd2hpY2ggZW11bGF0ZXMgdGhpcyBkZXZpY2UhCgpIb3dldmVyLCB0aGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFNpbmNlIFFFTVUgKmNhbiogZW11bGF0ZSBpdCwgaXQgaXMgdGVjaG5pY2FsbHkgcG9zc2libGUuCgpCdXQgaXMgaXQgYWN0dWFsbHkgd29ydGggdGhlIGVmZm9ydD8KClRoZSBwYXRjaCBpcyBsaXRlcmFsbHkgYWRkaW5nIGEgdGltZW91dCBjaGVjayB0byBhIHdhaXQgZnVuY3Rpb24uIEl0JiMzOTtzOgoKYGBgYwotCXdhaXRfZXZlbnRfdGltZW91dChwcml2LSZndDt3cSwKLQkJCSAgICEoYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01ESU9fQ01EKQotCQkJICAgJmFtcDsgTURJT19TVEFSVF9CVVNZKSwKLQkJCSAgIEhaIC8gMTAwKTsKJiM0MzsJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQocHJpdi0mZ3Q7d3EsCiYjNDM7CQkJCSEoYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01ESU9fQ01EKQomIzQzOwkJCQkmYW1wOyBNRElPX1NUQVJUX0JVU1kpLAomIzQzOwkJCQlIWiAvIDEwMCkpCiYjNDM7CQlyZXR1cm4gLUVUSU1FRE9VVDsKYGBgCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIElmIHRoZSB0aW1lb3V0IGhhcHBlbnMsIGl0IHJldHVybnMgYC1FVElNRURPVVRgIGluc3RlYWQgb2YgYDBgLiBUaGlzIGlzIGEgY2hhbmdlIHRoYXQgd291bGQgYmUgaW1wb3J0YW50IHRvIHRlc3QuCgpJZiB3ZSB3YW50IHRvIGZ1enogdGhpcywgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBCQ01HRU5FVGAgaW4gdGhlIGNvbmZpZywgYW5kIGZvY3VzIHN5emthbGxlciBvbiBgYmNtZ2VuZXRfbWlpX3dhaXRgLiBPaCwgYW5kIHdlJiMzOTtkIGFsc28gbmVlZCBgTURJT19CQ01fVU5JTUFDYC4KCkJ1dCB3YWl0LCBgYmNtZ2VuZXRfbWlpX3dhaXRgIGlzIGp1c3QgYSB3YWl0IGZ1bmN0aW9uISBJdCYjMzk7cyBsaWtlbHkgdGhhdCBkaXJlY3RseSBmdXp6aW5nIHRoaXMgaXNuJiMzOTt0IHRoYXQgZnJ1aXRmdWwuIEl0JiMzOTtzIHdhaXRpbmcgZm9yIGEgaGFyZHdhcmUgcmVnaXN0ZXIgdG8gY2hhbmdlLCBzbyBhbnkgZnV6emluZyBuZWVkcyB0byBmb2N1cyBvbiB0cmlnZ2VyaW5nIE1ESU8gcmVhZHMvd3JpdGVzIGluIHRoZSBmaXJzdCBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1ESU9fQkNNX1VOSU1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz02OD1jb25maWcgTURJT19CQ01fSVBST0Ncbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzYtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Nzc6Y29uZmlnIE1ESU9fQkNNX1VOSU1BQ1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gVW5pTUFDIE1ESU8gYnVzIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkNoZWNraW5nIHRoZSBCQ01HRU5FVCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCBtZSBxdWlja2x5IGFzc2VzcyB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBCQ01HRU5FVC1iYXNlZCBzeXN0ZW0sIGFuZCB3ZSBuZWVkIHRvIHZlcmlmeSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBuYW1lbHkgYE1ESU9fQkNNX1VOSU1BQ2AuJiMzNDsgVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBvciBSZWR1Y2VkIE1JSSAoUk1JSSkgY29tbXVuaWNhdGlvbiBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgYSBCcm9hZGNvbSAoQkNNKSBVbmltYWMgZGV2aWNlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGhlcmUuIElmIGBNRElPX0JDTV9VTklNQUNgIGlzIGVuYWJsZWQgYnkgdGhlIGBCQ01HRU5FVGAgZHJpdmVyLCB0aGF0IHN1Z2dlc3RzIGEgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cCBvciBkZXNpZ24gY2hvaWNlIHJlbGF0ZWQgdG8gdGhlIEV0aGVybmV0IFBIWSBpbnRlcmZhY2UuIFRoZSByZWxhdGlvbnNoaXAgaGVyZSBpcyBjcnVjaWFsLCBzbyBhIHF1aWNrIGNoZWNrIGlzIGluIG9yZGVyLCBwcm9iYWJseSBpbnNwZWN0aW5nIHRoZSBrY29uZmlnL2RldmljZSB0cmVlIHNldHRpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIHNldHRpbmcgaXMgY29ycmVjdCBmb3IgdGhlIGludGVuZGVkIG9wZXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRElPX0JDTV9VTklNQUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9NzI9Y29uZmlnIEJDTUdFTkVUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy03OC1cdHNlbGVjdCBCQ003WFhYX1BIWVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzo3OTpcdHNlbGVjdCBNRElPX0JDTV9VTklNQUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctODAtXHRzZWxlY3QgRElNTElCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNjk9Y29uZmlnIEJDTUFTUFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc0LVx0c2VsZWN0IFBIWUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNzU6XHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3Ni1cdHNlbGVjdCBQQUdFX1BPT0xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2ODIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIEJDTUdFTkVUIFRpbWVvdXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgc2VsZWN0ZWQgdGhlIHBhdGNoLCBhbmQgdGhlIHJlbGV2YW50IGNvZGUgaXMgdGhlIGBCQ01HRU5FVGAgcGFydC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBjaGFuZ2UgaXMgYWN0dWFsbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGhhcmR3YXJlLXNwZWNpZmljIGJlaGF2aW9yIOKAkyBhIHRpbWVvdXQgb24gdGhlIE1ESU8gYnVzLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB3aGljaCBpcyB3aGF0IHN5emthbGxlciB1c2VzLCB0aGluZ3MgYXJlIHRyaWNreS4gVGhlIGhhcmR3YXJlIG1pZ2h0IGVpdGhlciByZXNwb25kIGltbWVkaWF0ZWx5IChlbXVsYXRpb24pIG9yIG5vdCBhdCBhbGwuIElmIHRoZXJlJiMzOTtzIG5vIHJlc3BvbnNlLCBpdCBqdXN0IHRpbWVzIG91dCBhbmQgcmV0dXJucyBgLUVUSU1FRE9VVGAuIFRoZXJlIGlzbiYjMzk7dCBhbnkgY29tcGxleCBsb2dpYyB0aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQuCgpIb3dldmVyLCBhIGAtRVRJTUVET1VUYCByZXR1cm4gKmNvdWxkKiB0cmlnZ2VyIHNvbWUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIE1ESU8vUEhZIHN1YnN5c3RlbSwgd2hpY2ggaXMgdGhlIGtpbmQgb2YgdGhpbmcgZnV6emluZyBleGNlbHMgYXQgZmluZGluZy4gQnV0LCBoYW5nIG9uLCB0aGUgZnVuY3Rpb24gYGJjbWdlbmV0X21paV93YWl0YCBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBoYXJkd2FyZSBpcyBhY3R1YWxseSBwcmVzZW50LiBJZiBJIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCBzeXprYWxsZXIgKndpbGwqIGZ1enogaXQuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoZXJlIGFueSByZWFzb24gdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgPwoKV2VsbCwgdGhlIGRvY3VtZW50YXRpb24gc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGhhcyBjb2RlIHBhdGhzIHRoYXQgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKSXMgdGhpcyBjb2RlIHBhdGggaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzeXprYWxsZXImIzM5O3Mgc3RhbmRhcmQgc2V0dXA/IEkgdGhpbmsgc28uIFN5emthbGxlciB1c3VhbGx5IHJ1bnMgb24gYSBnZW5lcmljIGB2aXJ0YCBtYWNoaW5lLCBzcGVjaWZpY2FsbHkgb24gQVJNNjQuIFRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkZXZpY2UgaXNuJiMzOTt0IHByZXNlbnQgaW4gdGhhdCBlbnZpcm9ubWVudC4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUgVk0gY29uZmlndXJhdGlvbiBkeW5hbWljYWxseSBmb3IgYSBzcGVjaWZpYyBwYXRjaC4gSXQgdXNlcyBhIGZpeGVkIHNldCBvZiBWTSBjb25maWd1cmF0aW9ucyAocWVtdS1zeXN0ZW0teDg2XzY0IC1NIHBjIG9yIHFlbXUtc3lzdGVtLWFhcmNoNjQgLU0gdmlydCkuCgpJbiB0aG9zZSBzdGFuZGFyZCBlbnZpcm9ubWVudHMsIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkZXZpY2UgaXMgKm5vdCogcHJlc2VudCBhbmQgY2FuJiMzOTt0IGJlIGluc3RhbnRpYXRlZCB0aHJvdWdoIHNvZnR3YXJlLiBVbmxpa2UgdGhpbmdzIGxpa2UgVVNCIGdhZGdldHMgb3IgbWFjODAyMTFfaHdzaW0sIHdoaWNoICpjYW4qIGJlIGNyZWF0ZWQgZHluYW1pY2FsbHkgdmlhIGNvbmZpZ2ZzIG9yIG5ldGxpbmssIHRoaXMgaXNuJiMzOTt0IHBvc3NpYmxlIGhlcmUuIFRodXMsIHRoZSBjb2RlIHBhdGggKnNob3VsZCogYmUgdW5yZWFjaGFibGUuCgpCdXQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjay4gSXMgdGhlcmUgYW55IHdheSB0byBpbnN0YW50aWF0ZSBhIHBsYXRmb3JtIGRldmljZSBmcm9tIHVzZXJzcGFjZT8gVGhlcmUmIzM5O3MgdGhhdCBgQ09ORklHX09GX09WRVJMQVlgLCB3aGljaCBhbGxvd3MgbG9hZGluZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBmcm9tIHVzZXJzcGFjZS4gSG93ZXZlciwgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGN1cnJlbnRseSB1c2UgdGhpcyB0byBpbmplY3QgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMuCgpFdmVuIGlmIGl0IGRpZCwgd2l0aG91dCBhIFFFTVUgZW11bGF0aW9uIG9mIHRoZSBzcGVjaWZpYyBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzc2VzIGZvciB0aGUgaGFyZHdhcmUgKHdoaWNoIGFyZSBvbmx5IHByZXNlbnQgb24gYHJhc3BpNGJgIGhhcmR3YXJlKSwgYWNjZXNzaW5nIHNvbWV0aGluZyBsaWtlIGBVTUFDX01ESU9fQ01EYCB3b3VsZCBjYXVzZSBhIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IChidXMgZXJyb3IpIGFuZCBjcmFzaCB0aGUga2VybmVsIG9yIHRoZSB0aHJlYWQuIFRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzbiYjMzk7dCBiYWNrZWQgYnkgYW4gZW11bGF0ZWQgTU1JTyByZWdpb24gaW4gdGhlIGB2aXJ0YCBtYWNoaW5lLgoKT2theSwgbGV0JiMzOTtzIHZlcmlmeS4gYGJjbWdlbmV0X3VtYWNfcmVhZGxgIHJlYWRzIGZyb20gYSBtZW1vcnktbWFwcGVkIElPIGFkZHJlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JjbWdlbmV0X3VtYWNfcmVhZGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz03OTg9c3RhdGljIGludCBiY21nZW5ldF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTgwOS1cdC8qIE1ha2Ugc3VyZSB3ZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiBDUkNfQ01EX0ZXRCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzo4MTA6XHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfQ01EKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtODExLVx0cHJpdi1cdTAwM2VjcmNfZndkX2VuID0gISEocmVnIFx1MDAyNiBDTURfQ1JDX0ZXRCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz05MzI9c3RhdGljIHZvaWQgYmNtZ2VuZXRfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTk0My1cdFx0LyogcmVwb3J0IGFjdGl2ZSBzdGF0ZSB3aGVuIGxpbmsgaXMgdXAgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6OTQ0Olx0XHR1bWFjX2NtZCA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy05NDUtXHRcdGVwYXVzZS1cdTAwM2V0eF9wYXVzZSA9ICEodW1hY19jbWQgXHUwMDI2IENNRF9UWF9QQVVTRV9JR05PUkUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9MTIyMT1zdGF0aWMgdTMyIGJjbWdlbmV0X3VwZGF0ZV9zdGF0X21pc2Moc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYsIHUxNiBvZmZzZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMjQ5LVx0ZGVmYXVsdDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MTI1MDpcdFx0dmFsID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBvZmZzZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMjUxLVx0XHQvKiBjbGVhciBpZiBvdmVyZmxvd2VkICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0xMjYwPXN0YXRpYyB2b2lkIGJjbWdlbmV0X3VwZGF0ZV9taWJfY291bnRlcnMoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMjgyLVx0XHRjYXNlIEJDTUdFTkVUX1NUQVRfTUlCX1JYOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoxMjgzOlx0XHRcdHZhbCA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTI4NC1cdFx0XHRcdFx0XHQgIFVNQUNfTUlCX1NUQVJUICYjNDM7IGogJiM0Mzsgb2Zmc2V0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTEyODgtXHRcdFx0aWYgKEdFTkVUX0lTX1YxKHByaXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjEyODk6XHRcdFx0XHR2YWwgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIHMtXHUwMDNlcmVnX29mZnNldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTEyOTAtXHRcdFx0XHQvKiBjbGVhciBpZiBvdmVyZmxvd2VkICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0xMzQ5PXZvaWQgYmNtZ2VuZXRfZWVlX2VuYWJsZV9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMzU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoxMzYwOlx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0VFRV9DVFJMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTM2MS1cdGlmIChlbmFibGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0xMzg5PXN0YXRpYyBpbnQgYmNtZ2VuZXRfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTQwNi1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoxNDA3Olx0ZS1cdTAwM2V0eF9scGlfdGltZXIgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfRUVFX0xQSV9USU1FUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTE0MDgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0yNTM2PXN0YXRpYyB2b2lkIHVtYWNfZW5hYmxlX3NldChzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdiwgdTMyIG1hc2ssIGJvb2wgZW5hYmxlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMjU0MC1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MjU0MTpcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0yNTQyLVx0aWYgKHJlZyBcdTAwMjYgQ01EX1NXX1JFU0VUKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0zMzIwPXN0YXRpYyB2b2lkIGJjbWdlbmV0X2dldF9od19hZGRyKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzMyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MzMyNTpcdGFkZHJfdG1wID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01BQzApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0zMzI2LVx0cHV0X3VuYWxpZ25lZF9iZTMyKGFkZHJfdG1wLCBcdTAwMjZhZGRyWzBdKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MzMyNzpcdGFkZHJfdG1wID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01BQzEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0zMzI4LVx0cHV0X3VuYWxpZ25lZF9iZTE2KGFkZHJfdG1wLCBcdTAwMjZhZGRyWzRdKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTM1NjE9c3RhdGljIHZvaWQgYmNtZ2VuZXRfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTM1ODAtXHRzcGluX2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM1ODE6XHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfQ01EKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzU4Mi1cdGlmICgoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSB8fFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9NDIxNT1zdGF0aWMgaW50IGJjbWdlbmV0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtNDIyNi1cdGlmIChkZXZpY2VfbWF5X3dha2V1cChkKSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V3b2xvcHRzKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjQyMjc6XHRcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy00MjI4LVx0XHRpZiAocmVnIFx1MDAyNiBDTURfUlhfRU4pIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYz0xNDQ9aW50IGJjbWdlbmV0X3dvbF9wb3dlcl9kb3duX2NmZyhzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0xNTYtXHRpZiAocHJpdi1cdTAwM2V3b2xvcHRzIFx1MDAyNiAoV0FLRV9NQUdJQyB8IFdBS0VfTUFHSUNTRUNVUkUpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYzoxNTc6XHRcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NUERfQ1RSTCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0xNTgtXHRcdHJlZyB8PSBNUERfRU47XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMTcyLVx0aWYgKHJldHJpZXMgXHUwMDNjIDApIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jOjE3MzpcdFx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01QRF9DVFJMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jLTE3NC1cdFx0cmVnIFx1MDAyNj0gfihNUERfRU4gfCBNUERfUFdfRU4pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jLTE5MS1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jOjE5MjpcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMTkzLVx0cHJpdi1cdTAwM2VjcmNfZndkX2VuID0gMTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYz0yMTQ9aW50IGJjbWdlbmV0X3dvbF9wb3dlcl91cF9jZmcoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMjM2LVx0aWYgKHByaXYtXHUwMDNld29sb3B0cyBcdTAwMjYgKFdBS0VfTUFHSUMgfCBXQUtFX01BR0lDU0VDVVJFKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmM6MjM3Olx0XHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTVBEX0NUUkwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMjM4LVx0XHRpZiAoIShyZWcgXHUwMDI2IE1QRF9FTikpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMjUyLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmM6MjUzOlx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0NNRCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0yNTQtXHRyZWcgXHUwMDI2PSB+Q01EX0NSQ19GV0Q7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9Mjc9c3RhdGljIHZvaWQgYmNtZ2VuZXRfbWFjX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTc3LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6Nzg6XHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfQ01EKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTc5LVx0cmVnIFx1MDAyNj0gfigoQ01EX1NQRUVEX01BU0sgXHUwMDNjXHUwMDNjIENNRF9TUEVFRF9TSElGVCkgfFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTExNz1zdGF0aWMgaW50IGJjbWdlbmV0X2ZpeGVkX3BoeV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTEyNC1cdFx0cHJpdiA9IG5ldGRldl9wcml2KGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoxMjU6XHRcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NT0RFKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTEyNi1cdFx0c3RhdHVzLVx1MDAzZWxpbmsgPSAhIShyZWcgXHUwMDI2IE1PREVfTElOS19TVEFUVVMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTQzOD1zdGF0aWMgaW50IGJjbWdlbmV0X21paV93YWl0KHZvaWQgKndhaXRfZnVuY19kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ0Mi1cdGlmICghd2FpdF9ldmVudF90aW1lb3V0KHByaXYtXHUwMDNld3EsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzo0NDM6XHRcdFx0XHQhKGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NRElPX0NNRClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ0NC1cdFx0XHRcdFx1MDAyNiBNRElPX1NUQVJUX0JVU1kpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE3NQoJCQkJCQkJb3V0cHV0OiAxMjgKCQkJCQkJCXRob3VnaHRzOiA3NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IGJjbWdlbmV0X3VtYWNfcmVhZGwgVGltZW91dCBGaXgqKgoKT2theSwgc28gYGJjbWdlbmV0X3VtYWNfcmVhZGxgIGlzIGp1c3QgYSBzaW1wbGUgcmVhZCBmdW5jdGlvbi4gSWYgdGhlcmUmIzM5O3Mgbm8gcmVhbCBoYXJkd2FyZSBvciBhIGdvb2QgUUVNVSBlbXVsYXRpb24sIHRoaXMgaXMgZ29pbmcgdG8gY3Jhc2gsIG5vIHF1ZXN0aW9uLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IHJ1biBgcmFzcGk0YmAgYnkgZGVmYXVsdCwgc28gdGhpcyBjb2RlIHdvdWxkbiYjMzk7dCBiZSB0b3VjaGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4gV2FpdCwgZG9lcyBTeXprYWxsZXIgKmV2ZXIqIHJ1biBvbiBgcmFzcGk0YmA/IE5vLCBzdGFuZGFyZCBgYXJtNjRgIHVzZXMgYSBgdmlydGAgbWFjaGluZSwgd2hpY2ggZG9lc24mIzM5O3QgaW5jbHVkZSB0aGF0LgoKTm93LCBpZiB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgc2FpZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIGV2ZW4gd2hlbiB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiBpdCBtdXN0IGJlIGNhcmVmdWxseSBhc3Nlc3NlZC4KCklzIHRoaXMgY29kZSAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gUUVNVT8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBRRU1VICpkb2VzKiBoYXZlIGEgYHJhc3BpNGJgIG1hY2hpbmUgdHlwZSwgc28gaXQgKmlzKiBwb3NzaWJsZSwgdGVjaG5pY2FsbHkuIEJ1dCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IFRoaXMgcGF0Y2ggaXMganVzdCBhIG9uZS1saW5lIGZpeCwgYWRkaW5nIGEgdGltZW91dCBjaGVjayB0byBhIGhhcmR3YXJlIHdhaXQgbG9vcC4gT2theSwgd2hhdCBhcmUgd2UgdHJ5aW5nIHRvIGZpbmQgYnkgZnV6emluZyB0aGlzPyBJZiB0aGUgdGltZW91dCBvY2N1cnMsIGl0IGp1c3QgcmV0dXJucyBgLUVUSU1FRE9VVGAuIFRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYHVuaW1hY19tZGlvX3JlYWRgIG9yIGB1bmltYWNfbWRpb193cml0ZWAsIHdpbGwgdGhlbiByZXR1cm4gdGhlIHNhbWUgZXJyb3IgY29kZS4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgZXJyb3IgcGF0aC4gSSBkb24mIzM5O3QgdGhpbmsgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gSXQmIzM5O3MgYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIHRpbWVvdXQgZml4LCBhbmQgaXQmIzM5O3MgaGlnaGx5IHNwZWNpZmljIHRvIGEgcGxhdGZvcm0gdGhhdCBTeXprYWxsZXIgKmRvZXNuJiMzOTt0KiB0eXBpY2FsbHkgdGFyZ2V0LgoKTGV0JiMzOTtzIHRoaW5rIHRocm91Z2ggdGhlIHJlYXNvbmluZy4gJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHRpbWVvdXQgY2hlY2sgdG8gYSBoYXJkd2FyZSB3YWl0IGxvb3AgaW4gdGhlIEJyb2FkY29tIEdFTkVUIGRyaXZlci4gVGhpcyBpcyBhIHRyaXZpYWwgZml4IGZvciBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IGlzIG5vdCB0eXBpY2FsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzICh1bmxlc3Mgc3BlY2lmaWNhbGx5IHJ1bm5pbmcgUUVNVSB3aXRoIHJhc3BpNGIgbWFjaGluZSB0eXBlKS4gRnV6emluZyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgdW5saWtlbHkgdG8geWllbGQgbWVhbmluZ2Z1bCByZXN1bHRzLiYjMzQ7IE1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgaXMgdGhlIG9ubHkgY2hhbmdlLiBPa2F5LCBpdCYjMzk7cyB0aGUgb25seSBmaWxlIGFmZmVjdGVkLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGlmIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlzIGFwcHJvcHJpYXRlIGJhc2VkIG9uIHRoZSBwcm9tcHRzJiMzOTsgY3JpdGVyaWEuIEl0IHN0YXRlcyB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoaXMgaXMgc3BlY2lmaWMgdG8gYSBCcm9hZGNvbSBHRU5FVCBkcml2ZXIsIGFuZCBpcyBub3QgcGFydCBvZiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBQQ0kvVVNCIGRldmljZXMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IFZNKSwgaXQgZG9lcyBmaXQgdGhpcyBjcml0ZXJpYS4gV2hpbGUgUUVNVSBjYW4gZW11bGF0ZSB0aGUgZW50aXJlIFNvQyAocmFzcGk0YiksIHN5emthbGxlciBmdXp6aW5nIGlzIHR5cGljYWxseSBkb25lIG9uIGdlbmVyaWMgVk1zIHdoZXJlIHRoaXMgcGxhdGZvcm0gZGV2aWNlIGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQgb3Igc29mdHdhcmUtZW11bGF0ZWQgKGxpa2UgbWFjODAyMTFfaHdzaW0pLgoKVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhlcmUmIzM5O3MgdGhlIGZpbmFsaXplZCByZWFzb25pbmc6ClRoZSBwYXRjaCBhZGRzIGEgdGltZW91dCBjaGVjayB0byBhIGhhcmR3YXJlIHdhaXQgbG9vcCBpbiB0aGUgQnJvYWRjb20gR0VORVQgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBzcGVjaWZpYyB0byBCcm9hZGNvbSBTb0NzIChlLmcuLCBSYXNwYmVycnkgUGkgNCkgYW5kIHJlbGllcyBvbiBtZW1vcnktbWFwcGVkIGhhcmR3YXJlIHJlZ2lzdGVycy4gSXQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBzdGFuZGFyZCBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBHQ0Ugb3IgUUVNVSAmIzM5O3ZpcnQmIzM5OyBtYWNoaW5lcykgdXNlZCBmb3IgZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgaXMgYSB0cml2aWFsIGVycm9yLXBhdGggZml4IGZvciBoYXJkd2FyZSB0aW1lb3V0cy4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wIGluIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEJyb2FkY29tIFNvQ3MgKGUuZy4sIFJhc3BiZXJyeSBQaSA0KSBhbmQgcmVsaWVzIG9uIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VICYjMzk7dmlydCYjMzk7IG1hY2hpbmVzKSB1c2VkIGZvciBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBhIHRyaXZpYWwgZXJyb3ItcGF0aCBmaXggZm9yIGhhcmR3YXJlIHRpbWVvdXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHRpbWVvdXQgY2hlY2sgdG8gYSBoYXJkd2FyZSB3YWl0IGxvb3AgaW4gdGhlIEJyb2FkY29tIEdFTkVUIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gQnJvYWRjb20gU29DcyAoZS5nLiwgUmFzcGJlcnJ5IFBpIDQpIGFuZCByZWxpZXMgb24gbWVtb3J5LW1hcHBlZCBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQgb3Igc29mdHdhcmUtZW11bGF0ZWQgaW4gc3RhbmRhcmQgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUgJiMzOTt2aXJ0JiMzOTsgbWFjaGluZXMpIHVzZWQgZm9yIGZ1enppbmcuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlIGlzIGEgdHJpdmlhbCBlcnJvci1wYXRoIGZpeCBmb3IgaGFyZHdhcmUgdGltZW91dHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6Mzg6MzkuODg2MDEwNTcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMTU2ODEyNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdGltZW91dCBjaGVjayB0byBhIGhhcmR3YXJlIHdhaXQgbG9vcCBpbiB0aGUgQnJvYWRjb20gR0VORVQgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBzcGVjaWZpYyB0byBCcm9hZGNvbSBTb0NzIChlLmcuLCBSYXNwYmVycnkgUGkgNCkgYW5kIHJlbGllcyBvbiBtZW1vcnktbWFwcGVkIGhhcmR3YXJlIHJlZ2lzdGVycy4gSXQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBzdGFuZGFyZCBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBHQ0Ugb3IgUUVNVSAndmlydCcgbWFjaGluZXMpIHVzZWQgZm9yIGZ1enppbmcuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlIGlzIGEgdHJpdmlhbCBlcnJvci1wYXRoIGZpeCBmb3IgaGFyZHdhcmUgdGltZW91dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjozODozOS44ODYwMTU4NDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDEyNDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI0ZmI2NzRlMGU0NzBlYTQ0MzI2NWUyY2FiNWQ4MGZlNTRlNmI0YzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDY6Mzg6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuY1xcbmluZGV4IGE0ZTBkNWE2ODI2ODc1Li45MmI1OTk3ZDAwYjI0YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jXFxuQEAgLTQzOSwxMCArNDM5LDEyIEBAIHN0YXRpYyBpbnQgYmNtZ2VuZXRfbWlpX3dhaXQodm9pZCAqd2FpdF9mdW5jX2RhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYgPSB3YWl0X2Z1bmNfZGF0YTtcXG4gXFxuLVxcdHdhaXRfZXZlbnRfdGltZW91dChwcml2LVxcdTAwM2V3cSxcXG4tXFx0XFx0XFx0ICAgIShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXFxuLVxcdFxcdFxcdCAgIFxcdTAwMjYgTURJT19TVEFSVF9CVVNZKSxcXG4tXFx0XFx0XFx0ICAgSFogLyAxMDApO1xcbitcXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChwcml2LVxcdTAwM2V3cSxcXG4rXFx0XFx0XFx0XFx0IShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjYgTURJT19TVEFSVF9CVVNZKSxcXG4rXFx0XFx0XFx0XFx0SFogLyAxMDApKVxcbitcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjozODo0MC4zMzA4MTQ3MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MTcxMjAwMzA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHRpbWVvdXQgY2hlY2sgdG8gYSBoYXJkd2FyZSB3YWl0IGxvb3AgaW4gdGhlIEJyb2FkY29tIEdFTkVUIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gQnJvYWRjb20gU29DcyAoZS5nLiwgUmFzcGJlcnJ5IFBpIDQpIGFuZCByZWxpZXMgb24gbWVtb3J5LW1hcHBlZCBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQgb3Igc29mdHdhcmUtZW11bGF0ZWQgaW4gc3RhbmRhcmQgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUgJ3ZpcnQnIG1hY2hpbmVzKSB1c2VkIGZvciBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBhIHRyaXZpYWwgZXJyb3ItcGF0aCBmaXggZm9yIGhhcmR3YXJlIHRpbWVvdXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNGZiNjc0ZTBlNDcwZWE0NDMyNjVlMmNhYjVkODBmZTU0ZTZiNGMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDY6Mzg6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jXG5pbmRleCBhNGUwZDVhNjgyNjg3NS4uOTJiNTk5N2QwMGIyNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmNcbkBAIC00MzksMTAgKzQzOSwxMiBAQCBzdGF0aWMgaW50IGJjbWdlbmV0X21paV93YWl0KHZvaWQgKndhaXRfZnVuY19kYXRhKVxuIHtcbiBcdHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2ID0gd2FpdF9mdW5jX2RhdGE7XG4gXG4tXHR3YWl0X2V2ZW50X3RpbWVvdXQocHJpdi1cdTAwM2V3cSxcbi1cdFx0XHQgICAhKGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NRElPX0NNRClcbi1cdFx0XHQgICBcdTAwMjYgTURJT19TVEFSVF9CVVNZKSxcbi1cdFx0XHQgICBIWiAvIDEwMCk7XG4rXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChwcml2LVx1MDAzZXdxLFxuK1x0XHRcdFx0IShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXG4rXHRcdFx0XHRcdTAwMjYgTURJT19TVEFSVF9CVVNZKSxcbitcdFx0XHRcdEhaIC8gMTAwKSlcbitcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjozODo0MC4zMzA4MTY4MjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODQ0NjgyMzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBgYmNtbWlpLmNgIHdpdGhpbiB0aGUgQnJvYWRjb20gR0VORVQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0J3MgYSB0aW1lb3V0IGhhbmRsaW5nIGNoYW5nZSBpbiBgYmNtZ2VuZXRfbWlpX3dhaXRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGRyaXZlciBpcyBldmVuICpyZWFjaGFibGUqIGZvciBmdXp6aW5nLCBhbmQgaWYgc28sIGhvdy4gSXQncyBhIEJyb2FkY29tIEdFTkVULCB3aGljaCBJIGtub3cgaXMgYW4gRXRoZXJuZXQgTUFDIHR5cGljYWxseSB1c2VkIGluIEJyb2FkY29tIHNldC10b3AgYm94IFNvQ3MgYW5kIHRoZSBSYXNwYmVycnkgUGkgNCDigJMgc28gdGhhdOKAmXMgbXkgc3RhcnRpbmcgcG9pbnQuXG5cbkZpcnN0LCB0aGUgdmlydHVhbGl6YXRpb24gYW5nbGUuIENhbiBJIGdldCB0aGlzIHRvIHJ1biB1bmRlciBRRU1VPyBIbW0sIFFFTVUgaGFzIHRoZSBgYmNtMjgzOGAgbW9kZWwsIGJ1dCB1c3VhbGx5IEdFTkVUIGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIHg4NiBRRU1VIHNldHVwcywgcmlnaHQ/IE1heWJlLCBqdXN0IG1heWJlLCBpdOKAmXMgcHJlc2VudCBub3chIEhvbGQgb27igKYgd2Fzbid0IHRoZXJlIGEgYHJhc3BpNGJgIFFFTVUgbWFjaGluZT8gVGhhdCAqY291bGQqIGVtdWxhdGUgR0VORVQuIFRoZSBpc3N1ZSBpcyBzeXprYWxsZXIgaXMgdXN1YWxseSBydW4gb24geDg2XzY0IG9yIGFybTY0IFZNcywgdGhvdWdoLlxuXG5SaWdodCwgc28gdGhhdCdzIHRoZSBvYnZpb3VzIHJvdXRlLiBXaGF0IGFib3V0IGxlc3MgY29tbW9uIG9wdGlvbnM/IExldCdzIHJ1bGUgdGhlbSBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhIHRyaWNrLiBJcyB0aGVyZSBhbnkgUENJIG9yIFVTQiBlbXVsYXRpb24gYXZhaWxhYmxlIGZvciBHRU5FVD8gU2VlbXMgdW5saWtlbHkgYXMgaXQncyBhIHBsYXRmb3JtIGRldmljZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jYCB0byBzZWUgaG93IGl0J3MgcHJvYmVkLiBUaGF0IHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IEkgbWlnaHQgZ2V0IHRoZSBkcml2ZXIgbG9hZGVkIGFuZCBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjozOTo1OC43Nzc2NDMzNjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3MjYxNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9NDQwMT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY21nZW5ldF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTQ0MTEtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjQ0MTI6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihiY21nZW5ldF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtNDQxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6Mzk6NTkuMTU0OTExNTI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzOTU0NDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipQbGF0Zm9ybSBEcml2ZXIgQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBhIHBsYXRmb3JtIGRyaXZlci4gRmlyc3QsIGFuZCBhbHdheXMsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgY29tcGF0aWJsZSBzdHJpbmdzLiBUaGF0J3MgdGhlIGJlZHJvY2sgb2YgaG93IHRoaXMgZHJpdmVyIGlkZW50aWZpZXMgaXRzZWxmIGFuZCBob3cgdGhlIHN5c3RlbSBrbm93cyBpdCBzaG91bGQgbWFuYWdlIGEgc3BlY2lmaWMgZGV2aWNlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHN0cmluZ3MgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgc2lsaWNvbiBpdCdzIG1lYW50IHRvIGhhbmRsZSwgaWYgaXQgaXMgdXNpbmcgYW55IGN1c3RvbSBuYW1pbmcgc2NoZW1lcywgYW5kIGlmIHRoZXJlIGFyZSBrbm93biBpc3N1ZXMgd2l0aCBhbnkgb2YgdGhlIHZlbmRvciBzcGVjaWZpYyBuYW1pbmcgc2NoZW1lcy4gRnJvbSB0aGVyZSB3ZSBjYW4gbW92ZSB0byBsb29raW5nIGF0IHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA2OjQwOjAyLjU5NDQ1ODY2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODUwNTc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmNvbXBhdGlibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9Mzk1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21nZW5ldF9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6Mzk1NzpcXHR7IC5jb21wYXRpYmxlID0gXFxcImJyY20sZ2VuZXQtdjFcXFwiLCAuZGF0YSA9IFxcdTAwMjZ2MV9wbGF0X2RhdGEgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NTg6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJicmNtLGdlbmV0LXYyXFxcIiwgLmRhdGEgPSBcXHUwMDI2djJfcGxhdF9kYXRhIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozOTU5OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYnJjbSxnZW5ldC12M1xcXCIsIC5kYXRhID0gXFx1MDAyNnYzX3BsYXRfZGF0YSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6Mzk2MDpcXHR7IC5jb21wYXRpYmxlID0gXFxcImJyY20sZ2VuZXQtdjRcXFwiLCAuZGF0YSA9IFxcdTAwMjZ2NF9wbGF0X2RhdGEgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NjE6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJicmNtLGdlbmV0LXY1XFxcIiwgLmRhdGEgPSBcXHUwMDI2djVfcGxhdF9kYXRhIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozOTYyOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYnJjbSxiY20yNzExLWdlbmV0LXY1XFxcIiwgLmRhdGEgPSBcXHUwMDI2YmNtMjcxMV9wbGF0X2RhdGEgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NjM6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJicmNtLGJjbTc3MTItZ2VuZXQtdjVcXFwiLCAuZGF0YSA9IFxcdTAwMjZiY203NzEyX3BsYXRfZGF0YSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzk2NC1cXHR7IH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA2OjQwOjAyLjY1Mjk3NTYwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMjk1MDc1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQnJvYWRjb20gR0VORVQgUGxhdGZvcm0gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIEJyb2FkY29tIEdFTkVULiBDYW4gSSBldmVuICp0aGluayogYWJvdXQgZnV6emluZyB0aGlzIHdpdGggU3l6a2FsbGVyPyBUaGUgY29yZSBxdWVzdGlvbiBpczogY2FuIFN5emthbGxlciBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcz8gSSBrbm93IGl0IGNhbiwgdGhyb3VnaCBgc3l6X2Rldl9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCAqaWYqIHRoZSBrZXJuZWwgc3VwcG9ydHMgaXQuIEJ1dCBwbGF0Zm9ybSBkZXZpY2VzIHVzdWFsbHkgY29tZSBmcm9tIERldmljZSBUcmVlIG9yIEFDUEksIHJpZ2h0PyBTeXprYWxsZXIgaGFzIHNvbWUgbWVjaGFuaXNtcyBmb3IgaW5qZWN0aW5nIHRoZW0sIGVpdGhlciB3aXRoIHBzZXVkby1zeXNjYWxscyBvciBjb25maWd1cmF0aW9ucywgYnV0IGl04oCZcyByYXJlbHkgc3RyYWlnaHRmb3J3YXJkLCBlc3BlY2lhbGx5IGZvciBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIG9uIFN5c3RlbS1vbi1DaGlwcy4gVGhleSBuZWVkIGV4cGxpY2l0IHRhcmdldGluZyBvciBhIGdlbmVyaWMgaW5zdGFudGlhdGlvbiBtZXRob2QuXG5cbkhtbSwgbGV0IG1lIGNoZWNr4oCmIGRvZXMgU3l6a2FsbGVyIGhhdmUgYW55dGhpbmcgbmFtZWQgYHN5el9nZW5ldF8uLi5gPyBOb3BlLiBUaGF0J3MgYSBkZWFkIGVuZC5cblxuTm93LCBjYW4gSSBldmVuICpyZWFjaCogdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElmIHRoZSBrZXJuZWwgaGFzIGBDT05GSUdfQkNNR0VORVRgIGVuYWJsZWQsIGFuZCBTeXprYWxsZXIgcnVucyBvbiBhbiBBUk02NCBWTSB3aXRoIGEgZGV2aWNlIHRyZWUgdGhhdCBpbmNsdWRlcyB0aGUgQnJvYWRjb20gZGV2aWNlLCB0aGVuICptYXliZSouIEJ1dCwgYW5kIHRoaXMgaXMgdGhlIHR5cGljYWwgc2NlbmFyaW8sIFN5emthbGxlciBvZnRlbiBydW5zIGluIGdlbmVyaWMgVk1zIGxpa2UgeDg2XzY0IFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLlxuXG5CdXQgaG9sZCBvbiwgU3l6a2FsbGVyICpkb2VzKiBmdXp6IHNvbWUgcGxhdGZvcm0gZHJpdmVycyBpZiB0aGV5IGNhbiBiZSBpbnN0YW50aWF0ZWQuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVja+KApiBkb2VzIGl0IGhhdmUgc29tZXRoaW5nIGxpa2UgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYD8gTm8sIG5vdGhpbmcgbGlrZSB0aGF0LCBidXQgbWF5YmUgdGhlcmUncyBhIHdvcmthcm91bmQuXG5cbkkgbmVlZCB0byBsb29rIGZvciBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGNsdWVzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBpZiB0aGVyZSdzIGFueSBjb25maWcgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6MDkuODgyNDg1Mzc5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzIwMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCQ01HRU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9NjM9Y29uZmlnIEJDTTYzWFhfRU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy03MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjcyOmNvbmZpZyBCQ01HRU5FVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctNzMtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEdFTkVUIGludGVybmFsIE1BQyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDowOS45MzgyMTE2MzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY2MDczNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFB1cnBvc2Ugb2YgYGJjbWdlbmV0X21paV93YWl0YCoqXG5cbk9rYXksIHNvIHRoZSB0aG91Z2h0IHByb2Nlc3MgaXMgemVyb2luZyBpbiBvbiBgYmNtZ2VuZXRfbWlpX3dhaXRgLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsIFwiUmlnaHQsIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLlwiIFNpbmNlIEknbSBmYW1pbGlhciB3aXRoIEJyb2FkY29tJ3MgRXRoZXJuZXQgaW1wbGVtZW50YXRpb25zIGFuZCBsaWtlbHkgdGhlIHVuZGVybHlpbmcgTUlJL0dNSUkvUkdNSUkgaW50ZXJmYWNlIG51YW5jZXMsIEknbSB0aGlua2luZyBhYm91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgUEhZL01BQyBpbnRlcmFjdGlvbi4gV2hhdCBzcGVjaWZpYyBzaXR1YXRpb25zIHdvdWxkIG5lY2Vzc2l0YXRlIGEgd2FpdD8gSXMgaXQgYSBkZWxheSBmb3IgUEhZIGluaXRpYWxpemF0aW9uIGFmdGVyIHBvd2VyLW9uPyBQZXJoYXBzIHdhaXRpbmcgZm9yIGEgbGluayBlc3RhYmxpc2htZW50IHNpZ25hbCB0byBzdGFiaWxpemU/IE9yIG1heWJlIGl0J3MgYSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHdpdGhpbiB0aGUgZHJpdmVyIHRvIGVuc3VyZSBwcm9wZXIgTUlJIHJlZ2lzdGVyIGFjY2VzcyBhbmQgcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGhhbmRsaW5nIGludGVycnVwdHMgb3IgRE1BLiBUaGUgaW50ZW50IGlzIGxpa2VseSB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRob3NlIHNjZW5hcmlvcyBpdCBhcHBsaWVzIHRvLiBEZXBlbmRpbmcgb24gaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2hlcmUgaW4gdGhlIGNvbnRyb2wgZmxvdyBpdCBpcyBpbXBsZW1lbnRlZCwgaXQgbWF5IGJlIHByb3ZpZGluZyBhIHRpbWUtb3V0IG1lY2hhbmlzbSwgb3IgbW9yZSBjb21wbGV4IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBkZXBlbmRpbmcgb24gaG93IGl0J3MgaW1wbGVtZW50ZWQgYW5kIHVzZWQuIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE4NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA2OjQwOjE0LjkwNDI4Nzk4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1OTUzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmNtZ2VuZXRfbWlpX3dhaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTQxOD1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpiY21nZW5ldF9taWlfb2ZfZmluZF9tZGlvKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtNDM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjQzODpzdGF0aWMgaW50IGJjbWdlbmV0X21paV93YWl0KHZvaWQgKndhaXRfZnVuY19kYXRhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz00NTE9c3RhdGljIGludCBiY21nZW5ldF9taWlfcmVnaXN0ZXIoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy00NjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6NDY4OlxcdHBwZC53YWl0X2Z1bmMgPSBiY21nZW5ldF9taWlfd2FpdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy00NjktXFx0cHBkLndhaXRfZnVuY19kYXRhID0gcHJpdjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6MTQuOTYxODkwNzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2MDEyMDM3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgQnJvYWRjb20gR0VORVQgTURJTyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZm9yIHRoZSBNRElPIGJ1cywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQnJvYWRjb20gU29Dcywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZm9yIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLiBXZSdyZSB0YWxraW5nIHBsYXRmb3JtIGRyaXZlciBoZXJlLCBsaWtlbHkgdGllZCB0byBoYXJkd2FyZSBvbiBzb21ldGhpbmcgbGlrZSBhIFJhc3BiZXJyeSBQaSA0LiBVbmxlc3MgUUVNVSBzcGVjaWZpY2FsbHkgZW11bGF0ZXMgdGhpcywgaXQncyBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgcmVhY2hhYmxlIGluIGEgdHlwaWNhbCBHQ0Ugb3IgZ2VuZXJpYyBRRU1VIGVudmlyb25tZW50LiBUaGUgcHJvbXB0LCBob3dldmVyLCBleHBsaWNpdGx5IGFza3MgaWYgaXQncyBcImltcG9zc2libGUgdG8gcmVhY2gsXCIgYW5kIHRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBjaXRlcyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEhtbS4gSWYgd2UgcnVuIFFFTVUgd2l0aCB0aGUgYC1NIHJhc3BpNGJgIG1hY2hpbmUgdHlwZSwgdGhlbiBpdCAqY291bGQqIGJlIHJlYWNoZWQuIEJ1dCwgaXMgdGhhdCBjb25zaWRlcmVkIGEgXCJzdGFuZGFyZFwiIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBOb3JtYWxseSwgdGhlc2UgU29DLXNwZWNpZmljIGRyaXZlcnMgYXJlIHNlZW4gYXMgdW5yZWFjaGFibGUgdW5sZXNzIHNvZnR3YXJlIGVtdWxhdGlvbiBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgaGFyZHdhcmUgdGhhdOKAmXMgZW11bGF0ZWQgYXMgcGFydCBvZiBnZW5lcmljIGVudmlyb25tZW50cy4gQ2FuIHRoaXMgYmUgaW5zdGFudGlhdGVkIHZpYSBgc3lzZnNgIG9yIGBjb25maWdmc2A/IE5vLiBXaGF0IGFib3V0IGRldmljZSB0cmVlIG92ZXJsYXlzPyBZZXMsIHRoZW9yZXRpY2FsbHksIGlmIHRoZSBrZXJuZWwgc3VwcG9ydHMgaXQuIEJ1dCBldmVuIGlmIHRoZSBkcml2ZXIgKmRvZXMqIGxvYWQsIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUgb3IgUUVNVSdzIGVtdWxhdGlvbiBvZiB0aGUgR0VORVQgcmVnaXN0ZXJzLCBpdCdzIGxpa2VseSB0byBmYWlsLCBoYW5nLCBvciBjcmFzaCB3aGVuIGl0IHRyaWVzIHRvIGFjY2VzcyBwaHlzaWNhbCBtZW1vcnkuXG5cbk9rYXksIGxldCdzIHNlZSBpZiBRRU1VIGVtdWxhdGVzIGl0LiBBaCwgdGhlIFFFTVUgc291cmNlIGhhcyBgaHcvbmV0L2JjbTI4MzhfZ2VuZXQuY2Ag4oCTIHllcCwgUUVNVSAqZG9lcyogZW11bGF0ZSBpdCEgSG93ZXZlciwgSSBuZWVkIHRvIGtub3cgaWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgYHJhc3BpNGJgLiBTeXprYWxsZXIgaGFzIGBhcm02NGAsIGJ1dCB0eXBpY2FsbHkgdXNlcyBgdmlydGAuIFNvLCBpZiB3ZSBjb25zaWRlciBRRU1VIGVtdWxhdGlvbiBhcyDigJxwb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsXCIgdGhlbiB5ZXMsIGl0J3MgZG9hYmxlLlxuXG5Ob3csIGxldCdzIGZvY3VzIG9uIHRoZSBhY3R1YWwgcGF0Y2guIEl04oCZcyBhIHNpbXBsZSB0aW1lb3V0IGNoZWNrOiBhZGRpbmcgYW4gYC1FVElNRURPVVRgIHJldHVybi4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2U6IHJldHVybmluZyBhbiBlcnJvciBjb2RlLiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/IFllcywgdGhlcmUgaXMgZnVuY3Rpb25hbCBjaGFuZ2UuIExldCdzIGRpZyBkZWVwZXI6IGlzIGBiY21nZW5ldF9taWlfd2FpdGAgcmVhY2hhYmxlPyBJdCdzIGNhbGxlZCBieSBNRElPIGJ1cyBjb2RlLiBJZiB3ZSBkZWVtIHRoaXMgd29ydGggZnV6emluZywgdGhhdCBtZWFucyB3ZSBhbHNvIG5lZWQgdG8gYWRkIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb25maWd1cmF0aW9ucyB3b3VsZCBiZSBgQkNNR0VORVRgLCBhbmQgdGhlIGZvY3VzIHN5bWJvbCB3b3VsZCBiZSBgYmNtZ2VuZXRfbWlpX3dhaXRgLlxuXG5XYWl0LiBJcyBpdCAqcmVhbGx5KiB3b3J0aCBmdXp6aW5nPyBJZiB0aGUgZGV2aWNlIGlzbid0IHByZXNlbnQsIHRoZSBkcml2ZXIgd29u4oCZdCBwcm9iZS4gSWYgdGhlIGRldmljZSAqaXMqIHByZXNlbnQgKGxpa2UgaW4gUUVNVSBgcmFzcGk0YmApLCB0aGUgZHJpdmVyIHByb2JlcywgYW5kIGBiY21nZW5ldF9taWlfd2FpdGAgaXMgbGlrZWx5IGNhbGxlZCBkdXJpbmcgTURJTyBvcGVyYXRpb25zLiBDYW4gc3l6a2FsbGVyIHRyaWdnZXIgTURJTyBvcGVyYXRpb25zIGZyb20gdXNlcnNwYWNlPyBVc3VhbGx5IE1ESU8gb3BlcmF0aW9ucyBoYXBwZW4gZHVyaW5nIHByb2JlIG9yIHdoZW4gY29uZmlndXJpbmcgdGhlIFBIWSB2aWEgYGV0aHRvb2xgIG9yIGBpb2N0bGAuIFRpbWUgdG8gY2hlY2sgd2hlcmUgYHdhaXRfZnVuY2AgaXMgYWN0dWFsbHkgdXNlZCBpbiB0aGUgTURJTyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODA1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA2OjQwOjI4LjU2MzA5NzQyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUzMTc0MzYzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3YWl0X2Z1bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6MjguOTE2Mjg3NjcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDYyMTUwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRlY2lwaGVyaW5nIHRoZSBQbGF0Zm9ybSBEYXRhIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYHBwZGAgYW5kIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIHJlZmVycmluZyB0byBhIGBzdHJ1Y3QgbWRpb19taWlfYnVzX3BsYXRmb3JtX2RhdGFgLiBUaGF0IHJpbmdzIGEgYmVsbCwgYnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGlzIGFzc29jaWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWVhbnMgaW4gdGhpcyBjb250ZXh0IGFuZCBob3cgdGhpcyB0aWVzIHRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgYGJjbWdlbmV0X21paV9yZWdpc3RlcmAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzZWUgaG93IHRoaXMgYHBwZGAg4oCTIGFzc3VtaW5nIGl0IGlzIHdoYXQgSSB0aGluayBpdCBpcyDigJMgaXMgYWN0dWFsbHkgdXRpbGl6ZWQgYW5kIHdoYXQgaXRzIHJvbGUgaXMgaW4gdGhlIGJpZ2dlciBzY2hlbWUgb2YgdGhpbmdzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZ2V0IGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDozMi4yNjI1MDU3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA4MTM1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmNtZ2VuZXRfbWlpX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz00Mzg9c3RhdGljIGludCBiY21nZW5ldF9taWlfd2FpdCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzo0NTE6c3RhdGljIGludCBiY21nZW5ldF9taWlfcmVnaXN0ZXIoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtNDUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTU5MT1pbnQgYmNtZ2VuZXRfbWlpX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTU5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzo1OTY6XFx0cmV0ID0gYmNtZ2VuZXRfbWlpX3JlZ2lzdGVyKHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTU5Ny1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDozMi4zMzMzMjU4OTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MzY4ODE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJjbWdlbmV0X21paV9yZWdpc3RlcmAgY29kZS5cblxuKipEaXZpbmcgaW50byBgYmNtZ2VuZXRfbWlpX3JlZ2lzdGVyYCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgXCJ3aGF0IGlzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZG9pbmcgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0P1wiIEl0J3MgbmFtZWQgd2l0aCBcIkJDTVwiIHNvIGl0IG11c3QgYmUgQnJvYWRjb20tc3BlY2lmaWMsIGFuZCBcImdlbmV0XCIgcHJvYmFibHkgcmVmZXJzIHRvIGdpZ2FiaXQgZXRoZXJuZXQuIFRoZSBcIk1JSVwiIHBhcnQgc3VnZ2VzdHMgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UsIGEgc3RhbmRhcmQgZm9yIGNvbm5lY3RpbmcgUEhZIHRyYW5zY2VpdmVycyB0byBNQUMgY29udHJvbGxlcnMuIFNvLCBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBjb25maWd1cmluZyBvciByZWdpc3RlcmluZyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTUlJIGludGVyZmFjZSBmb3IgYSBCcm9hZGNvbSBnaWdhYml0IGV0aGVybmV0IGNvbnRyb2xsZXIuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHlwZSBvZiByZWdpc3RyYXRpb24gaXMgYmVpbmcgZG9uZS4gSXMgaXQgcmVnaXN0ZXIgdGhlIE1JSSBidXMsIGEgcGFydGljdWxhciBQSFksIGEgc2V0IG9mIE1JSSByZWdpc3RlcnMsIG9yIGlzIGl0IHNldHRpbmcgdXAgaW50ZXJydXB0IGhhbmRsZXJzPyBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGludm9sdmVzIHRoZSBsb3ctbGV2ZWwgc2V0dXAgbmVjZXNzYXJ5IHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZXh0ZXJuYWwgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlIHZpYSB0aGUgTUlJIGJ1cy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiByZWdpc3RlciBhZGRyZXNzZXMsIFBIWSBJRHMsIGFuZCBwb3NzaWJseSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbnMsIHRoYXQgYXJlIGxpa2VseSBwcmVzZW50IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6MzYuMDg3MDE2NDY5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1MTpcXHRzdGF0aWMgaW50IGJjbWdlbmV0X21paV9yZWdpc3RlcihzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcXG4gNDUyOlxcdHtcXG4gNDUzOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwcml2LVxcdTAwM2VwZGV2O1xcbiA0NTQ6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpkbiA9IHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlO1xcbiA0NTU6XFx0XFx0c3RydWN0IHVuaW1hY19tZGlvX3BkYXRhIHBwZDtcXG4gNDU2OlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBwZGV2O1xcbiA0NTc6XFx0XFx0c3RydWN0IHJlc291cmNlICpwcmVzLCByZXM7XFxuIDQ1ODpcXHRcXHRpbnQgaWQsIHJldDtcXG4gNDU5OlxcdFxcbiA0NjA6XFx0XFx0cHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7XFxuIDQ2MTpcXHRcXHRpZiAoIXByZXMpIHtcXG4gNDYyOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkludmFsaWQgcmVzb3VyY2VcXFxcblxcXCIpO1xcbiA0NjM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ2NDpcXHRcXHR9XFxuIDQ2NTpcXHRcXHRtZW1zZXQoXFx1MDAyNnJlcywgMCwgc2l6ZW9mKHJlcykpO1xcbiA0NjY6XFx0XFx0bWVtc2V0KFxcdTAwMjZwcGQsIDAsIHNpemVvZihwcGQpKTtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0cHBkLndhaXRfZnVuYyA9IGJjbWdlbmV0X21paV93YWl0O1xcbiA0Njk6XFx0XFx0cHBkLndhaXRfZnVuY19kYXRhID0gcHJpdjtcXG4gNDcwOlxcdFxcdHBwZC5idXNfbmFtZSA9IFxcXCJiY21nZW5ldCBNSUkgYnVzXFxcIjtcXG4gNDcxOlxcdFxcdC8qIFBhc3MgYSByZWZlcmVuY2UgdG8gb3VyIFxcXCJtYWluXFxcIiBjbG9jayB3aGljaCBpcyB1c2VkIGZvciBNRElPXFxuIDQ3MjpcXHRcXHQgKiB0cmFuc2ZlcnNcXG4gNDczOlxcdFxcdCAqL1xcbiA0NzQ6XFx0XFx0cHBkLmNsayA9IHByaXYtXFx1MDAzZWNsaztcXG4gNDc1OlxcdFxcbiA0NzY6XFx0XFx0LyogVW5pbWFjIE1ESU8gYnVzIGNvbnRyb2xsZXIgc3RhcnRzIGF0IFVuaU1BQyBvZmZzZXQgKyBNRElPX0NNRFxcbiA0Nzc6XFx0XFx0ICogYW5kIGlzIDIgKiAzMi1iaXRzIHdvcmQgbG9uZywgOCBieXRlcyB0b3RhbC5cXG4gNDc4OlxcdFxcdCAqL1xcbiA0Nzk6XFx0XFx0cmVzLnN0YXJ0ID0gcHJlcy1cXHUwMDNlc3RhcnQgKyBHRU5FVF9VTUFDX09GRiArIFVNQUNfTURJT19DTUQ7XFxuIDQ4MDpcXHRcXHRyZXMuZW5kID0gcmVzLnN0YXJ0ICsgODtcXG4gNDgxOlxcdFxcdHJlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNO1xcbiA0ODI6XFx0XFxuIDQ4MzpcXHRcXHRpZiAoZG4pXFxuIDQ4NDpcXHRcXHRcXHRpZCA9IG9mX2FsaWFzX2dldF9pZChkbiwgXFxcImV0aFxcXCIpO1xcbiA0ODU6XFx0XFx0ZWxzZVxcbiA0ODY6XFx0XFx0XFx0aWQgPSBwZGV2LVxcdTAwM2VpZDtcXG4gNDg3OlxcdFxcbiA0ODg6XFx0XFx0cHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoVU5JTUFDX01ESU9fRFJWX05BTUUsIGlkKTtcXG4gNDg5OlxcdFxcdGlmICghcHBkZXYpXFxuIDQ5MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0LyogUmV0YWluIHRoaXMgcGxhdGZvcm1fZGV2aWNlIHBvaW50ZXIgZm9yIGxhdGVyIGNsZWFudXAgKi9cXG4gNDkzOlxcdFxcdHByaXYtXFx1MDAzZW1paV9wZGV2ID0gcHBkZXY7XFxuIDQ5NDpcXHRcXHRwcGRldi1cXHUwMDNlZGV2LnBhcmVudCA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIDQ5NTpcXHRcXHRpZiAoZG4pXFxuIDQ5NjpcXHRcXHRcXHRwcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUgPSBiY21nZW5ldF9taWlfb2ZfZmluZF9tZGlvKHByaXYpO1xcbiA0OTc6XFx0XFx0ZWxzZVxcbiA0OTg6XFx0XFx0XFx0cHBkLnBoeV9tYXNrID0gfjA7XFxuIDQ5OTpcXHRcXG4gNTAwOlxcdFxcdHJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBwZGV2LCBcXHUwMDI2cmVzLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6MzYuMDg3MTExMTU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjYwNDM0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBteSBleHBlcnRpc2U6XG5cbioqTXkgSW50ZXJuYWwgQW5hbHlzaXMgb2YgVGhpcyBEcml2ZXIgU2V0dXAqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBpcyBkeW5hbWljYWxseSBjb25zdHJ1Y3RpbmcgYSBgdW5pbWFjLW1kaW9gIHBsYXRmb3JtIGRldmljZS4gVGhhdCdzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgcGxhdGZvcm0tYmFzZWQgZHJpdmVyczsgaXQgYWxsb3dzIHRoZSBzeXN0ZW0gdG8gZGVmaW5lIHRoZSBkZXZpY2UgYW5kIGl0cyByZXNvdXJjZXMsIGFuZCB0aGVuIHRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgYXR0YWNoZWQgdG8gaXQuIFRoZSBrZXkgaXMgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhlIHBsYXRmb3JtIGRhdGE6IGBwcGRgLiBUaGlzIGlzIGNyaXRpY2FsLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBgcHBkYCwgbGlrZWx5IHNvbWUgcG9pbnRlciB0byBhIHN0cnVjdHVyZSBvciBkYXRhLCBpcyBnb2luZyB0byBjb250YWluIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIGluaXRpYWxpemF0aW9uIGluZm9ybWF0aW9uIHRoZSBgdW5pbWFjLW1kaW9gIGRyaXZlciBuZWVkcy4gVGhpbmsgb2YgaXQgYXMgdGhlIHJlY2lwZS5cblxuVGhlIG1lbnRpb24gb2YgYHdhaXRfZnVuY2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHNvbWUgZm9ybSBvZiBzeW5jaHJvbml6YXRpb24gb3IgZXZlbnQgaGFuZGxpbmcgaXMgaW52b2x2ZWQuIEknZCBleHBlY3QgdG8gZmluZCB0aGlzIGJlaW5nIHVzZWQgZWl0aGVyIHRvIHdhaXQgZm9yIGEgY2VydGFpbiBzdGF0ZSB3aXRoaW4gdGhlIGhhcmR3YXJlIOKAkyBwZXJoYXBzIFBIWSBpbml0aWFsaXphdGlvbiBvciBsaW5rIGVzdGFibGlzaG1lbnQg4oCTIG9yIHRvIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIHRoZSBkcml2ZXIgdG8gcGF1c2UgYW5kIHJlc3VtZSBvcGVyYXRpb25zIGJhc2VkIG9uIGV4dGVybmFsIGV2ZW50cy4gR2l2ZW4gdGhlIE1ESU8gY29udGV4dCwgSSdtIGxlYW5pbmcgdG93YXJkIHRoZSBmb3JtZXI7IGxpa2VseSBpdOKAmXMgbWFuYWdpbmcgYWNjZXNzIHRvIHRoZSBNRElPIGJ1cyBpdHNlbGYsIHdhaXRpbmcgZm9yIG9wZXJhdGlvbnMgdG8gY29tcGxldGUsIG9yIGhhbmRsaW5nIGludGVycnVwdHMgdGhhdCBzaWduYWwgdGhlIGNvbXBsZXRpb24gb2YgTURJTyB0cmFuc2FjdGlvbnMuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgdW5pbWFjLW1kaW9gIHNvdXJjZSB0byBjb25maXJtLCBidXQgdGhpcyBpcyBhIHNvbGlkIGluaXRpYWwgYXNzZXNzbWVudC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgdG9vLCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgXCJwcGRcIiBkYXRhIHN0cnVjdHVyZSB0aGF0IGlzIHBhc3NlZC4gVGhhdCBjb250YWlucyB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3IgdGhpcyBzcGVjaWZpYyBkZXZpY2UuIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9ucyBpbiBteSBtaW5kIGFib3V0IHdoYXQgdHlwZXMgb2YgcGFyYW1ldGVycyBtaWdodCBiZSBzdG9yZWQgd2l0aGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDg3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDo0MC4zNTMxNTY4NjhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDg3ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhaXRfZnVuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jPTM4PXN0cnVjdCB1bmltYWNfbWRpb19wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtNDAtXFx0dm9pZCBfX2lvbWVtXFx0XFx0KmJhc2U7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzo0MTpcXHRpbnQgKCp3YWl0X2Z1bmMpXFx0KHZvaWQgKndhaXRfZnVuY19kYXRhKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjQyOlxcdHZvaWRcXHRcXHRcXHQqd2FpdF9mdW5jX2RhdGE7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy00My1cXHRzdHJ1Y3QgY2xrXFx0XFx0KmNsaztcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM9Njc9c3RhdGljIGlubGluZSB2b2lkIHVuaW1hY19tZGlvX3N0YXJ0KHN0cnVjdCB1bmltYWNfbWRpb19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy03NS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjc2OnN0YXRpYyBpbnQgdW5pbWFjX21kaW9fcG9sbCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTc3LXtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjc4OlxcdHN0cnVjdCB1bmltYWNfbWRpb19wcml2ICpwcml2ID0gd2FpdF9mdW5jX2RhdGE7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy03OS1cXHR1MzIgdmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYz05MT1zdGF0aWMgaW50IHVuaW1hY19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTA3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MTA4OlxcdHJldCA9IHByaXYtXFx1MDAzZXdhaXRfZnVuYyhwcml2LVxcdTAwM2V3YWl0X2Z1bmNfZGF0YSk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xMDktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM9MTMwPXN0YXRpYyBpbnQgdW5pbWFjX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTQ3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MTQ4OlxcdHJldCA9IHByaXYtXFx1MDAzZXdhaXRfZnVuYyhwcml2LVxcdTAwM2V3YWl0X2Z1bmNfZGF0YSk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xNDktXFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXFx1MDAzZWNsayk7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jPTIzNz1zdGF0aWMgaW50IHVuaW1hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTI3NS1cXHRcXHRidXMtXFx1MDAzZW5hbWUgPSBwZGF0YS1cXHUwMDNlYnVzX25hbWU7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzoyNzY6XFx0XFx0cHJpdi1cXHUwMDNld2FpdF9mdW5jID0gcGRhdGEtXFx1MDAzZXdhaXRfZnVuYztcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjI3NzpcXHRcXHRwcml2LVxcdTAwM2V3YWl0X2Z1bmNfZGF0YSA9IHBkYXRhLVxcdTAwM2V3YWl0X2Z1bmNfZGF0YTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTI3OC1cXHRcXHRidXMtXFx1MDAzZXBoeV9tYXNrID0gfnBkYXRhLVxcdTAwM2VwaHlfbWFzaztcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMjgxLVxcdFxcdGJ1cy1cXHUwMDNlbmFtZSA9IFxcXCJ1bmltYWMgTUlJIGJ1c1xcXCI7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzoyODI6XFx0XFx0cHJpdi1cXHUwMDNld2FpdF9mdW5jX2RhdGEgPSBwcml2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MjgzOlxcdFxcdHByaXYtXFx1MDAzZXdhaXRfZnVuYyA9IHVuaW1hY19tZGlvX3BvbGw7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0yODQtXFx0XFx0cHJpdi1cXHUwMDNlY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDo0MC40MTQyNTA4MTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4MDQ0MDg3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyAtIEEgQ3JpdGljYWwgVGltZW91dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBiY21nZW5ldF9taWlfd2FpdGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIE1ESU8gcmVhZC93cml0ZSBwcm9jZXNzLiBUaGUgY29kZSBzYXlzIHRoYXQgaWYgdGhlIGRldmljZSBpc24ndCBwcmVzZW50LCB3ZSdsbCAqbmV2ZXIqIHJlYWNoIHRoaXMgY29kZSBwYXRoLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyBpdCB3b3J0aCBmdXp6aW5nP1xuXG5Jbml0aWFsbHksIEknbSB0aGlua2luZywgeWVzLCBpZiBzeXprYWxsZXIgY2FuIHNvbWVob3cgaW5zdGFudGlhdGUgdGhpcyBkZXZpY2UuIE1heWJlIHRocm91Z2ggYSBwc2V1ZG8tc3lzY2FsbCwgb3IgaWYgd2UncmUgcnVubmluZyBpbiBRRU1VIHdpdGggdGhpcyBoYXJkd2FyZSBlbXVsYXRlZC4gQnV0LCBzeXprYWxsZXIncyBzdGFuZGFyZCBpbnN0YW5jZXMgZG9uJ3QgdHlwaWNhbGx5IHJ1biBgcmFzcGk0YmAsIHRoZXkncmUgdXN1YWxseSBgdmlydGAgb24gQVJNNjQuIENhbiB0aGlzIHBsYXRmb3JtIGRldmljZSBiZSBpbnN0YW50aWF0ZWQgdmlhIGEgYHN5el9kZXZfY3JlYXRlYD8gTm8sIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIG1lY2hhbmlzbSBmb3IgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgdW5sZXNzIHRoZXkgYXJlIHNwZWNpZmljYWxseSBzdXBwb3J0ZWQsIGxpa2Ugd2l0aCBgbWFjODAyMTFfaHdzaW1gIG9yIGB2a21zYC4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbiBpbmplY3Rpb24gbWV0aG9kPyBOb3BlLCBub3QgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgc3l6X2luaXRfbmV0X3NvY2tldGAuIFRoZW4gdGhlcmUgYXJlIHRoZSBzcGVjaWZpYyBkZXZpY2UgY29ubmVjdG9ycyBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgIG9yIGBzeXpfODAyMTFfaW5qZWN0X2ZyYW1lYCwgd2hpY2ggZG9uJ3Qgc2VlbSBsaWtlIHRoZXkgYXBwbHkgaGVyZS5cblxuQmFzaWNhbGx5LCBzeXprYWxsZXIgdXN1YWxseSByZWxpZXMgb24gZGV2aWNlcyBhbHJlYWR5IGJlaW5nIHByZXNlbnQgaW4gdGhlIHN5c3RlbSwgZWl0aGVyIHRocm91Z2ggUUVNVSBhcmd1bWVudHMgb3IgYSBjdXN0b20gZGV2aWNlIHRyZWUuIElmIHRoZSBkZXZpY2UgaXNuJ3QgdGhlcmUsIHRoZSBwcm9iZSBmdW5jdGlvbiBkb2Vzbid0IGdldCBjYWxsZWQsIGFuZCB3ZSBuZXZlciBnZXQgdG8gYGJjbWdlbmV0X21paV93YWl0YC5cblxuTm93LCBjYW4gdGhpcyBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VPyBZZXMsIFFFTVUgaGFzIHRoZSBgcmFzcGk0YmAgbWFjaGluZSB0eXBlLCB3aGljaCBlbXVsYXRlcyB0aGlzIGRldmljZSFcblxuSG93ZXZlciwgdGhlIHByb21wdCBzYXlzIHRvIHJldHVybiBcIldvcnRoRnV6emluZz1mYWxzZVwiIGlmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBTaW5jZSBRRU1VICpjYW4qIGVtdWxhdGUgaXQsIGl0IGlzIHRlY2huaWNhbGx5IHBvc3NpYmxlLlxuXG5CdXQgaXMgaXQgYWN0dWFsbHkgd29ydGggdGhlIGVmZm9ydD9cblxuVGhlIHBhdGNoIGlzIGxpdGVyYWxseSBhZGRpbmcgYSB0aW1lb3V0IGNoZWNrIHRvIGEgd2FpdCBmdW5jdGlvbi4gSXQnczpcblxuYGBgY1xuLVx0d2FpdF9ldmVudF90aW1lb3V0KHByaXYtXHUwMDNld3EsXG4tXHRcdFx0ICAgIShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXG4tXHRcdFx0ICAgXHUwMDI2IE1ESU9fU1RBUlRfQlVTWSksXG4tXHRcdFx0ICAgSFogLyAxMDApO1xuK1x0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQocHJpdi1cdTAwM2V3cSxcbitcdFx0XHRcdCEoYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01ESU9fQ01EKVxuK1x0XHRcdFx0XHUwMDI2IE1ESU9fU1RBUlRfQlVTWSksXG4rXHRcdFx0XHRIWiAvIDEwMCkpXG4rXHRcdHJldHVybiAtRVRJTUVET1VUO1xuYGBgXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSWYgdGhlIHRpbWVvdXQgaGFwcGVucywgaXQgcmV0dXJucyBgLUVUSU1FRE9VVGAgaW5zdGVhZCBvZiBgMGAuIFRoaXMgaXMgYSBjaGFuZ2UgdGhhdCB3b3VsZCBiZSBpbXBvcnRhbnQgdG8gdGVzdC5cblxuSWYgd2Ugd2FudCB0byBmdXp6IHRoaXMsIHdlJ2xsIG5lZWQgdG8gZW5hYmxlIGBCQ01HRU5FVGAgaW4gdGhlIGNvbmZpZywgYW5kIGZvY3VzIHN5emthbGxlciBvbiBgYmNtZ2VuZXRfbWlpX3dhaXRgLiBPaCwgYW5kIHdlJ2QgYWxzbyBuZWVkIGBNRElPX0JDTV9VTklNQUNgLlxuXG5CdXQgd2FpdCwgYGJjbWdlbmV0X21paV93YWl0YCBpcyBqdXN0IGEgd2FpdCBmdW5jdGlvbiEgSXQncyBsaWtlbHkgdGhhdCBkaXJlY3RseSBmdXp6aW5nIHRoaXMgaXNuJ3QgdGhhdCBmcnVpdGZ1bC4gSXQncyB3YWl0aW5nIGZvciBhIGhhcmR3YXJlIHJlZ2lzdGVyIHRvIGNoYW5nZSwgc28gYW55IGZ1enppbmcgbmVlZHMgdG8gZm9jdXMgb24gdHJpZ2dlcmluZyBNRElPIHJlYWRzL3dyaXRlcyBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6NTIuMjE4NjYyODg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE5NTUxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1ESU9fQkNNX1VOSU1BQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9Njg9Y29uZmlnIE1ESU9fQkNNX0lQUk9DXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzYtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjc3OmNvbmZpZyBNRElPX0JDTV9VTklNQUNcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzgtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIFVuaU1BQyBNRElPIGJ1cyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDo1Mi4zNDA2MjMyMzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NjI5MTI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkNoZWNraW5nIHRoZSBCQ01HRU5FVCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0IG1lIHF1aWNrbHkgYXNzZXNzIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgQkNNR0VORVQtYmFzZWQgc3lzdGVtLCBhbmQgd2UgbmVlZCB0byB2ZXJpZnkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgbmFtZWx5IGBNRElPX0JDTV9VTklNQUNgLlwiIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1JSSkgb3IgUmVkdWNlZCBNSUkgKFJNSUkpIGNvbW11bmljYXRpb24gaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGEgQnJvYWRjb20gKEJDTSkgVW5pbWFjIGRldmljZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGhlcmUuIElmIGBNRElPX0JDTV9VTklNQUNgIGlzIGVuYWJsZWQgYnkgdGhlIGBCQ01HRU5FVGAgZHJpdmVyLCB0aGF0IHN1Z2dlc3RzIGEgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cCBvciBkZXNpZ24gY2hvaWNlIHJlbGF0ZWQgdG8gdGhlIEV0aGVybmV0IFBIWSBpbnRlcmZhY2UuIFRoZSByZWxhdGlvbnNoaXAgaGVyZSBpcyBjcnVjaWFsLCBzbyBhIHF1aWNrIGNoZWNrIGlzIGluIG9yZGVyLCBwcm9iYWJseSBpbnNwZWN0aW5nIHRoZSBrY29uZmlnL2RldmljZSB0cmVlIHNldHRpbmdzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgc2V0dGluZyBpcyBjb3JyZWN0IGZvciB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLiBMZXQncyBkaWcgaW4gYW5kIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDo1NS43ODY5MTY2NjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzA2ODkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRElPX0JDTV9VTklNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy03OC1cXHRzZWxlY3QgQkNNN1hYWF9QSFlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjc5OlxcdHNlbGVjdCBNRElPX0JDTV9VTklNQUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTgwLVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjY5PWNvbmZpZyBCQ01BU1BcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc0LVxcdHNlbGVjdCBQSFlMSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI3NTpcXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzYtXFx0c2VsZWN0IFBBR0VfUE9PTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDo1Ni4wMTk5OTIwNzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4Mzk3Mzg5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIEJDTUdFTkVUIFRpbWVvdXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNlbGVjdGVkIHRoZSBwYXRjaCwgYW5kIHRoZSByZWxldmFudCBjb2RlIGlzIHRoZSBgQkNNR0VORVRgIHBhcnQuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBjaGFuZ2UgaXMgYWN0dWFsbHkgd29ydGggZnV6emluZy4gSXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaGFyZHdhcmUtc3BlY2lmaWMgYmVoYXZpb3Ig4oCTIGEgdGltZW91dCBvbiB0aGUgTURJTyBidXMuIEluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHdoYXQgc3l6a2FsbGVyIHVzZXMsIHRoaW5ncyBhcmUgdHJpY2t5LiBUaGUgaGFyZHdhcmUgbWlnaHQgZWl0aGVyIHJlc3BvbmQgaW1tZWRpYXRlbHkgKGVtdWxhdGlvbikgb3Igbm90IGF0IGFsbC4gSWYgdGhlcmUncyBubyByZXNwb25zZSwgaXQganVzdCB0aW1lcyBvdXQgYW5kIHJldHVybnMgYC1FVElNRURPVVRgLiBUaGVyZSBpc24ndCBhbnkgY29tcGxleCBsb2dpYyB0aGF0J3MgYmVpbmcgY2hhbmdlZC5cblxuSG93ZXZlciwgYSBgLUVUSU1FRE9VVGAgcmV0dXJuICpjb3VsZCogdHJpZ2dlciBzb21lIGVycm9yIGhhbmRsaW5nIGluIHRoZSBNRElPL1BIWSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHRoZSBraW5kIG9mIHRoaW5nIGZ1enppbmcgZXhjZWxzIGF0IGZpbmRpbmcuIEJ1dCwgaGFuZyBvbiwgdGhlIGZ1bmN0aW9uIGBiY21nZW5ldF9taWlfd2FpdGAgaXMgb25seSBjYWxsZWQgd2hlbiB0aGUgaGFyZHdhcmUgaXMgYWN0dWFsbHkgcHJlc2VudC4gSWYgSSBzZXQgYFdvcnRoRnV6emluZz10cnVlYCwgc3l6a2FsbGVyICp3aWxsKiBmdXp6IGl0LiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpcyB0aGVyZSBhbnkgcmVhc29uIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYD9cblxuV2VsbCwgdGhlIGRvY3VtZW50YXRpb24gc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGhhcyBjb2RlIHBhdGhzIHRoYXQgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5JcyB0aGlzIGNvZGUgcGF0aCBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN5emthbGxlcidzIHN0YW5kYXJkIHNldHVwPyBJIHRoaW5rIHNvLiBTeXprYWxsZXIgdXN1YWxseSBydW5zIG9uIGEgZ2VuZXJpYyBgdmlydGAgbWFjaGluZSwgc3BlY2lmaWNhbGx5IG9uIEFSTTY0LiBUaGUgQnJvYWRjb20gR0VORVQgcGxhdGZvcm0gZGV2aWNlIGlzbid0IHByZXNlbnQgaW4gdGhhdCBlbnZpcm9ubWVudC4gU3l6a2FsbGVyIGRvZXNuJ3QgY2hhbmdlIHRoZSBWTSBjb25maWd1cmF0aW9uIGR5bmFtaWNhbGx5IGZvciBhIHNwZWNpZmljIHBhdGNoLiBJdCB1c2VzIGEgZml4ZWQgc2V0IG9mIFZNIGNvbmZpZ3VyYXRpb25zIChxZW11LXN5c3RlbS14ODZfNjQgLU0gcGMgb3IgcWVtdS1zeXN0ZW0tYWFyY2g2NCAtTSB2aXJ0KS5cblxuSW4gdGhvc2Ugc3RhbmRhcmQgZW52aXJvbm1lbnRzLCB0aGUgQnJvYWRjb20gR0VORVQgcGxhdGZvcm0gZGV2aWNlIGlzICpub3QqIHByZXNlbnQgYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZCB0aHJvdWdoIHNvZnR3YXJlLiBVbmxpa2UgdGhpbmdzIGxpa2UgVVNCIGdhZGdldHMgb3IgbWFjODAyMTFfaHdzaW0sIHdoaWNoICpjYW4qIGJlIGNyZWF0ZWQgZHluYW1pY2FsbHkgdmlhIGNvbmZpZ2ZzIG9yIG5ldGxpbmssIHRoaXMgaXNuJ3QgcG9zc2libGUgaGVyZS4gVGh1cywgdGhlIGNvZGUgcGF0aCAqc2hvdWxkKiBiZSB1bnJlYWNoYWJsZS5cblxuQnV0LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2suIElzIHRoZXJlIGFueSB3YXkgdG8gaW5zdGFudGlhdGUgYSBwbGF0Zm9ybSBkZXZpY2UgZnJvbSB1c2Vyc3BhY2U/IFRoZXJlJ3MgdGhhdCBgQ09ORklHX09GX09WRVJMQVlgLCB3aGljaCBhbGxvd3MgbG9hZGluZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBmcm9tIHVzZXJzcGFjZS4gSG93ZXZlciwgc3l6a2FsbGVyIGRvZXNuJ3QgY3VycmVudGx5IHVzZSB0aGlzIHRvIGluamVjdCBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcy5cblxuRXZlbiBpZiBpdCBkaWQsIHdpdGhvdXQgYSBRRU1VIGVtdWxhdGlvbiBvZiB0aGUgc3BlY2lmaWMgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3NlcyBmb3IgdGhlIGhhcmR3YXJlICh3aGljaCBhcmUgb25seSBwcmVzZW50IG9uIGByYXNwaTRiYCBoYXJkd2FyZSksIGFjY2Vzc2luZyBzb21ldGhpbmcgbGlrZSBgVU1BQ19NRElPX0NNRGAgd291bGQgY2F1c2UgYSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCAoYnVzIGVycm9yKSBhbmQgY3Jhc2ggdGhlIGtlcm5lbCBvciB0aGUgdGhyZWFkLiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBpc24ndCBiYWNrZWQgYnkgYW4gZW11bGF0ZWQgTU1JTyByZWdpb24gaW4gdGhlIGB2aXJ0YCBtYWNoaW5lLlxuXG5Pa2F5LCBsZXQncyB2ZXJpZnkuIGBiY21nZW5ldF91bWFjX3JlYWRsYCByZWFkcyBmcm9tIGEgbWVtb3J5LW1hcHBlZCBJTyBhZGRyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY4MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MTowNi44NTk3MzMyODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYyMjY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiY21nZW5ldF91bWFjX3JlYWRsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTc5OD1zdGF0aWMgaW50IGJjbWdlbmV0X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy04MDktXFx0LyogTWFrZSBzdXJlIHdlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIENSQ19DTURfRldEICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzo4MTA6XFx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0NNRCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy04MTEtXFx0cHJpdi1cXHUwMDNlY3JjX2Z3ZF9lbiA9ICEhKHJlZyBcXHUwMDI2IENNRF9DUkNfRldEKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9OTMyPXN0YXRpYyB2b2lkIGJjbWdlbmV0X2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTk0My1cXHRcXHQvKiByZXBvcnQgYWN0aXZlIHN0YXRlIHdoZW4gbGluayBpcyB1cCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6OTQ0OlxcdFxcdHVtYWNfY21kID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0NNRCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy05NDUtXFx0XFx0ZXBhdXNlLVxcdTAwM2V0eF9wYXVzZSA9ICEodW1hY19jbWQgXFx1MDAyNiBDTURfVFhfUEFVU0VfSUdOT1JFKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9MTIyMT1zdGF0aWMgdTMyIGJjbWdlbmV0X3VwZGF0ZV9zdGF0X21pc2Moc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYsIHUxNiBvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTEyNDktXFx0ZGVmYXVsdDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjEyNTA6XFx0XFx0dmFsID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBvZmZzZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTI1MS1cXHRcXHQvKiBjbGVhciBpZiBvdmVyZmxvd2VkICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTEyNjA9c3RhdGljIHZvaWQgYmNtZ2VuZXRfdXBkYXRlX21pYl9jb3VudGVycyhzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTI4Mi1cXHRcXHRjYXNlIEJDTUdFTkVUX1NUQVRfTUlCX1JYOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MTI4MzpcXHRcXHRcXHR2YWwgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMjg0LVxcdFxcdFxcdFxcdFxcdFxcdCAgVU1BQ19NSUJfU1RBUlQgKyBqICsgb2Zmc2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTI4OC1cXHRcXHRcXHRpZiAoR0VORVRfSVNfVjEocHJpdikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjEyODk6XFx0XFx0XFx0XFx0dmFsID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBzLVxcdTAwM2VyZWdfb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTEyOTAtXFx0XFx0XFx0XFx0LyogY2xlYXIgaWYgb3ZlcmZsb3dlZCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0xMzQ5PXZvaWQgYmNtZ2VuZXRfZWVlX2VuYWJsZV9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTEzNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoxMzYwOlxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19FRUVfQ1RSTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMzYxLVxcdGlmIChlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTEzODk9c3RhdGljIGludCBiY21nZW5ldF9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTE0MDYtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoxNDA3OlxcdGUtXFx1MDAzZXR4X2xwaV90aW1lciA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19FRUVfTFBJX1RJTUVSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTE0MDgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTI1MzY9c3RhdGljIHZvaWQgdW1hY19lbmFibGVfc2V0KHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2LCB1MzIgbWFzaywgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTI1NDAtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoyNTQxOlxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMjU0Mi1cXHRpZiAocmVnIFxcdTAwMjYgQ01EX1NXX1JFU0VUKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTMzMjA9c3RhdGljIHZvaWQgYmNtZ2VuZXRfZ2V0X2h3X2FkZHIoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMzMjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozMzI1OlxcdGFkZHJfdG1wID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01BQzApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzMyNi1cXHRwdXRfdW5hbGlnbmVkX2JlMzIoYWRkcl90bXAsIFxcdTAwMjZhZGRyWzBdKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjMzMjc6XFx0YWRkcl90bXAgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTUFDMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0zMzI4LVxcdHB1dF91bmFsaWduZWRfYmUxNihhZGRyX3RtcCwgXFx1MDAyNmFkZHJbNF0pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0zNTYxPXN0YXRpYyB2b2lkIGJjbWdlbmV0X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTM1ODAtXFx0c3Bpbl9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozNTgxOlxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzU4Mi1cXHRpZiAoKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSB8fFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz00MjE1PXN0YXRpYyBpbnQgYmNtZ2VuZXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTQyMjYtXFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKGQpIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXdvbG9wdHMpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjQyMjc6XFx0XFx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0NNRCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy00MjI4LVxcdFxcdGlmIChyZWcgXFx1MDAyNiBDTURfUlhfRU4pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jPTE0ND1pbnQgYmNtZ2VuZXRfd29sX3Bvd2VyX2Rvd25fY2ZnKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMTU2LVxcdGlmIChwcml2LVxcdTAwM2V3b2xvcHRzIFxcdTAwMjYgKFdBS0VfTUFHSUMgfCBXQUtFX01BR0lDU0VDVVJFKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jOjE1NzpcXHRcXHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTVBEX0NUUkwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jLTE1OC1cXHRcXHRyZWcgfD0gTVBEX0VOO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMTcyLVxcdGlmIChyZXRyaWVzIFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jOjE3MzpcXHRcXHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTVBEX0NUUkwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jLTE3NC1cXHRcXHRyZWcgXFx1MDAyNj0gfihNUERfRU4gfCBNUERfUFdfRU4pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMTkxLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jOjE5MjpcXHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfQ01EKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0xOTMtXFx0cHJpdi1cXHUwMDNlY3JjX2Z3ZF9lbiA9IDE7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYz0yMTQ9aW50IGJjbWdlbmV0X3dvbF9wb3dlcl91cF9jZmcoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0yMzYtXFx0aWYgKHByaXYtXFx1MDAzZXdvbG9wdHMgXFx1MDAyNiAoV0FLRV9NQUdJQyB8IFdBS0VfTUFHSUNTRUNVUkUpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmM6MjM3OlxcdFxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NUERfQ1RSTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMjM4LVxcdFxcdGlmICghKHJlZyBcXHUwMDI2IE1QRF9FTikpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0yNTItXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmM6MjUzOlxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jLTI1NC1cXHRyZWcgXFx1MDAyNj0gfkNNRF9DUkNfRldEO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9Mjc9c3RhdGljIHZvaWQgYmNtZ2VuZXRfbWFjX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtNzctXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6Nzg6XFx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0NNRCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtNzktXFx0cmVnIFxcdTAwMjY9IH4oKENNRF9TUEVFRF9NQVNLIFxcdTAwM2NcXHUwMDNjIENNRF9TUEVFRF9TSElGVCkgfFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTE3PXN0YXRpYyBpbnQgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0xMjQtXFx0XFx0cHJpdiA9IG5ldGRldl9wcml2KGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTI1OlxcdFxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NT0RFKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0xMjYtXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rID0gISEocmVnIFxcdTAwMjYgTU9ERV9MSU5LX1NUQVRVUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz00Mzg9c3RhdGljIGludCBiY21nZW5ldF9taWlfd2FpdCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ0Mi1cXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChwcml2LVxcdTAwM2V3cSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzo0NDM6XFx0XFx0XFx0XFx0IShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtNDQ0LVxcdFxcdFxcdFxcdFxcdTAwMjYgTURJT19TVEFSVF9CVVNZKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDE6MDYuOTk0MzYwOTc4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDQ4NDI2OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBiY21nZW5ldF91bWFjX3JlYWRsIFRpbWVvdXQgRml4KipcblxuT2theSwgc28gYGJjbWdlbmV0X3VtYWNfcmVhZGxgIGlzIGp1c3QgYSBzaW1wbGUgcmVhZCBmdW5jdGlvbi4gSWYgdGhlcmUncyBubyByZWFsIGhhcmR3YXJlIG9yIGEgZ29vZCBRRU1VIGVtdWxhdGlvbiwgdGhpcyBpcyBnb2luZyB0byBjcmFzaCwgbm8gcXVlc3Rpb24uIFN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSBydW4gYHJhc3BpNGJgIGJ5IGRlZmF1bHQsIHNvIHRoaXMgY29kZSB3b3VsZG4ndCBiZSB0b3VjaGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4gV2FpdCwgZG9lcyBTeXprYWxsZXIgKmV2ZXIqIHJ1biBvbiBgcmFzcGk0YmA/IE5vLCBzdGFuZGFyZCBgYXJtNjRgIHVzZXMgYSBgdmlydGAgbWFjaGluZSwgd2hpY2ggZG9lc24ndCBpbmNsdWRlIHRoYXQuXG5cbk5vdywgaWYgdGhlIHByb21wdCBleHBsaWNpdGx5IHNhaWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIHRoZW4gaXQgbXVzdCBiZSBjYXJlZnVsbHkgYXNzZXNzZWQuXG5cbklzIHRoaXMgY29kZSAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gUUVNVT8gTm8sIHRoYXQncyBub3QgcmlnaHQuIFFFTVUgKmRvZXMqIGhhdmUgYSBgcmFzcGk0YmAgbWFjaGluZSB0eXBlLCBzbyBpdCAqaXMqIHBvc3NpYmxlLCB0ZWNobmljYWxseS4gQnV0IGlzIGl0ICp3b3J0aCogZnV6emluZz8gVGhpcyBwYXRjaCBpcyBqdXN0IGEgb25lLWxpbmUgZml4LCBhZGRpbmcgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wLiBPa2F5LCB3aGF0IGFyZSB3ZSB0cnlpbmcgdG8gZmluZCBieSBmdXp6aW5nIHRoaXM/IElmIHRoZSB0aW1lb3V0IG9jY3VycywgaXQganVzdCByZXR1cm5zIGAtRVRJTUVET1VUYC4gVGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBgdW5pbWFjX21kaW9fcmVhZGAgb3IgYHVuaW1hY19tZGlvX3dyaXRlYCwgd2lsbCB0aGVuIHJldHVybiB0aGUgc2FtZSBlcnJvciBjb2RlLiBJdCdzIGEgcHJldHR5IHN0YW5kYXJkIGVycm9yIHBhdGguIEkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCBmdXp6aW5nLiBJdCdzIGEgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSB0aW1lb3V0IGZpeCwgYW5kIGl0J3MgaGlnaGx5IHNwZWNpZmljIHRvIGEgcGxhdGZvcm0gdGhhdCBTeXprYWxsZXIgKmRvZXNuJ3QqIHR5cGljYWxseSB0YXJnZXQuXG5cbkxldCdzIHRoaW5rIHRocm91Z2ggdGhlIHJlYXNvbmluZy4gXCJUaGUgcGF0Y2ggYWRkcyBhIHRpbWVvdXQgY2hlY2sgdG8gYSBoYXJkd2FyZSB3YWl0IGxvb3AgaW4gdGhlIEJyb2FkY29tIEdFTkVUIGRyaXZlci4gVGhpcyBpcyBhIHRyaXZpYWwgZml4IGZvciBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IGlzIG5vdCB0eXBpY2FsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzICh1bmxlc3Mgc3BlY2lmaWNhbGx5IHJ1bm5pbmcgUUVNVSB3aXRoIHJhc3BpNGIgbWFjaGluZSB0eXBlKS4gRnV6emluZyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgdW5saWtlbHkgdG8geWllbGQgbWVhbmluZ2Z1bCByZXN1bHRzLlwiIE1ha2VzIHNlbnNlLiBMZXQncyBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgb25seSBjaGFuZ2UuIE9rYXksIGl0J3MgdGhlIG9ubHkgZmlsZSBhZmZlY3RlZC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgaWYgYFdvcnRoRnV6emluZz1mYWxzZWAgaXMgYXBwcm9wcmlhdGUgYmFzZWQgb24gdGhlIHByb21wdHMnIGNyaXRlcmlhLiBJdCBzdGF0ZXMgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGlzIGlzIHNwZWNpZmljIHRvIGEgQnJvYWRjb20gR0VORVQgZHJpdmVyLCBhbmQgaXMgbm90IHBhcnQgb2YgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUENJL1VTQiBkZXZpY2VzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFueSBWTSksIGl0IGRvZXMgZml0IHRoaXMgY3JpdGVyaWEuIFdoaWxlIFFFTVUgY2FuIGVtdWxhdGUgdGhlIGVudGlyZSBTb0MgKHJhc3BpNGIpLCBzeXprYWxsZXIgZnV6emluZyBpcyB0eXBpY2FsbHkgZG9uZSBvbiBnZW5lcmljIFZNcyB3aGVyZSB0aGlzIHBsYXRmb3JtIGRldmljZSBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIChsaWtlIG1hYzgwMjExX2h3c2ltKS5cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5IZXJlJ3MgdGhlIGZpbmFsaXplZCByZWFzb25pbmc6XG5UaGUgcGF0Y2ggYWRkcyBhIHRpbWVvdXQgY2hlY2sgdG8gYSBoYXJkd2FyZSB3YWl0IGxvb3AgaW4gdGhlIEJyb2FkY29tIEdFTkVUIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gQnJvYWRjb20gU29DcyAoZS5nLiwgUmFzcGJlcnJ5IFBpIDQpIGFuZCByZWxpZXMgb24gbWVtb3J5LW1hcHBlZCBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQgb3Igc29mdHdhcmUtZW11bGF0ZWQgaW4gc3RhbmRhcmQgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUgJ3ZpcnQnIG1hY2hpbmVzKSB1c2VkIGZvciBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBhIHRyaXZpYWwgZXJyb3ItcGF0aCBmaXggZm9yIGhhcmR3YXJlIHRpbWVvdXRzLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNzUsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA2OjQxOjIyLjA0Mjc5MDM1N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wIGluIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEJyb2FkY29tIFNvQ3MgKGUuZy4sIFJhc3BiZXJyeSBQaSA0KSBhbmQgcmVsaWVzIG9uIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VICd2aXJ0JyBtYWNoaW5lcykgdXNlZCBmb3IgZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgaXMgYSB0cml2aWFsIGVycm9yLXBhdGggZml4IGZvciBoYXJkd2FyZSB0aW1lb3V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wIGluIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEJyb2FkY29tIFNvQ3MgKGUuZy4sIFJhc3BiZXJyeSBQaSA0KSBhbmQgcmVsaWVzIG9uIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VICd2aXJ0JyBtYWNoaW5lcykgdXNlZCBmb3IgZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgaXMgYSB0cml2aWFsIGVycm9yLXBhdGggZml4IGZvciBoYXJkd2FyZSB0aW1lb3V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows4ptn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 06:25:27 +0000 UTC FinishedAt: 2026-06-23 06:41:23 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wIGluIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEJyb2FkY29tIFNvQ3MgKGUuZy4sIFJhc3BiZXJyeSBQaSA0KSBhbmQgcmVsaWVzIG9uIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VICYjMzk7dmlydCYjMzk7IG1hY2hpbmVzKSB1c2VkIGZvciBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBhIHRyaXZpYWwgZXJyb3ItcGF0aCBmaXggZm9yIGhhcmR3YXJlIHRpbWVvdXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI0ZmI2NzRlMGU0NzBlYTQ0MzI2NWUyY2FiNWQ4MGZlNTRlNmI0YzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwNjozODozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jXG5pbmRleCBhNGUwZDVhNjgyNjg3NS4uOTJiNTk5N2QwMGIyNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmNcbkBAIC00MzksMTAgJiM0Mzs0MzksMTIgQEAgc3RhdGljIGludCBiY21nZW5ldF9taWlfd2FpdCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdiA9IHdhaXRfZnVuY19kYXRhO1xuIFxuLVx0d2FpdF9ldmVudF90aW1lb3V0KHByaXYtXHUwMDNld3EsXG4tXHRcdFx0ICAgIShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXG4tXHRcdFx0ICAgXHUwMDI2IE1ESU9fU1RBUlRfQlVTWSksXG4tXHRcdFx0ICAgSFogLyAxMDApO1xuJiM0MztcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KHByaXYtXHUwMDNld3EsXG4mIzQzO1x0XHRcdFx0IShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXG4mIzQzO1x0XHRcdFx0XHUwMDI2IE1ESU9fU1RBUlRfQlVTWSksXG4mIzQzO1x0XHRcdFx0SFogLyAxMDApKVxuJiM0MztcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wIGluIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEJyb2FkY29tIFNvQ3MgKGUuZy4sIFJhc3BiZXJyeSBQaSA0KSBhbmQgcmVsaWVzIG9uIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VICYjMzk7dmlydCYjMzk7IG1hY2hpbmVzKSB1c2VkIGZvciBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBhIHRyaXZpYWwgZXJyb3ItcGF0aCBmaXggZm9yIGhhcmR3YXJlIHRpbWVvdXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjRmYjY3NGUwZTQ3MGVhNDQzMjY1ZTJjYWI1ZDgwZmU1NGU2YjRjMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDA2OjM4OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYwppbmRleCBhNGUwZDVhNjgyNjg3NS4uOTJiNTk5N2QwMGIyNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jCkBAIC00MzksMTAgJiM0Mzs0MzksMTIgQEAgc3RhdGljIGludCBiY21nZW5ldF9taWlfd2FpdCh2b2lkICp3YWl0X2Z1bmNfZGF0YSkKIHsKIAlzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdiA9IHdhaXRfZnVuY19kYXRhOwogCi0Jd2FpdF9ldmVudF90aW1lb3V0KHByaXYtJmd0O3dxLAotCQkJICAgIShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpCi0JCQkgICAmYW1wOyBNRElPX1NUQVJUX0JVU1kpLAotCQkJICAgSFogLyAxMDApOwomIzQzOwlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChwcml2LSZndDt3cSwKJiM0MzsJCQkJIShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpCiYjNDM7CQkJCSZhbXA7IE1ESU9fU1RBUlRfQlVTWSksCiYjNDM7CQkJCUhaIC8gMTAwKSkKJiM0MzsJCXJldHVybiAtRVRJTUVET1VUOwomIzQzOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFN5emthbGxlciBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBgYmNtbWlpLmNgIHdpdGhpbiB0aGUgQnJvYWRjb20gR0VORVQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGEgdGltZW91dCBoYW5kbGluZyBjaGFuZ2UgaW4gYGJjbWdlbmV0X21paV93YWl0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBkcml2ZXIgaXMgZXZlbiAqcmVhY2hhYmxlKiBmb3IgZnV6emluZywgYW5kIGlmIHNvLCBob3cuIEl0JiMzOTtzIGEgQnJvYWRjb20gR0VORVQsIHdoaWNoIEkga25vdyBpcyBhbiBFdGhlcm5ldCBNQUMgdHlwaWNhbGx5IHVzZWQgaW4gQnJvYWRjb20gc2V0LXRvcCBib3ggU29DcyBhbmQgdGhlIFJhc3BiZXJyeSBQaSA0IOKAkyBzbyB0aGF04oCZcyBteSBzdGFydGluZyBwb2ludC4KCkZpcnN0LCB0aGUgdmlydHVhbGl6YXRpb24gYW5nbGUuIENhbiBJIGdldCB0aGlzIHRvIHJ1biB1bmRlciBRRU1VPyBIbW0sIFFFTVUgaGFzIHRoZSBgYmNtMjgzOGAgbW9kZWwsIGJ1dCB1c3VhbGx5IEdFTkVUIGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYgUUVNVSBzZXR1cHMsIHJpZ2h0PyBNYXliZSwganVzdCBtYXliZSwgaXTigJlzIHByZXNlbnQgbm93ISBIb2xkIG9u4oCmIHdhc24mIzM5O3QgdGhlcmUgYSBgcmFzcGk0YmAgUUVNVSBtYWNoaW5lPyBUaGF0ICpjb3VsZCogZW11bGF0ZSBHRU5FVC4gVGhlIGlzc3VlIGlzIHN5emthbGxlciBpcyB1c3VhbGx5IHJ1biBvbiB4ODZfNjQgb3IgYXJtNjQgVk1zLCB0aG91Z2guCgpSaWdodCwgc28gdGhhdCYjMzk7cyB0aGUgb2J2aW91cyByb3V0ZS4gV2hhdCBhYm91dCBsZXNzIGNvbW1vbiBvcHRpb25zPyBMZXQmIzM5O3MgcnVsZSB0aGVtIG91dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGEgdHJpY2suIElzIHRoZXJlIGFueSBQQ0kgb3IgVVNCIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIEdFTkVUPyBTZWVtcyB1bmxpa2VseSBhcyBpdCYjMzk7cyBhIHBsYXRmb3JtIGRldmljZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBwcm9iZWQuIFRoYXQgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byBob3cgSSBtaWdodCBnZXQgdGhlIGRyaXZlciBsb2FkZWQgYW5kIGFjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9NDQwMT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY21nZW5ldF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy00NDExLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjQ0MTI6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihiY21nZW5ldF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy00NDEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlBsYXRmb3JtIERyaXZlciBBbmFseXNpcyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwbGF0Zm9ybSBkcml2ZXIuIEZpcnN0LCBhbmQgYWx3YXlzLCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb21wYXRpYmxlIHN0cmluZ3MuIFRoYXQmIzM5O3MgdGhlIGJlZHJvY2sgb2YgaG93IHRoaXMgZHJpdmVyIGlkZW50aWZpZXMgaXRzZWxmIGFuZCBob3cgdGhlIHN5c3RlbSBrbm93cyBpdCBzaG91bGQgbWFuYWdlIGEgc3BlY2lmaWMgZGV2aWNlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHN0cmluZ3MgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgc2lsaWNvbiBpdCYjMzk7cyBtZWFudCB0byBoYW5kbGUsIGlmIGl0IGlzIHVzaW5nIGFueSBjdXN0b20gbmFtaW5nIHNjaGVtZXMsIGFuZCBpZiB0aGVyZSBhcmUga25vd24gaXNzdWVzIHdpdGggYW55IG9mIHRoZSB2ZW5kb3Igc3BlY2lmaWMgbmFtaW5nIHNjaGVtZXMuIEZyb20gdGhlcmUgd2UgY2FuIG1vdmUgdG8gbG9va2luZyBhdCB0aGUgZGV2aWNlIHRyZWUgYmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuY29tcGF0aWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTM5NTY9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmNtZ2VuZXRfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6Mzk1NzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDticmNtLGdlbmV0LXYxXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnYxX3BsYXRfZGF0YSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozOTU4Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2JyY20sZ2VuZXQtdjJcJiMzNDssIC5kYXRhID0gXHUwMDI2djJfcGxhdF9kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NTk6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YnJjbSxnZW5ldC12M1wmIzM0OywgLmRhdGEgPSBcdTAwMjZ2M19wbGF0X2RhdGEgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6Mzk2MDpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDticmNtLGdlbmV0LXY0XCYjMzQ7LCAuZGF0YSA9IFx1MDAyNnY0X3BsYXRfZGF0YSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozOTYxOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2JyY20sZ2VuZXQtdjVcJiMzNDssIC5kYXRhID0gXHUwMDI2djVfcGxhdF9kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NjI6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YnJjbSxiY20yNzExLWdlbmV0LXY1XCYjMzQ7LCAuZGF0YSA9IFx1MDAyNmJjbTI3MTFfcGxhdF9kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NjM6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YnJjbSxiY203NzEyLWdlbmV0LXY1XCYjMzQ7LCAuZGF0YSA9IFx1MDAyNmJjbTc3MTJfcGxhdF9kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTM5NjQtXHR7IH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBCcm9hZGNvbSBHRU5FVCBQbGF0Zm9ybSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGxhdGZvcm0gZHJpdmVyIGZvciBCcm9hZGNvbSBHRU5FVC4gQ2FuIEkgZXZlbiAqdGhpbmsqIGFib3V0IGZ1enppbmcgdGhpcyB3aXRoIFN5emthbGxlcj8gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGNhbiBTeXprYWxsZXIgaW5qZWN0IHBsYXRmb3JtIGRldmljZXM/IEkga25vdyBpdCBjYW4sIHRocm91Z2ggYHN5el9kZXZfY3JlYXRlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgKmlmKiB0aGUga2VybmVsIHN1cHBvcnRzIGl0LiBCdXQgcGxhdGZvcm0gZGV2aWNlcyB1c3VhbGx5IGNvbWUgZnJvbSBEZXZpY2UgVHJlZSBvciBBQ1BJLCByaWdodD8gU3l6a2FsbGVyIGhhcyBzb21lIG1lY2hhbmlzbXMgZm9yIGluamVjdGluZyB0aGVtLCBlaXRoZXIgd2l0aCBwc2V1ZG8tc3lzY2FsbHMgb3IgY29uZmlndXJhdGlvbnMsIGJ1dCBpdOKAmXMgcmFyZWx5IHN0cmFpZ2h0Zm9yd2FyZCwgZXNwZWNpYWxseSBmb3IgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBvbiBTeXN0ZW0tb24tQ2hpcHMuIFRoZXkgbmVlZCBleHBsaWNpdCB0YXJnZXRpbmcgb3IgYSBnZW5lcmljIGluc3RhbnRpYXRpb24gbWV0aG9kLgoKSG1tLCBsZXQgbWUgY2hlY2vigKYgZG9lcyBTeXprYWxsZXIgaGF2ZSBhbnl0aGluZyBuYW1lZCBgc3l6X2dlbmV0Xy4uLmA/IE5vcGUuIFRoYXQmIzM5O3MgYSBkZWFkIGVuZC4KCk5vdywgY2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJZiB0aGUga2VybmVsIGhhcyBgQ09ORklHX0JDTUdFTkVUYCBlbmFibGVkLCBhbmQgU3l6a2FsbGVyIHJ1bnMgb24gYW4gQVJNNjQgVk0gd2l0aCBhIGRldmljZSB0cmVlIHRoYXQgaW5jbHVkZXMgdGhlIEJyb2FkY29tIGRldmljZSwgdGhlbiAqbWF5YmUqLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSB0eXBpY2FsIHNjZW5hcmlvLCBTeXprYWxsZXIgb2Z0ZW4gcnVucyBpbiBnZW5lcmljIFZNcyBsaWtlIHg4Nl82NCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4KCkJ1dCBob2xkIG9uLCBTeXprYWxsZXIgKmRvZXMqIGZ1enogc29tZSBwbGF0Zm9ybSBkcml2ZXJzIGlmIHRoZXkgY2FuIGJlIGluc3RhbnRpYXRlZC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNr4oCmIGRvZXMgaXQgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgPyBObywgbm90aGluZyBsaWtlIHRoYXQsIGJ1dCBtYXliZSB0aGVyZSYjMzk7cyBhIHdvcmthcm91bmQuCgpJIG5lZWQgdG8gbG9vayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBjbHVlcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBjb25maWcgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJDTUdFTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTYzPWNvbmZpZyBCQ002M1hYX0VORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzo3Mjpjb25maWcgQkNNR0VORVRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctNzMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBHRU5FVCBpbnRlcm5hbCBNQUMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFB1cnBvc2Ugb2YgYGJjbWdlbmV0X21paV93YWl0YCoqCgpPa2F5LCBzbyB0aGUgdGhvdWdodCBwcm9jZXNzIGlzIHplcm9pbmcgaW4gb24gYGJjbWdlbmV0X21paV93YWl0YC4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uJiMzNDsgU2luY2UgSSYjMzk7bSBmYW1pbGlhciB3aXRoIEJyb2FkY29tJiMzOTtzIEV0aGVybmV0IGltcGxlbWVudGF0aW9ucyBhbmQgbGlrZWx5IHRoZSB1bmRlcmx5aW5nIE1JSS9HTUlJL1JHTUlJIGludGVyZmFjZSBudWFuY2VzLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBQSFkvTUFDIGludGVyYWN0aW9uLiBXaGF0IHNwZWNpZmljIHNpdHVhdGlvbnMgd291bGQgbmVjZXNzaXRhdGUgYSB3YWl0PyBJcyBpdCBhIGRlbGF5IGZvciBQSFkgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgcG93ZXItb24/IFBlcmhhcHMgd2FpdGluZyBmb3IgYSBsaW5rIGVzdGFibGlzaG1lbnQgc2lnbmFsIHRvIHN0YWJpbGl6ZT8gT3IgbWF5YmUgaXQmIzM5O3MgYSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHdpdGhpbiB0aGUgZHJpdmVyIHRvIGVuc3VyZSBwcm9wZXIgTUlJIHJlZ2lzdGVyIGFjY2VzcyBhbmQgcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGhhbmRsaW5nIGludGVycnVwdHMgb3IgRE1BLiBUaGUgaW50ZW50IGlzIGxpa2VseSB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRob3NlIHNjZW5hcmlvcyBpdCBhcHBsaWVzIHRvLiBEZXBlbmRpbmcgb24gaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2hlcmUgaW4gdGhlIGNvbnRyb2wgZmxvdyBpdCBpcyBpbXBsZW1lbnRlZCwgaXQgbWF5IGJlIHByb3ZpZGluZyBhIHRpbWUtb3V0IG1lY2hhbmlzbSwgb3IgbW9yZSBjb21wbGV4IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBkZXBlbmRpbmcgb24gaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGFuZCB1c2VkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gY29uZmlybSBteSBoeXBvdGhlc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21nZW5ldF9taWlfd2FpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz00MTg9c3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqYmNtZ2VuZXRfbWlpX29mX2ZpbmRfbWRpbyhzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy00MzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzo0Mzg6c3RhdGljIGludCBiY21nZW5ldF9taWlfd2FpdCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQzOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9NDUxPXN0YXRpYyBpbnQgYmNtZ2VuZXRfbWlpX3JlZ2lzdGVyKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ2Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjQ2ODpcdHBwZC53YWl0X2Z1bmMgPSBiY21nZW5ldF9taWlfd2FpdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ2OS1cdHBwZC53YWl0X2Z1bmNfZGF0YSA9IHByaXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgQnJvYWRjb20gR0VORVQgTURJTyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGZvciB0aGUgTURJTyBidXMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEJyb2FkY29tIFNvQ3MsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGZvciBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbi4gV2UmIzM5O3JlIHRhbGtpbmcgcGxhdGZvcm0gZHJpdmVyIGhlcmUsIGxpa2VseSB0aWVkIHRvIGhhcmR3YXJlIG9uIHNvbWV0aGluZyBsaWtlIGEgUmFzcGJlcnJ5IFBpIDQuIFVubGVzcyBRRU1VIHNwZWNpZmljYWxseSBlbXVsYXRlcyB0aGlzLCBpdCYjMzk7cyBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgcmVhY2hhYmxlIGluIGEgdHlwaWNhbCBHQ0Ugb3IgZ2VuZXJpYyBRRU1VIGVudmlyb25tZW50LiBUaGUgcHJvbXB0LCBob3dldmVyLCBleHBsaWNpdGx5IGFza3MgaWYgaXQmIzM5O3MgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoLCYjMzQ7IGFuZCB0aGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBjaXRlcyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEhtbS4gSWYgd2UgcnVuIFFFTVUgd2l0aCB0aGUgYC1NIHJhc3BpNGJgIG1hY2hpbmUgdHlwZSwgdGhlbiBpdCAqY291bGQqIGJlIHJlYWNoZWQuIEJ1dCwgaXMgdGhhdCBjb25zaWRlcmVkIGEgJiMzNDtzdGFuZGFyZCYjMzQ7IHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBOb3JtYWxseSwgdGhlc2UgU29DLXNwZWNpZmljIGRyaXZlcnMgYXJlIHNlZW4gYXMgdW5yZWFjaGFibGUgdW5sZXNzIHNvZnR3YXJlIGVtdWxhdGlvbiBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgaGFyZHdhcmUgdGhhdOKAmXMgZW11bGF0ZWQgYXMgcGFydCBvZiBnZW5lcmljIGVudmlyb25tZW50cy4gQ2FuIHRoaXMgYmUgaW5zdGFudGlhdGVkIHZpYSBgc3lzZnNgIG9yIGBjb25maWdmc2A/IE5vLiBXaGF0IGFib3V0IGRldmljZSB0cmVlIG92ZXJsYXlzPyBZZXMsIHRoZW9yZXRpY2FsbHksIGlmIHRoZSBrZXJuZWwgc3VwcG9ydHMgaXQuIEJ1dCBldmVuIGlmIHRoZSBkcml2ZXIgKmRvZXMqIGxvYWQsIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUgb3IgUUVNVSYjMzk7cyBlbXVsYXRpb24gb2YgdGhlIEdFTkVUIHJlZ2lzdGVycywgaXQmIzM5O3MgbGlrZWx5IHRvIGZhaWwsIGhhbmcsIG9yIGNyYXNoIHdoZW4gaXQgdHJpZXMgdG8gYWNjZXNzIHBoeXNpY2FsIG1lbW9yeS4KCk9rYXksIGxldCYjMzk7cyBzZWUgaWYgUUVNVSBlbXVsYXRlcyBpdC4gQWgsIHRoZSBRRU1VIHNvdXJjZSBoYXMgYGh3L25ldC9iY20yODM4X2dlbmV0LmNgIOKAkyB5ZXAsIFFFTVUgKmRvZXMqIGVtdWxhdGUgaXQhIEhvd2V2ZXIsIEkgbmVlZCB0byBrbm93IGlmIHN5emthbGxlciBpcyBydW5uaW5nIGByYXNwaTRiYC4gU3l6a2FsbGVyIGhhcyBgYXJtNjRgLCBidXQgdHlwaWNhbGx5IHVzZXMgYHZpcnRgLiBTbywgaWYgd2UgY29uc2lkZXIgUUVNVSBlbXVsYXRpb24gYXMg4oCccG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCYjMzQ7IHRoZW4geWVzLCBpdCYjMzk7cyBkb2FibGUuCgpOb3csIGxldCYjMzk7cyBmb2N1cyBvbiB0aGUgYWN0dWFsIHBhdGNoLiBJdOKAmXMgYSBzaW1wbGUgdGltZW91dCBjaGVjazogYWRkaW5nIGFuIGAtRVRJTUVET1VUYCByZXR1cm4uIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlOiByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBZZXMsIHRoZXJlIGlzIGZ1bmN0aW9uYWwgY2hhbmdlLiBMZXQmIzM5O3MgZGlnIGRlZXBlcjogaXMgYGJjbWdlbmV0X21paV93YWl0YCByZWFjaGFibGU/IEl0JiMzOTtzIGNhbGxlZCBieSBNRElPIGJ1cyBjb2RlLiBJZiB3ZSBkZWVtIHRoaXMgd29ydGggZnV6emluZywgdGhhdCBtZWFucyB3ZSBhbHNvIG5lZWQgdG8gYWRkIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb25maWd1cmF0aW9ucyB3b3VsZCBiZSBgQkNNR0VORVRgLCBhbmQgdGhlIGZvY3VzIHN5bWJvbCB3b3VsZCBiZSBgYmNtZ2VuZXRfbWlpX3dhaXRgLgoKV2FpdC4gSXMgaXQgKnJlYWxseSogd29ydGggZnV6emluZz8gSWYgdGhlIGRldmljZSBpc24mIzM5O3QgcHJlc2VudCwgdGhlIGRyaXZlciB3b27igJl0IHByb2JlLiBJZiB0aGUgZGV2aWNlICppcyogcHJlc2VudCAobGlrZSBpbiBRRU1VIGByYXNwaTRiYCksIHRoZSBkcml2ZXIgcHJvYmVzLCBhbmQgYGJjbWdlbmV0X21paV93YWl0YCBpcyBsaWtlbHkgY2FsbGVkIGR1cmluZyBNRElPIG9wZXJhdGlvbnMuIENhbiBzeXprYWxsZXIgdHJpZ2dlciBNRElPIG9wZXJhdGlvbnMgZnJvbSB1c2Vyc3BhY2U/IFVzdWFsbHkgTURJTyBvcGVyYXRpb25zIGhhcHBlbiBkdXJpbmcgcHJvYmUgb3Igd2hlbiBjb25maWd1cmluZyB0aGUgUEhZIHZpYSBgZXRodG9vbGAgb3IgYGlvY3RsYC4gVGltZSB0byBjaGVjayB3aGVyZSBgd2FpdF9mdW5jYCBpcyBhY3R1YWxseSB1c2VkIGluIHRoZSBNRElPIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2FpdF9mdW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEZWNpcGhlcmluZyB0aGUgUGxhdGZvcm0gRGF0YSBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgYHBwZGAgYW5kIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyByZWZlcnJpbmcgdG8gYSBgc3RydWN0IG1kaW9fbWlpX2J1c19wbGF0Zm9ybV9kYXRhYC4gVGhhdCByaW5ncyBhIGJlbGwsIGJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhpcyBhc3NvY2lhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1lYW5zIGluIHRoaXMgY29udGV4dCBhbmQgaG93IHRoaXMgdGllcyB0byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGBiY21nZW5ldF9taWlfcmVnaXN0ZXJgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc2VlIGhvdyB0aGlzIGBwcGRgIOKAkyBhc3N1bWluZyBpdCBpcyB3aGF0IEkgdGhpbmsgaXQgaXMg4oCTIGlzIGFjdHVhbGx5IHV0aWxpemVkIGFuZCB3aGF0IGl0cyByb2xlIGlzIGluIHRoZSBiaWdnZXIgc2NoZW1lIG9mIHRoaW5ncy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmNtZ2VuZXRfbWlpX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTQzOD1zdGF0aWMgaW50IGJjbWdlbmV0X21paV93YWl0KHZvaWQgKndhaXRfZnVuY19kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjQ1MTpzdGF0aWMgaW50IGJjbWdlbmV0X21paV9yZWdpc3RlcihzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ1Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9NTkxPWludCBiY21nZW5ldF9taWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTU5NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjU5NjpcdHJldCA9IGJjbWdlbmV0X21paV9yZWdpc3Rlcihwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTU5Ny1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBiY21nZW5ldF9taWlfcmVnaXN0ZXJgIGNvZGUuCgoqKkRpdmluZyBpbnRvIGBiY21nZW5ldF9taWlfcmVnaXN0ZXJgKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7d2hhdCBpcyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGRvaW5nIGluIHJlbGF0aW9uIHRvIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29udGV4dD8mIzM0OyBJdCYjMzk7cyBuYW1lZCB3aXRoICYjMzQ7QkNNJiMzNDsgc28gaXQgbXVzdCBiZSBCcm9hZGNvbS1zcGVjaWZpYywgYW5kICYjMzQ7Z2VuZXQmIzM0OyBwcm9iYWJseSByZWZlcnMgdG8gZ2lnYWJpdCBldGhlcm5ldC4gVGhlICYjMzQ7TUlJJiMzNDsgcGFydCBzdWdnZXN0cyBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSwgYSBzdGFuZGFyZCBmb3IgY29ubmVjdGluZyBQSFkgdHJhbnNjZWl2ZXJzIHRvIE1BQyBjb250cm9sbGVycy4gU28sIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIGludm9sdmVkIGluIGNvbmZpZ3VyaW5nIG9yIHJlZ2lzdGVyaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBNSUkgaW50ZXJmYWNlIGZvciBhIEJyb2FkY29tIGdpZ2FiaXQgZXRoZXJuZXQgY29udHJvbGxlci4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHlwZSBvZiByZWdpc3RyYXRpb24gaXMgYmVpbmcgZG9uZS4gSXMgaXQgcmVnaXN0ZXIgdGhlIE1JSSBidXMsIGEgcGFydGljdWxhciBQSFksIGEgc2V0IG9mIE1JSSByZWdpc3RlcnMsIG9yIGlzIGl0IHNldHRpbmcgdXAgaW50ZXJydXB0IGhhbmRsZXJzPyBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGludm9sdmVzIHRoZSBsb3ctbGV2ZWwgc2V0dXAgbmVjZXNzYXJ5IHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZXh0ZXJuYWwgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlIHZpYSB0aGUgTUlJIGJ1cy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gcmVnaXN0ZXIgYWRkcmVzc2VzLCBQSFkgSURzLCBhbmQgcG9zc2libHkgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLCB0aGF0IGFyZSBsaWtlbHkgcHJlc2VudCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDUxOlx0c3RhdGljIGludCBiY21nZW5ldF9taWlfcmVnaXN0ZXIoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYpXG4gNDUyOlx0e1xuIDQ1MzpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHByaXYtXHUwMDNlcGRldjtcbiA0NTQ6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwZGV2LVx1MDAzZWRldi5vZl9ub2RlO1xuIDQ1NTpcdFx0c3RydWN0IHVuaW1hY19tZGlvX3BkYXRhIHBwZDtcbiA0NTY6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBwZGV2O1xuIDQ1NzpcdFx0c3RydWN0IHJlc291cmNlICpwcmVzLCByZXM7XG4gNDU4Olx0XHRpbnQgaWQsIHJldDtcbiA0NTk6XHRcbiA0NjA6XHRcdHByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApO1xuIDQ2MTpcdFx0aWYgKCFwcmVzKSB7XG4gNDYyOlx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0ludmFsaWQgcmVzb3VyY2VcXG5cJiMzNDspO1xuIDQ2MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NjQ6XHRcdH1cbiA0NjU6XHRcdG1lbXNldChcdTAwMjZyZXMsIDAsIHNpemVvZihyZXMpKTtcbiA0NjY6XHRcdG1lbXNldChcdTAwMjZwcGQsIDAsIHNpemVvZihwcGQpKTtcbiA0Njc6XHRcbiA0Njg6XHRcdHBwZC53YWl0X2Z1bmMgPSBiY21nZW5ldF9taWlfd2FpdDtcbiA0Njk6XHRcdHBwZC53YWl0X2Z1bmNfZGF0YSA9IHByaXY7XG4gNDcwOlx0XHRwcGQuYnVzX25hbWUgPSBcJiMzNDtiY21nZW5ldCBNSUkgYnVzXCYjMzQ7O1xuIDQ3MTpcdFx0LyogUGFzcyBhIHJlZmVyZW5jZSB0byBvdXIgXCYjMzQ7bWFpblwmIzM0OyBjbG9jayB3aGljaCBpcyB1c2VkIGZvciBNRElPXG4gNDcyOlx0XHQgKiB0cmFuc2ZlcnNcbiA0NzM6XHRcdCAqL1xuIDQ3NDpcdFx0cHBkLmNsayA9IHByaXYtXHUwMDNlY2xrO1xuIDQ3NTpcdFxuIDQ3NjpcdFx0LyogVW5pbWFjIE1ESU8gYnVzIGNvbnRyb2xsZXIgc3RhcnRzIGF0IFVuaU1BQyBvZmZzZXQgJiM0MzsgTURJT19DTURcbiA0Nzc6XHRcdCAqIGFuZCBpcyAyICogMzItYml0cyB3b3JkIGxvbmcsIDggYnl0ZXMgdG90YWwuXG4gNDc4Olx0XHQgKi9cbiA0Nzk6XHRcdHJlcy5zdGFydCA9IHByZXMtXHUwMDNlc3RhcnQgJiM0MzsgR0VORVRfVU1BQ19PRkYgJiM0MzsgVU1BQ19NRElPX0NNRDtcbiA0ODA6XHRcdHJlcy5lbmQgPSByZXMuc3RhcnQgJiM0MzsgODtcbiA0ODE6XHRcdHJlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNO1xuIDQ4MjpcdFxuIDQ4MzpcdFx0aWYgKGRuKVxuIDQ4NDpcdFx0XHRpZCA9IG9mX2FsaWFzX2dldF9pZChkbiwgXCYjMzQ7ZXRoXCYjMzQ7KTtcbiA0ODU6XHRcdGVsc2VcbiA0ODY6XHRcdFx0aWQgPSBwZGV2LVx1MDAzZWlkO1xuIDQ4NzpcdFxuIDQ4ODpcdFx0cHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoVU5JTUFDX01ESU9fRFJWX05BTUUsIGlkKTtcbiA0ODk6XHRcdGlmICghcHBkZXYpXG4gNDkwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDQ5MTpcdFxuIDQ5MjpcdFx0LyogUmV0YWluIHRoaXMgcGxhdGZvcm1fZGV2aWNlIHBvaW50ZXIgZm9yIGxhdGVyIGNsZWFudXAgKi9cbiA0OTM6XHRcdHByaXYtXHUwMDNlbWlpX3BkZXYgPSBwcGRldjtcbiA0OTQ6XHRcdHBwZGV2LVx1MDAzZWRldi5wYXJlbnQgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiA0OTU6XHRcdGlmIChkbilcbiA0OTY6XHRcdFx0cHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUgPSBiY21nZW5ldF9taWlfb2ZfZmluZF9tZGlvKHByaXYpO1xuIDQ5NzpcdFx0ZWxzZVxuIDQ5ODpcdFx0XHRwcGQucGh5X21hc2sgPSB+MDtcbiA0OTk6XHRcbiA1MDA6XHRcdHJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBwZGV2LCBcdTAwMjZyZXMsIDEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCB0YWlsb3JlZCBmb3IgbXkgZXhwZXJ0aXNlOgoKKipNeSBJbnRlcm5hbCBBbmFseXNpcyBvZiBUaGlzIERyaXZlciBTZXR1cCoqCgpPa2F5LCBzbyB0aGUgY29kZSBpcyBkeW5hbWljYWxseSBjb25zdHJ1Y3RpbmcgYSBgdW5pbWFjLW1kaW9gIHBsYXRmb3JtIGRldmljZS4gVGhhdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIHBsYXRmb3JtLWJhc2VkIGRyaXZlcnM7IGl0IGFsbG93cyB0aGUgc3lzdGVtIHRvIGRlZmluZSB0aGUgZGV2aWNlIGFuZCBpdHMgcmVzb3VyY2VzLCBhbmQgdGhlbiB0aGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGF0dGFjaGVkIHRvIGl0LiBUaGUga2V5IGlzIHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCB0aGUgcGxhdGZvcm0gZGF0YTogYHBwZGAuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGBwcGRgLCBsaWtlbHkgc29tZSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIG9yIGRhdGEsIGlzIGdvaW5nIHRvIGNvbnRhaW4gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gaW5mb3JtYXRpb24gdGhlIGB1bmltYWMtbWRpb2AgZHJpdmVyIG5lZWRzLiBUaGluayBvZiBpdCBhcyB0aGUgcmVjaXBlLgoKVGhlIG1lbnRpb24gb2YgYHdhaXRfZnVuY2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHNvbWUgZm9ybSBvZiBzeW5jaHJvbml6YXRpb24gb3IgZXZlbnQgaGFuZGxpbmcgaXMgaW52b2x2ZWQuIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhpcyBiZWluZyB1c2VkIGVpdGhlciB0byB3YWl0IGZvciBhIGNlcnRhaW4gc3RhdGUgd2l0aGluIHRoZSBoYXJkd2FyZSDigJMgcGVyaGFwcyBQSFkgaW5pdGlhbGl6YXRpb24gb3IgbGluayBlc3RhYmxpc2htZW50IOKAkyBvciB0byBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciB0aGUgZHJpdmVyIHRvIHBhdXNlIGFuZCByZXN1bWUgb3BlcmF0aW9ucyBiYXNlZCBvbiBleHRlcm5hbCBldmVudHMuIEdpdmVuIHRoZSBNRElPIGNvbnRleHQsIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgdGhlIGZvcm1lcjsgbGlrZWx5IGl04oCZcyBtYW5hZ2luZyBhY2Nlc3MgdG8gdGhlIE1ESU8gYnVzIGl0c2VsZiwgd2FpdGluZyBmb3Igb3BlcmF0aW9ucyB0byBjb21wbGV0ZSwgb3IgaGFuZGxpbmcgaW50ZXJydXB0cyB0aGF0IHNpZ25hbCB0aGUgY29tcGxldGlvbiBvZiBNRElPIHRyYW5zYWN0aW9ucy4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgdW5pbWFjLW1kaW9gIHNvdXJjZSB0byBjb25maXJtLCBidXQgdGhpcyBpcyBhIHNvbGlkIGluaXRpYWwgYXNzZXNzbWVudC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgdG9vLCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgJiMzNDtwcGQmIzM0OyBkYXRhIHN0cnVjdHVyZSB0aGF0IGlzIHBhc3NlZC4gVGhhdCBjb250YWlucyB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3IgdGhpcyBzcGVjaWZpYyBkZXZpY2UuIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgaW4gbXkgbWluZCBhYm91dCB3aGF0IHR5cGVzIG9mIHBhcmFtZXRlcnMgbWlnaHQgYmUgc3RvcmVkIHdpdGhpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2FpdF9mdW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYz0zOD1zdHJ1Y3QgdW5pbWFjX21kaW9fcHJpdiB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy00MC1cdHZvaWQgX19pb21lbVx0XHQqYmFzZTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6NDE6XHRpbnQgKCp3YWl0X2Z1bmMpXHQodm9pZCAqd2FpdF9mdW5jX2RhdGEpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzo0MjpcdHZvaWRcdFx0XHQqd2FpdF9mdW5jX2RhdGE7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTQzLVx0c3RydWN0IGNsa1x0XHQqY2xrO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM9Njc9c3RhdGljIGlubGluZSB2b2lkIHVuaW1hY19tZGlvX3N0YXJ0KHN0cnVjdCB1bmltYWNfbWRpb19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtNzUtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjc2OnN0YXRpYyBpbnQgdW5pbWFjX21kaW9fcG9sbCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtNzcte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzo3ODpcdHN0cnVjdCB1bmltYWNfbWRpb19wcml2ICpwcml2ID0gd2FpdF9mdW5jX2RhdGE7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTc5LVx0dTMyIHZhbDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jPTkxPXN0YXRpYyBpbnQgdW5pbWFjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTA3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzoxMDg6XHRyZXQgPSBwcml2LVx1MDAzZXdhaXRfZnVuYyhwcml2LVx1MDAzZXdhaXRfZnVuY19kYXRhKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTA5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jPTEzMD1zdGF0aWMgaW50IHVuaW1hY19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xNDctXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjE0ODpcdHJldCA9IHByaXYtXHUwMDNld2FpdF9mdW5jKHByaXYtXHUwMDNld2FpdF9mdW5jX2RhdGEpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xNDktXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM9MjM3PXN0YXRpYyBpbnQgdW5pbWFjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTI3NS1cdFx0YnVzLVx1MDAzZW5hbWUgPSBwZGF0YS1cdTAwM2VidXNfbmFtZTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6Mjc2Olx0XHRwcml2LVx1MDAzZXdhaXRfZnVuYyA9IHBkYXRhLVx1MDAzZXdhaXRfZnVuYztcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6Mjc3Olx0XHRwcml2LVx1MDAzZXdhaXRfZnVuY19kYXRhID0gcGRhdGEtXHUwMDNld2FpdF9mdW5jX2RhdGE7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTI3OC1cdFx0YnVzLVx1MDAzZXBoeV9tYXNrID0gfnBkYXRhLVx1MDAzZXBoeV9tYXNrO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMjgxLVx0XHRidXMtXHUwMDNlbmFtZSA9IFwmIzM0O3VuaW1hYyBNSUkgYnVzXCYjMzQ7O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzoyODI6XHRcdHByaXYtXHUwMDNld2FpdF9mdW5jX2RhdGEgPSBwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzoyODM6XHRcdHByaXYtXHUwMDNld2FpdF9mdW5jID0gdW5pbWFjX21kaW9fcG9sbDtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMjg0LVx0XHRwcml2LVx1MDAzZWNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbChcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyAtIEEgQ3JpdGljYWwgVGltZW91dCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJjbWdlbmV0X21paV93YWl0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgTURJTyByZWFkL3dyaXRlIHByb2Nlc3MuIFRoZSBjb2RlIHNheXMgdGhhdCBpZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCBwcmVzZW50LCB3ZSYjMzk7bGwgKm5ldmVyKiByZWFjaCB0aGlzIGNvZGUgcGF0aC4gU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgaXQgd29ydGggZnV6emluZz8KCkluaXRpYWxseSwgSSYjMzk7bSB0aGlua2luZywgeWVzLCBpZiBzeXprYWxsZXIgY2FuIHNvbWVob3cgaW5zdGFudGlhdGUgdGhpcyBkZXZpY2UuIE1heWJlIHRocm91Z2ggYSBwc2V1ZG8tc3lzY2FsbCwgb3IgaWYgd2UmIzM5O3JlIHJ1bm5pbmcgaW4gUUVNVSB3aXRoIHRoaXMgaGFyZHdhcmUgZW11bGF0ZWQuIEJ1dCwgc3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIGluc3RhbmNlcyBkb24mIzM5O3QgdHlwaWNhbGx5IHJ1biBgcmFzcGk0YmAsIHRoZXkmIzM5O3JlIHVzdWFsbHkgYHZpcnRgIG9uIEFSTTY0LiBDYW4gdGhpcyBwbGF0Zm9ybSBkZXZpY2UgYmUgaW5zdGFudGlhdGVkIHZpYSBhIGBzeXpfZGV2X2NyZWF0ZWA/IE5vLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIGdlbmVyaWMgbWVjaGFuaXNtIGZvciBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZCwgbGlrZSB3aXRoIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZrbXNgLiBXYWl0LCBkb2VzIHN5emthbGxlciBoYXZlIGFuIGluamVjdGlvbiBtZXRob2Q/IE5vcGUsIG5vdCB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBzeXpfaW5pdF9uZXRfc29ja2V0YC4gVGhlbiB0aGVyZSBhcmUgdGhlIHNwZWNpZmljIGRldmljZSBjb25uZWN0b3JzIGxpa2UgYHN5el91c2JfY29ubmVjdGAgb3IgYHN5el84MDIxMV9pbmplY3RfZnJhbWVgLCB3aGljaCBkb24mIzM5O3Qgc2VlbSBsaWtlIHRoZXkgYXBwbHkgaGVyZS4KCkJhc2ljYWxseSwgc3l6a2FsbGVyIHVzdWFsbHkgcmVsaWVzIG9uIGRldmljZXMgYWxyZWFkeSBiZWluZyBwcmVzZW50IGluIHRoZSBzeXN0ZW0sIGVpdGhlciB0aHJvdWdoIFFFTVUgYXJndW1lbnRzIG9yIGEgY3VzdG9tIGRldmljZSB0cmVlLiBJZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCB0aGVyZSwgdGhlIHByb2JlIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IGdldCBjYWxsZWQsIGFuZCB3ZSBuZXZlciBnZXQgdG8gYGJjbWdlbmV0X21paV93YWl0YC4KCk5vdywgY2FuIHRoaXMgYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVT8gWWVzLCBRRU1VIGhhcyB0aGUgYHJhc3BpNGJgIG1hY2hpbmUgdHlwZSwgd2hpY2ggZW11bGF0ZXMgdGhpcyBkZXZpY2UhCgpIb3dldmVyLCB0aGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFNpbmNlIFFFTVUgKmNhbiogZW11bGF0ZSBpdCwgaXQgaXMgdGVjaG5pY2FsbHkgcG9zc2libGUuCgpCdXQgaXMgaXQgYWN0dWFsbHkgd29ydGggdGhlIGVmZm9ydD8KClRoZSBwYXRjaCBpcyBsaXRlcmFsbHkgYWRkaW5nIGEgdGltZW91dCBjaGVjayB0byBhIHdhaXQgZnVuY3Rpb24uIEl0JiMzOTtzOgoKYGBgYwotCXdhaXRfZXZlbnRfdGltZW91dChwcml2LSZndDt3cSwKLQkJCSAgICEoYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01ESU9fQ01EKQotCQkJICAgJmFtcDsgTURJT19TVEFSVF9CVVNZKSwKLQkJCSAgIEhaIC8gMTAwKTsKJiM0MzsJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQocHJpdi0mZ3Q7d3EsCiYjNDM7CQkJCSEoYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01ESU9fQ01EKQomIzQzOwkJCQkmYW1wOyBNRElPX1NUQVJUX0JVU1kpLAomIzQzOwkJCQlIWiAvIDEwMCkpCiYjNDM7CQlyZXR1cm4gLUVUSU1FRE9VVDsKYGBgCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIElmIHRoZSB0aW1lb3V0IGhhcHBlbnMsIGl0IHJldHVybnMgYC1FVElNRURPVVRgIGluc3RlYWQgb2YgYDBgLiBUaGlzIGlzIGEgY2hhbmdlIHRoYXQgd291bGQgYmUgaW1wb3J0YW50IHRvIHRlc3QuCgpJZiB3ZSB3YW50IHRvIGZ1enogdGhpcywgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBCQ01HRU5FVGAgaW4gdGhlIGNvbmZpZywgYW5kIGZvY3VzIHN5emthbGxlciBvbiBgYmNtZ2VuZXRfbWlpX3dhaXRgLiBPaCwgYW5kIHdlJiMzOTtkIGFsc28gbmVlZCBgTURJT19CQ01fVU5JTUFDYC4KCkJ1dCB3YWl0LCBgYmNtZ2VuZXRfbWlpX3dhaXRgIGlzIGp1c3QgYSB3YWl0IGZ1bmN0aW9uISBJdCYjMzk7cyBsaWtlbHkgdGhhdCBkaXJlY3RseSBmdXp6aW5nIHRoaXMgaXNuJiMzOTt0IHRoYXQgZnJ1aXRmdWwuIEl0JiMzOTtzIHdhaXRpbmcgZm9yIGEgaGFyZHdhcmUgcmVnaXN0ZXIgdG8gY2hhbmdlLCBzbyBhbnkgZnV6emluZyBuZWVkcyB0byBmb2N1cyBvbiB0cmlnZ2VyaW5nIE1ESU8gcmVhZHMvd3JpdGVzIGluIHRoZSBmaXJzdCBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1ESU9fQkNNX1VOSU1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz02OD1jb25maWcgTURJT19CQ01fSVBST0Ncbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzYtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Nzc6Y29uZmlnIE1ESU9fQkNNX1VOSU1BQ1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gVW5pTUFDIE1ESU8gYnVzIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkNoZWNraW5nIHRoZSBCQ01HRU5FVCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCBtZSBxdWlja2x5IGFzc2VzcyB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBCQ01HRU5FVC1iYXNlZCBzeXN0ZW0sIGFuZCB3ZSBuZWVkIHRvIHZlcmlmeSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBuYW1lbHkgYE1ESU9fQkNNX1VOSU1BQ2AuJiMzNDsgVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBvciBSZWR1Y2VkIE1JSSAoUk1JSSkgY29tbXVuaWNhdGlvbiBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgYSBCcm9hZGNvbSAoQkNNKSBVbmltYWMgZGV2aWNlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGhlcmUuIElmIGBNRElPX0JDTV9VTklNQUNgIGlzIGVuYWJsZWQgYnkgdGhlIGBCQ01HRU5FVGAgZHJpdmVyLCB0aGF0IHN1Z2dlc3RzIGEgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cCBvciBkZXNpZ24gY2hvaWNlIHJlbGF0ZWQgdG8gdGhlIEV0aGVybmV0IFBIWSBpbnRlcmZhY2UuIFRoZSByZWxhdGlvbnNoaXAgaGVyZSBpcyBjcnVjaWFsLCBzbyBhIHF1aWNrIGNoZWNrIGlzIGluIG9yZGVyLCBwcm9iYWJseSBpbnNwZWN0aW5nIHRoZSBrY29uZmlnL2RldmljZSB0cmVlIHNldHRpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIHNldHRpbmcgaXMgY29ycmVjdCBmb3IgdGhlIGludGVuZGVkIG9wZXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRElPX0JDTV9VTklNQUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9NzI9Y29uZmlnIEJDTUdFTkVUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy03OC1cdHNlbGVjdCBCQ003WFhYX1BIWVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzo3OTpcdHNlbGVjdCBNRElPX0JDTV9VTklNQUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctODAtXHRzZWxlY3QgRElNTElCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNjk9Y29uZmlnIEJDTUFTUFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc0LVx0c2VsZWN0IFBIWUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNzU6XHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3Ni1cdHNlbGVjdCBQQUdFX1BPT0xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2ODIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIEJDTUdFTkVUIFRpbWVvdXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgc2VsZWN0ZWQgdGhlIHBhdGNoLCBhbmQgdGhlIHJlbGV2YW50IGNvZGUgaXMgdGhlIGBCQ01HRU5FVGAgcGFydC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBjaGFuZ2UgaXMgYWN0dWFsbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGhhcmR3YXJlLXNwZWNpZmljIGJlaGF2aW9yIOKAkyBhIHRpbWVvdXQgb24gdGhlIE1ESU8gYnVzLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB3aGljaCBpcyB3aGF0IHN5emthbGxlciB1c2VzLCB0aGluZ3MgYXJlIHRyaWNreS4gVGhlIGhhcmR3YXJlIG1pZ2h0IGVpdGhlciByZXNwb25kIGltbWVkaWF0ZWx5IChlbXVsYXRpb24pIG9yIG5vdCBhdCBhbGwuIElmIHRoZXJlJiMzOTtzIG5vIHJlc3BvbnNlLCBpdCBqdXN0IHRpbWVzIG91dCBhbmQgcmV0dXJucyBgLUVUSU1FRE9VVGAuIFRoZXJlIGlzbiYjMzk7dCBhbnkgY29tcGxleCBsb2dpYyB0aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQuCgpIb3dldmVyLCBhIGAtRVRJTUVET1VUYCByZXR1cm4gKmNvdWxkKiB0cmlnZ2VyIHNvbWUgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIE1ESU8vUEhZIHN1YnN5c3RlbSwgd2hpY2ggaXMgdGhlIGtpbmQgb2YgdGhpbmcgZnV6emluZyBleGNlbHMgYXQgZmluZGluZy4gQnV0LCBoYW5nIG9uLCB0aGUgZnVuY3Rpb24gYGJjbWdlbmV0X21paV93YWl0YCBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBoYXJkd2FyZSBpcyBhY3R1YWxseSBwcmVzZW50LiBJZiBJIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCBzeXprYWxsZXIgKndpbGwqIGZ1enogaXQuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoZXJlIGFueSByZWFzb24gdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgPwoKV2VsbCwgdGhlIGRvY3VtZW50YXRpb24gc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGhhcyBjb2RlIHBhdGhzIHRoYXQgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKSXMgdGhpcyBjb2RlIHBhdGggaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzeXprYWxsZXImIzM5O3Mgc3RhbmRhcmQgc2V0dXA/IEkgdGhpbmsgc28uIFN5emthbGxlciB1c3VhbGx5IHJ1bnMgb24gYSBnZW5lcmljIGB2aXJ0YCBtYWNoaW5lLCBzcGVjaWZpY2FsbHkgb24gQVJNNjQuIFRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkZXZpY2UgaXNuJiMzOTt0IHByZXNlbnQgaW4gdGhhdCBlbnZpcm9ubWVudC4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUgVk0gY29uZmlndXJhdGlvbiBkeW5hbWljYWxseSBmb3IgYSBzcGVjaWZpYyBwYXRjaC4gSXQgdXNlcyBhIGZpeGVkIHNldCBvZiBWTSBjb25maWd1cmF0aW9ucyAocWVtdS1zeXN0ZW0teDg2XzY0IC1NIHBjIG9yIHFlbXUtc3lzdGVtLWFhcmNoNjQgLU0gdmlydCkuCgpJbiB0aG9zZSBzdGFuZGFyZCBlbnZpcm9ubWVudHMsIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkZXZpY2UgaXMgKm5vdCogcHJlc2VudCBhbmQgY2FuJiMzOTt0IGJlIGluc3RhbnRpYXRlZCB0aHJvdWdoIHNvZnR3YXJlLiBVbmxpa2UgdGhpbmdzIGxpa2UgVVNCIGdhZGdldHMgb3IgbWFjODAyMTFfaHdzaW0sIHdoaWNoICpjYW4qIGJlIGNyZWF0ZWQgZHluYW1pY2FsbHkgdmlhIGNvbmZpZ2ZzIG9yIG5ldGxpbmssIHRoaXMgaXNuJiMzOTt0IHBvc3NpYmxlIGhlcmUuIFRodXMsIHRoZSBjb2RlIHBhdGggKnNob3VsZCogYmUgdW5yZWFjaGFibGUuCgpCdXQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjay4gSXMgdGhlcmUgYW55IHdheSB0byBpbnN0YW50aWF0ZSBhIHBsYXRmb3JtIGRldmljZSBmcm9tIHVzZXJzcGFjZT8gVGhlcmUmIzM5O3MgdGhhdCBgQ09ORklHX09GX09WRVJMQVlgLCB3aGljaCBhbGxvd3MgbG9hZGluZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBmcm9tIHVzZXJzcGFjZS4gSG93ZXZlciwgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGN1cnJlbnRseSB1c2UgdGhpcyB0byBpbmplY3QgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMuCgpFdmVuIGlmIGl0IGRpZCwgd2l0aG91dCBhIFFFTVUgZW11bGF0aW9uIG9mIHRoZSBzcGVjaWZpYyBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzc2VzIGZvciB0aGUgaGFyZHdhcmUgKHdoaWNoIGFyZSBvbmx5IHByZXNlbnQgb24gYHJhc3BpNGJgIGhhcmR3YXJlKSwgYWNjZXNzaW5nIHNvbWV0aGluZyBsaWtlIGBVTUFDX01ESU9fQ01EYCB3b3VsZCBjYXVzZSBhIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IChidXMgZXJyb3IpIGFuZCBjcmFzaCB0aGUga2VybmVsIG9yIHRoZSB0aHJlYWQuIFRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzbiYjMzk7dCBiYWNrZWQgYnkgYW4gZW11bGF0ZWQgTU1JTyByZWdpb24gaW4gdGhlIGB2aXJ0YCBtYWNoaW5lLgoKT2theSwgbGV0JiMzOTtzIHZlcmlmeS4gYGJjbWdlbmV0X3VtYWNfcmVhZGxgIHJlYWRzIGZyb20gYSBtZW1vcnktbWFwcGVkIElPIGFkZHJlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JjbWdlbmV0X3VtYWNfcmVhZGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz03OTg9c3RhdGljIGludCBiY21nZW5ldF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTgwOS1cdC8qIE1ha2Ugc3VyZSB3ZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiBDUkNfQ01EX0ZXRCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzo4MTA6XHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfQ01EKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtODExLVx0cHJpdi1cdTAwM2VjcmNfZndkX2VuID0gISEocmVnIFx1MDAyNiBDTURfQ1JDX0ZXRCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz05MzI9c3RhdGljIHZvaWQgYmNtZ2VuZXRfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTk0My1cdFx0LyogcmVwb3J0IGFjdGl2ZSBzdGF0ZSB3aGVuIGxpbmsgaXMgdXAgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6OTQ0Olx0XHR1bWFjX2NtZCA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy05NDUtXHRcdGVwYXVzZS1cdTAwM2V0eF9wYXVzZSA9ICEodW1hY19jbWQgXHUwMDI2IENNRF9UWF9QQVVTRV9JR05PUkUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9MTIyMT1zdGF0aWMgdTMyIGJjbWdlbmV0X3VwZGF0ZV9zdGF0X21pc2Moc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYsIHUxNiBvZmZzZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMjQ5LVx0ZGVmYXVsdDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MTI1MDpcdFx0dmFsID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBvZmZzZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMjUxLVx0XHQvKiBjbGVhciBpZiBvdmVyZmxvd2VkICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0xMjYwPXN0YXRpYyB2b2lkIGJjbWdlbmV0X3VwZGF0ZV9taWJfY291bnRlcnMoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMjgyLVx0XHRjYXNlIEJDTUdFTkVUX1NUQVRfTUlCX1JYOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoxMjgzOlx0XHRcdHZhbCA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTI4NC1cdFx0XHRcdFx0XHQgIFVNQUNfTUlCX1NUQVJUICYjNDM7IGogJiM0Mzsgb2Zmc2V0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTEyODgtXHRcdFx0aWYgKEdFTkVUX0lTX1YxKHByaXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjEyODk6XHRcdFx0XHR2YWwgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIHMtXHUwMDNlcmVnX29mZnNldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTEyOTAtXHRcdFx0XHQvKiBjbGVhciBpZiBvdmVyZmxvd2VkICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0xMzQ5PXZvaWQgYmNtZ2VuZXRfZWVlX2VuYWJsZV9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMzU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoxMzYwOlx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0VFRV9DVFJMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTM2MS1cdGlmIChlbmFibGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0xMzg5PXN0YXRpYyBpbnQgYmNtZ2VuZXRfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTQwNi1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoxNDA3Olx0ZS1cdTAwM2V0eF9scGlfdGltZXIgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfRUVFX0xQSV9USU1FUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTE0MDgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0yNTM2PXN0YXRpYyB2b2lkIHVtYWNfZW5hYmxlX3NldChzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdiwgdTMyIG1hc2ssIGJvb2wgZW5hYmxlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMjU0MC1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MjU0MTpcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0yNTQyLVx0aWYgKHJlZyBcdTAwMjYgQ01EX1NXX1JFU0VUKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0zMzIwPXN0YXRpYyB2b2lkIGJjbWdlbmV0X2dldF9od19hZGRyKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzMyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MzMyNTpcdGFkZHJfdG1wID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01BQzApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0zMzI2LVx0cHV0X3VuYWxpZ25lZF9iZTMyKGFkZHJfdG1wLCBcdTAwMjZhZGRyWzBdKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MzMyNzpcdGFkZHJfdG1wID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01BQzEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0zMzI4LVx0cHV0X3VuYWxpZ25lZF9iZTE2KGFkZHJfdG1wLCBcdTAwMjZhZGRyWzRdKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTM1NjE9c3RhdGljIHZvaWQgYmNtZ2VuZXRfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTM1ODAtXHRzcGluX2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM1ODE6XHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfQ01EKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzU4Mi1cdGlmICgoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSB8fFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9NDIxNT1zdGF0aWMgaW50IGJjbWdlbmV0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtNDIyNi1cdGlmIChkZXZpY2VfbWF5X3dha2V1cChkKSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V3b2xvcHRzKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjQyMjc6XHRcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy00MjI4LVx0XHRpZiAocmVnIFx1MDAyNiBDTURfUlhfRU4pIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYz0xNDQ9aW50IGJjbWdlbmV0X3dvbF9wb3dlcl9kb3duX2NmZyhzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0xNTYtXHRpZiAocHJpdi1cdTAwM2V3b2xvcHRzIFx1MDAyNiAoV0FLRV9NQUdJQyB8IFdBS0VfTUFHSUNTRUNVUkUpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYzoxNTc6XHRcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NUERfQ1RSTCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0xNTgtXHRcdHJlZyB8PSBNUERfRU47XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMTcyLVx0aWYgKHJldHJpZXMgXHUwMDNjIDApIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jOjE3MzpcdFx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01QRF9DVFJMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jLTE3NC1cdFx0cmVnIFx1MDAyNj0gfihNUERfRU4gfCBNUERfUFdfRU4pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jLTE5MS1cdHNwaW5fbG9ja19iaChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jOjE5MjpcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMTkzLVx0cHJpdi1cdTAwM2VjcmNfZndkX2VuID0gMTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYz0yMTQ9aW50IGJjbWdlbmV0X3dvbF9wb3dlcl91cF9jZmcoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMjM2LVx0aWYgKHByaXYtXHUwMDNld29sb3B0cyBcdTAwMjYgKFdBS0VfTUFHSUMgfCBXQUtFX01BR0lDU0VDVVJFKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmM6MjM3Olx0XHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTVBEX0NUUkwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMjM4LVx0XHRpZiAoIShyZWcgXHUwMDI2IE1QRF9FTikpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMjUyLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmM6MjUzOlx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0NNRCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0yNTQtXHRyZWcgXHUwMDI2PSB+Q01EX0NSQ19GV0Q7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9Mjc9c3RhdGljIHZvaWQgYmNtZ2VuZXRfbWFjX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTc3LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6Nzg6XHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfQ01EKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTc5LVx0cmVnIFx1MDAyNj0gfigoQ01EX1NQRUVEX01BU0sgXHUwMDNjXHUwMDNjIENNRF9TUEVFRF9TSElGVCkgfFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTExNz1zdGF0aWMgaW50IGJjbWdlbmV0X2ZpeGVkX3BoeV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTEyNC1cdFx0cHJpdiA9IG5ldGRldl9wcml2KGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoxMjU6XHRcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NT0RFKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTEyNi1cdFx0c3RhdHVzLVx1MDAzZWxpbmsgPSAhIShyZWcgXHUwMDI2IE1PREVfTElOS19TVEFUVVMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTQzOD1zdGF0aWMgaW50IGJjbWdlbmV0X21paV93YWl0KHZvaWQgKndhaXRfZnVuY19kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ0Mi1cdGlmICghd2FpdF9ldmVudF90aW1lb3V0KHByaXYtXHUwMDNld3EsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzo0NDM6XHRcdFx0XHQhKGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NRElPX0NNRClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ0NC1cdFx0XHRcdFx1MDAyNiBNRElPX1NUQVJUX0JVU1kpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE3NQoJCQkJCQkJb3V0cHV0OiAxMjgKCQkJCQkJCXRob3VnaHRzOiA3NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IGJjbWdlbmV0X3VtYWNfcmVhZGwgVGltZW91dCBGaXgqKgoKT2theSwgc28gYGJjbWdlbmV0X3VtYWNfcmVhZGxgIGlzIGp1c3QgYSBzaW1wbGUgcmVhZCBmdW5jdGlvbi4gSWYgdGhlcmUmIzM5O3Mgbm8gcmVhbCBoYXJkd2FyZSBvciBhIGdvb2QgUUVNVSBlbXVsYXRpb24sIHRoaXMgaXMgZ29pbmcgdG8gY3Jhc2gsIG5vIHF1ZXN0aW9uLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IHJ1biBgcmFzcGk0YmAgYnkgZGVmYXVsdCwgc28gdGhpcyBjb2RlIHdvdWxkbiYjMzk7dCBiZSB0b3VjaGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4gV2FpdCwgZG9lcyBTeXprYWxsZXIgKmV2ZXIqIHJ1biBvbiBgcmFzcGk0YmA/IE5vLCBzdGFuZGFyZCBgYXJtNjRgIHVzZXMgYSBgdmlydGAgbWFjaGluZSwgd2hpY2ggZG9lc24mIzM5O3QgaW5jbHVkZSB0aGF0LgoKTm93LCBpZiB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgc2FpZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIGV2ZW4gd2hlbiB1c2luZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiBpdCBtdXN0IGJlIGNhcmVmdWxseSBhc3Nlc3NlZC4KCklzIHRoaXMgY29kZSAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gUUVNVT8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBRRU1VICpkb2VzKiBoYXZlIGEgYHJhc3BpNGJgIG1hY2hpbmUgdHlwZSwgc28gaXQgKmlzKiBwb3NzaWJsZSwgdGVjaG5pY2FsbHkuIEJ1dCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IFRoaXMgcGF0Y2ggaXMganVzdCBhIG9uZS1saW5lIGZpeCwgYWRkaW5nIGEgdGltZW91dCBjaGVjayB0byBhIGhhcmR3YXJlIHdhaXQgbG9vcC4gT2theSwgd2hhdCBhcmUgd2UgdHJ5aW5nIHRvIGZpbmQgYnkgZnV6emluZyB0aGlzPyBJZiB0aGUgdGltZW91dCBvY2N1cnMsIGl0IGp1c3QgcmV0dXJucyBgLUVUSU1FRE9VVGAuIFRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYHVuaW1hY19tZGlvX3JlYWRgIG9yIGB1bmltYWNfbWRpb193cml0ZWAsIHdpbGwgdGhlbiByZXR1cm4gdGhlIHNhbWUgZXJyb3IgY29kZS4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgZXJyb3IgcGF0aC4gSSBkb24mIzM5O3QgdGhpbmsgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gSXQmIzM5O3MgYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIHRpbWVvdXQgZml4LCBhbmQgaXQmIzM5O3MgaGlnaGx5IHNwZWNpZmljIHRvIGEgcGxhdGZvcm0gdGhhdCBTeXprYWxsZXIgKmRvZXNuJiMzOTt0KiB0eXBpY2FsbHkgdGFyZ2V0LgoKTGV0JiMzOTtzIHRoaW5rIHRocm91Z2ggdGhlIHJlYXNvbmluZy4gJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHRpbWVvdXQgY2hlY2sgdG8gYSBoYXJkd2FyZSB3YWl0IGxvb3AgaW4gdGhlIEJyb2FkY29tIEdFTkVUIGRyaXZlci4gVGhpcyBpcyBhIHRyaXZpYWwgZml4IGZvciBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IGlzIG5vdCB0eXBpY2FsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzICh1bmxlc3Mgc3BlY2lmaWNhbGx5IHJ1bm5pbmcgUUVNVSB3aXRoIHJhc3BpNGIgbWFjaGluZSB0eXBlKS4gRnV6emluZyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgdW5saWtlbHkgdG8geWllbGQgbWVhbmluZ2Z1bCByZXN1bHRzLiYjMzQ7IE1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgaXMgdGhlIG9ubHkgY2hhbmdlLiBPa2F5LCBpdCYjMzk7cyB0aGUgb25seSBmaWxlIGFmZmVjdGVkLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGlmIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlzIGFwcHJvcHJpYXRlIGJhc2VkIG9uIHRoZSBwcm9tcHRzJiMzOTsgY3JpdGVyaWEuIEl0IHN0YXRlcyB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFRoaXMgaXMgc3BlY2lmaWMgdG8gYSBCcm9hZGNvbSBHRU5FVCBkcml2ZXIsIGFuZCBpcyBub3QgcGFydCBvZiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBQQ0kvVVNCIGRldmljZXMgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IFZNKSwgaXQgZG9lcyBmaXQgdGhpcyBjcml0ZXJpYS4gV2hpbGUgUUVNVSBjYW4gZW11bGF0ZSB0aGUgZW50aXJlIFNvQyAocmFzcGk0YiksIHN5emthbGxlciBmdXp6aW5nIGlzIHR5cGljYWxseSBkb25lIG9uIGdlbmVyaWMgVk1zIHdoZXJlIHRoaXMgcGxhdGZvcm0gZGV2aWNlIGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQgb3Igc29mdHdhcmUtZW11bGF0ZWQgKGxpa2UgbWFjODAyMTFfaHdzaW0pLgoKVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhlcmUmIzM5O3MgdGhlIGZpbmFsaXplZCByZWFzb25pbmc6ClRoZSBwYXRjaCBhZGRzIGEgdGltZW91dCBjaGVjayB0byBhIGhhcmR3YXJlIHdhaXQgbG9vcCBpbiB0aGUgQnJvYWRjb20gR0VORVQgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBzcGVjaWZpYyB0byBCcm9hZGNvbSBTb0NzIChlLmcuLCBSYXNwYmVycnkgUGkgNCkgYW5kIHJlbGllcyBvbiBtZW1vcnktbWFwcGVkIGhhcmR3YXJlIHJlZ2lzdGVycy4gSXQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBzdGFuZGFyZCBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBHQ0Ugb3IgUUVNVSAmIzM5O3ZpcnQmIzM5OyBtYWNoaW5lcykgdXNlZCBmb3IgZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgaXMgYSB0cml2aWFsIGVycm9yLXBhdGggZml4IGZvciBoYXJkd2FyZSB0aW1lb3V0cy4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wIGluIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEJyb2FkY29tIFNvQ3MgKGUuZy4sIFJhc3BiZXJyeSBQaSA0KSBhbmQgcmVsaWVzIG9uIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VICYjMzk7dmlydCYjMzk7IG1hY2hpbmVzKSB1c2VkIGZvciBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBhIHRyaXZpYWwgZXJyb3ItcGF0aCBmaXggZm9yIGhhcmR3YXJlIHRpbWVvdXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHRpbWVvdXQgY2hlY2sgdG8gYSBoYXJkd2FyZSB3YWl0IGxvb3AgaW4gdGhlIEJyb2FkY29tIEdFTkVUIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gQnJvYWRjb20gU29DcyAoZS5nLiwgUmFzcGJlcnJ5IFBpIDQpIGFuZCByZWxpZXMgb24gbWVtb3J5LW1hcHBlZCBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQgb3Igc29mdHdhcmUtZW11bGF0ZWQgaW4gc3RhbmRhcmQgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUgJiMzOTt2aXJ0JiMzOTsgbWFjaGluZXMpIHVzZWQgZm9yIGZ1enppbmcuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlIGlzIGEgdHJpdmlhbCBlcnJvci1wYXRoIGZpeCBmb3IgaGFyZHdhcmUgdGltZW91dHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6Mzg6MzkuODg2MDEwNTcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMTU2ODEyNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdGltZW91dCBjaGVjayB0byBhIGhhcmR3YXJlIHdhaXQgbG9vcCBpbiB0aGUgQnJvYWRjb20gR0VORVQgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBzcGVjaWZpYyB0byBCcm9hZGNvbSBTb0NzIChlLmcuLCBSYXNwYmVycnkgUGkgNCkgYW5kIHJlbGllcyBvbiBtZW1vcnktbWFwcGVkIGhhcmR3YXJlIHJlZ2lzdGVycy4gSXQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IGluc3RhbnRpYXRlZCBvciBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBzdGFuZGFyZCBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBHQ0Ugb3IgUUVNVSAndmlydCcgbWFjaGluZXMpIHVzZWQgZm9yIGZ1enppbmcuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlIGlzIGEgdHJpdmlhbCBlcnJvci1wYXRoIGZpeCBmb3IgaGFyZHdhcmUgdGltZW91dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjozODozOS44ODYwMTU4NDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDEyNDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI0ZmI2NzRlMGU0NzBlYTQ0MzI2NWUyY2FiNWQ4MGZlNTRlNmI0YzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDY6Mzg6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuY1xcbmluZGV4IGE0ZTBkNWE2ODI2ODc1Li45MmI1OTk3ZDAwYjI0YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jXFxuQEAgLTQzOSwxMCArNDM5LDEyIEBAIHN0YXRpYyBpbnQgYmNtZ2VuZXRfbWlpX3dhaXQodm9pZCAqd2FpdF9mdW5jX2RhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYgPSB3YWl0X2Z1bmNfZGF0YTtcXG4gXFxuLVxcdHdhaXRfZXZlbnRfdGltZW91dChwcml2LVxcdTAwM2V3cSxcXG4tXFx0XFx0XFx0ICAgIShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXFxuLVxcdFxcdFxcdCAgIFxcdTAwMjYgTURJT19TVEFSVF9CVVNZKSxcXG4tXFx0XFx0XFx0ICAgSFogLyAxMDApO1xcbitcXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChwcml2LVxcdTAwM2V3cSxcXG4rXFx0XFx0XFx0XFx0IShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjYgTURJT19TVEFSVF9CVVNZKSxcXG4rXFx0XFx0XFx0XFx0SFogLyAxMDApKVxcbitcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjozODo0MC4zMzA4MTQ3MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MTcxMjAwMzA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHRpbWVvdXQgY2hlY2sgdG8gYSBoYXJkd2FyZSB3YWl0IGxvb3AgaW4gdGhlIEJyb2FkY29tIEdFTkVUIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gQnJvYWRjb20gU29DcyAoZS5nLiwgUmFzcGJlcnJ5IFBpIDQpIGFuZCByZWxpZXMgb24gbWVtb3J5LW1hcHBlZCBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQgb3Igc29mdHdhcmUtZW11bGF0ZWQgaW4gc3RhbmRhcmQgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUgJ3ZpcnQnIG1hY2hpbmVzKSB1c2VkIGZvciBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBhIHRyaXZpYWwgZXJyb3ItcGF0aCBmaXggZm9yIGhhcmR3YXJlIHRpbWVvdXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNGZiNjc0ZTBlNDcwZWE0NDMyNjVlMmNhYjVkODBmZTU0ZTZiNGMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDY6Mzg6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jXG5pbmRleCBhNGUwZDVhNjgyNjg3NS4uOTJiNTk5N2QwMGIyNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmNcbkBAIC00MzksMTAgKzQzOSwxMiBAQCBzdGF0aWMgaW50IGJjbWdlbmV0X21paV93YWl0KHZvaWQgKndhaXRfZnVuY19kYXRhKVxuIHtcbiBcdHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2ID0gd2FpdF9mdW5jX2RhdGE7XG4gXG4tXHR3YWl0X2V2ZW50X3RpbWVvdXQocHJpdi1cdTAwM2V3cSxcbi1cdFx0XHQgICAhKGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NRElPX0NNRClcbi1cdFx0XHQgICBcdTAwMjYgTURJT19TVEFSVF9CVVNZKSxcbi1cdFx0XHQgICBIWiAvIDEwMCk7XG4rXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChwcml2LVx1MDAzZXdxLFxuK1x0XHRcdFx0IShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXG4rXHRcdFx0XHRcdTAwMjYgTURJT19TVEFSVF9CVVNZKSxcbitcdFx0XHRcdEhaIC8gMTAwKSlcbitcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjozODo0MC4zMzA4MTY4MjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODQ0NjgyMzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBgYmNtbWlpLmNgIHdpdGhpbiB0aGUgQnJvYWRjb20gR0VORVQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0J3MgYSB0aW1lb3V0IGhhbmRsaW5nIGNoYW5nZSBpbiBgYmNtZ2VuZXRfbWlpX3dhaXRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGRyaXZlciBpcyBldmVuICpyZWFjaGFibGUqIGZvciBmdXp6aW5nLCBhbmQgaWYgc28sIGhvdy4gSXQncyBhIEJyb2FkY29tIEdFTkVULCB3aGljaCBJIGtub3cgaXMgYW4gRXRoZXJuZXQgTUFDIHR5cGljYWxseSB1c2VkIGluIEJyb2FkY29tIHNldC10b3AgYm94IFNvQ3MgYW5kIHRoZSBSYXNwYmVycnkgUGkgNCDigJMgc28gdGhhdOKAmXMgbXkgc3RhcnRpbmcgcG9pbnQuXG5cbkZpcnN0LCB0aGUgdmlydHVhbGl6YXRpb24gYW5nbGUuIENhbiBJIGdldCB0aGlzIHRvIHJ1biB1bmRlciBRRU1VPyBIbW0sIFFFTVUgaGFzIHRoZSBgYmNtMjgzOGAgbW9kZWwsIGJ1dCB1c3VhbGx5IEdFTkVUIGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIHg4NiBRRU1VIHNldHVwcywgcmlnaHQ/IE1heWJlLCBqdXN0IG1heWJlLCBpdOKAmXMgcHJlc2VudCBub3chIEhvbGQgb27igKYgd2Fzbid0IHRoZXJlIGEgYHJhc3BpNGJgIFFFTVUgbWFjaGluZT8gVGhhdCAqY291bGQqIGVtdWxhdGUgR0VORVQuIFRoZSBpc3N1ZSBpcyBzeXprYWxsZXIgaXMgdXN1YWxseSBydW4gb24geDg2XzY0IG9yIGFybTY0IFZNcywgdGhvdWdoLlxuXG5SaWdodCwgc28gdGhhdCdzIHRoZSBvYnZpb3VzIHJvdXRlLiBXaGF0IGFib3V0IGxlc3MgY29tbW9uIG9wdGlvbnM/IExldCdzIHJ1bGUgdGhlbSBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhIHRyaWNrLiBJcyB0aGVyZSBhbnkgUENJIG9yIFVTQiBlbXVsYXRpb24gYXZhaWxhYmxlIGZvciBHRU5FVD8gU2VlbXMgdW5saWtlbHkgYXMgaXQncyBhIHBsYXRmb3JtIGRldmljZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jYCB0byBzZWUgaG93IGl0J3MgcHJvYmVkLiBUaGF0IHdpbGwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IEkgbWlnaHQgZ2V0IHRoZSBkcml2ZXIgbG9hZGVkIGFuZCBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjozOTo1OC43Nzc2NDMzNjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3MjYxNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9NDQwMT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY21nZW5ldF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTQ0MTEtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjQ0MTI6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihiY21nZW5ldF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtNDQxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6Mzk6NTkuMTU0OTExNTI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzOTU0NDQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipQbGF0Zm9ybSBEcml2ZXIgQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBhIHBsYXRmb3JtIGRyaXZlci4gRmlyc3QsIGFuZCBhbHdheXMsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgY29tcGF0aWJsZSBzdHJpbmdzLiBUaGF0J3MgdGhlIGJlZHJvY2sgb2YgaG93IHRoaXMgZHJpdmVyIGlkZW50aWZpZXMgaXRzZWxmIGFuZCBob3cgdGhlIHN5c3RlbSBrbm93cyBpdCBzaG91bGQgbWFuYWdlIGEgc3BlY2lmaWMgZGV2aWNlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHN0cmluZ3MgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgc2lsaWNvbiBpdCdzIG1lYW50IHRvIGhhbmRsZSwgaWYgaXQgaXMgdXNpbmcgYW55IGN1c3RvbSBuYW1pbmcgc2NoZW1lcywgYW5kIGlmIHRoZXJlIGFyZSBrbm93biBpc3N1ZXMgd2l0aCBhbnkgb2YgdGhlIHZlbmRvciBzcGVjaWZpYyBuYW1pbmcgc2NoZW1lcy4gRnJvbSB0aGVyZSB3ZSBjYW4gbW92ZSB0byBsb29raW5nIGF0IHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA2OjQwOjAyLjU5NDQ1ODY2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODUwNTc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLmNvbXBhdGlibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9Mzk1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21nZW5ldF9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6Mzk1NzpcXHR7IC5jb21wYXRpYmxlID0gXFxcImJyY20sZ2VuZXQtdjFcXFwiLCAuZGF0YSA9IFxcdTAwMjZ2MV9wbGF0X2RhdGEgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NTg6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJicmNtLGdlbmV0LXYyXFxcIiwgLmRhdGEgPSBcXHUwMDI2djJfcGxhdF9kYXRhIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozOTU5OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYnJjbSxnZW5ldC12M1xcXCIsIC5kYXRhID0gXFx1MDAyNnYzX3BsYXRfZGF0YSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6Mzk2MDpcXHR7IC5jb21wYXRpYmxlID0gXFxcImJyY20sZ2VuZXQtdjRcXFwiLCAuZGF0YSA9IFxcdTAwMjZ2NF9wbGF0X2RhdGEgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NjE6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJicmNtLGdlbmV0LXY1XFxcIiwgLmRhdGEgPSBcXHUwMDI2djVfcGxhdF9kYXRhIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozOTYyOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYnJjbSxiY20yNzExLWdlbmV0LXY1XFxcIiwgLmRhdGEgPSBcXHUwMDI2YmNtMjcxMV9wbGF0X2RhdGEgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjM5NjM6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJicmNtLGJjbTc3MTItZ2VuZXQtdjVcXFwiLCAuZGF0YSA9IFxcdTAwMjZiY203NzEyX3BsYXRfZGF0YSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzk2NC1cXHR7IH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA2OjQwOjAyLjY1Mjk3NTYwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMjk1MDc1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQnJvYWRjb20gR0VORVQgUGxhdGZvcm0gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIEJyb2FkY29tIEdFTkVULiBDYW4gSSBldmVuICp0aGluayogYWJvdXQgZnV6emluZyB0aGlzIHdpdGggU3l6a2FsbGVyPyBUaGUgY29yZSBxdWVzdGlvbiBpczogY2FuIFN5emthbGxlciBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcz8gSSBrbm93IGl0IGNhbiwgdGhyb3VnaCBgc3l6X2Rldl9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCAqaWYqIHRoZSBrZXJuZWwgc3VwcG9ydHMgaXQuIEJ1dCBwbGF0Zm9ybSBkZXZpY2VzIHVzdWFsbHkgY29tZSBmcm9tIERldmljZSBUcmVlIG9yIEFDUEksIHJpZ2h0PyBTeXprYWxsZXIgaGFzIHNvbWUgbWVjaGFuaXNtcyBmb3IgaW5qZWN0aW5nIHRoZW0sIGVpdGhlciB3aXRoIHBzZXVkby1zeXNjYWxscyBvciBjb25maWd1cmF0aW9ucywgYnV0IGl04oCZcyByYXJlbHkgc3RyYWlnaHRmb3J3YXJkLCBlc3BlY2lhbGx5IGZvciBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIG9uIFN5c3RlbS1vbi1DaGlwcy4gVGhleSBuZWVkIGV4cGxpY2l0IHRhcmdldGluZyBvciBhIGdlbmVyaWMgaW5zdGFudGlhdGlvbiBtZXRob2QuXG5cbkhtbSwgbGV0IG1lIGNoZWNr4oCmIGRvZXMgU3l6a2FsbGVyIGhhdmUgYW55dGhpbmcgbmFtZWQgYHN5el9nZW5ldF8uLi5gPyBOb3BlLiBUaGF0J3MgYSBkZWFkIGVuZC5cblxuTm93LCBjYW4gSSBldmVuICpyZWFjaCogdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElmIHRoZSBrZXJuZWwgaGFzIGBDT05GSUdfQkNNR0VORVRgIGVuYWJsZWQsIGFuZCBTeXprYWxsZXIgcnVucyBvbiBhbiBBUk02NCBWTSB3aXRoIGEgZGV2aWNlIHRyZWUgdGhhdCBpbmNsdWRlcyB0aGUgQnJvYWRjb20gZGV2aWNlLCB0aGVuICptYXliZSouIEJ1dCwgYW5kIHRoaXMgaXMgdGhlIHR5cGljYWwgc2NlbmFyaW8sIFN5emthbGxlciBvZnRlbiBydW5zIGluIGdlbmVyaWMgVk1zIGxpa2UgeDg2XzY0IFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLlxuXG5CdXQgaG9sZCBvbiwgU3l6a2FsbGVyICpkb2VzKiBmdXp6IHNvbWUgcGxhdGZvcm0gZHJpdmVycyBpZiB0aGV5IGNhbiBiZSBpbnN0YW50aWF0ZWQuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVja+KApiBkb2VzIGl0IGhhdmUgc29tZXRoaW5nIGxpa2UgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYD8gTm8sIG5vdGhpbmcgbGlrZSB0aGF0LCBidXQgbWF5YmUgdGhlcmUncyBhIHdvcmthcm91bmQuXG5cbkkgbmVlZCB0byBsb29rIGZvciBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGNsdWVzLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBpZiB0aGVyZSdzIGFueSBjb25maWcgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6MDkuODgyNDg1Mzc5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzIwMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCQ01HRU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9NjM9Y29uZmlnIEJDTTYzWFhfRU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy03MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjcyOmNvbmZpZyBCQ01HRU5FVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctNzMtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEdFTkVUIGludGVybmFsIE1BQyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDowOS45MzgyMTE2MzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY2MDczNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFB1cnBvc2Ugb2YgYGJjbWdlbmV0X21paV93YWl0YCoqXG5cbk9rYXksIHNvIHRoZSB0aG91Z2h0IHByb2Nlc3MgaXMgemVyb2luZyBpbiBvbiBgYmNtZ2VuZXRfbWlpX3dhaXRgLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsIFwiUmlnaHQsIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLlwiIFNpbmNlIEknbSBmYW1pbGlhciB3aXRoIEJyb2FkY29tJ3MgRXRoZXJuZXQgaW1wbGVtZW50YXRpb25zIGFuZCBsaWtlbHkgdGhlIHVuZGVybHlpbmcgTUlJL0dNSUkvUkdNSUkgaW50ZXJmYWNlIG51YW5jZXMsIEknbSB0aGlua2luZyBhYm91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgUEhZL01BQyBpbnRlcmFjdGlvbi4gV2hhdCBzcGVjaWZpYyBzaXR1YXRpb25zIHdvdWxkIG5lY2Vzc2l0YXRlIGEgd2FpdD8gSXMgaXQgYSBkZWxheSBmb3IgUEhZIGluaXRpYWxpemF0aW9uIGFmdGVyIHBvd2VyLW9uPyBQZXJoYXBzIHdhaXRpbmcgZm9yIGEgbGluayBlc3RhYmxpc2htZW50IHNpZ25hbCB0byBzdGFiaWxpemU/IE9yIG1heWJlIGl0J3MgYSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHdpdGhpbiB0aGUgZHJpdmVyIHRvIGVuc3VyZSBwcm9wZXIgTUlJIHJlZ2lzdGVyIGFjY2VzcyBhbmQgcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGhhbmRsaW5nIGludGVycnVwdHMgb3IgRE1BLiBUaGUgaW50ZW50IGlzIGxpa2VseSB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRob3NlIHNjZW5hcmlvcyBpdCBhcHBsaWVzIHRvLiBEZXBlbmRpbmcgb24gaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2hlcmUgaW4gdGhlIGNvbnRyb2wgZmxvdyBpdCBpcyBpbXBsZW1lbnRlZCwgaXQgbWF5IGJlIHByb3ZpZGluZyBhIHRpbWUtb3V0IG1lY2hhbmlzbSwgb3IgbW9yZSBjb21wbGV4IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBkZXBlbmRpbmcgb24gaG93IGl0J3MgaW1wbGVtZW50ZWQgYW5kIHVzZWQuIEknbSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE4NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA2OjQwOjE0LjkwNDI4Nzk4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1OTUzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmNtZ2VuZXRfbWlpX3dhaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTQxOD1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpiY21nZW5ldF9taWlfb2ZfZmluZF9tZGlvKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtNDM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjQzODpzdGF0aWMgaW50IGJjbWdlbmV0X21paV93YWl0KHZvaWQgKndhaXRfZnVuY19kYXRhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz00NTE9c3RhdGljIGludCBiY21nZW5ldF9taWlfcmVnaXN0ZXIoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy00NjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6NDY4OlxcdHBwZC53YWl0X2Z1bmMgPSBiY21nZW5ldF9taWlfd2FpdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy00NjktXFx0cHBkLndhaXRfZnVuY19kYXRhID0gcHJpdjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6MTQuOTYxODkwNzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2MDEyMDM3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgQnJvYWRjb20gR0VORVQgTURJTyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZm9yIHRoZSBNRElPIGJ1cywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQnJvYWRjb20gU29Dcywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZm9yIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLiBXZSdyZSB0YWxraW5nIHBsYXRmb3JtIGRyaXZlciBoZXJlLCBsaWtlbHkgdGllZCB0byBoYXJkd2FyZSBvbiBzb21ldGhpbmcgbGlrZSBhIFJhc3BiZXJyeSBQaSA0LiBVbmxlc3MgUUVNVSBzcGVjaWZpY2FsbHkgZW11bGF0ZXMgdGhpcywgaXQncyBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgcmVhY2hhYmxlIGluIGEgdHlwaWNhbCBHQ0Ugb3IgZ2VuZXJpYyBRRU1VIGVudmlyb25tZW50LiBUaGUgcHJvbXB0LCBob3dldmVyLCBleHBsaWNpdGx5IGFza3MgaWYgaXQncyBcImltcG9zc2libGUgdG8gcmVhY2gsXCIgYW5kIHRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBjaXRlcyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEhtbS4gSWYgd2UgcnVuIFFFTVUgd2l0aCB0aGUgYC1NIHJhc3BpNGJgIG1hY2hpbmUgdHlwZSwgdGhlbiBpdCAqY291bGQqIGJlIHJlYWNoZWQuIEJ1dCwgaXMgdGhhdCBjb25zaWRlcmVkIGEgXCJzdGFuZGFyZFwiIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBOb3JtYWxseSwgdGhlc2UgU29DLXNwZWNpZmljIGRyaXZlcnMgYXJlIHNlZW4gYXMgdW5yZWFjaGFibGUgdW5sZXNzIHNvZnR3YXJlIGVtdWxhdGlvbiBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgaGFyZHdhcmUgdGhhdOKAmXMgZW11bGF0ZWQgYXMgcGFydCBvZiBnZW5lcmljIGVudmlyb25tZW50cy4gQ2FuIHRoaXMgYmUgaW5zdGFudGlhdGVkIHZpYSBgc3lzZnNgIG9yIGBjb25maWdmc2A/IE5vLiBXaGF0IGFib3V0IGRldmljZSB0cmVlIG92ZXJsYXlzPyBZZXMsIHRoZW9yZXRpY2FsbHksIGlmIHRoZSBrZXJuZWwgc3VwcG9ydHMgaXQuIEJ1dCBldmVuIGlmIHRoZSBkcml2ZXIgKmRvZXMqIGxvYWQsIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUgb3IgUUVNVSdzIGVtdWxhdGlvbiBvZiB0aGUgR0VORVQgcmVnaXN0ZXJzLCBpdCdzIGxpa2VseSB0byBmYWlsLCBoYW5nLCBvciBjcmFzaCB3aGVuIGl0IHRyaWVzIHRvIGFjY2VzcyBwaHlzaWNhbCBtZW1vcnkuXG5cbk9rYXksIGxldCdzIHNlZSBpZiBRRU1VIGVtdWxhdGVzIGl0LiBBaCwgdGhlIFFFTVUgc291cmNlIGhhcyBgaHcvbmV0L2JjbTI4MzhfZ2VuZXQuY2Ag4oCTIHllcCwgUUVNVSAqZG9lcyogZW11bGF0ZSBpdCEgSG93ZXZlciwgSSBuZWVkIHRvIGtub3cgaWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgYHJhc3BpNGJgLiBTeXprYWxsZXIgaGFzIGBhcm02NGAsIGJ1dCB0eXBpY2FsbHkgdXNlcyBgdmlydGAuIFNvLCBpZiB3ZSBjb25zaWRlciBRRU1VIGVtdWxhdGlvbiBhcyDigJxwb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsXCIgdGhlbiB5ZXMsIGl0J3MgZG9hYmxlLlxuXG5Ob3csIGxldCdzIGZvY3VzIG9uIHRoZSBhY3R1YWwgcGF0Y2guIEl04oCZcyBhIHNpbXBsZSB0aW1lb3V0IGNoZWNrOiBhZGRpbmcgYW4gYC1FVElNRURPVVRgIHJldHVybi4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2U6IHJldHVybmluZyBhbiBlcnJvciBjb2RlLiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/IFllcywgdGhlcmUgaXMgZnVuY3Rpb25hbCBjaGFuZ2UuIExldCdzIGRpZyBkZWVwZXI6IGlzIGBiY21nZW5ldF9taWlfd2FpdGAgcmVhY2hhYmxlPyBJdCdzIGNhbGxlZCBieSBNRElPIGJ1cyBjb2RlLiBJZiB3ZSBkZWVtIHRoaXMgd29ydGggZnV6emluZywgdGhhdCBtZWFucyB3ZSBhbHNvIG5lZWQgdG8gYWRkIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb25maWd1cmF0aW9ucyB3b3VsZCBiZSBgQkNNR0VORVRgLCBhbmQgdGhlIGZvY3VzIHN5bWJvbCB3b3VsZCBiZSBgYmNtZ2VuZXRfbWlpX3dhaXRgLlxuXG5XYWl0LiBJcyBpdCAqcmVhbGx5KiB3b3J0aCBmdXp6aW5nPyBJZiB0aGUgZGV2aWNlIGlzbid0IHByZXNlbnQsIHRoZSBkcml2ZXIgd29u4oCZdCBwcm9iZS4gSWYgdGhlIGRldmljZSAqaXMqIHByZXNlbnQgKGxpa2UgaW4gUUVNVSBgcmFzcGk0YmApLCB0aGUgZHJpdmVyIHByb2JlcywgYW5kIGBiY21nZW5ldF9taWlfd2FpdGAgaXMgbGlrZWx5IGNhbGxlZCBkdXJpbmcgTURJTyBvcGVyYXRpb25zLiBDYW4gc3l6a2FsbGVyIHRyaWdnZXIgTURJTyBvcGVyYXRpb25zIGZyb20gdXNlcnNwYWNlPyBVc3VhbGx5IE1ESU8gb3BlcmF0aW9ucyBoYXBwZW4gZHVyaW5nIHByb2JlIG9yIHdoZW4gY29uZmlndXJpbmcgdGhlIFBIWSB2aWEgYGV0aHRvb2xgIG9yIGBpb2N0bGAuIFRpbWUgdG8gY2hlY2sgd2hlcmUgYHdhaXRfZnVuY2AgaXMgYWN0dWFsbHkgdXNlZCBpbiB0aGUgTURJTyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODA1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA2OjQwOjI4LjU2MzA5NzQyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUzMTc0MzYzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3YWl0X2Z1bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6MjguOTE2Mjg3NjcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDYyMTUwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRlY2lwaGVyaW5nIHRoZSBQbGF0Zm9ybSBEYXRhIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYHBwZGAgYW5kIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIHJlZmVycmluZyB0byBhIGBzdHJ1Y3QgbWRpb19taWlfYnVzX3BsYXRmb3JtX2RhdGFgLiBUaGF0IHJpbmdzIGEgYmVsbCwgYnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGlzIGFzc29jaWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWVhbnMgaW4gdGhpcyBjb250ZXh0IGFuZCBob3cgdGhpcyB0aWVzIHRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgYGJjbWdlbmV0X21paV9yZWdpc3RlcmAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzZWUgaG93IHRoaXMgYHBwZGAg4oCTIGFzc3VtaW5nIGl0IGlzIHdoYXQgSSB0aGluayBpdCBpcyDigJMgaXMgYWN0dWFsbHkgdXRpbGl6ZWQgYW5kIHdoYXQgaXRzIHJvbGUgaXMgaW4gdGhlIGJpZ2dlciBzY2hlbWUgb2YgdGhpbmdzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgZ2V0IGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDozMi4yNjI1MDU3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA4MTM1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmNtZ2VuZXRfbWlpX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz00Mzg9c3RhdGljIGludCBiY21nZW5ldF9taWlfd2FpdCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzo0NTE6c3RhdGljIGludCBiY21nZW5ldF9taWlfcmVnaXN0ZXIoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtNDUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jPTU5MT1pbnQgYmNtZ2VuZXRfbWlpX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTU5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzo1OTY6XFx0cmV0ID0gYmNtZ2VuZXRfbWlpX3JlZ2lzdGVyKHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTU5Ny1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDozMi4zMzMzMjU4OTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MzY4ODE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJjbWdlbmV0X21paV9yZWdpc3RlcmAgY29kZS5cblxuKipEaXZpbmcgaW50byBgYmNtZ2VuZXRfbWlpX3JlZ2lzdGVyYCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgXCJ3aGF0IGlzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZG9pbmcgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0P1wiIEl0J3MgbmFtZWQgd2l0aCBcIkJDTVwiIHNvIGl0IG11c3QgYmUgQnJvYWRjb20tc3BlY2lmaWMsIGFuZCBcImdlbmV0XCIgcHJvYmFibHkgcmVmZXJzIHRvIGdpZ2FiaXQgZXRoZXJuZXQuIFRoZSBcIk1JSVwiIHBhcnQgc3VnZ2VzdHMgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UsIGEgc3RhbmRhcmQgZm9yIGNvbm5lY3RpbmcgUEhZIHRyYW5zY2VpdmVycyB0byBNQUMgY29udHJvbGxlcnMuIFNvLCBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBjb25maWd1cmluZyBvciByZWdpc3RlcmluZyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTUlJIGludGVyZmFjZSBmb3IgYSBCcm9hZGNvbSBnaWdhYml0IGV0aGVybmV0IGNvbnRyb2xsZXIuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHlwZSBvZiByZWdpc3RyYXRpb24gaXMgYmVpbmcgZG9uZS4gSXMgaXQgcmVnaXN0ZXIgdGhlIE1JSSBidXMsIGEgcGFydGljdWxhciBQSFksIGEgc2V0IG9mIE1JSSByZWdpc3RlcnMsIG9yIGlzIGl0IHNldHRpbmcgdXAgaW50ZXJydXB0IGhhbmRsZXJzPyBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGludm9sdmVzIHRoZSBsb3ctbGV2ZWwgc2V0dXAgbmVjZXNzYXJ5IHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZXh0ZXJuYWwgcGh5c2ljYWwgbGF5ZXIgZGV2aWNlIHZpYSB0aGUgTUlJIGJ1cy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiByZWdpc3RlciBhZGRyZXNzZXMsIFBIWSBJRHMsIGFuZCBwb3NzaWJseSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbnMsIHRoYXQgYXJlIGxpa2VseSBwcmVzZW50IHdpdGhpbiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6MzYuMDg3MDE2NDY5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1MTpcXHRzdGF0aWMgaW50IGJjbWdlbmV0X21paV9yZWdpc3RlcihzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcXG4gNDUyOlxcdHtcXG4gNDUzOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwcml2LVxcdTAwM2VwZGV2O1xcbiA0NTQ6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpkbiA9IHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlO1xcbiA0NTU6XFx0XFx0c3RydWN0IHVuaW1hY19tZGlvX3BkYXRhIHBwZDtcXG4gNDU2OlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBwZGV2O1xcbiA0NTc6XFx0XFx0c3RydWN0IHJlc291cmNlICpwcmVzLCByZXM7XFxuIDQ1ODpcXHRcXHRpbnQgaWQsIHJldDtcXG4gNDU5OlxcdFxcbiA0NjA6XFx0XFx0cHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7XFxuIDQ2MTpcXHRcXHRpZiAoIXByZXMpIHtcXG4gNDYyOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkludmFsaWQgcmVzb3VyY2VcXFxcblxcXCIpO1xcbiA0NjM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ2NDpcXHRcXHR9XFxuIDQ2NTpcXHRcXHRtZW1zZXQoXFx1MDAyNnJlcywgMCwgc2l6ZW9mKHJlcykpO1xcbiA0NjY6XFx0XFx0bWVtc2V0KFxcdTAwMjZwcGQsIDAsIHNpemVvZihwcGQpKTtcXG4gNDY3OlxcdFxcbiA0Njg6XFx0XFx0cHBkLndhaXRfZnVuYyA9IGJjbWdlbmV0X21paV93YWl0O1xcbiA0Njk6XFx0XFx0cHBkLndhaXRfZnVuY19kYXRhID0gcHJpdjtcXG4gNDcwOlxcdFxcdHBwZC5idXNfbmFtZSA9IFxcXCJiY21nZW5ldCBNSUkgYnVzXFxcIjtcXG4gNDcxOlxcdFxcdC8qIFBhc3MgYSByZWZlcmVuY2UgdG8gb3VyIFxcXCJtYWluXFxcIiBjbG9jayB3aGljaCBpcyB1c2VkIGZvciBNRElPXFxuIDQ3MjpcXHRcXHQgKiB0cmFuc2ZlcnNcXG4gNDczOlxcdFxcdCAqL1xcbiA0NzQ6XFx0XFx0cHBkLmNsayA9IHByaXYtXFx1MDAzZWNsaztcXG4gNDc1OlxcdFxcbiA0NzY6XFx0XFx0LyogVW5pbWFjIE1ESU8gYnVzIGNvbnRyb2xsZXIgc3RhcnRzIGF0IFVuaU1BQyBvZmZzZXQgKyBNRElPX0NNRFxcbiA0Nzc6XFx0XFx0ICogYW5kIGlzIDIgKiAzMi1iaXRzIHdvcmQgbG9uZywgOCBieXRlcyB0b3RhbC5cXG4gNDc4OlxcdFxcdCAqL1xcbiA0Nzk6XFx0XFx0cmVzLnN0YXJ0ID0gcHJlcy1cXHUwMDNlc3RhcnQgKyBHRU5FVF9VTUFDX09GRiArIFVNQUNfTURJT19DTUQ7XFxuIDQ4MDpcXHRcXHRyZXMuZW5kID0gcmVzLnN0YXJ0ICsgODtcXG4gNDgxOlxcdFxcdHJlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNO1xcbiA0ODI6XFx0XFxuIDQ4MzpcXHRcXHRpZiAoZG4pXFxuIDQ4NDpcXHRcXHRcXHRpZCA9IG9mX2FsaWFzX2dldF9pZChkbiwgXFxcImV0aFxcXCIpO1xcbiA0ODU6XFx0XFx0ZWxzZVxcbiA0ODY6XFx0XFx0XFx0aWQgPSBwZGV2LVxcdTAwM2VpZDtcXG4gNDg3OlxcdFxcbiA0ODg6XFx0XFx0cHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoVU5JTUFDX01ESU9fRFJWX05BTUUsIGlkKTtcXG4gNDg5OlxcdFxcdGlmICghcHBkZXYpXFxuIDQ5MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0LyogUmV0YWluIHRoaXMgcGxhdGZvcm1fZGV2aWNlIHBvaW50ZXIgZm9yIGxhdGVyIGNsZWFudXAgKi9cXG4gNDkzOlxcdFxcdHByaXYtXFx1MDAzZW1paV9wZGV2ID0gcHBkZXY7XFxuIDQ5NDpcXHRcXHRwcGRldi1cXHUwMDNlZGV2LnBhcmVudCA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIDQ5NTpcXHRcXHRpZiAoZG4pXFxuIDQ5NjpcXHRcXHRcXHRwcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUgPSBiY21nZW5ldF9taWlfb2ZfZmluZF9tZGlvKHByaXYpO1xcbiA0OTc6XFx0XFx0ZWxzZVxcbiA0OTg6XFx0XFx0XFx0cHBkLnBoeV9tYXNrID0gfjA7XFxuIDQ5OTpcXHRcXG4gNTAwOlxcdFxcdHJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBwZGV2LCBcXHUwMDI2cmVzLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6MzYuMDg3MTExMTU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjYwNDM0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBteSBleHBlcnRpc2U6XG5cbioqTXkgSW50ZXJuYWwgQW5hbHlzaXMgb2YgVGhpcyBEcml2ZXIgU2V0dXAqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBpcyBkeW5hbWljYWxseSBjb25zdHJ1Y3RpbmcgYSBgdW5pbWFjLW1kaW9gIHBsYXRmb3JtIGRldmljZS4gVGhhdCdzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSBmb3IgcGxhdGZvcm0tYmFzZWQgZHJpdmVyczsgaXQgYWxsb3dzIHRoZSBzeXN0ZW0gdG8gZGVmaW5lIHRoZSBkZXZpY2UgYW5kIGl0cyByZXNvdXJjZXMsIGFuZCB0aGVuIHRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgYXR0YWNoZWQgdG8gaXQuIFRoZSBrZXkgaXMgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhlIHBsYXRmb3JtIGRhdGE6IGBwcGRgLiBUaGlzIGlzIGNyaXRpY2FsLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBgcHBkYCwgbGlrZWx5IHNvbWUgcG9pbnRlciB0byBhIHN0cnVjdHVyZSBvciBkYXRhLCBpcyBnb2luZyB0byBjb250YWluIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIGluaXRpYWxpemF0aW9uIGluZm9ybWF0aW9uIHRoZSBgdW5pbWFjLW1kaW9gIGRyaXZlciBuZWVkcy4gVGhpbmsgb2YgaXQgYXMgdGhlIHJlY2lwZS5cblxuVGhlIG1lbnRpb24gb2YgYHdhaXRfZnVuY2AgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHNvbWUgZm9ybSBvZiBzeW5jaHJvbml6YXRpb24gb3IgZXZlbnQgaGFuZGxpbmcgaXMgaW52b2x2ZWQuIEknZCBleHBlY3QgdG8gZmluZCB0aGlzIGJlaW5nIHVzZWQgZWl0aGVyIHRvIHdhaXQgZm9yIGEgY2VydGFpbiBzdGF0ZSB3aXRoaW4gdGhlIGhhcmR3YXJlIOKAkyBwZXJoYXBzIFBIWSBpbml0aWFsaXphdGlvbiBvciBsaW5rIGVzdGFibGlzaG1lbnQg4oCTIG9yIHRvIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIHRoZSBkcml2ZXIgdG8gcGF1c2UgYW5kIHJlc3VtZSBvcGVyYXRpb25zIGJhc2VkIG9uIGV4dGVybmFsIGV2ZW50cy4gR2l2ZW4gdGhlIE1ESU8gY29udGV4dCwgSSdtIGxlYW5pbmcgdG93YXJkIHRoZSBmb3JtZXI7IGxpa2VseSBpdOKAmXMgbWFuYWdpbmcgYWNjZXNzIHRvIHRoZSBNRElPIGJ1cyBpdHNlbGYsIHdhaXRpbmcgZm9yIG9wZXJhdGlvbnMgdG8gY29tcGxldGUsIG9yIGhhbmRsaW5nIGludGVycnVwdHMgdGhhdCBzaWduYWwgdGhlIGNvbXBsZXRpb24gb2YgTURJTyB0cmFuc2FjdGlvbnMuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgdW5pbWFjLW1kaW9gIHNvdXJjZSB0byBjb25maXJtLCBidXQgdGhpcyBpcyBhIHNvbGlkIGluaXRpYWwgYXNzZXNzbWVudC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgdG9vLCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgXCJwcGRcIiBkYXRhIHN0cnVjdHVyZSB0aGF0IGlzIHBhc3NlZC4gVGhhdCBjb250YWlucyB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3IgdGhpcyBzcGVjaWZpYyBkZXZpY2UuIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9ucyBpbiBteSBtaW5kIGFib3V0IHdoYXQgdHlwZXMgb2YgcGFyYW1ldGVycyBtaWdodCBiZSBzdG9yZWQgd2l0aGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDg3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDo0MC4zNTMxNTY4NjhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDg3ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhaXRfZnVuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jPTM4PXN0cnVjdCB1bmltYWNfbWRpb19wcml2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtNDAtXFx0dm9pZCBfX2lvbWVtXFx0XFx0KmJhc2U7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzo0MTpcXHRpbnQgKCp3YWl0X2Z1bmMpXFx0KHZvaWQgKndhaXRfZnVuY19kYXRhKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjQyOlxcdHZvaWRcXHRcXHRcXHQqd2FpdF9mdW5jX2RhdGE7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy00My1cXHRzdHJ1Y3QgY2xrXFx0XFx0KmNsaztcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM9Njc9c3RhdGljIGlubGluZSB2b2lkIHVuaW1hY19tZGlvX3N0YXJ0KHN0cnVjdCB1bmltYWNfbWRpb19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy03NS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjc2OnN0YXRpYyBpbnQgdW5pbWFjX21kaW9fcG9sbCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTc3LXtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjc4OlxcdHN0cnVjdCB1bmltYWNfbWRpb19wcml2ICpwcml2ID0gd2FpdF9mdW5jX2RhdGE7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy03OS1cXHR1MzIgdmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYz05MT1zdGF0aWMgaW50IHVuaW1hY19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTA3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MTA4OlxcdHJldCA9IHByaXYtXFx1MDAzZXdhaXRfZnVuYyhwcml2LVxcdTAwM2V3YWl0X2Z1bmNfZGF0YSk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xMDktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM9MTMwPXN0YXRpYyBpbnQgdW5pbWFjX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTQ3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MTQ4OlxcdHJldCA9IHByaXYtXFx1MDAzZXdhaXRfZnVuYyhwcml2LVxcdTAwM2V3YWl0X2Z1bmNfZGF0YSk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xNDktXFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXFx1MDAzZWNsayk7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jPTIzNz1zdGF0aWMgaW50IHVuaW1hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTI3NS1cXHRcXHRidXMtXFx1MDAzZW5hbWUgPSBwZGF0YS1cXHUwMDNlYnVzX25hbWU7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzoyNzY6XFx0XFx0cHJpdi1cXHUwMDNld2FpdF9mdW5jID0gcGRhdGEtXFx1MDAzZXdhaXRfZnVuYztcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjI3NzpcXHRcXHRwcml2LVxcdTAwM2V3YWl0X2Z1bmNfZGF0YSA9IHBkYXRhLVxcdTAwM2V3YWl0X2Z1bmNfZGF0YTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTI3OC1cXHRcXHRidXMtXFx1MDAzZXBoeV9tYXNrID0gfnBkYXRhLVxcdTAwM2VwaHlfbWFzaztcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMjgxLVxcdFxcdGJ1cy1cXHUwMDNlbmFtZSA9IFxcXCJ1bmltYWMgTUlJIGJ1c1xcXCI7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYzoyODI6XFx0XFx0cHJpdi1cXHUwMDNld2FpdF9mdW5jX2RhdGEgPSBwcml2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MjgzOlxcdFxcdHByaXYtXFx1MDAzZXdhaXRfZnVuYyA9IHVuaW1hY19tZGlvX3BvbGw7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0yODQtXFx0XFx0cHJpdi1cXHUwMDNlY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDo0MC40MTQyNTA4MTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4MDQ0MDg3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyAtIEEgQ3JpdGljYWwgVGltZW91dCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBiY21nZW5ldF9taWlfd2FpdGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIE1ESU8gcmVhZC93cml0ZSBwcm9jZXNzLiBUaGUgY29kZSBzYXlzIHRoYXQgaWYgdGhlIGRldmljZSBpc24ndCBwcmVzZW50LCB3ZSdsbCAqbmV2ZXIqIHJlYWNoIHRoaXMgY29kZSBwYXRoLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyBpdCB3b3J0aCBmdXp6aW5nP1xuXG5Jbml0aWFsbHksIEknbSB0aGlua2luZywgeWVzLCBpZiBzeXprYWxsZXIgY2FuIHNvbWVob3cgaW5zdGFudGlhdGUgdGhpcyBkZXZpY2UuIE1heWJlIHRocm91Z2ggYSBwc2V1ZG8tc3lzY2FsbCwgb3IgaWYgd2UncmUgcnVubmluZyBpbiBRRU1VIHdpdGggdGhpcyBoYXJkd2FyZSBlbXVsYXRlZC4gQnV0LCBzeXprYWxsZXIncyBzdGFuZGFyZCBpbnN0YW5jZXMgZG9uJ3QgdHlwaWNhbGx5IHJ1biBgcmFzcGk0YmAsIHRoZXkncmUgdXN1YWxseSBgdmlydGAgb24gQVJNNjQuIENhbiB0aGlzIHBsYXRmb3JtIGRldmljZSBiZSBpbnN0YW50aWF0ZWQgdmlhIGEgYHN5el9kZXZfY3JlYXRlYD8gTm8sIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIG1lY2hhbmlzbSBmb3IgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgdW5sZXNzIHRoZXkgYXJlIHNwZWNpZmljYWxseSBzdXBwb3J0ZWQsIGxpa2Ugd2l0aCBgbWFjODAyMTFfaHdzaW1gIG9yIGB2a21zYC4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbiBpbmplY3Rpb24gbWV0aG9kPyBOb3BlLCBub3QgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgc3l6X2luaXRfbmV0X3NvY2tldGAuIFRoZW4gdGhlcmUgYXJlIHRoZSBzcGVjaWZpYyBkZXZpY2UgY29ubmVjdG9ycyBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgIG9yIGBzeXpfODAyMTFfaW5qZWN0X2ZyYW1lYCwgd2hpY2ggZG9uJ3Qgc2VlbSBsaWtlIHRoZXkgYXBwbHkgaGVyZS5cblxuQmFzaWNhbGx5LCBzeXprYWxsZXIgdXN1YWxseSByZWxpZXMgb24gZGV2aWNlcyBhbHJlYWR5IGJlaW5nIHByZXNlbnQgaW4gdGhlIHN5c3RlbSwgZWl0aGVyIHRocm91Z2ggUUVNVSBhcmd1bWVudHMgb3IgYSBjdXN0b20gZGV2aWNlIHRyZWUuIElmIHRoZSBkZXZpY2UgaXNuJ3QgdGhlcmUsIHRoZSBwcm9iZSBmdW5jdGlvbiBkb2Vzbid0IGdldCBjYWxsZWQsIGFuZCB3ZSBuZXZlciBnZXQgdG8gYGJjbWdlbmV0X21paV93YWl0YC5cblxuTm93LCBjYW4gdGhpcyBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VPyBZZXMsIFFFTVUgaGFzIHRoZSBgcmFzcGk0YmAgbWFjaGluZSB0eXBlLCB3aGljaCBlbXVsYXRlcyB0aGlzIGRldmljZSFcblxuSG93ZXZlciwgdGhlIHByb21wdCBzYXlzIHRvIHJldHVybiBcIldvcnRoRnV6emluZz1mYWxzZVwiIGlmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBTaW5jZSBRRU1VICpjYW4qIGVtdWxhdGUgaXQsIGl0IGlzIHRlY2huaWNhbGx5IHBvc3NpYmxlLlxuXG5CdXQgaXMgaXQgYWN0dWFsbHkgd29ydGggdGhlIGVmZm9ydD9cblxuVGhlIHBhdGNoIGlzIGxpdGVyYWxseSBhZGRpbmcgYSB0aW1lb3V0IGNoZWNrIHRvIGEgd2FpdCBmdW5jdGlvbi4gSXQnczpcblxuYGBgY1xuLVx0d2FpdF9ldmVudF90aW1lb3V0KHByaXYtXHUwMDNld3EsXG4tXHRcdFx0ICAgIShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXG4tXHRcdFx0ICAgXHUwMDI2IE1ESU9fU1RBUlRfQlVTWSksXG4tXHRcdFx0ICAgSFogLyAxMDApO1xuK1x0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQocHJpdi1cdTAwM2V3cSxcbitcdFx0XHRcdCEoYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01ESU9fQ01EKVxuK1x0XHRcdFx0XHUwMDI2IE1ESU9fU1RBUlRfQlVTWSksXG4rXHRcdFx0XHRIWiAvIDEwMCkpXG4rXHRcdHJldHVybiAtRVRJTUVET1VUO1xuYGBgXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSWYgdGhlIHRpbWVvdXQgaGFwcGVucywgaXQgcmV0dXJucyBgLUVUSU1FRE9VVGAgaW5zdGVhZCBvZiBgMGAuIFRoaXMgaXMgYSBjaGFuZ2UgdGhhdCB3b3VsZCBiZSBpbXBvcnRhbnQgdG8gdGVzdC5cblxuSWYgd2Ugd2FudCB0byBmdXp6IHRoaXMsIHdlJ2xsIG5lZWQgdG8gZW5hYmxlIGBCQ01HRU5FVGAgaW4gdGhlIGNvbmZpZywgYW5kIGZvY3VzIHN5emthbGxlciBvbiBgYmNtZ2VuZXRfbWlpX3dhaXRgLiBPaCwgYW5kIHdlJ2QgYWxzbyBuZWVkIGBNRElPX0JDTV9VTklNQUNgLlxuXG5CdXQgd2FpdCwgYGJjbWdlbmV0X21paV93YWl0YCBpcyBqdXN0IGEgd2FpdCBmdW5jdGlvbiEgSXQncyBsaWtlbHkgdGhhdCBkaXJlY3RseSBmdXp6aW5nIHRoaXMgaXNuJ3QgdGhhdCBmcnVpdGZ1bC4gSXQncyB3YWl0aW5nIGZvciBhIGhhcmR3YXJlIHJlZ2lzdGVyIHRvIGNoYW5nZSwgc28gYW55IGZ1enppbmcgbmVlZHMgdG8gZm9jdXMgb24gdHJpZ2dlcmluZyBNRElPIHJlYWRzL3dyaXRlcyBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDA6NTIuMjE4NjYyODg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE5NTUxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1ESU9fQkNNX1VOSU1BQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9Njg9Y29uZmlnIE1ESU9fQkNNX0lQUk9DXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzYtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjc3OmNvbmZpZyBNRElPX0JDTV9VTklNQUNcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzgtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIFVuaU1BQyBNRElPIGJ1cyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDo1Mi4zNDA2MjMyMzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NjI5MTI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkNoZWNraW5nIHRoZSBCQ01HRU5FVCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0IG1lIHF1aWNrbHkgYXNzZXNzIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgQkNNR0VORVQtYmFzZWQgc3lzdGVtLCBhbmQgd2UgbmVlZCB0byB2ZXJpZnkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgbmFtZWx5IGBNRElPX0JDTV9VTklNQUNgLlwiIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1JSSkgb3IgUmVkdWNlZCBNSUkgKFJNSUkpIGNvbW11bmljYXRpb24gaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGEgQnJvYWRjb20gKEJDTSkgVW5pbWFjIGRldmljZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGhlcmUuIElmIGBNRElPX0JDTV9VTklNQUNgIGlzIGVuYWJsZWQgYnkgdGhlIGBCQ01HRU5FVGAgZHJpdmVyLCB0aGF0IHN1Z2dlc3RzIGEgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cCBvciBkZXNpZ24gY2hvaWNlIHJlbGF0ZWQgdG8gdGhlIEV0aGVybmV0IFBIWSBpbnRlcmZhY2UuIFRoZSByZWxhdGlvbnNoaXAgaGVyZSBpcyBjcnVjaWFsLCBzbyBhIHF1aWNrIGNoZWNrIGlzIGluIG9yZGVyLCBwcm9iYWJseSBpbnNwZWN0aW5nIHRoZSBrY29uZmlnL2RldmljZSB0cmVlIHNldHRpbmdzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgc2V0dGluZyBpcyBjb3JyZWN0IGZvciB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLiBMZXQncyBkaWcgaW4gYW5kIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDo1NS43ODY5MTY2NjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzA2ODkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRElPX0JDTV9VTklNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy03OC1cXHRzZWxlY3QgQkNNN1hYWF9QSFlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjc5OlxcdHNlbGVjdCBNRElPX0JDTV9VTklNQUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTgwLVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MjY5PWNvbmZpZyBCQ01BU1BcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc0LVxcdHNlbGVjdCBQSFlMSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI3NTpcXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzYtXFx0c2VsZWN0IFBBR0VfUE9PTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MDo1Ni4wMTk5OTIwNzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4Mzk3Mzg5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIEJDTUdFTkVUIFRpbWVvdXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNlbGVjdGVkIHRoZSBwYXRjaCwgYW5kIHRoZSByZWxldmFudCBjb2RlIGlzIHRoZSBgQkNNR0VORVRgIHBhcnQuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBjaGFuZ2UgaXMgYWN0dWFsbHkgd29ydGggZnV6emluZy4gSXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaGFyZHdhcmUtc3BlY2lmaWMgYmVoYXZpb3Ig4oCTIGEgdGltZW91dCBvbiB0aGUgTURJTyBidXMuIEluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHdoYXQgc3l6a2FsbGVyIHVzZXMsIHRoaW5ncyBhcmUgdHJpY2t5LiBUaGUgaGFyZHdhcmUgbWlnaHQgZWl0aGVyIHJlc3BvbmQgaW1tZWRpYXRlbHkgKGVtdWxhdGlvbikgb3Igbm90IGF0IGFsbC4gSWYgdGhlcmUncyBubyByZXNwb25zZSwgaXQganVzdCB0aW1lcyBvdXQgYW5kIHJldHVybnMgYC1FVElNRURPVVRgLiBUaGVyZSBpc24ndCBhbnkgY29tcGxleCBsb2dpYyB0aGF0J3MgYmVpbmcgY2hhbmdlZC5cblxuSG93ZXZlciwgYSBgLUVUSU1FRE9VVGAgcmV0dXJuICpjb3VsZCogdHJpZ2dlciBzb21lIGVycm9yIGhhbmRsaW5nIGluIHRoZSBNRElPL1BIWSBzdWJzeXN0ZW0sIHdoaWNoIGlzIHRoZSBraW5kIG9mIHRoaW5nIGZ1enppbmcgZXhjZWxzIGF0IGZpbmRpbmcuIEJ1dCwgaGFuZyBvbiwgdGhlIGZ1bmN0aW9uIGBiY21nZW5ldF9taWlfd2FpdGAgaXMgb25seSBjYWxsZWQgd2hlbiB0aGUgaGFyZHdhcmUgaXMgYWN0dWFsbHkgcHJlc2VudC4gSWYgSSBzZXQgYFdvcnRoRnV6emluZz10cnVlYCwgc3l6a2FsbGVyICp3aWxsKiBmdXp6IGl0LiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpcyB0aGVyZSBhbnkgcmVhc29uIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYD9cblxuV2VsbCwgdGhlIGRvY3VtZW50YXRpb24gc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGhhcyBjb2RlIHBhdGhzIHRoYXQgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5JcyB0aGlzIGNvZGUgcGF0aCBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN5emthbGxlcidzIHN0YW5kYXJkIHNldHVwPyBJIHRoaW5rIHNvLiBTeXprYWxsZXIgdXN1YWxseSBydW5zIG9uIGEgZ2VuZXJpYyBgdmlydGAgbWFjaGluZSwgc3BlY2lmaWNhbGx5IG9uIEFSTTY0LiBUaGUgQnJvYWRjb20gR0VORVQgcGxhdGZvcm0gZGV2aWNlIGlzbid0IHByZXNlbnQgaW4gdGhhdCBlbnZpcm9ubWVudC4gU3l6a2FsbGVyIGRvZXNuJ3QgY2hhbmdlIHRoZSBWTSBjb25maWd1cmF0aW9uIGR5bmFtaWNhbGx5IGZvciBhIHNwZWNpZmljIHBhdGNoLiBJdCB1c2VzIGEgZml4ZWQgc2V0IG9mIFZNIGNvbmZpZ3VyYXRpb25zIChxZW11LXN5c3RlbS14ODZfNjQgLU0gcGMgb3IgcWVtdS1zeXN0ZW0tYWFyY2g2NCAtTSB2aXJ0KS5cblxuSW4gdGhvc2Ugc3RhbmRhcmQgZW52aXJvbm1lbnRzLCB0aGUgQnJvYWRjb20gR0VORVQgcGxhdGZvcm0gZGV2aWNlIGlzICpub3QqIHByZXNlbnQgYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZCB0aHJvdWdoIHNvZnR3YXJlLiBVbmxpa2UgdGhpbmdzIGxpa2UgVVNCIGdhZGdldHMgb3IgbWFjODAyMTFfaHdzaW0sIHdoaWNoICpjYW4qIGJlIGNyZWF0ZWQgZHluYW1pY2FsbHkgdmlhIGNvbmZpZ2ZzIG9yIG5ldGxpbmssIHRoaXMgaXNuJ3QgcG9zc2libGUgaGVyZS4gVGh1cywgdGhlIGNvZGUgcGF0aCAqc2hvdWxkKiBiZSB1bnJlYWNoYWJsZS5cblxuQnV0LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2suIElzIHRoZXJlIGFueSB3YXkgdG8gaW5zdGFudGlhdGUgYSBwbGF0Zm9ybSBkZXZpY2UgZnJvbSB1c2Vyc3BhY2U/IFRoZXJlJ3MgdGhhdCBgQ09ORklHX09GX09WRVJMQVlgLCB3aGljaCBhbGxvd3MgbG9hZGluZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBmcm9tIHVzZXJzcGFjZS4gSG93ZXZlciwgc3l6a2FsbGVyIGRvZXNuJ3QgY3VycmVudGx5IHVzZSB0aGlzIHRvIGluamVjdCBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcy5cblxuRXZlbiBpZiBpdCBkaWQsIHdpdGhvdXQgYSBRRU1VIGVtdWxhdGlvbiBvZiB0aGUgc3BlY2lmaWMgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3NlcyBmb3IgdGhlIGhhcmR3YXJlICh3aGljaCBhcmUgb25seSBwcmVzZW50IG9uIGByYXNwaTRiYCBoYXJkd2FyZSksIGFjY2Vzc2luZyBzb21ldGhpbmcgbGlrZSBgVU1BQ19NRElPX0NNRGAgd291bGQgY2F1c2UgYSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCAoYnVzIGVycm9yKSBhbmQgY3Jhc2ggdGhlIGtlcm5lbCBvciB0aGUgdGhyZWFkLiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBpc24ndCBiYWNrZWQgYnkgYW4gZW11bGF0ZWQgTU1JTyByZWdpb24gaW4gdGhlIGB2aXJ0YCBtYWNoaW5lLlxuXG5Pa2F5LCBsZXQncyB2ZXJpZnkuIGBiY21nZW5ldF91bWFjX3JlYWRsYCByZWFkcyBmcm9tIGEgbWVtb3J5LW1hcHBlZCBJTyBhZGRyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY4MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwNjo0MTowNi44NTk3MzMyODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYyMjY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiY21nZW5ldF91bWFjX3JlYWRsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTc5OD1zdGF0aWMgaW50IGJjbWdlbmV0X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy04MDktXFx0LyogTWFrZSBzdXJlIHdlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIENSQ19DTURfRldEICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzo4MTA6XFx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0NNRCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy04MTEtXFx0cHJpdi1cXHUwMDNlY3JjX2Z3ZF9lbiA9ICEhKHJlZyBcXHUwMDI2IENNRF9DUkNfRldEKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9OTMyPXN0YXRpYyB2b2lkIGJjbWdlbmV0X2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTk0My1cXHRcXHQvKiByZXBvcnQgYWN0aXZlIHN0YXRlIHdoZW4gbGluayBpcyB1cCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6OTQ0OlxcdFxcdHVtYWNfY21kID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0NNRCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy05NDUtXFx0XFx0ZXBhdXNlLVxcdTAwM2V0eF9wYXVzZSA9ICEodW1hY19jbWQgXFx1MDAyNiBDTURfVFhfUEFVU0VfSUdOT1JFKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9MTIyMT1zdGF0aWMgdTMyIGJjbWdlbmV0X3VwZGF0ZV9zdGF0X21pc2Moc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYsIHUxNiBvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTEyNDktXFx0ZGVmYXVsdDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjEyNTA6XFx0XFx0dmFsID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBvZmZzZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTI1MS1cXHRcXHQvKiBjbGVhciBpZiBvdmVyZmxvd2VkICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTEyNjA9c3RhdGljIHZvaWQgYmNtZ2VuZXRfdXBkYXRlX21pYl9jb3VudGVycyhzdHJ1Y3QgYmNtZ2VuZXRfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTI4Mi1cXHRcXHRjYXNlIEJDTUdFTkVUX1NUQVRfTUlCX1JYOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MTI4MzpcXHRcXHRcXHR2YWwgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMjg0LVxcdFxcdFxcdFxcdFxcdFxcdCAgVU1BQ19NSUJfU1RBUlQgKyBqICsgb2Zmc2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMTI4OC1cXHRcXHRcXHRpZiAoR0VORVRfSVNfVjEocHJpdikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjEyODk6XFx0XFx0XFx0XFx0dmFsID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBzLVxcdTAwM2VyZWdfb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTEyOTAtXFx0XFx0XFx0XFx0LyogY2xlYXIgaWYgb3ZlcmZsb3dlZCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0xMzQ5PXZvaWQgYmNtZ2VuZXRfZWVlX2VuYWJsZV9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTEzNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoxMzYwOlxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19FRUVfQ1RSTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0xMzYxLVxcdGlmIChlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTEzODk9c3RhdGljIGludCBiY21nZW5ldF9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTE0MDYtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoxNDA3OlxcdGUtXFx1MDAzZXR4X2xwaV90aW1lciA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19FRUVfTFBJX1RJTUVSKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTE0MDgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTI1MzY9c3RhdGljIHZvaWQgdW1hY19lbmFibGVfc2V0KHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2LCB1MzIgbWFzaywgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTI1NDAtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzoyNTQxOlxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMjU0Mi1cXHRpZiAocmVnIFxcdTAwMjYgQ01EX1NXX1JFU0VUKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jPTMzMjA9c3RhdGljIHZvaWQgYmNtZ2VuZXRfZ2V0X2h3X2FkZHIoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMzMjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozMzI1OlxcdGFkZHJfdG1wID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX01BQzApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzMyNi1cXHRwdXRfdW5hbGlnbmVkX2JlMzIoYWRkcl90bXAsIFxcdTAwMjZhZGRyWzBdKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjMzMjc6XFx0YWRkcl90bXAgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTUFDMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0zMzI4LVxcdHB1dF91bmFsaWduZWRfYmUxNihhZGRyX3RtcCwgXFx1MDAyNmFkZHJbNF0pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0zNTYxPXN0YXRpYyB2b2lkIGJjbWdlbmV0X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTM1ODAtXFx0c3Bpbl9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYzozNTgxOlxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzU4Mi1cXHRpZiAoKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSB8fFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz00MjE1PXN0YXRpYyBpbnQgYmNtZ2VuZXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTQyMjYtXFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKGQpIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXdvbG9wdHMpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjQyMjc6XFx0XFx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0NNRCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy00MjI4LVxcdFxcdGlmIChyZWcgXFx1MDAyNiBDTURfUlhfRU4pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jPTE0ND1pbnQgYmNtZ2VuZXRfd29sX3Bvd2VyX2Rvd25fY2ZnKHN0cnVjdCBiY21nZW5ldF9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMTU2LVxcdGlmIChwcml2LVxcdTAwM2V3b2xvcHRzIFxcdTAwMjYgKFdBS0VfTUFHSUMgfCBXQUtFX01BR0lDU0VDVVJFKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jOjE1NzpcXHRcXHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTVBEX0NUUkwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jLTE1OC1cXHRcXHRyZWcgfD0gTVBEX0VOO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMTcyLVxcdGlmIChyZXRyaWVzIFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jOjE3MzpcXHRcXHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTVBEX0NUUkwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jLTE3NC1cXHRcXHRyZWcgXFx1MDAyNj0gfihNUERfRU4gfCBNUERfUFdfRU4pO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMTkxLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jOjE5MjpcXHRyZWcgPSBiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfQ01EKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0xOTMtXFx0cHJpdi1cXHUwMDNlY3JjX2Z3ZF9lbiA9IDE7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYz0yMTQ9aW50IGJjbWdlbmV0X3dvbF9wb3dlcl91cF9jZmcoc3RydWN0IGJjbWdlbmV0X3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0yMzYtXFx0aWYgKHByaXYtXFx1MDAzZXdvbG9wdHMgXFx1MDAyNiAoV0FLRV9NQUdJQyB8IFdBS0VfTUFHSUNTRUNVUkUpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmM6MjM3OlxcdFxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NUERfQ1RSTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmMtMjM4LVxcdFxcdGlmICghKHJlZyBcXHUwMDI2IE1QRF9FTikpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldF93b2wuYy0yNTItXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXRfd29sLmM6MjUzOlxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19DTUQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0X3dvbC5jLTI1NC1cXHRyZWcgXFx1MDAyNj0gfkNNRF9DUkNfRldEO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9Mjc9c3RhdGljIHZvaWQgYmNtZ2VuZXRfbWFjX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtNzctXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6Nzg6XFx0cmVnID0gYmNtZ2VuZXRfdW1hY19yZWFkbChwcml2LCBVTUFDX0NNRCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtNzktXFx0cmVnIFxcdTAwMjY9IH4oKENNRF9TUEVFRF9NQVNLIFxcdTAwM2NcXHUwMDNjIENNRF9TUEVFRF9TSElGVCkgfFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM9MTE3PXN0YXRpYyBpbnQgYmNtZ2VuZXRfZml4ZWRfcGh5X2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0xMjQtXFx0XFx0cHJpdiA9IG5ldGRldl9wcml2KGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmM6MTI1OlxcdFxcdHJlZyA9IGJjbWdlbmV0X3VtYWNfcmVhZGwocHJpdiwgVU1BQ19NT0RFKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0xMjYtXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rID0gISEocmVnIFxcdTAwMjYgTU9ERV9MSU5LX1NUQVRVUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz00Mzg9c3RhdGljIGludCBiY21nZW5ldF9taWlfd2FpdCh2b2lkICp3YWl0X2Z1bmNfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTQ0Mi1cXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChwcml2LVxcdTAwM2V3cSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzo0NDM6XFx0XFx0XFx0XFx0IShiY21nZW5ldF91bWFjX3JlYWRsKHByaXYsIFVNQUNfTURJT19DTUQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtNDQ0LVxcdFxcdFxcdFxcdFxcdTAwMjYgTURJT19TVEFSVF9CVVNZKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDY6NDE6MDYuOTk0MzYwOTc4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDQ4NDI2OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBiY21nZW5ldF91bWFjX3JlYWRsIFRpbWVvdXQgRml4KipcblxuT2theSwgc28gYGJjbWdlbmV0X3VtYWNfcmVhZGxgIGlzIGp1c3QgYSBzaW1wbGUgcmVhZCBmdW5jdGlvbi4gSWYgdGhlcmUncyBubyByZWFsIGhhcmR3YXJlIG9yIGEgZ29vZCBRRU1VIGVtdWxhdGlvbiwgdGhpcyBpcyBnb2luZyB0byBjcmFzaCwgbm8gcXVlc3Rpb24uIFN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSBydW4gYHJhc3BpNGJgIGJ5IGRlZmF1bHQsIHNvIHRoaXMgY29kZSB3b3VsZG4ndCBiZSB0b3VjaGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4gV2FpdCwgZG9lcyBTeXprYWxsZXIgKmV2ZXIqIHJ1biBvbiBgcmFzcGk0YmA/IE5vLCBzdGFuZGFyZCBgYXJtNjRgIHVzZXMgYSBgdmlydGAgbWFjaGluZSwgd2hpY2ggZG9lc24ndCBpbmNsdWRlIHRoYXQuXG5cbk5vdywgaWYgdGhlIHByb21wdCBleHBsaWNpdGx5IHNhaWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIHRoZW4gaXQgbXVzdCBiZSBjYXJlZnVsbHkgYXNzZXNzZWQuXG5cbklzIHRoaXMgY29kZSAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gUUVNVT8gTm8sIHRoYXQncyBub3QgcmlnaHQuIFFFTVUgKmRvZXMqIGhhdmUgYSBgcmFzcGk0YmAgbWFjaGluZSB0eXBlLCBzbyBpdCAqaXMqIHBvc3NpYmxlLCB0ZWNobmljYWxseS4gQnV0IGlzIGl0ICp3b3J0aCogZnV6emluZz8gVGhpcyBwYXRjaCBpcyBqdXN0IGEgb25lLWxpbmUgZml4LCBhZGRpbmcgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wLiBPa2F5LCB3aGF0IGFyZSB3ZSB0cnlpbmcgdG8gZmluZCBieSBmdXp6aW5nIHRoaXM/IElmIHRoZSB0aW1lb3V0IG9jY3VycywgaXQganVzdCByZXR1cm5zIGAtRVRJTUVET1VUYC4gVGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBgdW5pbWFjX21kaW9fcmVhZGAgb3IgYHVuaW1hY19tZGlvX3dyaXRlYCwgd2lsbCB0aGVuIHJldHVybiB0aGUgc2FtZSBlcnJvciBjb2RlLiBJdCdzIGEgcHJldHR5IHN0YW5kYXJkIGVycm9yIHBhdGguIEkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCBmdXp6aW5nLiBJdCdzIGEgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSB0aW1lb3V0IGZpeCwgYW5kIGl0J3MgaGlnaGx5IHNwZWNpZmljIHRvIGEgcGxhdGZvcm0gdGhhdCBTeXprYWxsZXIgKmRvZXNuJ3QqIHR5cGljYWxseSB0YXJnZXQuXG5cbkxldCdzIHRoaW5rIHRocm91Z2ggdGhlIHJlYXNvbmluZy4gXCJUaGUgcGF0Y2ggYWRkcyBhIHRpbWVvdXQgY2hlY2sgdG8gYSBoYXJkd2FyZSB3YWl0IGxvb3AgaW4gdGhlIEJyb2FkY29tIEdFTkVUIGRyaXZlci4gVGhpcyBpcyBhIHRyaXZpYWwgZml4IGZvciBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IGlzIG5vdCB0eXBpY2FsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzICh1bmxlc3Mgc3BlY2lmaWNhbGx5IHJ1bm5pbmcgUUVNVSB3aXRoIHJhc3BpNGIgbWFjaGluZSB0eXBlKS4gRnV6emluZyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgdW5saWtlbHkgdG8geWllbGQgbWVhbmluZ2Z1bCByZXN1bHRzLlwiIE1ha2VzIHNlbnNlLiBMZXQncyBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgb25seSBjaGFuZ2UuIE9rYXksIGl0J3MgdGhlIG9ubHkgZmlsZSBhZmZlY3RlZC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgaWYgYFdvcnRoRnV6emluZz1mYWxzZWAgaXMgYXBwcm9wcmlhdGUgYmFzZWQgb24gdGhlIHByb21wdHMnIGNyaXRlcmlhLiBJdCBzdGF0ZXMgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGlzIGlzIHNwZWNpZmljIHRvIGEgQnJvYWRjb20gR0VORVQgZHJpdmVyLCBhbmQgaXMgbm90IHBhcnQgb2YgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUENJL1VTQiBkZXZpY2VzIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFueSBWTSksIGl0IGRvZXMgZml0IHRoaXMgY3JpdGVyaWEuIFdoaWxlIFFFTVUgY2FuIGVtdWxhdGUgdGhlIGVudGlyZSBTb0MgKHJhc3BpNGIpLCBzeXprYWxsZXIgZnV6emluZyBpcyB0eXBpY2FsbHkgZG9uZSBvbiBnZW5lcmljIFZNcyB3aGVyZSB0aGlzIHBsYXRmb3JtIGRldmljZSBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIChsaWtlIG1hYzgwMjExX2h3c2ltKS5cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5IZXJlJ3MgdGhlIGZpbmFsaXplZCByZWFzb25pbmc6XG5UaGUgcGF0Y2ggYWRkcyBhIHRpbWVvdXQgY2hlY2sgdG8gYSBoYXJkd2FyZSB3YWl0IGxvb3AgaW4gdGhlIEJyb2FkY29tIEdFTkVUIHBsYXRmb3JtIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gQnJvYWRjb20gU29DcyAoZS5nLiwgUmFzcGJlcnJ5IFBpIDQpIGFuZCByZWxpZXMgb24gbWVtb3J5LW1hcHBlZCBoYXJkd2FyZSByZWdpc3RlcnMuIEl0IGNhbm5vdCBiZSBkeW5hbWljYWxseSBpbnN0YW50aWF0ZWQgb3Igc29mdHdhcmUtZW11bGF0ZWQgaW4gc3RhbmRhcmQgZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgR0NFIG9yIFFFTVUgJ3ZpcnQnIG1hY2hpbmVzKSB1c2VkIGZvciBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZSBpcyBhIHRyaXZpYWwgZXJyb3ItcGF0aCBmaXggZm9yIGhhcmR3YXJlIHRpbWVvdXRzLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNzUsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA2OjQxOjIyLjA0Mjc5MDM1N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wIGluIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEJyb2FkY29tIFNvQ3MgKGUuZy4sIFJhc3BiZXJyeSBQaSA0KSBhbmQgcmVsaWVzIG9uIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VICd2aXJ0JyBtYWNoaW5lcykgdXNlZCBmb3IgZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgaXMgYSB0cml2aWFsIGVycm9yLXBhdGggZml4IGZvciBoYXJkd2FyZSB0aW1lb3V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB0aW1lb3V0IGNoZWNrIHRvIGEgaGFyZHdhcmUgd2FpdCBsb29wIGluIHRoZSBCcm9hZGNvbSBHRU5FVCBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEJyb2FkY29tIFNvQ3MgKGUuZy4sIFJhc3BiZXJyeSBQaSA0KSBhbmQgcmVsaWVzIG9uIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBJdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgaW5zdGFudGlhdGVkIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIGdlbmVyaWMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIEdDRSBvciBRRU1VICd2aXJ0JyBtYWNoaW5lcykgdXNlZCBmb3IgZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgaXMgYSB0cml2aWFsIGVycm9yLXBhdGggZml4IGZvciBoYXJkd2FyZSB0aW1lb3V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows4ptn[1] Phase: Running StartedAt: 2026-06-23 06:42:19 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4ptn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-23 06:42:19 +0000 UTC FinishedAt: 2026-06-23 06:42:29 +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,}