Name: series-workflow7zx85 Phase: Failed StartedAt: 2026-08-12 20:48:10 +0000 UTC FinishedAt: 2026-08-12 20:50:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zx85[0] Phase: Succeeded StartedAt: 2026-08-12 20:48:10 +0000 UTC FinishedAt: 2026-08-12 20:50:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zx85[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 20:48:10 +0000 UTC FinishedAt: 2026-08-12 20:50:40 +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+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGI1M19mZGJfZHVtcCBmdW5jdGlvbiBpbiB0aGUgQnJvYWRjb20gQkNNNTN4eCBEU0Egc3dpdGNoIGRyaXZlciAoYjUzKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgKGNvbm5lY3RlZCB2aWEgTURJTywgTU1BUCwgU1BJLCBvciBTUkFCKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTYwZDJiMmE5ZWUzZjU2NjYyM2VhZGFhMjAyZTFiNzI2ZTFjZjk1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDIwOjQ5OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcbmluZGV4IDNmNWI5NTkyNzk0ZGEuLjA4ODAzMTBjOWNlM2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcbkBAIC0yMjE5LDcgJiM0MzsyMjE5LDcgQEAgaW50IGI1M19mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXJsX211dGV4KTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0woYjUzX2ZkYl9kdW1wKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGI1M19mZGJfZHVtcCBmdW5jdGlvbiBpbiB0aGUgQnJvYWRjb20gQkNNNTN4eCBEU0Egc3dpdGNoIGRyaXZlciAoYjUzKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgKGNvbm5lY3RlZCB2aWEgTURJTywgTU1BUCwgU1BJLCBvciBTUkFCKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTYwZDJiMmE5ZWUzZjU2NjYyM2VhZGFhMjAyZTFiNzI2ZTFjZjk1NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDIwOjQ5OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwppbmRleCAzZjViOTU5Mjc5NGRhLi4wODgwMzEwYzljZTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwpAQCAtMjIxOSw3ICYjNDM7MjIxOSw3IEBAIGludCBiNTNfZmRiX2R1bXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAogCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2FybF9tdXRleCk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woYjUzX2ZkYl9kdW1wKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBGaXgqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nOiB0aGVyZSYjMzk7cyBhIHBhdGNoIGFmZmVjdGluZyB0aGUgYGI1M19mZGJfZHVtcGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGEgdmVyeSBzaW1wbGUgb25lOiBpdCYjMzk7cyBhbHRlcmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgd2FzIGhhcmRjb2RlZCB0byBgcmV0dXJuIDA7YCwgZXNzZW50aWFsbHkgaW5kaWNhdGluZyBzdWNjZXNzIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBhY3R1YWxseSBoYXBwZW5lZCBpbnRlcm5hbGx5LiBOb3csIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgY2hhbmdlZCB0byBgcmV0dXJuIHJldDtgLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGByZXRgIGlzIGEgdmFyaWFibGUgaG9sZGluZyB0aGUgKmFjdHVhbCogcmV0dXJuIGNvZGUgb3IgZXJyb3IgaW5kaWNhdGlvbiBmcm9tIHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24uIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGdvaW5nIGZyb20gYmxpbmRseSBhc3N1bWluZyBzdWNjZXNzIHRvIHJlcG9ydGluZyB0aGUgcmVhbCBvdXRjb21lLiBHaXZlbiB0aGlzIGNoYW5nZSBJJiMzOTttIGZhaXJseSBjZXJ0YWluIHRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiB3YXMgaGlkaW5nIGFuIHVuZGVybHlpbmcgcHJvYmxlbS4gVGhpcyBtYWtlcyBzZW5zZSwgYmVjYXVzZSB5b3Ugd291bGQgb25seSBtYWtlIHRoaXMgY2hhbmdlIGlmIHlvdSB3ZXJlIHRyeWluZyB0byBmaXggYSBidWcgb3IgZ2V0IG1vcmUgaW5mb3JtYXRpb24uIFdlJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBgYjUzX2ZkYl9kdW1wYCBmdW5jdGlvbiBhbmQgd2hhdCBgcmV0YCByZXByZXNlbnRzIHRvIGZ1bGx5IGdyYXNwIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBwYXRjaCBhbmQgZW5zdXJlIGl0JiMzOTtzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YjUzX2ZkYl9kdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM9MjE2Nz1zdGF0aWMgaW50IGI1M19mZGJfY29weShpbnQgcG9ydCwgY29uc3Qgc3RydWN0IGI1M19hcmxfZW50cnkgKmVudCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yMTgxLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjE4MjppbnQgYjUzX2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yMTgzLVx0XHQgZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTIyMjMtfVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjIyNDpFWFBPUlRfU1lNQk9MKGI1M19mZGJfZHVtcCk7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yMjI1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTI3MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBiNTNfc3dpdGNoX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yNzI2LVx0LnBvcnRfdmxhbl9kZWxcdFx0PSBiNTNfdmxhbl9kZWwsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzoyNzI3Olx0LnBvcnRfZmRiX2R1bXBcdFx0PSBiNTNfZmRiX2R1bXAsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yNzI4LVx0LnBvcnRfZmRiX2FkZFx0XHQ9IGI1M19mZGJfYWRkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgYjUzX2ZkYl9kdW1wYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBiNTNfZmRiX2R1bXBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZ1bmN0aW9ucy4gR2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIGxpa2VseSBhIHV0aWxpdHkgcmVsYXRlZCB0byBlaXRoZXIgZHVtcGluZyBvciBpbnNwZWN0aW5nIGRhdGEgZnJvbSBhIEZvdW5kYXRpb25EQiAoRkRCKSBkYXRhYmFzZS4gVGhlICYjMzQ7YjUzJiMzNDsgY291bGQgYmUgYSBzcGVjaWZpYyBwcm9qZWN0IGNvZGUsIGEgdmVyc2lvbiwgb3IgcGVyaGFwcyBldmVuIGFuIGludGVybmFsIGlkZW50aWZpZXIgcmVsYXRlZCB0byB0aGUgZGF0YSBmb3JtYXQgYmVpbmcgZHVtcGVkLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGtpbmQgb2YgaW5mb3JtYXRpb24gaXQgZXhwb3NlcywgdGhlIGZvcm1hdCBvZiB0aGF0IGluZm9ybWF0aW9uIChyYXcsIHN0cnVjdHVyZWQsIGV0Yy4pLCBhbmQgdGhlIHBhcmFtZXRlcnMgaXQgYWNjZXB0cyBmb3Igc3BlY2lmeWluZyB3aGF0IHRvIGR1bXAuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIEkgY2FuIHF1ZXJ5IHNwZWNpZmljIGtleXMsIHJhbmdlcywgb3IgaWYgaXQmIzM5O3MgYW4gYWxsLW9yLW5vdGhpbmcgZHVtcC4gQWxzbywgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFyZSBzb21ldGhpbmcgSSB3aWxsIGRlZmluaXRlbHkgY29uc2lkZXIsIEkgc2hvdWxkIGRldGVybWluZSBpZiB0aGlzIGNvbW1hbmQgcmVxdWlyZXMgYXV0aGVudGljYXRpb24sIG9yIGlmIHRoZXJlIGFyZSBhbnkgcmlza3Mgb2YgYWNjaWRlbnRhbGx5IGV4cG9zaW5nIHNlbnNpdGl2ZSBkYXRhLiBLbm93aW5nIHRoZSBpbnRlcm5hbHMgd2lsbCBiZSBrZXksIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIHJlYWRpbmcgZGlyZWN0bHkgZnJvbSB0aGUgc3RvcmFnZSBlbmdpbmUsIG9yIGlmIGl0IGhhcyBzb21lIGludGVybWVkaWFyeSBsYXllci4gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgZGV0ZXJtaW5lIHRoZSByZWxpYWJpbGl0eSBhbmQgc3BlZWQgb2YgdGhlIGR1bXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE4MjpcdGludCBiNTNfZmRiX2R1bXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbjIxODM6XHRcdFx0IGRzYV9mZGJfZHVtcF9jYl90ICpjYiwgdm9pZCAqZGF0YSlcbjIxODQ6XHR7XG4yMTg1Olx0XHR1bnNpZ25lZCBpbnQgY291bnQgPSAwLCByZXN1bHRzX3Blcl9oaXQgPSAxO1xuMjE4NjpcdFx0c3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuMjE4NzpcdFx0c3RydWN0IGI1M19hcmxfZW50cnkgcmVzdWx0c1syXTtcbjIxODg6XHRcdGludCByZXQ7XG4yMTg5Olx0XG4yMTkwOlx0XHRpZiAocHJpdi1cdTAwM2VudW1fYXJsX2JpbnMgXHUwMDNlIDIpXG4yMTkxOlx0XHRcdHJlc3VsdHNfcGVyX2hpdCA9IDI7XG4yMTkyOlx0XG4yMTkzOlx0XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXJsX211dGV4KTtcbjIxOTQ6XHRcbjIxOTU6XHRcdC8qIFN0YXJ0IHNlYXJjaCBvcGVyYXRpb24gKi9cbjIxOTY6XHRcdGI1M193cml0ZV9hcmxfc3JjaF9jdGwocHJpdiwgQVJMX1NSQ0hfU1RETik7XG4yMTk3Olx0XG4yMTk4Olx0XHRkbyB7XG4yMTk5Olx0XHRcdHJldCA9IGI1M19hcmxfc2VhcmNoX3dhaXQocHJpdik7XG4yMjAwOlx0XHRcdGlmIChyZXQpXG4yMjAxOlx0XHRcdFx0YnJlYWs7XG4yMjAyOlx0XG4yMjAzOlx0XHRcdGI1M19hcmxfc2VhcmNoX3JlYWQocHJpdiwgMCwgXHUwMDI2cmVzdWx0c1swXSk7XG4yMjA0Olx0XHRcdHJldCA9IGI1M19mZGJfY29weShwb3J0LCBcdTAwMjZyZXN1bHRzWzBdLCBjYiwgZGF0YSk7XG4yMjA1Olx0XHRcdGlmIChyZXQpXG4yMjA2Olx0XHRcdFx0YnJlYWs7XG4yMjA3Olx0XG4yMjA4Olx0XHRcdGlmIChyZXN1bHRzX3Blcl9oaXQgPT0gMikge1xuMjIwOTpcdFx0XHRcdGI1M19hcmxfc2VhcmNoX3JlYWQocHJpdiwgMSwgXHUwMDI2cmVzdWx0c1sxXSk7XG4yMjEwOlx0XHRcdFx0cmV0ID0gYjUzX2ZkYl9jb3B5KHBvcnQsIFx1MDAyNnJlc3VsdHNbMV0sIGNiLCBkYXRhKTtcbjIyMTE6XHRcdFx0XHRpZiAocmV0KVxuMjIxMjpcdFx0XHRcdFx0YnJlYWs7XG4yMjEzOlx0XG4yMjE0Olx0XHRcdFx0aWYgKCFyZXN1bHRzWzBdLmlzX3ZhbGlkIFx1MDAyNlx1MDAyNiAhcmVzdWx0c1sxXS5pc192YWxpZClcbjIyMTU6XHRcdFx0XHRcdGJyZWFrO1xuMjIxNjpcdFx0XHR9XG4yMjE3Olx0XG4yMjE4Olx0XHR9IHdoaWxlIChjb3VudCYjNDM7JiM0MzsgXHUwMDNjIGI1M19tYXhfYXJsX2VudHJpZXMocHJpdikgLyByZXN1bHRzX3Blcl9oaXQpO1xuMjIxOTpcdFxuMjIyMDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXJsX211dGV4KTtcbjIyMjE6XHRcbjIyMjI6XHRcdHJldHVybiByZXQ7XG4yMjIzOlx0fVxuMjIyNDpcdEVYUE9SVF9TWU1CT0woYjUzX2ZkYl9kdW1wKTtcbjIyMjU6XHRcbjIyMjY6XHRpbnQgYjUzX21kYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbjIyMjc6XHRcdFx0Y29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYixcbjIyMjg6XHRcdFx0c3RydWN0IGRzYV9kYiBkYilcbjIyMjk6XHR7XG4yMjMwOlx0XHRzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4yMjMxOlx0XHRpbnQgcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCcm9hZGNvbSBCNTMgRFNBIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBEU0EgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIEJyb2FkY29tIEI1MyBzd2l0Y2hlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIEkgZXZlbiAqdG91Y2gqIHRoaXMgdGhpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VPyYjMzQ7IERTQSBkcml2ZXJzIGFyZSBub3RvcmlvdXNseSBoYXJkd2FyZS1zcGVjaWZpYywgcmlnaHQ/IFRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIGludGVyZmFjZSBkaXJlY3RseSB3aXRoIHRoZSBzd2l0Y2ggQVNJQy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IGNoYW5jZSBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gaGVyZSwgb3IgaWYgdGhpcyBpcyBhIHB1cmVseSBoYXJkd2FyZSBwbGF5LiBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyB0aGUgbGF0dGVyLCBnaXZlbiBteSBleHBlcmllbmNlLiBCZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGltbWVkaWF0ZWx5IGdvIGRpZ2dpbmcgaW4gdGhlIGBkcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O2xsIGJlIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGUgZHJpdmVyJiMzOTtzIGNhcGFiaWxpdGllcyBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCNTMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWc6MjptZW51Y29uZmlnIEI1M1xuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBCQ001M3h4IG1hbmFnZWQgc3dpdGNoIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMTQtXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWc6MTU6Y29uZmlnIEI1M19TUElfRFJJVkVSXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDtCNTMgU1BJIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTIwLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjIxOmNvbmZpZyBCNTNfTURJT19EUklWRVJcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O0I1MyBNRElPIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTI2LVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjI3OmNvbmZpZyBCNTNfTU1BUF9EUklWRVJcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0yOC1cdHRyaXN0YXRlIFwmIzM0O0I1MyBNTUFQIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTM0LVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjM1OmNvbmZpZyBCNTNfU1JBQl9EUklWRVJcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0zNi1cdHRyaXN0YXRlIFwmIzM0O0I1MyBTUkFCIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTQzLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjQ0OmNvbmZpZyBCNTNfU0VSREVTXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtCNTMgU2VyRGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzEwCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4cGxvcmluZyBCcm9hZGNvbSBCQ001M3h4IFN3aXRjaCBTdXBwb3J0IGluIFFFTVUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHN1cHBvcnRpbmcgdGhlIEJyb2FkY29tIEJDTTUzeHggbWFuYWdlZCBzd2l0Y2guIFRoaXMgaXMgZGVmaW5pdGVseSBhIGhhcmR3YXJlIGNvbXBvbmVudCwgbm90IHNvbWV0aGluZyB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSBzb21laG93IGludGVyYWN0IHdpdGggdGhlIERTQSBkcml2ZXJzIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IENhbiBJIHVzZSBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzb21ldGhpbmcgc2ltaWxhcj8KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgRFNBIGRyaXZlcnMgYXJlIHR5cGljYWxseSB0aWVkIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvZiB0aGUgc3dpdGNoIGNoaXAuIEkmIzM5O20gd29uZGVyaW5nLCBpcyB0aGVyZSBzb21lIGtpbmQgb2YgZHVtbXkgRFNBIGRyaXZlciB0aGF0IEkgY291bGQgcG90ZW50aWFsbHkgbGV2ZXJhZ2U/IEFoLCB5ZXMhIGBkc2FfbG9vcGAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0LiBIb3dldmVyLCBJIG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCBgYjUzYCB0byB1c2UgdGhlIEJyb2FkY29tIEJDTTUzeHguCgpUaGUgcmVhbCBjaGFsbGVuZ2UgaXMsIGhvdyBkbyBJIGFjdHVhbGx5IHJlYWNoIHRoYXQgY29kZSB3aXRoaW4gUUVNVT8gSSYjMzk7bSB0aGlua2luZywgY291bGQgSSBpbnN0YW50aWF0ZSB0aGUgZHJpdmVyIHVzaW5nIGEgZmFrZSBwbGF0Zm9ybSBkZXZpY2Ugb3IgcGVyaGFwcyBldmVuIGFuIE1ESU8gZGV2aWNlPyBJZiBJIGNhbiB0cmlnZ2VyIGBiNTNfbW1hcGAgb3IgYGI1M19tZGlvYCB0byBwcm9iZSBjb3JyZWN0bHksIHRoYXQgY291bGQgZ2l2ZSBtZSBzb21lIGtpbmQgb2YgZm9vdGhvbGQuIEl0IGxvb2tzIGxpa2UgYGI1M19tbWFwYCB1dGlsaXplcyBhIHBsYXRmb3JtIGRyaXZlciwgc28gdGhhdCBjb3VsZCBiZSB0aGUgcmlnaHQgcGF0aCB0byBwdXJzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qXG4gICAyOlx0ICogQjUzIHJlZ2lzdGVyIGFjY2VzcyB0aHJvdWdoIG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzXG4gICAzOlx0ICpcbiAgIDQ6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBKb25hcyBHb3Jza2kgXHUwMDNjam9nb0BvcGVud3J0Lm9yZ1x1MDAzZVxuICAgNTpcdCAqXG4gICA2Olx0ICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG4gICA3Olx0ICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZVxuICAgODpcdCAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXG4gICA5Olx0ICpcbiAgMTA6XHQgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCYjMzQ7QVMgSVNcJiMzNDsgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXG4gIDExOlx0ICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRlxuICAxMjpcdCAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SXG4gIDEzOlx0ICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xuICAxNDpcdCAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTlxuICAxNTpcdCAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GXG4gIDE2Olx0ICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbiAgMTc6XHQgKi9cbiAgMTg6XHRcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAgMjQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RhdGEvYjUzLmhcdTAwM2VcbiAgMjc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuICAyODpcdFxuICAyOTpcdCNpbmNsdWRlIFwmIzM0O2I1M19wcml2LmhcJiMzNDtcbiAgMzA6XHRcbiAgMzE6XHQjZGVmaW5lIEJDTTYzWFhfRVBIWV9SRUcgMHgzQ1xuICAzMjpcdCNkZWZpbmUgQkNNNjMyNjhfR1BIWV9SRUcgMHg1NFxuICAzMzpcdFxuICAzNDpcdCNkZWZpbmUgR1BIWV9DVFJMX0xPV19QV1JcdEJJVCgzKVxuICAzNTpcdCNkZWZpbmUgR1BIWV9DVFJMX0lERFFfQklBU1x0QklUKDApXG4gIDM2Olx0XG4gIDM3Olx0c3RydWN0IGI1M19waHlfaW5mbyB7XG4gIDM4Olx0XHR1MzIgZ3BoeV9wb3J0X21hc2s7XG4gIDM5Olx0XHR1MzIgZXBoeV9lbmFibGVfbWFzaztcbiAgNDA6XHRcdHUzMiBlcGh5X3BvcnRfbWFzaztcbiAgNDE6XHRcdHUzMiBlcGh5X2JpYXNfYml0O1xuICA0MjpcdFx0Y29uc3QgdTMyICplcGh5X29mZnNldDtcbiAgNDM6XHR9O1xuICA0NDpcdFxuICA0NTpcdHN0cnVjdCBiNTNfbW1hcF9wcml2IHtcbiAgNDY6XHRcdHZvaWQgX19pb21lbSAqcmVncztcbiAgNDc6XHRcdHN0cnVjdCByZWdtYXAgKmdwaW9fY3RybDtcbiAgNDg6XHRcdGNvbnN0IHN0cnVjdCBiNTNfcGh5X2luZm8gKnBoeV9pbmZvO1xuICA0OTpcdFx0dTMyIHBoeXNfZW5hYmxlZDtcbiAgNTA6XHR9O1xuICA1MTpcdFxuICA1MjpcdHN0YXRpYyBjb25zdCB1MzIgYmNtNjMxOF9lcGh5X29mZnNldHNbXSA9IHs0LCA1LCA2LCA3fTtcbiAgNTM6XHRcbiAgNTQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGI1M19waHlfaW5mbyBiY202MzE4X2VwaHlfaW5mbyA9IHtcbiAgNTU6XHRcdC5lcGh5X2VuYWJsZV9tYXNrID0gQklUKDApIHwgQklUKDQpIHwgQklUKDgpIHwgQklUKDEyKSB8IEJJVCgxNiksXG4gIDU2Olx0XHQuZXBoeV9wb3J0X21hc2sgPSBHRU5NQVNLKChBUlJBWV9TSVpFKGJjbTYzMThfZXBoeV9vZmZzZXRzKSAtIDEpLCAwKSxcbiAgNTc6XHRcdC5lcGh5X2JpYXNfYml0ID0gMjQsXG4gIDU4Olx0XHQuZXBoeV9vZmZzZXQgPSBiY202MzE4X2VwaHlfb2Zmc2V0cyxcbiAgNTk6XHR9O1xuICA2MDpcdFxuICA2MTpcdHN0YXRpYyBjb25zdCB1MzIgYmNtNjM2OF9lcGh5X29mZnNldHNbXSA9IHsyLCAzLCA0LCA1fTtcbiAgNjI6XHRcbiAgNjM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGI1M19waHlfaW5mbyBiY202MzY4X2VwaHlfaW5mbyA9IHtcbiAgNjQ6XHRcdC5lcGh5X2VuYWJsZV9tYXNrID0gQklUKDApLFxuICA2NTpcdFx0LmVwaHlfcG9ydF9tYXNrID0gR0VOTUFTSygoQVJSQVlfU0laRShiY202MzY4X2VwaHlfb2Zmc2V0cykgLSAxKSwgMCksXG4gIDY2Olx0XHQuZXBoeV9iaWFzX2JpdCA9IDAsXG4gIDY3Olx0XHQuZXBoeV9vZmZzZXQgPSBiY202MzY4X2VwaHlfb2Zmc2V0cyxcbiAgNjg6XHR9O1xuICA2OTpcdFxuICA3MDpcdHN0YXRpYyBjb25zdCB1MzIgYmNtNjMyNjhfZXBoeV9vZmZzZXRzW10gPSB7NCwgOSwgMTR9O1xuICA3MTpcdFxuICA3MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYjUzX3BoeV9pbmZvIGJjbTYzMjY4X2VwaHlfaW5mbyA9IHtcbiAgNzM6XHRcdC5ncGh5X3BvcnRfbWFzayA9IEJJVCgzKSxcbiAgNzQ6XHRcdC5lcGh5X2VuYWJsZV9tYXNrID0gR0VOTUFTSyg0LCAwKSxcbiAgNzU6XHRcdC5lcGh5X3BvcnRfbWFzayA9IEdFTk1BU0soKEFSUkFZX1NJWkUoYmNtNjMyNjhfZXBoeV9vZmZzZXRzKSAtIDEpLCAwKSxcbiAgNzY6XHRcdC5lcGh5X2JpYXNfYml0ID0gMjQsXG4gIDc3Olx0XHQuZXBoeV9vZmZzZXQgPSBiY202MzI2OF9lcGh5X29mZnNldHMsXG4gIDc4Olx0fTtcbiAgNzk6XHRcbiAgODA6XHRzdGF0aWMgaW50IGI1M19tbWFwX3JlYWQ4KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTggKnZhbClcbiAgODE6XHR7XG4gIDgyOlx0XHRzdHJ1Y3QgYjUzX21tYXBfcHJpdiAqcHJpdiA9IGRldi1cdTAwM2Vwcml2O1xuICA4MzpcdFx0dm9pZCBfX2lvbWVtICpyZWdzID0gcHJpdi1cdTAwM2VyZWdzO1xuICA4NDpcdFxuICA4NTpcdFx0KnZhbCA9IHJlYWRiKHJlZ3MgJiM0MzsgKHBhZ2UgXHUwMDNjXHUwMDNjIDgpICYjNDM7IHJlZyk7XG4gIDg2Olx0XG4gIDg3Olx0XHRyZXR1cm4gMDtcbiAgODg6XHR9XG4gIDg5Olx0XG4gIDkwOlx0c3RhdGljIGludCBiNTNfbW1hcF9yZWFkMTYoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MTYgKnZhbClcbiAgOTE6XHR7XG4gIDkyOlx0XHRzdHJ1Y3QgYjUzX21tYXBfcHJpdiAqcHJpdiA9IGRldi1cdTAwM2Vwcml2O1xuICA5MzpcdFx0dm9pZCBfX2lvbWVtICpyZWdzID0gcHJpdi1cdTAwM2VyZWdzO1xuICA5NDpcdFxuICA5NTpcdFx0aWYgKFdBUk5fT04ocmVnICUgMikpXG4gIDk2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA5NzpcdFxuICA5ODpcdFx0aWYgKGRldi1cdTAwM2VwZGF0YSBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZXBkYXRhLVx1MDAzZWJpZ19lbmRpYW4pXG4gIDk5Olx0XHRcdCp2YWwgPSBpb3JlYWQxNmJlKHJlZ3MgJiM0MzsgKHBhZ2UgXHUwMDNjXHUwMDNjIDgpICYjNDM7IHJlZyk7XG4gMTAwOlx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgU3l6a2FsbGVyIFBsYXRmb3JtIERldmljZSBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHN5emthbGxlciBoYW5kbGVzIHBsYXRmb3JtIGRldmljZXMgZm9yIHRoaXMgZHJpdmVyLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHllYWgsIGl0ICpjYW4qIGluc3RhbnRpYXRlIHRoZW0sIHJpZ2h0PyBQcm9iYWJseSB1c2luZyBgc3l6X2Rldm1lbWAgb3Igc29tZXRoaW5nIGNvbXBhcmFibGUsIG9yIGV2ZW4gYnkgaW5qZWN0aW5nIGRldmljZSB0cmVlIG5vZGVzLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIGFwcHJvYWNoLiBCdXQgdGhlbiBJIHF1aWNrbHkgcmVtZW1iZXIgc3l6a2FsbGVyJiMzOTtzIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25zLCBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBzbyBvbi4gRm9yIHBsYXRmb3JtIGRldmljZXMsIHRob3VnaCwgaXQgdXN1YWxseSBzdGlja3MgdG8gZWl0aGVyIGBzeXpfaW5pdF9uZXRfZGV2aWNlYCwgc2ltaWxhciB2aXJ0dWFsIGRldmljZXMsIG9yIHRoYXQgc29ydCBvZiB0aGluZy4KCk5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyBzeXprYWxsZXIgZXZlbiAqZnV6eiogRFNBIGRyaXZlcnMgc3BlY2lmaWNhbGx5PyBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBjb3ZlcmFnZS4gU28sIEkgaGF2ZSB0byBjaGVjayB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgRFNBIGlzIGV2ZW4gcmVwcmVzZW50ZWQuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2I1MyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjU2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN5emthbGxlci1SZWxhdGVkIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGVzZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zLCB0aGV5JiMzOTtyZSBub3QgYWN0dWFsbHkgKmluKiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBhcmUgdGhleT8gQnV0IHRoaXMgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcuJiMzNDsgVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBzeXprYWxsZXIgaGFzIGVpdGhlciBmbGFnZ2VkIGEgYnVnIGhlcmUsIG9yIHNvbWVvbmUmIzM5O3MgcnVubmluZyBzb21lIGtpbmQgb2Ygc3l6a2FsbGVyLXJlbGF0ZWQgcGF0Y2ggdGVzdGluZy4KCkFscmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGV2ZW4gcmVhY2hhYmxlLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGNoYW5naW5nIGByZXR1cm4gMDtgIHRvIGByZXR1cm4gcmV0O2Agd2l0aGluIGBiNTNfZmRiX2R1bXBgLiBOb3csIHdoZXJlIGlzIGBiNTNfZmRiX2R1bXBgIGNhbGxlZCBmcm9tPyBBaCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGRzYV9wb3J0X2ZkYl9kdW1wYC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIHdoZXJlIHRoaXMgbWlnaHQgYmUgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwb3J0X2ZkYl9kdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL3BvcnQuYz0xMTM1PWludCBkc2FfcG9ydF9sYWdfZmRiX2RlbChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuLS1cbm5ldC9kc2EvcG9ydC5jLTExNTMtXG5uZXQvZHNhL3BvcnQuYzoxMTU0OmludCBkc2FfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBkc2FfZmRiX2R1bXBfY2JfdCAqY2IsIHZvaWQgKmRhdGEpXG5uZXQvZHNhL3BvcnQuYy0xMTU1LXtcbi0tXG5uZXQvZHNhL3BvcnQuYy0xMTU4LVxubmV0L2RzYS9wb3J0LmM6MTE1OTpcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfZmRiX2R1bXApXG5uZXQvZHNhL3BvcnQuYy0xMTYwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5uZXQvZHNhL3BvcnQuYy0xMTYxLVxubmV0L2RzYS9wb3J0LmM6MTE2MjpcdHJldHVybiBkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9mZGJfZHVtcChkcywgcG9ydCwgY2IsIGRhdGEpO1xubmV0L2RzYS9wb3J0LmMtMTE2My19XG4tLVxubmV0L2RzYS9wb3J0Lmg9NjM9aW50IGRzYV9wb3J0X2xhZ19mZGJfZGVsKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG5uZXQvZHNhL3BvcnQuaC02NC1cdFx0XHQgdTE2IHZpZCk7XG5uZXQvZHNhL3BvcnQuaDo2NTppbnQgZHNhX3BvcnRfZmRiX2R1bXAoc3RydWN0IGRzYV9wb3J0ICpkcCwgZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKTtcbm5ldC9kc2EvcG9ydC5oLTY2LWludCBkc2FfcG9ydF9tZGJfYWRkKGNvbnN0IHN0cnVjdCBkc2FfcG9ydCAqZHAsXG4tLVxubmV0L2RzYS91c2VyLmM9NTU5PWRzYV91c2VyX2ZkYl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvZHNhL3VzZXIuYy01NzEtXG5uZXQvZHNhL3VzZXIuYzo1NzI6XHRlcnIgPSBkc2FfcG9ydF9mZGJfZHVtcChkcCwgZHNhX3VzZXJfcG9ydF9mZGJfZG9fZHVtcCwgXHUwMDI2ZHVtcCk7XG5uZXQvZHNhL3VzZXIuYy01NzMtXHQqaWR4ID0gZHVtcC5pZHg7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGRzYV91c2VyX2ZkYl9kdW1wYCBpbiBTeXprYWxsZXImIzM5O3MgUUVNVSBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBgZHNhX3VzZXJfZmRiX2R1bXBgIGlzIHRyaWdnZXJlZCB0aHJvdWdoIG5ldGxpbmssIHdoaWNoIG1lYW5zIHVzZXJzcGFjZSBjYW4gcmVhY2ggaXQgKmlmKiB0aGUgZGV2aWNlIGV4aXN0cy4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgYGI1M2AgZGV2aWNlIGV2ZW4gZXhpc3QgaW4gU3l6a2FsbGVyJiMzOTtzIFFFTVUgZW52aXJvbm1lbnQ/IFN5emthbGxlciYjMzk7cyBydW5uaW5nIGluIFFFTVUsIHNvIGl0IHdvbiYjMzk7dCBiZSByZWFjaGFibGUgdW5sZXNzIHRoZSBgYjUzYCBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCBzb21laG93LgoKQ291bGQgYHN5el9kZXZtZW1gIG9yIHNvbWV0aGluZyBzaW1pbGFyIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZT8gT3IgbWF5YmUgYGRzYV9sb29wYD8gTm9wZSwgYGRzYV9sb29wYCB1c2VzIGBkc2FfbG9vcF9vcHNgLCBub3QgZGlyZWN0bHkgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBiNTNgIG1pZ2h0IGJlIGJyb3VnaHQgaW50byBleGlzdGVuY2UuIElzIGl0IHRpZWQgdG8gYSB2aXJ0dWFsIGJ1cywgb3IgaXMgaXQgcHVyZWx5IHBoeXNpY2FsPwoKQWhhLCBgYjUzX21tYXAuY2AgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFBsYXRmb3JtIGRyaXZlcnMgKmNhbiogc29tZXRpbWVzIGJlIGNyZWF0ZWQgZnJvbSB1c2Vyc3BhY2UuLi4gYnV0IG5vdCB2aWEgYC9zeXMvYnVzL3BsYXRmb3JtL25ld19kZXZpY2VgLCB0aGF0JiMzOTtzIG5vdCBob3cgaXQgd29ya3MuIFdhaXQsIEkgdGhpbmsgU3l6a2FsbGVyIGNhbiBpbmplY3QgZGV2aWNlIHRyZWUgb3ZlcmxheXMuLi4gb3IgbWF5YmUgdGhyb3VnaCBgc3l6X21vdW50X2ltYWdlYD8gVGhhdCBjYW4gbW91bnQgaW1hZ2VzLCBidXQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgcmVxdWlyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBzbyBJIGNhbiYjMzk7dCBiZSBzdXJlLgoKSGFuZyBvbi4uLiBpc24mIzM5O3QgYGI1M2AgYW4gTURJTyBkcml2ZXI/IE5vLCBgYjUzX21kaW8uY2AgaXMgdGhlIE1ESU8gb25lLiBDYW4gTURJTyBkZXZpY2VzIGJlIGluc3RhbnRpYXRlZCBmcm9tIHVzZXJzcGFjZT8gVXN1YWxseSBub3QuCgpCdXQuLi4gd2FpdCBhIHNlY29uZC4gSXMgdGhpcyBwYXRjaCBldmVuIGZpeGluZyBhIGJ1ZyB0aGF0IHdvdWxkIGJlIHRyaWdnZXJlZCBpbiB0aGlzIGVudmlyb25tZW50PyBNYXliZSBpdCYjMzk7cyBhIHN0YXRpYyBhbmFseXplciBmaW5kaW5nIG9yIHNvbWV0aGluZyB0aGF0IG9ubHkgYWZmZWN0cyByZWFsIGhhcmR3YXJlPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQgY29uY2VybnM6IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBvciBjb2RlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gUUVNVS4KCklzIGBiNTNgIGEgdmVuZG9yLXNwZWNpZmljIHN3aXRjaCBkcml2ZXIgdGhhdCBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZT8gWWVzLCBpdCYjMzk7cyBCcm9hZGNvbSBCQ001M3h4LiBMZXQmIzM5O3Mgc2VlIGlmIFFFTVUgZW11bGF0ZXMgQkNNNTN4eC4gTm9wZSwgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoYXQgc3BlY2lmaWMgQnJvYWRjb20gY2hpcC4KCkJ1dCB3YWl0LCBRRU1VICpkb2VzKiBlbXVsYXRlIHNvbWUgQnJvYWRjb20gYm9hcmRzLCBsaWtlIGByYXNwaWAgKFJhc3BiZXJyeSBQaSkgb3IgYGJjbTI4MzVgLiBEbyB0aG9zZSBoYXZlIGEgQkNNNTN4eCBzd2l0Y2g/IE5vLCBuZWl0aGVyIG9mIHRoZW0gZG8uIFdoYXQgYWJvdXQgYGJjbTUzeHhgPyBRRU1VIGRvZXNuJiMzOTt0IGhhdmUgYSBzcGVjaWZpYyBgYmNtNTN4eGAgbWFjaGluZSB0eXBlLgoKT2theSwgc28gSSYjMzk7bSBiYWNrIHRvIHRoZSBvcmlnaW5hbCBxdWVzdGlvbi4gSXMgdGhlcmUgKmFueSogd2F5IHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gUUVNVT8gSSYjMzk7ZCBjaGVjayB0aGUgUUVNVSBzb3VyY2UgZm9yIGBiNTNgLCBidXQgSSBkb24mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdC4KCkxldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgYSBQQ0kgZGV2aWNlLiBgYjUzX21tYXBgIGlzIHBsYXRmb3JtLiBgYjUzX21kaW9gIGlzIE1ESU8uIGBiNTNfc3BpYCBpcyBTUEkuIGBiNTNfc3JhYmAgaXMgcGxhdGZvcm0uIFNvLCBub25lIG9mIHRoZXNlIGFyZSBQQ0kuIENhbiBJIHNvbWVob3cgdXNlIGBzcGlkZXZgIHRvIHNpbXVsYXRlIGEgZGV2aWNlPyBObywgdGhhdCYjMzk7cyBqdXN0IGEgdXNlci1zcGFjZSBpbnRlcmZhY2UgdG8gU1BJLCBub3QgZGV2aWNlIGVtdWxhdGlvbi4KCldhaXQsIFN5emthbGxlciAqZG9lcyogaGF2ZSBzaW11bGF0b3JzIGZvciBJMkMsIFNQSSwgdGhpbmdzIGxpa2UgdGhhdCwgcmlnaHQ/IEkmIzM5O20gdGhpbmtpbmcgb2YgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYHZoY2lgIGZvciBVU0IsIGB1aW5wdXRgIGZvciBpbnB1dCwgYHZrbXNgIGZvciBEUk0sIGBuZXRkZXZzaW1gIGZvciBuZXR3b3JraW5nLiBJcyB0aGVyZSBhIHNpbXVsYXRvciBmb3IgRFNBPyBZZXMsIHRoZXJlJiMzOTtzIGBkc2FfbG9vcGAuIEkgc2hvdWxkIGNoZWNrIHRoYXQgb25lIG91dC4gTGV0IG1lIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiNTMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGI1M2AgRHJpdmVyIGFuZCBpdHMgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGRzYV9sb29wYCBpcyBqdXN0IGEgbW9jayBkcml2ZXI7IGl0JiMzOTtzIG5vdCBhY3R1YWxseSB1c2luZyBgYjUzYC4gVGhpcyBtZWFucyBgYjUzYCBpcyBkZWZpbml0ZWx5IGhhcmR3YXJlLXNwZWNpZmljLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2gsIGFuZCB0aGF0IG1lYW5zIHdlIGNhbiYjMzk7dCBnZXQgdG8gaXQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIHN0YW5kYXJkIFFFTVUuIEl0IG5lZWRzIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGZ1enppbmcgd291bGQgYmUgaW1wb3NzaWJsZSBvciBwb2ludGxlc3MuCgpCdXQgaG9sZCBvbiwgbGV0IG1lIGJlIHRob3JvdWdoLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgbG9vcGhvbGVzLiBDb3VsZCBgYjUzX2ZkYl9kdW1wYCBiZSBjYWxsZWQgZnJvbSAqc29tZXdoZXJlKiBlbHNlLCBwZXJoYXBzIGluZGlyZWN0bHk/IE5vcGUsIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IGBiNTNfbW1hcGAsIGBiNTNfbWRpb2AsIGBiNTNfc3BpYCwgYW5kIGBiNTNfc3JhYmAuIEFuZCBhIHF1aWNrIGdsYW5jZSBhdCB0aG9zZSBjb25maXJtcyBpdCAtIHRoZXkmIzM5O3JlIGFsbCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jYC4gQWgsIHllcywgY29uZmlybWVkLiBOb3RoaW5nIHRoZXJlIHRoYXQgZGV2aWF0ZXMgZnJvbSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgbmF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qXG4gICAyOlx0ICogQjUzIHJlZ2lzdGVyIGFjY2VzcyB0aHJvdWdoIE1JSSByZWdpc3RlcnNcbiAgIDM6XHQgKlxuICAgNDpcdCAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEpvbmFzIEdvcnNraSBcdTAwM2Nqb2dvQG9wZW53cnQub3JnXHUwMDNlXG4gICA1Olx0ICpcbiAgIDY6XHQgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbiAgIDc6XHQgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlXG4gICA4Olx0ICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy5cbiAgIDk6XHQgKlxuICAxMDpcdCAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcJiMzNDtBUyBJU1wmIzM0OyBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVNcbiAgMTE6XHQgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXG4gIDEyOlx0ICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1JcbiAgMTM6XHQgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTXG4gIDE0Olx0ICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXG4gIDE1Olx0ICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0ZcbiAgMTY6XHQgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuICAxNzpcdCAqL1xuICAxODpcdFxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAyMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAgMjM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gIDI0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnJjbXBoeS5oXHUwMDNlXG4gIDI1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAgMjY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiAgMjc6XHRcbiAgMjg6XHQjaW5jbHVkZSBcJiMzNDtiNTNfcHJpdi5oXCYjMzQ7XG4gIDI5Olx0XG4gIDMwOlx0LyogTUlJIHJlZ2lzdGVycyAqL1xuICAzMTpcdCNkZWZpbmUgUkVHX01JSV9QQUdFICAgIDB4MTAgICAgLyogTUlJIFBhZ2UgcmVnaXN0ZXIgKi9cbiAgMzI6XHQjZGVmaW5lIFJFR19NSUlfQUREUiAgICAweDExICAgIC8qIE1JSSBBZGRyZXNzIHJlZ2lzdGVyICovXG4gIDMzOlx0I2RlZmluZSBSRUdfTUlJX0RBVEEwICAgMHgxOCAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAwICovXG4gIDM0Olx0I2RlZmluZSBSRUdfTUlJX0RBVEExICAgMHgxOSAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAxICovXG4gIDM1Olx0I2RlZmluZSBSRUdfTUlJX0RBVEEyICAgMHgxYSAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAyICovXG4gIDM2Olx0I2RlZmluZSBSRUdfTUlJX0RBVEEzICAgMHgxYiAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAzICovXG4gIDM3Olx0XG4gIDM4Olx0I2RlZmluZSBSRUdfTUlJX1BBR0VfRU5BQkxFICAgICBCSVQoMClcbiAgMzk6XHQjZGVmaW5lIFJFR19NSUlfQUREUl9XUklURSAgICAgIEJJVCgwKVxuICA0MDpcdCNkZWZpbmUgUkVHX01JSV9BRERSX1JFQUQgICAgICAgQklUKDEpXG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIGludCBiNTNfbWRpb19vcChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHUxNiBvcClcbiAgNDM6XHR7XG4gIDQ0Olx0XHRpbnQgaTtcbiAgNDU6XHRcdHUxNiB2O1xuICA0NjpcdFx0aW50IHJldDtcbiAgNDc6XHRcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXYtXHUwMDNlcHJpdjtcbiAgNDg6XHRcbiAgNDk6XHRcdGlmIChkZXYtXHUwMDNlY3VycmVudF9wYWdlICE9IHBhZ2UpIHtcbiAgNTA6XHRcdFx0Lyogc2V0IHBhZ2UgbnVtYmVyICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjk1CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIERyaXZlciBGdXp6aW5nIENvbmNlcm5zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBmb3IgYW4gTURJTyBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIGV2ZW4gZnV6eiBNRElPIGRldmljZXMgd2l0aCBzeXprYWxsZXI/IFRoZSBwcm9ibGVtIGlzLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgYnVpbHQtaW4sIGdlbmVyaWMgd2F5IHRvIGNyZWF0ZSB2aXJ0dWFsIE1ESU8gZGV2aWNlcy4gSSBtZWFuLCBpdCBoYXMgdGhpbmdzIGxpa2UgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAsIGJ1dCBub3RoaW5nIHNwZWNpZmljIGZvciBNRElPIHRvIGp1c3Qgc3BpbiB1cCBhcmJpdHJhcnkgZGV2aWNlcyBmb3IgdGVzdGluZy4KClRoZW4gSSByZS1yZWFkIHRoZSBwcm9tcHQsIGFuZCBpdCBzYXlzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLiYjMzQ7IEkgc2VlIHRoZSBzaW1pbGFyaXRpZXMsIGV2ZW4gdGhvdWdoIHRoaXMgaXNuJiMzOTt0IFBDSWUuIEl0JiMzOTtzIGEgdmVuZG9yLXNwZWNpZmljIHN3aXRjaCBkcml2ZXIg4oCTIGEgQnJvYWRjb20gQkNNNTN4eCDigJMgd2hpY2ggaXMganVzdCB0aGUgc2FtZS4gSXQgcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBzbyBpdCBmYWxscyBpbnRvIHRoZSBzYW1lIGNhdGVnb3J5IGFzIHRob3NlIGRyaXZlcnMgdGhleSBtZW50aW9uLgoKTGV0IG1lIHF1aWNrbHkgbWFrZSBzdXJlIHRoaXMgaXMgdGhlICpvbmx5KiBmaWxlIHRvdWNoZWQgYnkgdGhlIHBhdGNoLiBZZXAsIGl0JiMzOTtzIGp1c3QgYGRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jYC4KCkdpdmVuIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiNTNfZmRiX2R1bXAgZnVuY3Rpb24gaW4gdGhlIEJyb2FkY29tIEJDTTUzeHggRFNBIHN3aXRjaCBkcml2ZXIgKGI1MykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgc3dpdGNoIGhhcmR3YXJlIChjb25uZWN0ZWQgdmlhIE1ESU8sIE1NQVAsIFNQSSwgb3IgU1JBQikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGI1M19mZGJfZHVtcCBmdW5jdGlvbiBpbiB0aGUgQnJvYWRjb20gQkNNNTN4eCBEU0Egc3dpdGNoIGRyaXZlciAoYjUzKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgKGNvbm5lY3RlZCB2aWEgTURJTywgTU1BUCwgU1BJLCBvciBTUkFCKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6MzkuNDMxMjYxOTQ3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NDgzNzIyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYjUzX2ZkYl9kdW1wIGZ1bmN0aW9uIGluIHRoZSBCcm9hZGNvbSBCQ001M3h4IERTQSBzd2l0Y2ggZHJpdmVyIChiNTMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIHN3aXRjaCBoYXJkd2FyZSAoY29ubmVjdGVkIHZpYSBNRElPLCBNTUFQLCBTUEksIG9yIFNSQUIpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgdmlydHVhbGl6ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjM5LjQzMTI2ODExN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyOTgwOTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU2MGQyYjJhOWVlM2Y1NjY2MjNlYWRhYTIwMmUxYjcyNmUxY2Y5NTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjA6NDk6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xcbmluZGV4IDNmNWI5NTkyNzk0ZGEuLjA4ODAzMTBjOWNlM2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xcbkBAIC0yMjE5LDcgKzIyMTksNyBAQCBpbnQgYjUzX2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWFybF9tdXRleCk7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGI1M19mZGJfZHVtcCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0OTo0MC43NjIwMDcyODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NzQxNzYwODU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGI1M19mZGJfZHVtcCBmdW5jdGlvbiBpbiB0aGUgQnJvYWRjb20gQkNNNTN4eCBEU0Egc3dpdGNoIGRyaXZlciAoYjUzKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgKGNvbm5lY3RlZCB2aWEgTURJTywgTU1BUCwgU1BJLCBvciBTUkFCKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNjBkMmIyYTllZTNmNTY2NjIzZWFkYWEyMDJlMWI3MjZlMWNmOTU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjA6NDk6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXG5pbmRleCAzZjViOTU5Mjc5NGRhLi4wODgwMzEwYzljZTNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXG5AQCAtMjIxOSw3ICsyMjE5LDcgQEAgaW50IGI1M19mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXJsX211dGV4KTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChiNTNfZmRiX2R1bXApO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NDAuNzYyMDA4NjUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNjA4MDM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgQnVnIEZpeCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSBzZWVpbmc6IHRoZXJlJ3MgYSBwYXRjaCBhZmZlY3RpbmcgdGhlIGBiNTNfZmRiX2R1bXBgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNgIGZpbGUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhIHZlcnkgc2ltcGxlIG9uZTogaXQncyBhbHRlcmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgd2FzIGhhcmRjb2RlZCB0byBgcmV0dXJuIDA7YCwgZXNzZW50aWFsbHkgaW5kaWNhdGluZyBzdWNjZXNzIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBhY3R1YWxseSBoYXBwZW5lZCBpbnRlcm5hbGx5LiBOb3csIGl0IGxvb2tzIGxpa2UgaXQncyBiZWluZyBjaGFuZ2VkIHRvIGByZXR1cm4gcmV0O2AsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHJldGAgaXMgYSB2YXJpYWJsZSBob2xkaW5nIHRoZSAqYWN0dWFsKiByZXR1cm4gY29kZSBvciBlcnJvciBpbmRpY2F0aW9uIGZyb20gdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uLiBUaGlzIG1lYW5zIHdlJ3JlIGdvaW5nIGZyb20gYmxpbmRseSBhc3N1bWluZyBzdWNjZXNzIHRvIHJlcG9ydGluZyB0aGUgcmVhbCBvdXRjb21lLiBHaXZlbiB0aGlzIGNoYW5nZSBJJ20gZmFpcmx5IGNlcnRhaW4gdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIHdhcyBoaWRpbmcgYW4gdW5kZXJseWluZyBwcm9ibGVtLiBUaGlzIG1ha2VzIHNlbnNlLCBiZWNhdXNlIHlvdSB3b3VsZCBvbmx5IG1ha2UgdGhpcyBjaGFuZ2UgaWYgeW91IHdlcmUgdHJ5aW5nIHRvIGZpeCBhIGJ1ZyBvciBnZXQgbW9yZSBpbmZvcm1hdGlvbi4gV2UnbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYGI1M19mZGJfZHVtcGAgZnVuY3Rpb24gYW5kIHdoYXQgYHJldGAgcmVwcmVzZW50cyB0byBmdWxseSBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgcGF0Y2ggYW5kIGVuc3VyZSBpdCdzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjQ0LjM2ODA5Mjc1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI2MzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiNTNfZmRiX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM9MjE2Nz1zdGF0aWMgaW50IGI1M19mZGJfY29weShpbnQgcG9ydCwgY29uc3Qgc3RydWN0IGI1M19hcmxfZW50cnkgKmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTIxODEtXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjE4MjppbnQgYjUzX2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMjE4My1cXHRcXHQgZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMjIyMy19XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjIyNDpFWFBPUlRfU1lNQk9MKGI1M19mZGJfZHVtcCk7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMjIyNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTI3MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBiNTNfc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTI3MjYtXFx0LnBvcnRfdmxhbl9kZWxcXHRcXHQ9IGI1M192bGFuX2RlbCxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzoyNzI3OlxcdC5wb3J0X2ZkYl9kdW1wXFx0XFx0PSBiNTNfZmRiX2R1bXAsXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMjcyOC1cXHQucG9ydF9mZGJfYWRkXFx0XFx0PSBiNTNfZmRiX2FkZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NDQuNDIwMzYxNjY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxNzkxNDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGI1M19mZGJfZHVtcGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGI1M19mZGJfZHVtcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZnVuY3Rpb25zLiBHaXZlbiB0aGUgbmFtZSwgaXQncyBsaWtlbHkgYSB1dGlsaXR5IHJlbGF0ZWQgdG8gZWl0aGVyIGR1bXBpbmcgb3IgaW5zcGVjdGluZyBkYXRhIGZyb20gYSBGb3VuZGF0aW9uREIgKEZEQikgZGF0YWJhc2UuIFRoZSBcImI1M1wiIGNvdWxkIGJlIGEgc3BlY2lmaWMgcHJvamVjdCBjb2RlLCBhIHZlcnNpb24sIG9yIHBlcmhhcHMgZXZlbiBhbiBpbnRlcm5hbCBpZGVudGlmaWVyIHJlbGF0ZWQgdG8gdGhlIGRhdGEgZm9ybWF0IGJlaW5nIGR1bXBlZC4gTXkgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIHRoZSBraW5kIG9mIGluZm9ybWF0aW9uIGl0IGV4cG9zZXMsIHRoZSBmb3JtYXQgb2YgdGhhdCBpbmZvcm1hdGlvbiAocmF3LCBzdHJ1Y3R1cmVkLCBldGMuKSwgYW5kIHRoZSBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMgZm9yIHNwZWNpZnlpbmcgd2hhdCB0byBkdW1wLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIEkgY2FuIHF1ZXJ5IHNwZWNpZmljIGtleXMsIHJhbmdlcywgb3IgaWYgaXQncyBhbiBhbGwtb3Itbm90aGluZyBkdW1wLiBBbHNvLCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIHNvbWV0aGluZyBJIHdpbGwgZGVmaW5pdGVseSBjb25zaWRlciwgSSBzaG91bGQgZGV0ZXJtaW5lIGlmIHRoaXMgY29tbWFuZCByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiwgb3IgaWYgdGhlcmUgYXJlIGFueSByaXNrcyBvZiBhY2NpZGVudGFsbHkgZXhwb3Npbmcgc2Vuc2l0aXZlIGRhdGEuIEtub3dpbmcgdGhlIGludGVybmFscyB3aWxsIGJlIGtleSwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgaWYgaXQncyByZWFkaW5nIGRpcmVjdGx5IGZyb20gdGhlIHN0b3JhZ2UgZW5naW5lLCBvciBpZiBpdCBoYXMgc29tZSBpbnRlcm1lZGlhcnkgbGF5ZXIuIFVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIGRldGVybWluZSB0aGUgcmVsaWFiaWxpdHkgYW5kIHNwZWVkIG9mIHRoZSBkdW1wLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NDguMzM4Mjc4NTY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxODIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxODI6XFx0aW50IGI1M19mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbjIxODM6XFx0XFx0XFx0IGRzYV9mZGJfZHVtcF9jYl90ICpjYiwgdm9pZCAqZGF0YSlcXG4yMTg0OlxcdHtcXG4yMTg1OlxcdFxcdHVuc2lnbmVkIGludCBjb3VudCA9IDAsIHJlc3VsdHNfcGVyX2hpdCA9IDE7XFxuMjE4NjpcXHRcXHRzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbjIxODc6XFx0XFx0c3RydWN0IGI1M19hcmxfZW50cnkgcmVzdWx0c1syXTtcXG4yMTg4OlxcdFxcdGludCByZXQ7XFxuMjE4OTpcXHRcXG4yMTkwOlxcdFxcdGlmIChwcml2LVxcdTAwM2VudW1fYXJsX2JpbnMgXFx1MDAzZSAyKVxcbjIxOTE6XFx0XFx0XFx0cmVzdWx0c19wZXJfaGl0ID0gMjtcXG4yMTkyOlxcdFxcbjIxOTM6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlYXJsX211dGV4KTtcXG4yMTk0OlxcdFxcbjIxOTU6XFx0XFx0LyogU3RhcnQgc2VhcmNoIG9wZXJhdGlvbiAqL1xcbjIxOTY6XFx0XFx0YjUzX3dyaXRlX2FybF9zcmNoX2N0bChwcml2LCBBUkxfU1JDSF9TVEROKTtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0ZG8ge1xcbjIxOTk6XFx0XFx0XFx0cmV0ID0gYjUzX2FybF9zZWFyY2hfd2FpdChwcml2KTtcXG4yMjAwOlxcdFxcdFxcdGlmIChyZXQpXFxuMjIwMTpcXHRcXHRcXHRcXHRicmVhaztcXG4yMjAyOlxcdFxcbjIyMDM6XFx0XFx0XFx0YjUzX2FybF9zZWFyY2hfcmVhZChwcml2LCAwLCBcXHUwMDI2cmVzdWx0c1swXSk7XFxuMjIwNDpcXHRcXHRcXHRyZXQgPSBiNTNfZmRiX2NvcHkocG9ydCwgXFx1MDAyNnJlc3VsdHNbMF0sIGNiLCBkYXRhKTtcXG4yMjA1OlxcdFxcdFxcdGlmIChyZXQpXFxuMjIwNjpcXHRcXHRcXHRcXHRicmVhaztcXG4yMjA3OlxcdFxcbjIyMDg6XFx0XFx0XFx0aWYgKHJlc3VsdHNfcGVyX2hpdCA9PSAyKSB7XFxuMjIwOTpcXHRcXHRcXHRcXHRiNTNfYXJsX3NlYXJjaF9yZWFkKHByaXYsIDEsIFxcdTAwMjZyZXN1bHRzWzFdKTtcXG4yMjEwOlxcdFxcdFxcdFxcdHJldCA9IGI1M19mZGJfY29weShwb3J0LCBcXHUwMDI2cmVzdWx0c1sxXSwgY2IsIGRhdGEpO1xcbjIyMTE6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4yMjEyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIyMTM6XFx0XFxuMjIxNDpcXHRcXHRcXHRcXHRpZiAoIXJlc3VsdHNbMF0uaXNfdmFsaWQgXFx1MDAyNlxcdTAwMjYgIXJlc3VsdHNbMV0uaXNfdmFsaWQpXFxuMjIxNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yMjE2OlxcdFxcdFxcdH1cXG4yMjE3OlxcdFxcbjIyMTg6XFx0XFx0fSB3aGlsZSAoY291bnQrKyBcXHUwMDNjIGI1M19tYXhfYXJsX2VudHJpZXMocHJpdikgLyByZXN1bHRzX3Blcl9oaXQpO1xcbjIyMTk6XFx0XFxuMjIyMDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWFybF9tdXRleCk7XFxuMjIyMTpcXHRcXG4yMjIyOlxcdFxcdHJldHVybiByZXQ7XFxuMjIyMzpcXHR9XFxuMjIyNDpcXHRFWFBPUlRfU1lNQk9MKGI1M19mZGJfZHVtcCk7XFxuMjIyNTpcXHRcXG4yMjI2OlxcdGludCBiNTNfbWRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbjIyMjc6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYixcXG4yMjI4OlxcdFxcdFxcdHN0cnVjdCBkc2FfZGIgZGIpXFxuMjIyOTpcXHR7XFxuMjIzMDpcXHRcXHRzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbjIyMzE6XFx0XFx0aW50IHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NDguMzM4NDcyMDQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NzM5OTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCcm9hZGNvbSBCNTMgRFNBIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgRFNBIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBCcm9hZGNvbSBCNTMgc3dpdGNoZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiBJIGV2ZW4gKnRvdWNoKiB0aGlzIHRoaW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT9cIiBEU0EgZHJpdmVycyBhcmUgbm90b3Jpb3VzbHkgaGFyZHdhcmUtc3BlY2lmaWMsIHJpZ2h0PyBUaGV5J3JlIGRlc2lnbmVkIHRvIGludGVyZmFjZSBkaXJlY3RseSB3aXRoIHRoZSBzd2l0Y2ggQVNJQy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgY2hhbmNlIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBoZXJlLCBvciBpZiB0aGlzIGlzIGEgcHVyZWx5IGhhcmR3YXJlIHBsYXkuIEknbSBsZWFuaW5nIHRvd2FyZHMgdGhlIGxhdHRlciwgZ2l2ZW4gbXkgZXhwZXJpZW5jZS4gQmVzdCB3YXkgdG8gY2hlY2sgdGhpcyBpcyB0byBpbW1lZGlhdGVseSBnbyBkaWdnaW5nIGluIHRoZSBgZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnYCBmaWxlLiBUaGF0J2xsIGJlIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGUgZHJpdmVyJ3MgY2FwYWJpbGl0aWVzIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjUxLjkxNTg3MzYyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTk3NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQjUzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWc6MjptZW51Y29uZmlnIEI1M1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBCQ001M3h4IG1hbmFnZWQgc3dpdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjE1OmNvbmZpZyBCNTNfU1BJX0RSSVZFUlxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiQjUzIFNQSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0yMC1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWc6MjE6Y29uZmlnIEI1M19NRElPX0RSSVZFUlxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwiQjUzIE1ESU8gY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMjYtXFxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjI3OmNvbmZpZyBCNTNfTU1BUF9EUklWRVJcXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMjgtXFx0dHJpc3RhdGUgXFxcIkI1MyBNTUFQIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTM0LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZzozNTpjb25maWcgQjUzX1NSQUJfRFJJVkVSXFxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTM2LVxcdHRyaXN0YXRlIFxcXCJCNTMgU1JBQiBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy00My1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWc6NDQ6Y29uZmlnIEI1M19TRVJERVNcXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIkI1MyBTZXJEZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NTEuOTgxODUzNDYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExOTg0NzU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeHBsb3JpbmcgQnJvYWRjb20gQkNNNTN4eCBTd2l0Y2ggU3VwcG9ydCBpbiBRRU1VKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc3VwcG9ydGluZyB0aGUgQnJvYWRjb20gQkNNNTN4eCBtYW5hZ2VkIHN3aXRjaC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgaGFyZHdhcmUgY29tcG9uZW50LCBub3Qgc29tZXRoaW5nIHRoYXQncyBnb2luZyB0byBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgc29tZWhvdyBpbnRlcmFjdCB3aXRoIHRoZSBEU0EgZHJpdmVycyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBDYW4gSSB1c2UgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3Igc29tZXRoaW5nIHNpbWlsYXI/XG5cbk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgRFNBIGRyaXZlcnMgYXJlIHR5cGljYWxseSB0aWVkIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvZiB0aGUgc3dpdGNoIGNoaXAuIEknbSB3b25kZXJpbmcsIGlzIHRoZXJlIHNvbWUga2luZCBvZiBkdW1teSBEU0EgZHJpdmVyIHRoYXQgSSBjb3VsZCBwb3RlbnRpYWxseSBsZXZlcmFnZT8gQWgsIHllcyEgYGRzYV9sb29wYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQuIEhvd2V2ZXIsIEkgbmVlZCB0byBpbnRlcmFjdCB3aXRoIGBiNTNgIHRvIHVzZSB0aGUgQnJvYWRjb20gQkNNNTN4eC5cblxuVGhlIHJlYWwgY2hhbGxlbmdlIGlzLCBob3cgZG8gSSBhY3R1YWxseSByZWFjaCB0aGF0IGNvZGUgd2l0aGluIFFFTVU/IEknbSB0aGlua2luZywgY291bGQgSSBpbnN0YW50aWF0ZSB0aGUgZHJpdmVyIHVzaW5nIGEgZmFrZSBwbGF0Zm9ybSBkZXZpY2Ugb3IgcGVyaGFwcyBldmVuIGFuIE1ESU8gZGV2aWNlPyBJZiBJIGNhbiB0cmlnZ2VyIGBiNTNfbW1hcGAgb3IgYGI1M19tZGlvYCB0byBwcm9iZSBjb3JyZWN0bHksIHRoYXQgY291bGQgZ2l2ZSBtZSBzb21lIGtpbmQgb2YgZm9vdGhvbGQuIEl0IGxvb2tzIGxpa2UgYGI1M19tbWFwYCB1dGlsaXplcyBhIHBsYXRmb3JtIGRyaXZlciwgc28gdGhhdCBjb3VsZCBiZSB0aGUgcmlnaHQgcGF0aCB0byBwdXJzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NTcuMTAxNzExNzM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LypcXG4gICAyOlxcdCAqIEI1MyByZWdpc3RlciBhY2Nlc3MgdGhyb3VnaCBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVyc1xcbiAgIDM6XFx0ICpcXG4gICA0OlxcdCAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIEpvbmFzIEdvcnNraSBcXHUwMDNjam9nb0BvcGVud3J0Lm9yZ1xcdTAwM2VcXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcXG4gICA3OlxcdCAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmVcXG4gICA4OlxcdCAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXFxuICAgOTpcXHQgKlxcbiAgMTA6XFx0ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFxcXCJBUyBJU1xcXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXFxuICAxMTpcXHQgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXFxuICAxMjpcXHQgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxcbiAgMTM6XFx0ICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xcbiAgMTQ6XFx0ICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXFxuICAxNTpcXHQgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRlxcbiAgMTY6XFx0ICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cXG4gIDE3OlxcdCAqL1xcbiAgMTg6XFx0XFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4gIDI0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcXHUwMDNlXFxuICAyNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGF0YS9iNTMuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gIDI4OlxcdFxcbiAgMjk6XFx0I2luY2x1ZGUgXFxcImI1M19wcml2LmhcXFwiXFxuICAzMDpcXHRcXG4gIDMxOlxcdCNkZWZpbmUgQkNNNjNYWF9FUEhZX1JFRyAweDNDXFxuICAzMjpcXHQjZGVmaW5lIEJDTTYzMjY4X0dQSFlfUkVHIDB4NTRcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0I2RlZmluZSBHUEhZX0NUUkxfTE9XX1BXUlxcdEJJVCgzKVxcbiAgMzU6XFx0I2RlZmluZSBHUEhZX0NUUkxfSUREUV9CSUFTXFx0QklUKDApXFxuICAzNjpcXHRcXG4gIDM3OlxcdHN0cnVjdCBiNTNfcGh5X2luZm8ge1xcbiAgMzg6XFx0XFx0dTMyIGdwaHlfcG9ydF9tYXNrO1xcbiAgMzk6XFx0XFx0dTMyIGVwaHlfZW5hYmxlX21hc2s7XFxuICA0MDpcXHRcXHR1MzIgZXBoeV9wb3J0X21hc2s7XFxuICA0MTpcXHRcXHR1MzIgZXBoeV9iaWFzX2JpdDtcXG4gIDQyOlxcdFxcdGNvbnN0IHUzMiAqZXBoeV9vZmZzZXQ7XFxuICA0MzpcXHR9O1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgYjUzX21tYXBfcHJpdiB7XFxuICA0NjpcXHRcXHR2b2lkIF9faW9tZW0gKnJlZ3M7XFxuICA0NzpcXHRcXHRzdHJ1Y3QgcmVnbWFwICpncGlvX2N0cmw7XFxuICA0ODpcXHRcXHRjb25zdCBzdHJ1Y3QgYjUzX3BoeV9pbmZvICpwaHlfaW5mbztcXG4gIDQ5OlxcdFxcdHUzMiBwaHlzX2VuYWJsZWQ7XFxuICA1MDpcXHR9O1xcbiAgNTE6XFx0XFxuICA1MjpcXHRzdGF0aWMgY29uc3QgdTMyIGJjbTYzMThfZXBoeV9vZmZzZXRzW10gPSB7NCwgNSwgNiwgN307XFxuICA1MzpcXHRcXG4gIDU0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYjUzX3BoeV9pbmZvIGJjbTYzMThfZXBoeV9pbmZvID0ge1xcbiAgNTU6XFx0XFx0LmVwaHlfZW5hYmxlX21hc2sgPSBCSVQoMCkgfCBCSVQoNCkgfCBCSVQoOCkgfCBCSVQoMTIpIHwgQklUKDE2KSxcXG4gIDU2OlxcdFxcdC5lcGh5X3BvcnRfbWFzayA9IEdFTk1BU0soKEFSUkFZX1NJWkUoYmNtNjMxOF9lcGh5X29mZnNldHMpIC0gMSksIDApLFxcbiAgNTc6XFx0XFx0LmVwaHlfYmlhc19iaXQgPSAyNCxcXG4gIDU4OlxcdFxcdC5lcGh5X29mZnNldCA9IGJjbTYzMThfZXBoeV9vZmZzZXRzLFxcbiAgNTk6XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0c3RhdGljIGNvbnN0IHUzMiBiY202MzY4X2VwaHlfb2Zmc2V0c1tdID0gezIsIDMsIDQsIDV9O1xcbiAgNjI6XFx0XFxuICA2MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGI1M19waHlfaW5mbyBiY202MzY4X2VwaHlfaW5mbyA9IHtcXG4gIDY0OlxcdFxcdC5lcGh5X2VuYWJsZV9tYXNrID0gQklUKDApLFxcbiAgNjU6XFx0XFx0LmVwaHlfcG9ydF9tYXNrID0gR0VOTUFTSygoQVJSQVlfU0laRShiY202MzY4X2VwaHlfb2Zmc2V0cykgLSAxKSwgMCksXFxuICA2NjpcXHRcXHQuZXBoeV9iaWFzX2JpdCA9IDAsXFxuICA2NzpcXHRcXHQuZXBoeV9vZmZzZXQgPSBiY202MzY4X2VwaHlfb2Zmc2V0cyxcXG4gIDY4OlxcdH07XFxuICA2OTpcXHRcXG4gIDcwOlxcdHN0YXRpYyBjb25zdCB1MzIgYmNtNjMyNjhfZXBoeV9vZmZzZXRzW10gPSB7NCwgOSwgMTR9O1xcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGI1M19waHlfaW5mbyBiY202MzI2OF9lcGh5X2luZm8gPSB7XFxuICA3MzpcXHRcXHQuZ3BoeV9wb3J0X21hc2sgPSBCSVQoMyksXFxuICA3NDpcXHRcXHQuZXBoeV9lbmFibGVfbWFzayA9IEdFTk1BU0soNCwgMCksXFxuICA3NTpcXHRcXHQuZXBoeV9wb3J0X21hc2sgPSBHRU5NQVNLKChBUlJBWV9TSVpFKGJjbTYzMjY4X2VwaHlfb2Zmc2V0cykgLSAxKSwgMCksXFxuICA3NjpcXHRcXHQuZXBoeV9iaWFzX2JpdCA9IDI0LFxcbiAgNzc6XFx0XFx0LmVwaHlfb2Zmc2V0ID0gYmNtNjMyNjhfZXBoeV9vZmZzZXRzLFxcbiAgNzg6XFx0fTtcXG4gIDc5OlxcdFxcbiAgODA6XFx0c3RhdGljIGludCBiNTNfbW1hcF9yZWFkOChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU4ICp2YWwpXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRzdHJ1Y3QgYjUzX21tYXBfcHJpdiAqcHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG4gIDgzOlxcdFxcdHZvaWQgX19pb21lbSAqcmVncyA9IHByaXYtXFx1MDAzZXJlZ3M7XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdCp2YWwgPSByZWFkYihyZWdzICsgKHBhZ2UgXFx1MDAzY1xcdTAwM2MgOCkgKyByZWcpO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRyZXR1cm4gMDtcXG4gIDg4OlxcdH1cXG4gIDg5OlxcdFxcbiAgOTA6XFx0c3RhdGljIGludCBiNTNfbW1hcF9yZWFkMTYoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MTYgKnZhbClcXG4gIDkxOlxcdHtcXG4gIDkyOlxcdFxcdHN0cnVjdCBiNTNfbW1hcF9wcml2ICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbiAgOTM6XFx0XFx0dm9pZCBfX2lvbWVtICpyZWdzID0gcHJpdi1cXHUwMDNlcmVncztcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0aWYgKFdBUk5fT04ocmVnICUgMikpXFxuICA5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0aWYgKGRldi1cXHUwMDNlcGRhdGEgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VwZGF0YS1cXHUwMDNlYmlnX2VuZGlhbilcXG4gIDk5OlxcdFxcdFxcdCp2YWwgPSBpb3JlYWQxNmJlKHJlZ3MgKyAocGFnZSBcXHUwMDNjXFx1MDAzYyA4KSArIHJlZyk7XFxuIDEwMDpcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjU3LjEwMTg0MjYzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk5ODEwMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFN5emthbGxlciBQbGF0Zm9ybSBEZXZpY2UgTXVzaW5ncyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgc3l6a2FsbGVyIGhhbmRsZXMgcGxhdGZvcm0gZGV2aWNlcyBmb3IgdGhpcyBkcml2ZXIuIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgeWVhaCwgaXQgKmNhbiogaW5zdGFudGlhdGUgdGhlbSwgcmlnaHQ/IFByb2JhYmx5IHVzaW5nIGBzeXpfZGV2bWVtYCBvciBzb21ldGhpbmcgY29tcGFyYWJsZSwgb3IgZXZlbiBieSBpbmplY3RpbmcgZGV2aWNlIHRyZWUgbm9kZXMuIFRoYXQncyB0aGUgdHlwaWNhbCBhcHByb2FjaC4gQnV0IHRoZW4gSSBxdWlja2x5IHJlbWVtYmVyIHN5emthbGxlcidzIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25zLCBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBzbyBvbi4gRm9yIHBsYXRmb3JtIGRldmljZXMsIHRob3VnaCwgaXQgdXN1YWxseSBzdGlja3MgdG8gZWl0aGVyIGBzeXpfaW5pdF9uZXRfZGV2aWNlYCwgc2ltaWxhciB2aXJ0dWFsIGRldmljZXMsIG9yIHRoYXQgc29ydCBvZiB0aGluZy5cblxuTm93IHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHN5emthbGxlciBldmVuICpmdXp6KiBEU0EgZHJpdmVycyBzcGVjaWZpY2FsbHk/IEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgY292ZXJhZ2UuIFNvLCBJIGhhdmUgdG8gY2hlY2sgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gc2VlIGlmIERTQSBpcyBldmVuIHJlcHJlc2VudGVkLiBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTExLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NTA6MDEuNDAxNjU1ODY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTkzNzg1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYjUzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjUwOjAxLjQ5MzYwMzE4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkxNzE3NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN5emthbGxlci1SZWxhdGVkIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoZXNlIHN5emthbGxlciBkZXNjcmlwdGlvbnMsIHRoZXkncmUgbm90IGFjdHVhbGx5ICppbiogdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgYXJlIHRoZXk/IEJ1dCB0aGlzIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3LlwiIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBzeXprYWxsZXIgaGFzIGVpdGhlciBmbGFnZ2VkIGEgYnVnIGhlcmUsIG9yIHNvbWVvbmUncyBydW5uaW5nIHNvbWUga2luZCBvZiBzeXprYWxsZXItcmVsYXRlZCBwYXRjaCB0ZXN0aW5nLlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGV2ZW4gcmVhY2hhYmxlLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgY2hhbmdpbmcgYHJldHVybiAwO2AgdG8gYHJldHVybiByZXQ7YCB3aXRoaW4gYGI1M19mZGJfZHVtcGAuIE5vdywgd2hlcmUgaXMgYGI1M19mZGJfZHVtcGAgY2FsbGVkIGZyb20/IEFoLCBpdCdzIGNhbGxlZCBmcm9tIGBkc2FfcG9ydF9mZGJfZHVtcGAuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGVyZSB0aGlzIG1pZ2h0IGJlIHRyaWdnZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI1NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo1MDowNS4yODUzMjUyMzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjMyOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBvcnRfZmRiX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL3BvcnQuYz0xMTM1PWludCBkc2FfcG9ydF9sYWdfZmRiX2RlbChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxcbi0tXFxubmV0L2RzYS9wb3J0LmMtMTE1My1cXG5uZXQvZHNhL3BvcnQuYzoxMTU0OmludCBkc2FfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBkc2FfZmRiX2R1bXBfY2JfdCAqY2IsIHZvaWQgKmRhdGEpXFxubmV0L2RzYS9wb3J0LmMtMTE1NS17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xMTU4LVxcbm5ldC9kc2EvcG9ydC5jOjExNTk6XFx0aWYgKCFkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X2ZkYl9kdW1wKVxcbm5ldC9kc2EvcG9ydC5jLTExNjAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbm5ldC9kc2EvcG9ydC5jLTExNjEtXFxubmV0L2RzYS9wb3J0LmM6MTE2MjpcXHRyZXR1cm4gZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9mZGJfZHVtcChkcywgcG9ydCwgY2IsIGRhdGEpO1xcbm5ldC9kc2EvcG9ydC5jLTExNjMtfVxcbi0tXFxubmV0L2RzYS9wb3J0Lmg9NjM9aW50IGRzYV9wb3J0X2xhZ19mZGJfZGVsKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXFxubmV0L2RzYS9wb3J0LmgtNjQtXFx0XFx0XFx0IHUxNiB2aWQpO1xcbm5ldC9kc2EvcG9ydC5oOjY1OmludCBkc2FfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBkc2FfZmRiX2R1bXBfY2JfdCAqY2IsIHZvaWQgKmRhdGEpO1xcbm5ldC9kc2EvcG9ydC5oLTY2LWludCBkc2FfcG9ydF9tZGJfYWRkKGNvbnN0IHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz01NTk9ZHNhX3VzZXJfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L2RzYS91c2VyLmMtNTcxLVxcbm5ldC9kc2EvdXNlci5jOjU3MjpcXHRlcnIgPSBkc2FfcG9ydF9mZGJfZHVtcChkcCwgZHNhX3VzZXJfcG9ydF9mZGJfZG9fZHVtcCwgXFx1MDAyNmR1bXApO1xcbm5ldC9kc2EvdXNlci5jLTU3My1cXHQqaWR4ID0gZHVtcC5pZHg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjUwOjA1LjMzNTk2NzM5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjEyNTI2MzM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgZHNhX3VzZXJfZmRiX2R1bXBgIGluIFN5emthbGxlcidzIFFFTVUgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBgZHNhX3VzZXJfZmRiX2R1bXBgIGlzIHRyaWdnZXJlZCB0aHJvdWdoIG5ldGxpbmssIHdoaWNoIG1lYW5zIHVzZXJzcGFjZSBjYW4gcmVhY2ggaXQgKmlmKiB0aGUgZGV2aWNlIGV4aXN0cy4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgYGI1M2AgZGV2aWNlIGV2ZW4gZXhpc3QgaW4gU3l6a2FsbGVyJ3MgUUVNVSBlbnZpcm9ubWVudD8gU3l6a2FsbGVyJ3MgcnVubmluZyBpbiBRRU1VLCBzbyBpdCB3b24ndCBiZSByZWFjaGFibGUgdW5sZXNzIHRoZSBgYjUzYCBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCBzb21laG93LlxuXG5Db3VsZCBgc3l6X2Rldm1lbWAgb3Igc29tZXRoaW5nIHNpbWlsYXIgY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlPyBPciBtYXliZSBgZHNhX2xvb3BgPyBOb3BlLCBgZHNhX2xvb3BgIHVzZXMgYGRzYV9sb29wX29wc2AsIG5vdCBkaXJlY3RseSB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGI1M2AgbWlnaHQgYmUgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZS4gSXMgaXQgdGllZCB0byBhIHZpcnR1YWwgYnVzLCBvciBpcyBpdCBwdXJlbHkgcGh5c2ljYWw/XG5cbkFoYSwgYGI1M19tbWFwLmNgIGlzIGEgcGxhdGZvcm0gZHJpdmVyLiBQbGF0Zm9ybSBkcml2ZXJzICpjYW4qIHNvbWV0aW1lcyBiZSBjcmVhdGVkIGZyb20gdXNlcnNwYWNlLi4uIGJ1dCBub3QgdmlhIGAvc3lzL2J1cy9wbGF0Zm9ybS9uZXdfZGV2aWNlYCwgdGhhdCdzIG5vdCBob3cgaXQgd29ya3MuIFdhaXQsIEkgdGhpbmsgU3l6a2FsbGVyIGNhbiBpbmplY3QgZGV2aWNlIHRyZWUgb3ZlcmxheXMuLi4gb3IgbWF5YmUgdGhyb3VnaCBgc3l6X21vdW50X2ltYWdlYD8gVGhhdCBjYW4gbW91bnQgaW1hZ2VzLCBidXQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgcmVxdWlyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBzbyBJIGNhbid0IGJlIHN1cmUuXG5cbkhhbmcgb24uLi4gaXNuJ3QgYGI1M2AgYW4gTURJTyBkcml2ZXI/IE5vLCBgYjUzX21kaW8uY2AgaXMgdGhlIE1ESU8gb25lLiBDYW4gTURJTyBkZXZpY2VzIGJlIGluc3RhbnRpYXRlZCBmcm9tIHVzZXJzcGFjZT8gVXN1YWxseSBub3QuXG5cbkJ1dC4uLiB3YWl0IGEgc2Vjb25kLiBJcyB0aGlzIHBhdGNoIGV2ZW4gZml4aW5nIGEgYnVnIHRoYXQgd291bGQgYmUgdHJpZ2dlcmVkIGluIHRoaXMgZW52aXJvbm1lbnQ/IE1heWJlIGl0J3MgYSBzdGF0aWMgYW5hbHl6ZXIgZmluZGluZyBvciBzb21ldGhpbmcgdGhhdCBvbmx5IGFmZmVjdHMgcmVhbCBoYXJkd2FyZT8gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0IGNvbmNlcm5zOiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgb3IgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIFFFTVUuXG5cbklzIGBiNTNgIGEgdmVuZG9yLXNwZWNpZmljIHN3aXRjaCBkcml2ZXIgdGhhdCBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZT8gWWVzLCBpdCdzIEJyb2FkY29tIEJDTTUzeHguIExldCdzIHNlZSBpZiBRRU1VIGVtdWxhdGVzIEJDTTUzeHguIE5vcGUsIHN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoYXQgc3BlY2lmaWMgQnJvYWRjb20gY2hpcC5cblxuQnV0IHdhaXQsIFFFTVUgKmRvZXMqIGVtdWxhdGUgc29tZSBCcm9hZGNvbSBib2FyZHMsIGxpa2UgYHJhc3BpYCAoUmFzcGJlcnJ5IFBpKSBvciBgYmNtMjgzNWAuIERvIHRob3NlIGhhdmUgYSBCQ001M3h4IHN3aXRjaD8gTm8sIG5laXRoZXIgb2YgdGhlbSBkby4gV2hhdCBhYm91dCBgYmNtNTN4eGA/IFFFTVUgZG9lc24ndCBoYXZlIGEgc3BlY2lmaWMgYGJjbTUzeHhgIG1hY2hpbmUgdHlwZS5cblxuT2theSwgc28gSSdtIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHF1ZXN0aW9uLiBJcyB0aGVyZSAqYW55KiB3YXkgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBRRU1VPyBJJ2QgY2hlY2sgdGhlIFFFTVUgc291cmNlIGZvciBgYjUzYCwgYnV0IEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdC5cblxuTGV0J3Mgc2VlIGlmIGl0J3MgYSBQQ0kgZGV2aWNlLiBgYjUzX21tYXBgIGlzIHBsYXRmb3JtLiBgYjUzX21kaW9gIGlzIE1ESU8uIGBiNTNfc3BpYCBpcyBTUEkuIGBiNTNfc3JhYmAgaXMgcGxhdGZvcm0uIFNvLCBub25lIG9mIHRoZXNlIGFyZSBQQ0kuIENhbiBJIHNvbWVob3cgdXNlIGBzcGlkZXZgIHRvIHNpbXVsYXRlIGEgZGV2aWNlPyBObywgdGhhdCdzIGp1c3QgYSB1c2VyLXNwYWNlIGludGVyZmFjZSB0byBTUEksIG5vdCBkZXZpY2UgZW11bGF0aW9uLlxuXG5XYWl0LCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgc2ltdWxhdG9ycyBmb3IgSTJDLCBTUEksIHRoaW5ncyBsaWtlIHRoYXQsIHJpZ2h0PyBJJ20gdGhpbmtpbmcgb2YgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYHZoY2lgIGZvciBVU0IsIGB1aW5wdXRgIGZvciBpbnB1dCwgYHZrbXNgIGZvciBEUk0sIGBuZXRkZXZzaW1gIGZvciBuZXR3b3JraW5nLiBJcyB0aGVyZSBhIHNpbXVsYXRvciBmb3IgRFNBPyBZZXMsIHRoZXJlJ3MgYGRzYV9sb29wYC4gSSBzaG91bGQgY2hlY2sgdGhhdCBvbmUgb3V0LiBMZXQgbWUgbG9vayBhdCBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjUwOjE3LjQ2MTIzNDk2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwMzc5MDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImI1M1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NTA6MTcuNTIwMjgxNzE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzUwNTQ2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGI1M2AgRHJpdmVyIGFuZCBpdHMgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayB0aGlzIGRvd24uIGBkc2FfbG9vcGAgaXMganVzdCBhIG1vY2sgZHJpdmVyOyBpdCdzIG5vdCBhY3R1YWxseSB1c2luZyBgYjUzYC4gVGhpcyBtZWFucyBgYjUzYCBpcyBkZWZpbml0ZWx5IGhhcmR3YXJlLXNwZWNpZmljLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZSBCcm9hZGNvbSBCQ001M3h4IHN3aXRjaCwgYW5kIHRoYXQgbWVhbnMgd2UgY2FuJ3QgZ2V0IHRvIGl0IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBzdGFuZGFyZCBRRU1VLiBJdCBuZWVkcyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBmdXp6aW5nIHdvdWxkIGJlIGltcG9zc2libGUgb3IgcG9pbnRsZXNzLlxuXG5CdXQgaG9sZCBvbiwgbGV0IG1lIGJlIHRob3JvdWdoLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgbG9vcGhvbGVzLiBDb3VsZCBgYjUzX2ZkYl9kdW1wYCBiZSBjYWxsZWQgZnJvbSAqc29tZXdoZXJlKiBlbHNlLCBwZXJoYXBzIGluZGlyZWN0bHk/IE5vcGUsIGl0J3MgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgYGI1M19tbWFwYCwgYGI1M19tZGlvYCwgYGI1M19zcGlgLCBhbmQgYGI1M19zcmFiYC4gQW5kIGEgcXVpY2sgZ2xhbmNlIGF0IHRob3NlIGNvbmZpcm1zIGl0IC0gdGhleSdyZSBhbGwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmNgLiBBaCwgeWVzLCBjb25maXJtZWQuIE5vdGhpbmcgdGhlcmUgdGhhdCBkZXZpYXRlcyBmcm9tIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBuYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NTA6MjIuNDU1MzM5OTc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qXFxuICAgMjpcXHQgKiBCNTMgcmVnaXN0ZXIgYWNjZXNzIHRocm91Z2ggTUlJIHJlZ2lzdGVyc1xcbiAgIDM6XFx0ICpcXG4gICA0OlxcdCAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEpvbmFzIEdvcnNraSBcXHUwMDNjam9nb0BvcGVud3J0Lm9yZ1xcdTAwM2VcXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcXG4gICA3OlxcdCAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmVcXG4gICA4OlxcdCAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXFxuICAgOTpcXHQgKlxcbiAgMTA6XFx0ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFxcXCJBUyBJU1xcXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXFxuICAxMTpcXHQgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXFxuICAxMjpcXHQgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxcbiAgMTM6XFx0ICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xcbiAgMTQ6XFx0ICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXFxuICAxNTpcXHQgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRlxcbiAgMTY6XFx0ICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cXG4gIDE3OlxcdCAqL1xcbiAgMTg6XFx0XFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICAyMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAyMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAgMjQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JyY21waHkuaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuICAyNzpcXHRcXG4gIDI4OlxcdCNpbmNsdWRlIFxcXCJiNTNfcHJpdi5oXFxcIlxcbiAgMjk6XFx0XFxuICAzMDpcXHQvKiBNSUkgcmVnaXN0ZXJzICovXFxuICAzMTpcXHQjZGVmaW5lIFJFR19NSUlfUEFHRSAgICAweDEwICAgIC8qIE1JSSBQYWdlIHJlZ2lzdGVyICovXFxuICAzMjpcXHQjZGVmaW5lIFJFR19NSUlfQUREUiAgICAweDExICAgIC8qIE1JSSBBZGRyZXNzIHJlZ2lzdGVyICovXFxuICAzMzpcXHQjZGVmaW5lIFJFR19NSUlfREFUQTAgICAweDE4ICAgIC8qIE1JSSBEYXRhIHJlZ2lzdGVyIDAgKi9cXG4gIDM0OlxcdCNkZWZpbmUgUkVHX01JSV9EQVRBMSAgIDB4MTkgICAgLyogTUlJIERhdGEgcmVnaXN0ZXIgMSAqL1xcbiAgMzU6XFx0I2RlZmluZSBSRUdfTUlJX0RBVEEyICAgMHgxYSAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAyICovXFxuICAzNjpcXHQjZGVmaW5lIFJFR19NSUlfREFUQTMgICAweDFiICAgIC8qIE1JSSBEYXRhIHJlZ2lzdGVyIDMgKi9cXG4gIDM3OlxcdFxcbiAgMzg6XFx0I2RlZmluZSBSRUdfTUlJX1BBR0VfRU5BQkxFICAgICBCSVQoMClcXG4gIDM5OlxcdCNkZWZpbmUgUkVHX01JSV9BRERSX1dSSVRFICAgICAgQklUKDApXFxuICA0MDpcXHQjZGVmaW5lIFJFR19NSUlfQUREUl9SRUFEICAgICAgIEJJVCgxKVxcbiAgNDE6XFx0XFxuICA0MjpcXHRzdGF0aWMgaW50IGI1M19tZGlvX29wKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTE2IG9wKVxcbiAgNDM6XFx0e1xcbiAgNDQ6XFx0XFx0aW50IGk7XFxuICA0NTpcXHRcXHR1MTYgdjtcXG4gIDQ2OlxcdFxcdGludCByZXQ7XFxuICA0NzpcXHRcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2LVxcdTAwM2Vwcml2O1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VjdXJyZW50X3BhZ2UgIT0gcGFnZSkge1xcbiAgNTA6XFx0XFx0XFx0Lyogc2V0IHBhZ2UgbnVtYmVyICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjUwOjIyLjQ1NTQzNDI1NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzI0MTUwMDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1ESU8gRHJpdmVyIEZ1enppbmcgQ29uY2VybnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGZvciBhbiBNRElPIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gd2UgZXZlbiBmdXp6IE1ESU8gZGV2aWNlcyB3aXRoIHN5emthbGxlcj8gVGhlIHByb2JsZW0gaXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGJ1aWx0LWluLCBnZW5lcmljIHdheSB0byBjcmVhdGUgdmlydHVhbCBNRElPIGRldmljZXMuIEkgbWVhbiwgaXQgaGFzIHRoaW5ncyBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgLCBidXQgbm90aGluZyBzcGVjaWZpYyBmb3IgTURJTyB0byBqdXN0IHNwaW4gdXAgYXJiaXRyYXJ5IGRldmljZXMgZm9yIHRlc3RpbmcuXG5cblRoZW4gSSByZS1yZWFkIHRoZSBwcm9tcHQsIGFuZCBpdCBzYXlzIFwiV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLlwiIEkgc2VlIHRoZSBzaW1pbGFyaXRpZXMsIGV2ZW4gdGhvdWdoIHRoaXMgaXNuJ3QgUENJZS4gSXQncyBhIHZlbmRvci1zcGVjaWZpYyBzd2l0Y2ggZHJpdmVyIOKAkyBhIEJyb2FkY29tIEJDTTUzeHgg4oCTIHdoaWNoIGlzIGp1c3QgdGhlIHNhbWUuIEl0IHJlbGllcyBvbiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzbid0IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBzbyBpdCBmYWxscyBpbnRvIHRoZSBzYW1lIGNhdGVnb3J5IGFzIHRob3NlIGRyaXZlcnMgdGhleSBtZW50aW9uLlxuXG5MZXQgbWUgcXVpY2tseSBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgKm9ubHkqIGZpbGUgdG91Y2hlZCBieSB0aGUgcGF0Y2guIFllcCwgaXQncyBqdXN0IGBkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY2AuXG5cbkdpdmVuIHRoYXQsIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjk1LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjUwOjI4LjE3OTU4Njk0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiNTNfZmRiX2R1bXAgZnVuY3Rpb24gaW4gdGhlIEJyb2FkY29tIEJDTTUzeHggRFNBIHN3aXRjaCBkcml2ZXIgKGI1MykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgc3dpdGNoIGhhcmR3YXJlIChjb25uZWN0ZWQgdmlhIE1ESU8sIE1NQVAsIFNQSSwgb3IgU1JBQikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGI1M19mZGJfZHVtcCBmdW5jdGlvbiBpbiB0aGUgQnJvYWRjb20gQkNNNTN4eCBEU0Egc3dpdGNoIGRyaXZlciAoYjUzKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgKGNvbm5lY3RlZCB2aWEgTURJTywgTU1BUCwgU1BJLCBvciBTUkFCKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo1MDoyOC4xNzk2MTgzMTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zx85[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 20:48:10 +0000 UTC FinishedAt: 2026-08-12 20:50:30 +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+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGI1M19mZGJfZHVtcCBmdW5jdGlvbiBpbiB0aGUgQnJvYWRjb20gQkNNNTN4eCBEU0Egc3dpdGNoIGRyaXZlciAoYjUzKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgKGNvbm5lY3RlZCB2aWEgTURJTywgTU1BUCwgU1BJLCBvciBTUkFCKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTYwZDJiMmE5ZWUzZjU2NjYyM2VhZGFhMjAyZTFiNzI2ZTFjZjk1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDIwOjQ5OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcbmluZGV4IDNmNWI5NTkyNzk0ZGEuLjA4ODAzMTBjOWNlM2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcbkBAIC0yMjE5LDcgJiM0MzsyMjE5LDcgQEAgaW50IGI1M19mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXJsX211dGV4KTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0woYjUzX2ZkYl9kdW1wKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGI1M19mZGJfZHVtcCBmdW5jdGlvbiBpbiB0aGUgQnJvYWRjb20gQkNNNTN4eCBEU0Egc3dpdGNoIGRyaXZlciAoYjUzKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgKGNvbm5lY3RlZCB2aWEgTURJTywgTU1BUCwgU1BJLCBvciBTUkFCKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTYwZDJiMmE5ZWUzZjU2NjYyM2VhZGFhMjAyZTFiNzI2ZTFjZjk1NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDIwOjQ5OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwppbmRleCAzZjViOTU5Mjc5NGRhLi4wODgwMzEwYzljZTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwpAQCAtMjIxOSw3ICYjNDM7MjIxOSw3IEBAIGludCBiNTNfZmRiX2R1bXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAogCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2FybF9tdXRleCk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woYjUzX2ZkYl9kdW1wKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBGaXgqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nOiB0aGVyZSYjMzk7cyBhIHBhdGNoIGFmZmVjdGluZyB0aGUgYGI1M19mZGJfZHVtcGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGEgdmVyeSBzaW1wbGUgb25lOiBpdCYjMzk7cyBhbHRlcmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgd2FzIGhhcmRjb2RlZCB0byBgcmV0dXJuIDA7YCwgZXNzZW50aWFsbHkgaW5kaWNhdGluZyBzdWNjZXNzIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBhY3R1YWxseSBoYXBwZW5lZCBpbnRlcm5hbGx5LiBOb3csIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgY2hhbmdlZCB0byBgcmV0dXJuIHJldDtgLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGByZXRgIGlzIGEgdmFyaWFibGUgaG9sZGluZyB0aGUgKmFjdHVhbCogcmV0dXJuIGNvZGUgb3IgZXJyb3IgaW5kaWNhdGlvbiBmcm9tIHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24uIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGdvaW5nIGZyb20gYmxpbmRseSBhc3N1bWluZyBzdWNjZXNzIHRvIHJlcG9ydGluZyB0aGUgcmVhbCBvdXRjb21lLiBHaXZlbiB0aGlzIGNoYW5nZSBJJiMzOTttIGZhaXJseSBjZXJ0YWluIHRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiB3YXMgaGlkaW5nIGFuIHVuZGVybHlpbmcgcHJvYmxlbS4gVGhpcyBtYWtlcyBzZW5zZSwgYmVjYXVzZSB5b3Ugd291bGQgb25seSBtYWtlIHRoaXMgY2hhbmdlIGlmIHlvdSB3ZXJlIHRyeWluZyB0byBmaXggYSBidWcgb3IgZ2V0IG1vcmUgaW5mb3JtYXRpb24uIFdlJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBgYjUzX2ZkYl9kdW1wYCBmdW5jdGlvbiBhbmQgd2hhdCBgcmV0YCByZXByZXNlbnRzIHRvIGZ1bGx5IGdyYXNwIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcyBwYXRjaCBhbmQgZW5zdXJlIGl0JiMzOTtzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YjUzX2ZkYl9kdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM9MjE2Nz1zdGF0aWMgaW50IGI1M19mZGJfY29weShpbnQgcG9ydCwgY29uc3Qgc3RydWN0IGI1M19hcmxfZW50cnkgKmVudCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yMTgxLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjE4MjppbnQgYjUzX2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yMTgzLVx0XHQgZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTIyMjMtfVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjIyNDpFWFBPUlRfU1lNQk9MKGI1M19mZGJfZHVtcCk7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yMjI1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTI3MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBiNTNfc3dpdGNoX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yNzI2LVx0LnBvcnRfdmxhbl9kZWxcdFx0PSBiNTNfdmxhbl9kZWwsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzoyNzI3Olx0LnBvcnRfZmRiX2R1bXBcdFx0PSBiNTNfZmRiX2R1bXAsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yNzI4LVx0LnBvcnRfZmRiX2FkZFx0XHQ9IGI1M19mZGJfYWRkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgYjUzX2ZkYl9kdW1wYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBiNTNfZmRiX2R1bXBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZ1bmN0aW9ucy4gR2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIGxpa2VseSBhIHV0aWxpdHkgcmVsYXRlZCB0byBlaXRoZXIgZHVtcGluZyBvciBpbnNwZWN0aW5nIGRhdGEgZnJvbSBhIEZvdW5kYXRpb25EQiAoRkRCKSBkYXRhYmFzZS4gVGhlICYjMzQ7YjUzJiMzNDsgY291bGQgYmUgYSBzcGVjaWZpYyBwcm9qZWN0IGNvZGUsIGEgdmVyc2lvbiwgb3IgcGVyaGFwcyBldmVuIGFuIGludGVybmFsIGlkZW50aWZpZXIgcmVsYXRlZCB0byB0aGUgZGF0YSBmb3JtYXQgYmVpbmcgZHVtcGVkLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGtpbmQgb2YgaW5mb3JtYXRpb24gaXQgZXhwb3NlcywgdGhlIGZvcm1hdCBvZiB0aGF0IGluZm9ybWF0aW9uIChyYXcsIHN0cnVjdHVyZWQsIGV0Yy4pLCBhbmQgdGhlIHBhcmFtZXRlcnMgaXQgYWNjZXB0cyBmb3Igc3BlY2lmeWluZyB3aGF0IHRvIGR1bXAuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIEkgY2FuIHF1ZXJ5IHNwZWNpZmljIGtleXMsIHJhbmdlcywgb3IgaWYgaXQmIzM5O3MgYW4gYWxsLW9yLW5vdGhpbmcgZHVtcC4gQWxzbywgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFyZSBzb21ldGhpbmcgSSB3aWxsIGRlZmluaXRlbHkgY29uc2lkZXIsIEkgc2hvdWxkIGRldGVybWluZSBpZiB0aGlzIGNvbW1hbmQgcmVxdWlyZXMgYXV0aGVudGljYXRpb24sIG9yIGlmIHRoZXJlIGFyZSBhbnkgcmlza3Mgb2YgYWNjaWRlbnRhbGx5IGV4cG9zaW5nIHNlbnNpdGl2ZSBkYXRhLiBLbm93aW5nIHRoZSBpbnRlcm5hbHMgd2lsbCBiZSBrZXksIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIHJlYWRpbmcgZGlyZWN0bHkgZnJvbSB0aGUgc3RvcmFnZSBlbmdpbmUsIG9yIGlmIGl0IGhhcyBzb21lIGludGVybWVkaWFyeSBsYXllci4gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgZGV0ZXJtaW5lIHRoZSByZWxpYWJpbGl0eSBhbmQgc3BlZWQgb2YgdGhlIGR1bXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE4MjpcdGludCBiNTNfZmRiX2R1bXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbjIxODM6XHRcdFx0IGRzYV9mZGJfZHVtcF9jYl90ICpjYiwgdm9pZCAqZGF0YSlcbjIxODQ6XHR7XG4yMTg1Olx0XHR1bnNpZ25lZCBpbnQgY291bnQgPSAwLCByZXN1bHRzX3Blcl9oaXQgPSAxO1xuMjE4NjpcdFx0c3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuMjE4NzpcdFx0c3RydWN0IGI1M19hcmxfZW50cnkgcmVzdWx0c1syXTtcbjIxODg6XHRcdGludCByZXQ7XG4yMTg5Olx0XG4yMTkwOlx0XHRpZiAocHJpdi1cdTAwM2VudW1fYXJsX2JpbnMgXHUwMDNlIDIpXG4yMTkxOlx0XHRcdHJlc3VsdHNfcGVyX2hpdCA9IDI7XG4yMTkyOlx0XG4yMTkzOlx0XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXJsX211dGV4KTtcbjIxOTQ6XHRcbjIxOTU6XHRcdC8qIFN0YXJ0IHNlYXJjaCBvcGVyYXRpb24gKi9cbjIxOTY6XHRcdGI1M193cml0ZV9hcmxfc3JjaF9jdGwocHJpdiwgQVJMX1NSQ0hfU1RETik7XG4yMTk3Olx0XG4yMTk4Olx0XHRkbyB7XG4yMTk5Olx0XHRcdHJldCA9IGI1M19hcmxfc2VhcmNoX3dhaXQocHJpdik7XG4yMjAwOlx0XHRcdGlmIChyZXQpXG4yMjAxOlx0XHRcdFx0YnJlYWs7XG4yMjAyOlx0XG4yMjAzOlx0XHRcdGI1M19hcmxfc2VhcmNoX3JlYWQocHJpdiwgMCwgXHUwMDI2cmVzdWx0c1swXSk7XG4yMjA0Olx0XHRcdHJldCA9IGI1M19mZGJfY29weShwb3J0LCBcdTAwMjZyZXN1bHRzWzBdLCBjYiwgZGF0YSk7XG4yMjA1Olx0XHRcdGlmIChyZXQpXG4yMjA2Olx0XHRcdFx0YnJlYWs7XG4yMjA3Olx0XG4yMjA4Olx0XHRcdGlmIChyZXN1bHRzX3Blcl9oaXQgPT0gMikge1xuMjIwOTpcdFx0XHRcdGI1M19hcmxfc2VhcmNoX3JlYWQocHJpdiwgMSwgXHUwMDI2cmVzdWx0c1sxXSk7XG4yMjEwOlx0XHRcdFx0cmV0ID0gYjUzX2ZkYl9jb3B5KHBvcnQsIFx1MDAyNnJlc3VsdHNbMV0sIGNiLCBkYXRhKTtcbjIyMTE6XHRcdFx0XHRpZiAocmV0KVxuMjIxMjpcdFx0XHRcdFx0YnJlYWs7XG4yMjEzOlx0XG4yMjE0Olx0XHRcdFx0aWYgKCFyZXN1bHRzWzBdLmlzX3ZhbGlkIFx1MDAyNlx1MDAyNiAhcmVzdWx0c1sxXS5pc192YWxpZClcbjIyMTU6XHRcdFx0XHRcdGJyZWFrO1xuMjIxNjpcdFx0XHR9XG4yMjE3Olx0XG4yMjE4Olx0XHR9IHdoaWxlIChjb3VudCYjNDM7JiM0MzsgXHUwMDNjIGI1M19tYXhfYXJsX2VudHJpZXMocHJpdikgLyByZXN1bHRzX3Blcl9oaXQpO1xuMjIxOTpcdFxuMjIyMDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXJsX211dGV4KTtcbjIyMjE6XHRcbjIyMjI6XHRcdHJldHVybiByZXQ7XG4yMjIzOlx0fVxuMjIyNDpcdEVYUE9SVF9TWU1CT0woYjUzX2ZkYl9kdW1wKTtcbjIyMjU6XHRcbjIyMjY6XHRpbnQgYjUzX21kYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbjIyMjc6XHRcdFx0Y29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYixcbjIyMjg6XHRcdFx0c3RydWN0IGRzYV9kYiBkYilcbjIyMjk6XHR7XG4yMjMwOlx0XHRzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4yMjMxOlx0XHRpbnQgcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCcm9hZGNvbSBCNTMgRFNBIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBEU0EgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIEJyb2FkY29tIEI1MyBzd2l0Y2hlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIEkgZXZlbiAqdG91Y2gqIHRoaXMgdGhpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VPyYjMzQ7IERTQSBkcml2ZXJzIGFyZSBub3RvcmlvdXNseSBoYXJkd2FyZS1zcGVjaWZpYywgcmlnaHQ/IFRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIGludGVyZmFjZSBkaXJlY3RseSB3aXRoIHRoZSBzd2l0Y2ggQVNJQy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IGNoYW5jZSBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gaGVyZSwgb3IgaWYgdGhpcyBpcyBhIHB1cmVseSBoYXJkd2FyZSBwbGF5LiBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyB0aGUgbGF0dGVyLCBnaXZlbiBteSBleHBlcmllbmNlLiBCZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGltbWVkaWF0ZWx5IGdvIGRpZ2dpbmcgaW4gdGhlIGBkcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O2xsIGJlIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGUgZHJpdmVyJiMzOTtzIGNhcGFiaWxpdGllcyBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCNTMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWc6MjptZW51Y29uZmlnIEI1M1xuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBCQ001M3h4IG1hbmFnZWQgc3dpdGNoIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMTQtXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWc6MTU6Y29uZmlnIEI1M19TUElfRFJJVkVSXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMTYtXHR0cmlzdGF0ZSBcJiMzNDtCNTMgU1BJIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTIwLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjIxOmNvbmZpZyBCNTNfTURJT19EUklWRVJcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O0I1MyBNRElPIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTI2LVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjI3OmNvbmZpZyBCNTNfTU1BUF9EUklWRVJcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0yOC1cdHRyaXN0YXRlIFwmIzM0O0I1MyBNTUFQIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTM0LVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjM1OmNvbmZpZyBCNTNfU1JBQl9EUklWRVJcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0zNi1cdHRyaXN0YXRlIFwmIzM0O0I1MyBTUkFCIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTQzLVxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjQ0OmNvbmZpZyBCNTNfU0VSREVTXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtCNTMgU2VyRGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzEwCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4cGxvcmluZyBCcm9hZGNvbSBCQ001M3h4IFN3aXRjaCBTdXBwb3J0IGluIFFFTVUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHN1cHBvcnRpbmcgdGhlIEJyb2FkY29tIEJDTTUzeHggbWFuYWdlZCBzd2l0Y2guIFRoaXMgaXMgZGVmaW5pdGVseSBhIGhhcmR3YXJlIGNvbXBvbmVudCwgbm90IHNvbWV0aGluZyB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSBzb21laG93IGludGVyYWN0IHdpdGggdGhlIERTQSBkcml2ZXJzIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IENhbiBJIHVzZSBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzb21ldGhpbmcgc2ltaWxhcj8KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgRFNBIGRyaXZlcnMgYXJlIHR5cGljYWxseSB0aWVkIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvZiB0aGUgc3dpdGNoIGNoaXAuIEkmIzM5O20gd29uZGVyaW5nLCBpcyB0aGVyZSBzb21lIGtpbmQgb2YgZHVtbXkgRFNBIGRyaXZlciB0aGF0IEkgY291bGQgcG90ZW50aWFsbHkgbGV2ZXJhZ2U/IEFoLCB5ZXMhIGBkc2FfbG9vcGAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0LiBIb3dldmVyLCBJIG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCBgYjUzYCB0byB1c2UgdGhlIEJyb2FkY29tIEJDTTUzeHguCgpUaGUgcmVhbCBjaGFsbGVuZ2UgaXMsIGhvdyBkbyBJIGFjdHVhbGx5IHJlYWNoIHRoYXQgY29kZSB3aXRoaW4gUUVNVT8gSSYjMzk7bSB0aGlua2luZywgY291bGQgSSBpbnN0YW50aWF0ZSB0aGUgZHJpdmVyIHVzaW5nIGEgZmFrZSBwbGF0Zm9ybSBkZXZpY2Ugb3IgcGVyaGFwcyBldmVuIGFuIE1ESU8gZGV2aWNlPyBJZiBJIGNhbiB0cmlnZ2VyIGBiNTNfbW1hcGAgb3IgYGI1M19tZGlvYCB0byBwcm9iZSBjb3JyZWN0bHksIHRoYXQgY291bGQgZ2l2ZSBtZSBzb21lIGtpbmQgb2YgZm9vdGhvbGQuIEl0IGxvb2tzIGxpa2UgYGI1M19tbWFwYCB1dGlsaXplcyBhIHBsYXRmb3JtIGRyaXZlciwgc28gdGhhdCBjb3VsZCBiZSB0aGUgcmlnaHQgcGF0aCB0byBwdXJzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qXG4gICAyOlx0ICogQjUzIHJlZ2lzdGVyIGFjY2VzcyB0aHJvdWdoIG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzXG4gICAzOlx0ICpcbiAgIDQ6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBKb25hcyBHb3Jza2kgXHUwMDNjam9nb0BvcGVud3J0Lm9yZ1x1MDAzZVxuICAgNTpcdCAqXG4gICA2Olx0ICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG4gICA3Olx0ICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZVxuICAgODpcdCAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXG4gICA5Olx0ICpcbiAgMTA6XHQgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCYjMzQ7QVMgSVNcJiMzNDsgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXG4gIDExOlx0ICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRlxuICAxMjpcdCAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SXG4gIDEzOlx0ICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xuICAxNDpcdCAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTlxuICAxNTpcdCAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GXG4gIDE2Olx0ICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbiAgMTc6XHQgKi9cbiAgMTg6XHRcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAgMjQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RhdGEvYjUzLmhcdTAwM2VcbiAgMjc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuICAyODpcdFxuICAyOTpcdCNpbmNsdWRlIFwmIzM0O2I1M19wcml2LmhcJiMzNDtcbiAgMzA6XHRcbiAgMzE6XHQjZGVmaW5lIEJDTTYzWFhfRVBIWV9SRUcgMHgzQ1xuICAzMjpcdCNkZWZpbmUgQkNNNjMyNjhfR1BIWV9SRUcgMHg1NFxuICAzMzpcdFxuICAzNDpcdCNkZWZpbmUgR1BIWV9DVFJMX0xPV19QV1JcdEJJVCgzKVxuICAzNTpcdCNkZWZpbmUgR1BIWV9DVFJMX0lERFFfQklBU1x0QklUKDApXG4gIDM2Olx0XG4gIDM3Olx0c3RydWN0IGI1M19waHlfaW5mbyB7XG4gIDM4Olx0XHR1MzIgZ3BoeV9wb3J0X21hc2s7XG4gIDM5Olx0XHR1MzIgZXBoeV9lbmFibGVfbWFzaztcbiAgNDA6XHRcdHUzMiBlcGh5X3BvcnRfbWFzaztcbiAgNDE6XHRcdHUzMiBlcGh5X2JpYXNfYml0O1xuICA0MjpcdFx0Y29uc3QgdTMyICplcGh5X29mZnNldDtcbiAgNDM6XHR9O1xuICA0NDpcdFxuICA0NTpcdHN0cnVjdCBiNTNfbW1hcF9wcml2IHtcbiAgNDY6XHRcdHZvaWQgX19pb21lbSAqcmVncztcbiAgNDc6XHRcdHN0cnVjdCByZWdtYXAgKmdwaW9fY3RybDtcbiAgNDg6XHRcdGNvbnN0IHN0cnVjdCBiNTNfcGh5X2luZm8gKnBoeV9pbmZvO1xuICA0OTpcdFx0dTMyIHBoeXNfZW5hYmxlZDtcbiAgNTA6XHR9O1xuICA1MTpcdFxuICA1MjpcdHN0YXRpYyBjb25zdCB1MzIgYmNtNjMxOF9lcGh5X29mZnNldHNbXSA9IHs0LCA1LCA2LCA3fTtcbiAgNTM6XHRcbiAgNTQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGI1M19waHlfaW5mbyBiY202MzE4X2VwaHlfaW5mbyA9IHtcbiAgNTU6XHRcdC5lcGh5X2VuYWJsZV9tYXNrID0gQklUKDApIHwgQklUKDQpIHwgQklUKDgpIHwgQklUKDEyKSB8IEJJVCgxNiksXG4gIDU2Olx0XHQuZXBoeV9wb3J0X21hc2sgPSBHRU5NQVNLKChBUlJBWV9TSVpFKGJjbTYzMThfZXBoeV9vZmZzZXRzKSAtIDEpLCAwKSxcbiAgNTc6XHRcdC5lcGh5X2JpYXNfYml0ID0gMjQsXG4gIDU4Olx0XHQuZXBoeV9vZmZzZXQgPSBiY202MzE4X2VwaHlfb2Zmc2V0cyxcbiAgNTk6XHR9O1xuICA2MDpcdFxuICA2MTpcdHN0YXRpYyBjb25zdCB1MzIgYmNtNjM2OF9lcGh5X29mZnNldHNbXSA9IHsyLCAzLCA0LCA1fTtcbiAgNjI6XHRcbiAgNjM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGI1M19waHlfaW5mbyBiY202MzY4X2VwaHlfaW5mbyA9IHtcbiAgNjQ6XHRcdC5lcGh5X2VuYWJsZV9tYXNrID0gQklUKDApLFxuICA2NTpcdFx0LmVwaHlfcG9ydF9tYXNrID0gR0VOTUFTSygoQVJSQVlfU0laRShiY202MzY4X2VwaHlfb2Zmc2V0cykgLSAxKSwgMCksXG4gIDY2Olx0XHQuZXBoeV9iaWFzX2JpdCA9IDAsXG4gIDY3Olx0XHQuZXBoeV9vZmZzZXQgPSBiY202MzY4X2VwaHlfb2Zmc2V0cyxcbiAgNjg6XHR9O1xuICA2OTpcdFxuICA3MDpcdHN0YXRpYyBjb25zdCB1MzIgYmNtNjMyNjhfZXBoeV9vZmZzZXRzW10gPSB7NCwgOSwgMTR9O1xuICA3MTpcdFxuICA3MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYjUzX3BoeV9pbmZvIGJjbTYzMjY4X2VwaHlfaW5mbyA9IHtcbiAgNzM6XHRcdC5ncGh5X3BvcnRfbWFzayA9IEJJVCgzKSxcbiAgNzQ6XHRcdC5lcGh5X2VuYWJsZV9tYXNrID0gR0VOTUFTSyg0LCAwKSxcbiAgNzU6XHRcdC5lcGh5X3BvcnRfbWFzayA9IEdFTk1BU0soKEFSUkFZX1NJWkUoYmNtNjMyNjhfZXBoeV9vZmZzZXRzKSAtIDEpLCAwKSxcbiAgNzY6XHRcdC5lcGh5X2JpYXNfYml0ID0gMjQsXG4gIDc3Olx0XHQuZXBoeV9vZmZzZXQgPSBiY202MzI2OF9lcGh5X29mZnNldHMsXG4gIDc4Olx0fTtcbiAgNzk6XHRcbiAgODA6XHRzdGF0aWMgaW50IGI1M19tbWFwX3JlYWQ4KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTggKnZhbClcbiAgODE6XHR7XG4gIDgyOlx0XHRzdHJ1Y3QgYjUzX21tYXBfcHJpdiAqcHJpdiA9IGRldi1cdTAwM2Vwcml2O1xuICA4MzpcdFx0dm9pZCBfX2lvbWVtICpyZWdzID0gcHJpdi1cdTAwM2VyZWdzO1xuICA4NDpcdFxuICA4NTpcdFx0KnZhbCA9IHJlYWRiKHJlZ3MgJiM0MzsgKHBhZ2UgXHUwMDNjXHUwMDNjIDgpICYjNDM7IHJlZyk7XG4gIDg2Olx0XG4gIDg3Olx0XHRyZXR1cm4gMDtcbiAgODg6XHR9XG4gIDg5Olx0XG4gIDkwOlx0c3RhdGljIGludCBiNTNfbW1hcF9yZWFkMTYoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MTYgKnZhbClcbiAgOTE6XHR7XG4gIDkyOlx0XHRzdHJ1Y3QgYjUzX21tYXBfcHJpdiAqcHJpdiA9IGRldi1cdTAwM2Vwcml2O1xuICA5MzpcdFx0dm9pZCBfX2lvbWVtICpyZWdzID0gcHJpdi1cdTAwM2VyZWdzO1xuICA5NDpcdFxuICA5NTpcdFx0aWYgKFdBUk5fT04ocmVnICUgMikpXG4gIDk2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA5NzpcdFxuICA5ODpcdFx0aWYgKGRldi1cdTAwM2VwZGF0YSBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZXBkYXRhLVx1MDAzZWJpZ19lbmRpYW4pXG4gIDk5Olx0XHRcdCp2YWwgPSBpb3JlYWQxNmJlKHJlZ3MgJiM0MzsgKHBhZ2UgXHUwMDNjXHUwMDNjIDgpICYjNDM7IHJlZyk7XG4gMTAwOlx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgU3l6a2FsbGVyIFBsYXRmb3JtIERldmljZSBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHN5emthbGxlciBoYW5kbGVzIHBsYXRmb3JtIGRldmljZXMgZm9yIHRoaXMgZHJpdmVyLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHllYWgsIGl0ICpjYW4qIGluc3RhbnRpYXRlIHRoZW0sIHJpZ2h0PyBQcm9iYWJseSB1c2luZyBgc3l6X2Rldm1lbWAgb3Igc29tZXRoaW5nIGNvbXBhcmFibGUsIG9yIGV2ZW4gYnkgaW5qZWN0aW5nIGRldmljZSB0cmVlIG5vZGVzLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIGFwcHJvYWNoLiBCdXQgdGhlbiBJIHF1aWNrbHkgcmVtZW1iZXIgc3l6a2FsbGVyJiMzOTtzIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25zLCBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBzbyBvbi4gRm9yIHBsYXRmb3JtIGRldmljZXMsIHRob3VnaCwgaXQgdXN1YWxseSBzdGlja3MgdG8gZWl0aGVyIGBzeXpfaW5pdF9uZXRfZGV2aWNlYCwgc2ltaWxhciB2aXJ0dWFsIGRldmljZXMsIG9yIHRoYXQgc29ydCBvZiB0aGluZy4KCk5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyBzeXprYWxsZXIgZXZlbiAqZnV6eiogRFNBIGRyaXZlcnMgc3BlY2lmaWNhbGx5PyBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBjb3ZlcmFnZS4gU28sIEkgaGF2ZSB0byBjaGVjayB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgRFNBIGlzIGV2ZW4gcmVwcmVzZW50ZWQuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2I1MyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjU2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN5emthbGxlci1SZWxhdGVkIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGVzZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zLCB0aGV5JiMzOTtyZSBub3QgYWN0dWFsbHkgKmluKiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBhcmUgdGhleT8gQnV0IHRoaXMgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcuJiMzNDsgVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBzeXprYWxsZXIgaGFzIGVpdGhlciBmbGFnZ2VkIGEgYnVnIGhlcmUsIG9yIHNvbWVvbmUmIzM5O3MgcnVubmluZyBzb21lIGtpbmQgb2Ygc3l6a2FsbGVyLXJlbGF0ZWQgcGF0Y2ggdGVzdGluZy4KCkFscmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGV2ZW4gcmVhY2hhYmxlLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGNoYW5naW5nIGByZXR1cm4gMDtgIHRvIGByZXR1cm4gcmV0O2Agd2l0aGluIGBiNTNfZmRiX2R1bXBgLiBOb3csIHdoZXJlIGlzIGBiNTNfZmRiX2R1bXBgIGNhbGxlZCBmcm9tPyBBaCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGRzYV9wb3J0X2ZkYl9kdW1wYC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIHdoZXJlIHRoaXMgbWlnaHQgYmUgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwb3J0X2ZkYl9kdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL3BvcnQuYz0xMTM1PWludCBkc2FfcG9ydF9sYWdfZmRiX2RlbChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuLS1cbm5ldC9kc2EvcG9ydC5jLTExNTMtXG5uZXQvZHNhL3BvcnQuYzoxMTU0OmludCBkc2FfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBkc2FfZmRiX2R1bXBfY2JfdCAqY2IsIHZvaWQgKmRhdGEpXG5uZXQvZHNhL3BvcnQuYy0xMTU1LXtcbi0tXG5uZXQvZHNhL3BvcnQuYy0xMTU4LVxubmV0L2RzYS9wb3J0LmM6MTE1OTpcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZXBvcnRfZmRiX2R1bXApXG5uZXQvZHNhL3BvcnQuYy0xMTYwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5uZXQvZHNhL3BvcnQuYy0xMTYxLVxubmV0L2RzYS9wb3J0LmM6MTE2MjpcdHJldHVybiBkcy1cdTAwM2VvcHMtXHUwMDNlcG9ydF9mZGJfZHVtcChkcywgcG9ydCwgY2IsIGRhdGEpO1xubmV0L2RzYS9wb3J0LmMtMTE2My19XG4tLVxubmV0L2RzYS9wb3J0Lmg9NjM9aW50IGRzYV9wb3J0X2xhZ19mZGJfZGVsKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG5uZXQvZHNhL3BvcnQuaC02NC1cdFx0XHQgdTE2IHZpZCk7XG5uZXQvZHNhL3BvcnQuaDo2NTppbnQgZHNhX3BvcnRfZmRiX2R1bXAoc3RydWN0IGRzYV9wb3J0ICpkcCwgZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKTtcbm5ldC9kc2EvcG9ydC5oLTY2LWludCBkc2FfcG9ydF9tZGJfYWRkKGNvbnN0IHN0cnVjdCBkc2FfcG9ydCAqZHAsXG4tLVxubmV0L2RzYS91c2VyLmM9NTU5PWRzYV91c2VyX2ZkYl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvZHNhL3VzZXIuYy01NzEtXG5uZXQvZHNhL3VzZXIuYzo1NzI6XHRlcnIgPSBkc2FfcG9ydF9mZGJfZHVtcChkcCwgZHNhX3VzZXJfcG9ydF9mZGJfZG9fZHVtcCwgXHUwMDI2ZHVtcCk7XG5uZXQvZHNhL3VzZXIuYy01NzMtXHQqaWR4ID0gZHVtcC5pZHg7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGRzYV91c2VyX2ZkYl9kdW1wYCBpbiBTeXprYWxsZXImIzM5O3MgUUVNVSBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBgZHNhX3VzZXJfZmRiX2R1bXBgIGlzIHRyaWdnZXJlZCB0aHJvdWdoIG5ldGxpbmssIHdoaWNoIG1lYW5zIHVzZXJzcGFjZSBjYW4gcmVhY2ggaXQgKmlmKiB0aGUgZGV2aWNlIGV4aXN0cy4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgYGI1M2AgZGV2aWNlIGV2ZW4gZXhpc3QgaW4gU3l6a2FsbGVyJiMzOTtzIFFFTVUgZW52aXJvbm1lbnQ/IFN5emthbGxlciYjMzk7cyBydW5uaW5nIGluIFFFTVUsIHNvIGl0IHdvbiYjMzk7dCBiZSByZWFjaGFibGUgdW5sZXNzIHRoZSBgYjUzYCBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCBzb21laG93LgoKQ291bGQgYHN5el9kZXZtZW1gIG9yIHNvbWV0aGluZyBzaW1pbGFyIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZT8gT3IgbWF5YmUgYGRzYV9sb29wYD8gTm9wZSwgYGRzYV9sb29wYCB1c2VzIGBkc2FfbG9vcF9vcHNgLCBub3QgZGlyZWN0bHkgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBiNTNgIG1pZ2h0IGJlIGJyb3VnaHQgaW50byBleGlzdGVuY2UuIElzIGl0IHRpZWQgdG8gYSB2aXJ0dWFsIGJ1cywgb3IgaXMgaXQgcHVyZWx5IHBoeXNpY2FsPwoKQWhhLCBgYjUzX21tYXAuY2AgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFBsYXRmb3JtIGRyaXZlcnMgKmNhbiogc29tZXRpbWVzIGJlIGNyZWF0ZWQgZnJvbSB1c2Vyc3BhY2UuLi4gYnV0IG5vdCB2aWEgYC9zeXMvYnVzL3BsYXRmb3JtL25ld19kZXZpY2VgLCB0aGF0JiMzOTtzIG5vdCBob3cgaXQgd29ya3MuIFdhaXQsIEkgdGhpbmsgU3l6a2FsbGVyIGNhbiBpbmplY3QgZGV2aWNlIHRyZWUgb3ZlcmxheXMuLi4gb3IgbWF5YmUgdGhyb3VnaCBgc3l6X21vdW50X2ltYWdlYD8gVGhhdCBjYW4gbW91bnQgaW1hZ2VzLCBidXQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgcmVxdWlyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBzbyBJIGNhbiYjMzk7dCBiZSBzdXJlLgoKSGFuZyBvbi4uLiBpc24mIzM5O3QgYGI1M2AgYW4gTURJTyBkcml2ZXI/IE5vLCBgYjUzX21kaW8uY2AgaXMgdGhlIE1ESU8gb25lLiBDYW4gTURJTyBkZXZpY2VzIGJlIGluc3RhbnRpYXRlZCBmcm9tIHVzZXJzcGFjZT8gVXN1YWxseSBub3QuCgpCdXQuLi4gd2FpdCBhIHNlY29uZC4gSXMgdGhpcyBwYXRjaCBldmVuIGZpeGluZyBhIGJ1ZyB0aGF0IHdvdWxkIGJlIHRyaWdnZXJlZCBpbiB0aGlzIGVudmlyb25tZW50PyBNYXliZSBpdCYjMzk7cyBhIHN0YXRpYyBhbmFseXplciBmaW5kaW5nIG9yIHNvbWV0aGluZyB0aGF0IG9ubHkgYWZmZWN0cyByZWFsIGhhcmR3YXJlPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQgY29uY2VybnM6IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBvciBjb2RlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gUUVNVS4KCklzIGBiNTNgIGEgdmVuZG9yLXNwZWNpZmljIHN3aXRjaCBkcml2ZXIgdGhhdCBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZT8gWWVzLCBpdCYjMzk7cyBCcm9hZGNvbSBCQ001M3h4LiBMZXQmIzM5O3Mgc2VlIGlmIFFFTVUgZW11bGF0ZXMgQkNNNTN4eC4gTm9wZSwgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoYXQgc3BlY2lmaWMgQnJvYWRjb20gY2hpcC4KCkJ1dCB3YWl0LCBRRU1VICpkb2VzKiBlbXVsYXRlIHNvbWUgQnJvYWRjb20gYm9hcmRzLCBsaWtlIGByYXNwaWAgKFJhc3BiZXJyeSBQaSkgb3IgYGJjbTI4MzVgLiBEbyB0aG9zZSBoYXZlIGEgQkNNNTN4eCBzd2l0Y2g/IE5vLCBuZWl0aGVyIG9mIHRoZW0gZG8uIFdoYXQgYWJvdXQgYGJjbTUzeHhgPyBRRU1VIGRvZXNuJiMzOTt0IGhhdmUgYSBzcGVjaWZpYyBgYmNtNTN4eGAgbWFjaGluZSB0eXBlLgoKT2theSwgc28gSSYjMzk7bSBiYWNrIHRvIHRoZSBvcmlnaW5hbCBxdWVzdGlvbi4gSXMgdGhlcmUgKmFueSogd2F5IHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gUUVNVT8gSSYjMzk7ZCBjaGVjayB0aGUgUUVNVSBzb3VyY2UgZm9yIGBiNTNgLCBidXQgSSBkb24mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdC4KCkxldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgYSBQQ0kgZGV2aWNlLiBgYjUzX21tYXBgIGlzIHBsYXRmb3JtLiBgYjUzX21kaW9gIGlzIE1ESU8uIGBiNTNfc3BpYCBpcyBTUEkuIGBiNTNfc3JhYmAgaXMgcGxhdGZvcm0uIFNvLCBub25lIG9mIHRoZXNlIGFyZSBQQ0kuIENhbiBJIHNvbWVob3cgdXNlIGBzcGlkZXZgIHRvIHNpbXVsYXRlIGEgZGV2aWNlPyBObywgdGhhdCYjMzk7cyBqdXN0IGEgdXNlci1zcGFjZSBpbnRlcmZhY2UgdG8gU1BJLCBub3QgZGV2aWNlIGVtdWxhdGlvbi4KCldhaXQsIFN5emthbGxlciAqZG9lcyogaGF2ZSBzaW11bGF0b3JzIGZvciBJMkMsIFNQSSwgdGhpbmdzIGxpa2UgdGhhdCwgcmlnaHQ/IEkmIzM5O20gdGhpbmtpbmcgb2YgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYHZoY2lgIGZvciBVU0IsIGB1aW5wdXRgIGZvciBpbnB1dCwgYHZrbXNgIGZvciBEUk0sIGBuZXRkZXZzaW1gIGZvciBuZXR3b3JraW5nLiBJcyB0aGVyZSBhIHNpbXVsYXRvciBmb3IgRFNBPyBZZXMsIHRoZXJlJiMzOTtzIGBkc2FfbG9vcGAuIEkgc2hvdWxkIGNoZWNrIHRoYXQgb25lIG91dC4gTGV0IG1lIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiNTMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MTcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGI1M2AgRHJpdmVyIGFuZCBpdHMgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGRzYV9sb29wYCBpcyBqdXN0IGEgbW9jayBkcml2ZXI7IGl0JiMzOTtzIG5vdCBhY3R1YWxseSB1c2luZyBgYjUzYC4gVGhpcyBtZWFucyBgYjUzYCBpcyBkZWZpbml0ZWx5IGhhcmR3YXJlLXNwZWNpZmljLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2gsIGFuZCB0aGF0IG1lYW5zIHdlIGNhbiYjMzk7dCBnZXQgdG8gaXQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIHN0YW5kYXJkIFFFTVUuIEl0IG5lZWRzIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGZ1enppbmcgd291bGQgYmUgaW1wb3NzaWJsZSBvciBwb2ludGxlc3MuCgpCdXQgaG9sZCBvbiwgbGV0IG1lIGJlIHRob3JvdWdoLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgbG9vcGhvbGVzLiBDb3VsZCBgYjUzX2ZkYl9kdW1wYCBiZSBjYWxsZWQgZnJvbSAqc29tZXdoZXJlKiBlbHNlLCBwZXJoYXBzIGluZGlyZWN0bHk/IE5vcGUsIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IGBiNTNfbW1hcGAsIGBiNTNfbWRpb2AsIGBiNTNfc3BpYCwgYW5kIGBiNTNfc3JhYmAuIEFuZCBhIHF1aWNrIGdsYW5jZSBhdCB0aG9zZSBjb25maXJtcyBpdCAtIHRoZXkmIzM5O3JlIGFsbCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jYC4gQWgsIHllcywgY29uZmlybWVkLiBOb3RoaW5nIHRoZXJlIHRoYXQgZGV2aWF0ZXMgZnJvbSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgbmF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qXG4gICAyOlx0ICogQjUzIHJlZ2lzdGVyIGFjY2VzcyB0aHJvdWdoIE1JSSByZWdpc3RlcnNcbiAgIDM6XHQgKlxuICAgNDpcdCAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEpvbmFzIEdvcnNraSBcdTAwM2Nqb2dvQG9wZW53cnQub3JnXHUwMDNlXG4gICA1Olx0ICpcbiAgIDY6XHQgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbiAgIDc6XHQgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlXG4gICA4Olx0ICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy5cbiAgIDk6XHQgKlxuICAxMDpcdCAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcJiMzNDtBUyBJU1wmIzM0OyBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVNcbiAgMTE6XHQgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXG4gIDEyOlx0ICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1JcbiAgMTM6XHQgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTXG4gIDE0Olx0ICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXG4gIDE1Olx0ICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0ZcbiAgMTY6XHQgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuICAxNzpcdCAqL1xuICAxODpcdFxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAyMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAgMjM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gIDI0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnJjbXBoeS5oXHUwMDNlXG4gIDI1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAgMjY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiAgMjc6XHRcbiAgMjg6XHQjaW5jbHVkZSBcJiMzNDtiNTNfcHJpdi5oXCYjMzQ7XG4gIDI5Olx0XG4gIDMwOlx0LyogTUlJIHJlZ2lzdGVycyAqL1xuICAzMTpcdCNkZWZpbmUgUkVHX01JSV9QQUdFICAgIDB4MTAgICAgLyogTUlJIFBhZ2UgcmVnaXN0ZXIgKi9cbiAgMzI6XHQjZGVmaW5lIFJFR19NSUlfQUREUiAgICAweDExICAgIC8qIE1JSSBBZGRyZXNzIHJlZ2lzdGVyICovXG4gIDMzOlx0I2RlZmluZSBSRUdfTUlJX0RBVEEwICAgMHgxOCAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAwICovXG4gIDM0Olx0I2RlZmluZSBSRUdfTUlJX0RBVEExICAgMHgxOSAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAxICovXG4gIDM1Olx0I2RlZmluZSBSRUdfTUlJX0RBVEEyICAgMHgxYSAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAyICovXG4gIDM2Olx0I2RlZmluZSBSRUdfTUlJX0RBVEEzICAgMHgxYiAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAzICovXG4gIDM3Olx0XG4gIDM4Olx0I2RlZmluZSBSRUdfTUlJX1BBR0VfRU5BQkxFICAgICBCSVQoMClcbiAgMzk6XHQjZGVmaW5lIFJFR19NSUlfQUREUl9XUklURSAgICAgIEJJVCgwKVxuICA0MDpcdCNkZWZpbmUgUkVHX01JSV9BRERSX1JFQUQgICAgICAgQklUKDEpXG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIGludCBiNTNfbWRpb19vcChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHUxNiBvcClcbiAgNDM6XHR7XG4gIDQ0Olx0XHRpbnQgaTtcbiAgNDU6XHRcdHUxNiB2O1xuICA0NjpcdFx0aW50IHJldDtcbiAgNDc6XHRcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXYtXHUwMDNlcHJpdjtcbiAgNDg6XHRcbiAgNDk6XHRcdGlmIChkZXYtXHUwMDNlY3VycmVudF9wYWdlICE9IHBhZ2UpIHtcbiAgNTA6XHRcdFx0Lyogc2V0IHBhZ2UgbnVtYmVyICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjk1CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIERyaXZlciBGdXp6aW5nIENvbmNlcm5zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBmb3IgYW4gTURJTyBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIGV2ZW4gZnV6eiBNRElPIGRldmljZXMgd2l0aCBzeXprYWxsZXI/IFRoZSBwcm9ibGVtIGlzLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgYnVpbHQtaW4sIGdlbmVyaWMgd2F5IHRvIGNyZWF0ZSB2aXJ0dWFsIE1ESU8gZGV2aWNlcy4gSSBtZWFuLCBpdCBoYXMgdGhpbmdzIGxpa2UgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAsIGJ1dCBub3RoaW5nIHNwZWNpZmljIGZvciBNRElPIHRvIGp1c3Qgc3BpbiB1cCBhcmJpdHJhcnkgZGV2aWNlcyBmb3IgdGVzdGluZy4KClRoZW4gSSByZS1yZWFkIHRoZSBwcm9tcHQsIGFuZCBpdCBzYXlzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLiYjMzQ7IEkgc2VlIHRoZSBzaW1pbGFyaXRpZXMsIGV2ZW4gdGhvdWdoIHRoaXMgaXNuJiMzOTt0IFBDSWUuIEl0JiMzOTtzIGEgdmVuZG9yLXNwZWNpZmljIHN3aXRjaCBkcml2ZXIg4oCTIGEgQnJvYWRjb20gQkNNNTN4eCDigJMgd2hpY2ggaXMganVzdCB0aGUgc2FtZS4gSXQgcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBzbyBpdCBmYWxscyBpbnRvIHRoZSBzYW1lIGNhdGVnb3J5IGFzIHRob3NlIGRyaXZlcnMgdGhleSBtZW50aW9uLgoKTGV0IG1lIHF1aWNrbHkgbWFrZSBzdXJlIHRoaXMgaXMgdGhlICpvbmx5KiBmaWxlIHRvdWNoZWQgYnkgdGhlIHBhdGNoLiBZZXAsIGl0JiMzOTtzIGp1c3QgYGRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jYC4KCkdpdmVuIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiNTNfZmRiX2R1bXAgZnVuY3Rpb24gaW4gdGhlIEJyb2FkY29tIEJDTTUzeHggRFNBIHN3aXRjaCBkcml2ZXIgKGI1MykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgc3dpdGNoIGhhcmR3YXJlIChjb25uZWN0ZWQgdmlhIE1ESU8sIE1NQVAsIFNQSSwgb3IgU1JBQikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGI1M19mZGJfZHVtcCBmdW5jdGlvbiBpbiB0aGUgQnJvYWRjb20gQkNNNTN4eCBEU0Egc3dpdGNoIGRyaXZlciAoYjUzKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgKGNvbm5lY3RlZCB2aWEgTURJTywgTU1BUCwgU1BJLCBvciBTUkFCKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6MzkuNDMxMjYxOTQ3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NDgzNzIyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYjUzX2ZkYl9kdW1wIGZ1bmN0aW9uIGluIHRoZSBCcm9hZGNvbSBCQ001M3h4IERTQSBzd2l0Y2ggZHJpdmVyIChiNTMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIHN3aXRjaCBoYXJkd2FyZSAoY29ubmVjdGVkIHZpYSBNRElPLCBNTUFQLCBTUEksIG9yIFNSQUIpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgdmlydHVhbGl6ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjM5LjQzMTI2ODExN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyOTgwOTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU2MGQyYjJhOWVlM2Y1NjY2MjNlYWRhYTIwMmUxYjcyNmUxY2Y5NTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjA6NDk6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xcbmluZGV4IDNmNWI5NTkyNzk0ZGEuLjA4ODAzMTBjOWNlM2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xcbkBAIC0yMjE5LDcgKzIyMTksNyBAQCBpbnQgYjUzX2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWFybF9tdXRleCk7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGI1M19mZGJfZHVtcCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo0OTo0MC43NjIwMDcyODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NzQxNzYwODU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGI1M19mZGJfZHVtcCBmdW5jdGlvbiBpbiB0aGUgQnJvYWRjb20gQkNNNTN4eCBEU0Egc3dpdGNoIGRyaXZlciAoYjUzKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgKGNvbm5lY3RlZCB2aWEgTURJTywgTU1BUCwgU1BJLCBvciBTUkFCKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNjBkMmIyYTllZTNmNTY2NjIzZWFkYWEyMDJlMWI3MjZlMWNmOTU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjA6NDk6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXG5pbmRleCAzZjViOTU5Mjc5NGRhLi4wODgwMzEwYzljZTNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXG5AQCAtMjIxOSw3ICsyMjE5LDcgQEAgaW50IGI1M19mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlYXJsX211dGV4KTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChiNTNfZmRiX2R1bXApO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NDAuNzYyMDA4NjUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNjA4MDM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgQnVnIEZpeCoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSBzZWVpbmc6IHRoZXJlJ3MgYSBwYXRjaCBhZmZlY3RpbmcgdGhlIGBiNTNfZmRiX2R1bXBgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNgIGZpbGUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhIHZlcnkgc2ltcGxlIG9uZTogaXQncyBhbHRlcmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbi4gUHJldmlvdXNseSwgaXQgd2FzIGhhcmRjb2RlZCB0byBgcmV0dXJuIDA7YCwgZXNzZW50aWFsbHkgaW5kaWNhdGluZyBzdWNjZXNzIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBhY3R1YWxseSBoYXBwZW5lZCBpbnRlcm5hbGx5LiBOb3csIGl0IGxvb2tzIGxpa2UgaXQncyBiZWluZyBjaGFuZ2VkIHRvIGByZXR1cm4gcmV0O2AsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHJldGAgaXMgYSB2YXJpYWJsZSBob2xkaW5nIHRoZSAqYWN0dWFsKiByZXR1cm4gY29kZSBvciBlcnJvciBpbmRpY2F0aW9uIGZyb20gdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uLiBUaGlzIG1lYW5zIHdlJ3JlIGdvaW5nIGZyb20gYmxpbmRseSBhc3N1bWluZyBzdWNjZXNzIHRvIHJlcG9ydGluZyB0aGUgcmVhbCBvdXRjb21lLiBHaXZlbiB0aGlzIGNoYW5nZSBJJ20gZmFpcmx5IGNlcnRhaW4gdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIHdhcyBoaWRpbmcgYW4gdW5kZXJseWluZyBwcm9ibGVtLiBUaGlzIG1ha2VzIHNlbnNlLCBiZWNhdXNlIHlvdSB3b3VsZCBvbmx5IG1ha2UgdGhpcyBjaGFuZ2UgaWYgeW91IHdlcmUgdHJ5aW5nIHRvIGZpeCBhIGJ1ZyBvciBnZXQgbW9yZSBpbmZvcm1hdGlvbi4gV2UnbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYGI1M19mZGJfZHVtcGAgZnVuY3Rpb24gYW5kIHdoYXQgYHJldGAgcmVwcmVzZW50cyB0byBmdWxseSBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgcGF0Y2ggYW5kIGVuc3VyZSBpdCdzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjQ0LjM2ODA5Mjc1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI2MzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiNTNfZmRiX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM9MjE2Nz1zdGF0aWMgaW50IGI1M19mZGJfY29weShpbnQgcG9ydCwgY29uc3Qgc3RydWN0IGI1M19hcmxfZW50cnkgKmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTIxODEtXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjE4MjppbnQgYjUzX2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMjE4My1cXHRcXHQgZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMjIyMy19XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjIyNDpFWFBPUlRfU1lNQk9MKGI1M19mZGJfZHVtcCk7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMjIyNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTI3MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBiNTNfc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTI3MjYtXFx0LnBvcnRfdmxhbl9kZWxcXHRcXHQ9IGI1M192bGFuX2RlbCxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzoyNzI3OlxcdC5wb3J0X2ZkYl9kdW1wXFx0XFx0PSBiNTNfZmRiX2R1bXAsXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMjcyOC1cXHQucG9ydF9mZGJfYWRkXFx0XFx0PSBiNTNfZmRiX2FkZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NDQuNDIwMzYxNjY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxNzkxNDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGI1M19mZGJfZHVtcGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGI1M19mZGJfZHVtcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZnVuY3Rpb25zLiBHaXZlbiB0aGUgbmFtZSwgaXQncyBsaWtlbHkgYSB1dGlsaXR5IHJlbGF0ZWQgdG8gZWl0aGVyIGR1bXBpbmcgb3IgaW5zcGVjdGluZyBkYXRhIGZyb20gYSBGb3VuZGF0aW9uREIgKEZEQikgZGF0YWJhc2UuIFRoZSBcImI1M1wiIGNvdWxkIGJlIGEgc3BlY2lmaWMgcHJvamVjdCBjb2RlLCBhIHZlcnNpb24sIG9yIHBlcmhhcHMgZXZlbiBhbiBpbnRlcm5hbCBpZGVudGlmaWVyIHJlbGF0ZWQgdG8gdGhlIGRhdGEgZm9ybWF0IGJlaW5nIGR1bXBlZC4gTXkgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIHRoZSBraW5kIG9mIGluZm9ybWF0aW9uIGl0IGV4cG9zZXMsIHRoZSBmb3JtYXQgb2YgdGhhdCBpbmZvcm1hdGlvbiAocmF3LCBzdHJ1Y3R1cmVkLCBldGMuKSwgYW5kIHRoZSBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMgZm9yIHNwZWNpZnlpbmcgd2hhdCB0byBkdW1wLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIEkgY2FuIHF1ZXJ5IHNwZWNpZmljIGtleXMsIHJhbmdlcywgb3IgaWYgaXQncyBhbiBhbGwtb3Itbm90aGluZyBkdW1wLiBBbHNvLCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXJlIHNvbWV0aGluZyBJIHdpbGwgZGVmaW5pdGVseSBjb25zaWRlciwgSSBzaG91bGQgZGV0ZXJtaW5lIGlmIHRoaXMgY29tbWFuZCByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiwgb3IgaWYgdGhlcmUgYXJlIGFueSByaXNrcyBvZiBhY2NpZGVudGFsbHkgZXhwb3Npbmcgc2Vuc2l0aXZlIGRhdGEuIEtub3dpbmcgdGhlIGludGVybmFscyB3aWxsIGJlIGtleSwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgaWYgaXQncyByZWFkaW5nIGRpcmVjdGx5IGZyb20gdGhlIHN0b3JhZ2UgZW5naW5lLCBvciBpZiBpdCBoYXMgc29tZSBpbnRlcm1lZGlhcnkgbGF5ZXIuIFVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIGRldGVybWluZSB0aGUgcmVsaWFiaWxpdHkgYW5kIHNwZWVkIG9mIHRoZSBkdW1wLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NDguMzM4Mjc4NTY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxODIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxODI6XFx0aW50IGI1M19mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbjIxODM6XFx0XFx0XFx0IGRzYV9mZGJfZHVtcF9jYl90ICpjYiwgdm9pZCAqZGF0YSlcXG4yMTg0OlxcdHtcXG4yMTg1OlxcdFxcdHVuc2lnbmVkIGludCBjb3VudCA9IDAsIHJlc3VsdHNfcGVyX2hpdCA9IDE7XFxuMjE4NjpcXHRcXHRzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbjIxODc6XFx0XFx0c3RydWN0IGI1M19hcmxfZW50cnkgcmVzdWx0c1syXTtcXG4yMTg4OlxcdFxcdGludCByZXQ7XFxuMjE4OTpcXHRcXG4yMTkwOlxcdFxcdGlmIChwcml2LVxcdTAwM2VudW1fYXJsX2JpbnMgXFx1MDAzZSAyKVxcbjIxOTE6XFx0XFx0XFx0cmVzdWx0c19wZXJfaGl0ID0gMjtcXG4yMTkyOlxcdFxcbjIxOTM6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlYXJsX211dGV4KTtcXG4yMTk0OlxcdFxcbjIxOTU6XFx0XFx0LyogU3RhcnQgc2VhcmNoIG9wZXJhdGlvbiAqL1xcbjIxOTY6XFx0XFx0YjUzX3dyaXRlX2FybF9zcmNoX2N0bChwcml2LCBBUkxfU1JDSF9TVEROKTtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0ZG8ge1xcbjIxOTk6XFx0XFx0XFx0cmV0ID0gYjUzX2FybF9zZWFyY2hfd2FpdChwcml2KTtcXG4yMjAwOlxcdFxcdFxcdGlmIChyZXQpXFxuMjIwMTpcXHRcXHRcXHRcXHRicmVhaztcXG4yMjAyOlxcdFxcbjIyMDM6XFx0XFx0XFx0YjUzX2FybF9zZWFyY2hfcmVhZChwcml2LCAwLCBcXHUwMDI2cmVzdWx0c1swXSk7XFxuMjIwNDpcXHRcXHRcXHRyZXQgPSBiNTNfZmRiX2NvcHkocG9ydCwgXFx1MDAyNnJlc3VsdHNbMF0sIGNiLCBkYXRhKTtcXG4yMjA1OlxcdFxcdFxcdGlmIChyZXQpXFxuMjIwNjpcXHRcXHRcXHRcXHRicmVhaztcXG4yMjA3OlxcdFxcbjIyMDg6XFx0XFx0XFx0aWYgKHJlc3VsdHNfcGVyX2hpdCA9PSAyKSB7XFxuMjIwOTpcXHRcXHRcXHRcXHRiNTNfYXJsX3NlYXJjaF9yZWFkKHByaXYsIDEsIFxcdTAwMjZyZXN1bHRzWzFdKTtcXG4yMjEwOlxcdFxcdFxcdFxcdHJldCA9IGI1M19mZGJfY29weShwb3J0LCBcXHUwMDI2cmVzdWx0c1sxXSwgY2IsIGRhdGEpO1xcbjIyMTE6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4yMjEyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjIyMTM6XFx0XFxuMjIxNDpcXHRcXHRcXHRcXHRpZiAoIXJlc3VsdHNbMF0uaXNfdmFsaWQgXFx1MDAyNlxcdTAwMjYgIXJlc3VsdHNbMV0uaXNfdmFsaWQpXFxuMjIxNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yMjE2OlxcdFxcdFxcdH1cXG4yMjE3OlxcdFxcbjIyMTg6XFx0XFx0fSB3aGlsZSAoY291bnQrKyBcXHUwMDNjIGI1M19tYXhfYXJsX2VudHJpZXMocHJpdikgLyByZXN1bHRzX3Blcl9oaXQpO1xcbjIyMTk6XFx0XFxuMjIyMDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWFybF9tdXRleCk7XFxuMjIyMTpcXHRcXG4yMjIyOlxcdFxcdHJldHVybiByZXQ7XFxuMjIyMzpcXHR9XFxuMjIyNDpcXHRFWFBPUlRfU1lNQk9MKGI1M19mZGJfZHVtcCk7XFxuMjIyNTpcXHRcXG4yMjI2OlxcdGludCBiNTNfbWRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbjIyMjc6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYixcXG4yMjI4OlxcdFxcdFxcdHN0cnVjdCBkc2FfZGIgZGIpXFxuMjIyOTpcXHR7XFxuMjIzMDpcXHRcXHRzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbjIyMzE6XFx0XFx0aW50IHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NDguMzM4NDcyMDQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NzM5OTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCcm9hZGNvbSBCNTMgRFNBIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgRFNBIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBCcm9hZGNvbSBCNTMgc3dpdGNoZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiBJIGV2ZW4gKnRvdWNoKiB0aGlzIHRoaW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT9cIiBEU0EgZHJpdmVycyBhcmUgbm90b3Jpb3VzbHkgaGFyZHdhcmUtc3BlY2lmaWMsIHJpZ2h0PyBUaGV5J3JlIGRlc2lnbmVkIHRvIGludGVyZmFjZSBkaXJlY3RseSB3aXRoIHRoZSBzd2l0Y2ggQVNJQy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgY2hhbmNlIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBoZXJlLCBvciBpZiB0aGlzIGlzIGEgcHVyZWx5IGhhcmR3YXJlIHBsYXkuIEknbSBsZWFuaW5nIHRvd2FyZHMgdGhlIGxhdHRlciwgZ2l2ZW4gbXkgZXhwZXJpZW5jZS4gQmVzdCB3YXkgdG8gY2hlY2sgdGhpcyBpcyB0byBpbW1lZGlhdGVseSBnbyBkaWdnaW5nIGluIHRoZSBgZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnYCBmaWxlLiBUaGF0J2xsIGJlIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGUgZHJpdmVyJ3MgY2FwYWJpbGl0aWVzIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjUxLjkxNTg3MzYyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTk3NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQjUzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWc6MjptZW51Y29uZmlnIEI1M1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBCQ001M3h4IG1hbmFnZWQgc3dpdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjE1OmNvbmZpZyBCNTNfU1BJX0RSSVZFUlxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiQjUzIFNQSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0yMC1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWc6MjE6Y29uZmlnIEI1M19NRElPX0RSSVZFUlxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwiQjUzIE1ESU8gY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMjYtXFxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnOjI3OmNvbmZpZyBCNTNfTU1BUF9EUklWRVJcXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctMjgtXFx0dHJpc3RhdGUgXFxcIkI1MyBNTUFQIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTM0LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZzozNTpjb25maWcgQjUzX1NSQUJfRFJJVkVSXFxuZHJpdmVycy9uZXQvZHNhL2I1My9LY29uZmlnLTM2LVxcdHRyaXN0YXRlIFxcXCJCNTMgU1JBQiBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvS2NvbmZpZy00My1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWc6NDQ6Y29uZmlnIEI1M19TRVJERVNcXG5kcml2ZXJzL25ldC9kc2EvYjUzL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIkI1MyBTZXJEZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NTEuOTgxODUzNDYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExOTg0NzU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeHBsb3JpbmcgQnJvYWRjb20gQkNNNTN4eCBTd2l0Y2ggU3VwcG9ydCBpbiBRRU1VKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc3VwcG9ydGluZyB0aGUgQnJvYWRjb20gQkNNNTN4eCBtYW5hZ2VkIHN3aXRjaC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgaGFyZHdhcmUgY29tcG9uZW50LCBub3Qgc29tZXRoaW5nIHRoYXQncyBnb2luZyB0byBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgc29tZWhvdyBpbnRlcmFjdCB3aXRoIHRoZSBEU0EgZHJpdmVycyB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBDYW4gSSB1c2UgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3Igc29tZXRoaW5nIHNpbWlsYXI/XG5cbk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgRFNBIGRyaXZlcnMgYXJlIHR5cGljYWxseSB0aWVkIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvZiB0aGUgc3dpdGNoIGNoaXAuIEknbSB3b25kZXJpbmcsIGlzIHRoZXJlIHNvbWUga2luZCBvZiBkdW1teSBEU0EgZHJpdmVyIHRoYXQgSSBjb3VsZCBwb3RlbnRpYWxseSBsZXZlcmFnZT8gQWgsIHllcyEgYGRzYV9sb29wYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQuIEhvd2V2ZXIsIEkgbmVlZCB0byBpbnRlcmFjdCB3aXRoIGBiNTNgIHRvIHVzZSB0aGUgQnJvYWRjb20gQkNNNTN4eC5cblxuVGhlIHJlYWwgY2hhbGxlbmdlIGlzLCBob3cgZG8gSSBhY3R1YWxseSByZWFjaCB0aGF0IGNvZGUgd2l0aGluIFFFTVU/IEknbSB0aGlua2luZywgY291bGQgSSBpbnN0YW50aWF0ZSB0aGUgZHJpdmVyIHVzaW5nIGEgZmFrZSBwbGF0Zm9ybSBkZXZpY2Ugb3IgcGVyaGFwcyBldmVuIGFuIE1ESU8gZGV2aWNlPyBJZiBJIGNhbiB0cmlnZ2VyIGBiNTNfbW1hcGAgb3IgYGI1M19tZGlvYCB0byBwcm9iZSBjb3JyZWN0bHksIHRoYXQgY291bGQgZ2l2ZSBtZSBzb21lIGtpbmQgb2YgZm9vdGhvbGQuIEl0IGxvb2tzIGxpa2UgYGI1M19tbWFwYCB1dGlsaXplcyBhIHBsYXRmb3JtIGRyaXZlciwgc28gdGhhdCBjb3VsZCBiZSB0aGUgcmlnaHQgcGF0aCB0byBwdXJzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NDk6NTcuMTAxNzExNzM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LypcXG4gICAyOlxcdCAqIEI1MyByZWdpc3RlciBhY2Nlc3MgdGhyb3VnaCBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVyc1xcbiAgIDM6XFx0ICpcXG4gICA0OlxcdCAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIEpvbmFzIEdvcnNraSBcXHUwMDNjam9nb0BvcGVud3J0Lm9yZ1xcdTAwM2VcXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcXG4gICA3OlxcdCAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmVcXG4gICA4OlxcdCAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXFxuICAgOTpcXHQgKlxcbiAgMTA6XFx0ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFxcXCJBUyBJU1xcXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXFxuICAxMTpcXHQgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXFxuICAxMjpcXHQgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxcbiAgMTM6XFx0ICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xcbiAgMTQ6XFx0ICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXFxuICAxNTpcXHQgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRlxcbiAgMTY6XFx0ICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cXG4gIDE3OlxcdCAqL1xcbiAgMTg6XFx0XFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4gIDI0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcXHUwMDNlXFxuICAyNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGF0YS9iNTMuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gIDI4OlxcdFxcbiAgMjk6XFx0I2luY2x1ZGUgXFxcImI1M19wcml2LmhcXFwiXFxuICAzMDpcXHRcXG4gIDMxOlxcdCNkZWZpbmUgQkNNNjNYWF9FUEhZX1JFRyAweDNDXFxuICAzMjpcXHQjZGVmaW5lIEJDTTYzMjY4X0dQSFlfUkVHIDB4NTRcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0I2RlZmluZSBHUEhZX0NUUkxfTE9XX1BXUlxcdEJJVCgzKVxcbiAgMzU6XFx0I2RlZmluZSBHUEhZX0NUUkxfSUREUV9CSUFTXFx0QklUKDApXFxuICAzNjpcXHRcXG4gIDM3OlxcdHN0cnVjdCBiNTNfcGh5X2luZm8ge1xcbiAgMzg6XFx0XFx0dTMyIGdwaHlfcG9ydF9tYXNrO1xcbiAgMzk6XFx0XFx0dTMyIGVwaHlfZW5hYmxlX21hc2s7XFxuICA0MDpcXHRcXHR1MzIgZXBoeV9wb3J0X21hc2s7XFxuICA0MTpcXHRcXHR1MzIgZXBoeV9iaWFzX2JpdDtcXG4gIDQyOlxcdFxcdGNvbnN0IHUzMiAqZXBoeV9vZmZzZXQ7XFxuICA0MzpcXHR9O1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgYjUzX21tYXBfcHJpdiB7XFxuICA0NjpcXHRcXHR2b2lkIF9faW9tZW0gKnJlZ3M7XFxuICA0NzpcXHRcXHRzdHJ1Y3QgcmVnbWFwICpncGlvX2N0cmw7XFxuICA0ODpcXHRcXHRjb25zdCBzdHJ1Y3QgYjUzX3BoeV9pbmZvICpwaHlfaW5mbztcXG4gIDQ5OlxcdFxcdHUzMiBwaHlzX2VuYWJsZWQ7XFxuICA1MDpcXHR9O1xcbiAgNTE6XFx0XFxuICA1MjpcXHRzdGF0aWMgY29uc3QgdTMyIGJjbTYzMThfZXBoeV9vZmZzZXRzW10gPSB7NCwgNSwgNiwgN307XFxuICA1MzpcXHRcXG4gIDU0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYjUzX3BoeV9pbmZvIGJjbTYzMThfZXBoeV9pbmZvID0ge1xcbiAgNTU6XFx0XFx0LmVwaHlfZW5hYmxlX21hc2sgPSBCSVQoMCkgfCBCSVQoNCkgfCBCSVQoOCkgfCBCSVQoMTIpIHwgQklUKDE2KSxcXG4gIDU2OlxcdFxcdC5lcGh5X3BvcnRfbWFzayA9IEdFTk1BU0soKEFSUkFZX1NJWkUoYmNtNjMxOF9lcGh5X29mZnNldHMpIC0gMSksIDApLFxcbiAgNTc6XFx0XFx0LmVwaHlfYmlhc19iaXQgPSAyNCxcXG4gIDU4OlxcdFxcdC5lcGh5X29mZnNldCA9IGJjbTYzMThfZXBoeV9vZmZzZXRzLFxcbiAgNTk6XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0c3RhdGljIGNvbnN0IHUzMiBiY202MzY4X2VwaHlfb2Zmc2V0c1tdID0gezIsIDMsIDQsIDV9O1xcbiAgNjI6XFx0XFxuICA2MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGI1M19waHlfaW5mbyBiY202MzY4X2VwaHlfaW5mbyA9IHtcXG4gIDY0OlxcdFxcdC5lcGh5X2VuYWJsZV9tYXNrID0gQklUKDApLFxcbiAgNjU6XFx0XFx0LmVwaHlfcG9ydF9tYXNrID0gR0VOTUFTSygoQVJSQVlfU0laRShiY202MzY4X2VwaHlfb2Zmc2V0cykgLSAxKSwgMCksXFxuICA2NjpcXHRcXHQuZXBoeV9iaWFzX2JpdCA9IDAsXFxuICA2NzpcXHRcXHQuZXBoeV9vZmZzZXQgPSBiY202MzY4X2VwaHlfb2Zmc2V0cyxcXG4gIDY4OlxcdH07XFxuICA2OTpcXHRcXG4gIDcwOlxcdHN0YXRpYyBjb25zdCB1MzIgYmNtNjMyNjhfZXBoeV9vZmZzZXRzW10gPSB7NCwgOSwgMTR9O1xcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGI1M19waHlfaW5mbyBiY202MzI2OF9lcGh5X2luZm8gPSB7XFxuICA3MzpcXHRcXHQuZ3BoeV9wb3J0X21hc2sgPSBCSVQoMyksXFxuICA3NDpcXHRcXHQuZXBoeV9lbmFibGVfbWFzayA9IEdFTk1BU0soNCwgMCksXFxuICA3NTpcXHRcXHQuZXBoeV9wb3J0X21hc2sgPSBHRU5NQVNLKChBUlJBWV9TSVpFKGJjbTYzMjY4X2VwaHlfb2Zmc2V0cykgLSAxKSwgMCksXFxuICA3NjpcXHRcXHQuZXBoeV9iaWFzX2JpdCA9IDI0LFxcbiAgNzc6XFx0XFx0LmVwaHlfb2Zmc2V0ID0gYmNtNjMyNjhfZXBoeV9vZmZzZXRzLFxcbiAgNzg6XFx0fTtcXG4gIDc5OlxcdFxcbiAgODA6XFx0c3RhdGljIGludCBiNTNfbW1hcF9yZWFkOChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU4ICp2YWwpXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRzdHJ1Y3QgYjUzX21tYXBfcHJpdiAqcHJpdiA9IGRldi1cXHUwMDNlcHJpdjtcXG4gIDgzOlxcdFxcdHZvaWQgX19pb21lbSAqcmVncyA9IHByaXYtXFx1MDAzZXJlZ3M7XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdCp2YWwgPSByZWFkYihyZWdzICsgKHBhZ2UgXFx1MDAzY1xcdTAwM2MgOCkgKyByZWcpO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRyZXR1cm4gMDtcXG4gIDg4OlxcdH1cXG4gIDg5OlxcdFxcbiAgOTA6XFx0c3RhdGljIGludCBiNTNfbW1hcF9yZWFkMTYoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MTYgKnZhbClcXG4gIDkxOlxcdHtcXG4gIDkyOlxcdFxcdHN0cnVjdCBiNTNfbW1hcF9wcml2ICpwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbiAgOTM6XFx0XFx0dm9pZCBfX2lvbWVtICpyZWdzID0gcHJpdi1cXHUwMDNlcmVncztcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0aWYgKFdBUk5fT04ocmVnICUgMikpXFxuICA5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0aWYgKGRldi1cXHUwMDNlcGRhdGEgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VwZGF0YS1cXHUwMDNlYmlnX2VuZGlhbilcXG4gIDk5OlxcdFxcdFxcdCp2YWwgPSBpb3JlYWQxNmJlKHJlZ3MgKyAocGFnZSBcXHUwMDNjXFx1MDAzYyA4KSArIHJlZyk7XFxuIDEwMDpcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjQ5OjU3LjEwMTg0MjYzOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk5ODEwMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFN5emthbGxlciBQbGF0Zm9ybSBEZXZpY2UgTXVzaW5ncyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgc3l6a2FsbGVyIGhhbmRsZXMgcGxhdGZvcm0gZGV2aWNlcyBmb3IgdGhpcyBkcml2ZXIuIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgeWVhaCwgaXQgKmNhbiogaW5zdGFudGlhdGUgdGhlbSwgcmlnaHQ/IFByb2JhYmx5IHVzaW5nIGBzeXpfZGV2bWVtYCBvciBzb21ldGhpbmcgY29tcGFyYWJsZSwgb3IgZXZlbiBieSBpbmplY3RpbmcgZGV2aWNlIHRyZWUgbm9kZXMuIFRoYXQncyB0aGUgdHlwaWNhbCBhcHByb2FjaC4gQnV0IHRoZW4gSSBxdWlja2x5IHJlbWVtYmVyIHN5emthbGxlcidzIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25zLCBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBzbyBvbi4gRm9yIHBsYXRmb3JtIGRldmljZXMsIHRob3VnaCwgaXQgdXN1YWxseSBzdGlja3MgdG8gZWl0aGVyIGBzeXpfaW5pdF9uZXRfZGV2aWNlYCwgc2ltaWxhciB2aXJ0dWFsIGRldmljZXMsIG9yIHRoYXQgc29ydCBvZiB0aGluZy5cblxuTm93IHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHN5emthbGxlciBldmVuICpmdXp6KiBEU0EgZHJpdmVycyBzcGVjaWZpY2FsbHk/IEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgY292ZXJhZ2UuIFNvLCBJIGhhdmUgdG8gY2hlY2sgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgdG8gc2VlIGlmIERTQSBpcyBldmVuIHJlcHJlc2VudGVkLiBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTExLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NTA6MDEuNDAxNjU1ODY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTkzNzg1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYjUzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjUwOjAxLjQ5MzYwMzE4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkxNzE3NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN5emthbGxlci1SZWxhdGVkIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoZXNlIHN5emthbGxlciBkZXNjcmlwdGlvbnMsIHRoZXkncmUgbm90IGFjdHVhbGx5ICppbiogdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgYXJlIHRoZXk/IEJ1dCB0aGlzIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3LlwiIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBzeXprYWxsZXIgaGFzIGVpdGhlciBmbGFnZ2VkIGEgYnVnIGhlcmUsIG9yIHNvbWVvbmUncyBydW5uaW5nIHNvbWUga2luZCBvZiBzeXprYWxsZXItcmVsYXRlZCBwYXRjaCB0ZXN0aW5nLlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGlzIGV2ZW4gcmVhY2hhYmxlLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgY2hhbmdpbmcgYHJldHVybiAwO2AgdG8gYHJldHVybiByZXQ7YCB3aXRoaW4gYGI1M19mZGJfZHVtcGAuIE5vdywgd2hlcmUgaXMgYGI1M19mZGJfZHVtcGAgY2FsbGVkIGZyb20/IEFoLCBpdCdzIGNhbGxlZCBmcm9tIGBkc2FfcG9ydF9mZGJfZHVtcGAuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGVyZSB0aGlzIG1pZ2h0IGJlIHRyaWdnZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI1NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo1MDowNS4yODUzMjUyMzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjMyOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBvcnRfZmRiX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL3BvcnQuYz0xMTM1PWludCBkc2FfcG9ydF9sYWdfZmRiX2RlbChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxcbi0tXFxubmV0L2RzYS9wb3J0LmMtMTE1My1cXG5uZXQvZHNhL3BvcnQuYzoxMTU0OmludCBkc2FfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBkc2FfZmRiX2R1bXBfY2JfdCAqY2IsIHZvaWQgKmRhdGEpXFxubmV0L2RzYS9wb3J0LmMtMTE1NS17XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xMTU4LVxcbm5ldC9kc2EvcG9ydC5jOjExNTk6XFx0aWYgKCFkcy1cXHUwMDNlb3BzLVxcdTAwM2Vwb3J0X2ZkYl9kdW1wKVxcbm5ldC9kc2EvcG9ydC5jLTExNjAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbm5ldC9kc2EvcG9ydC5jLTExNjEtXFxubmV0L2RzYS9wb3J0LmM6MTE2MjpcXHRyZXR1cm4gZHMtXFx1MDAzZW9wcy1cXHUwMDNlcG9ydF9mZGJfZHVtcChkcywgcG9ydCwgY2IsIGRhdGEpO1xcbm5ldC9kc2EvcG9ydC5jLTExNjMtfVxcbi0tXFxubmV0L2RzYS9wb3J0Lmg9NjM9aW50IGRzYV9wb3J0X2xhZ19mZGJfZGVsKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXFxubmV0L2RzYS9wb3J0LmgtNjQtXFx0XFx0XFx0IHUxNiB2aWQpO1xcbm5ldC9kc2EvcG9ydC5oOjY1OmludCBkc2FfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBkc2FfZmRiX2R1bXBfY2JfdCAqY2IsIHZvaWQgKmRhdGEpO1xcbm5ldC9kc2EvcG9ydC5oLTY2LWludCBkc2FfcG9ydF9tZGJfYWRkKGNvbnN0IHN0cnVjdCBkc2FfcG9ydCAqZHAsXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz01NTk9ZHNhX3VzZXJfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L2RzYS91c2VyLmMtNTcxLVxcbm5ldC9kc2EvdXNlci5jOjU3MjpcXHRlcnIgPSBkc2FfcG9ydF9mZGJfZHVtcChkcCwgZHNhX3VzZXJfcG9ydF9mZGJfZG9fZHVtcCwgXFx1MDAyNmR1bXApO1xcbm5ldC9kc2EvdXNlci5jLTU3My1cXHQqaWR4ID0gZHVtcC5pZHg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjUwOjA1LjMzNTk2NzM5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjEyNTI2MzM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgZHNhX3VzZXJfZmRiX2R1bXBgIGluIFN5emthbGxlcidzIFFFTVUgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBgZHNhX3VzZXJfZmRiX2R1bXBgIGlzIHRyaWdnZXJlZCB0aHJvdWdoIG5ldGxpbmssIHdoaWNoIG1lYW5zIHVzZXJzcGFjZSBjYW4gcmVhY2ggaXQgKmlmKiB0aGUgZGV2aWNlIGV4aXN0cy4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgYGI1M2AgZGV2aWNlIGV2ZW4gZXhpc3QgaW4gU3l6a2FsbGVyJ3MgUUVNVSBlbnZpcm9ubWVudD8gU3l6a2FsbGVyJ3MgcnVubmluZyBpbiBRRU1VLCBzbyBpdCB3b24ndCBiZSByZWFjaGFibGUgdW5sZXNzIHRoZSBgYjUzYCBkcml2ZXIgY2FuIGJlIGluc3RhbnRpYXRlZCBzb21laG93LlxuXG5Db3VsZCBgc3l6X2Rldm1lbWAgb3Igc29tZXRoaW5nIHNpbWlsYXIgY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlPyBPciBtYXliZSBgZHNhX2xvb3BgPyBOb3BlLCBgZHNhX2xvb3BgIHVzZXMgYGRzYV9sb29wX29wc2AsIG5vdCBkaXJlY3RseSB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGI1M2AgbWlnaHQgYmUgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZS4gSXMgaXQgdGllZCB0byBhIHZpcnR1YWwgYnVzLCBvciBpcyBpdCBwdXJlbHkgcGh5c2ljYWw/XG5cbkFoYSwgYGI1M19tbWFwLmNgIGlzIGEgcGxhdGZvcm0gZHJpdmVyLiBQbGF0Zm9ybSBkcml2ZXJzICpjYW4qIHNvbWV0aW1lcyBiZSBjcmVhdGVkIGZyb20gdXNlcnNwYWNlLi4uIGJ1dCBub3QgdmlhIGAvc3lzL2J1cy9wbGF0Zm9ybS9uZXdfZGV2aWNlYCwgdGhhdCdzIG5vdCBob3cgaXQgd29ya3MuIFdhaXQsIEkgdGhpbmsgU3l6a2FsbGVyIGNhbiBpbmplY3QgZGV2aWNlIHRyZWUgb3ZlcmxheXMuLi4gb3IgbWF5YmUgdGhyb3VnaCBgc3l6X21vdW50X2ltYWdlYD8gVGhhdCBjYW4gbW91bnQgaW1hZ2VzLCBidXQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgcmVxdWlyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBzbyBJIGNhbid0IGJlIHN1cmUuXG5cbkhhbmcgb24uLi4gaXNuJ3QgYGI1M2AgYW4gTURJTyBkcml2ZXI/IE5vLCBgYjUzX21kaW8uY2AgaXMgdGhlIE1ESU8gb25lLiBDYW4gTURJTyBkZXZpY2VzIGJlIGluc3RhbnRpYXRlZCBmcm9tIHVzZXJzcGFjZT8gVXN1YWxseSBub3QuXG5cbkJ1dC4uLiB3YWl0IGEgc2Vjb25kLiBJcyB0aGlzIHBhdGNoIGV2ZW4gZml4aW5nIGEgYnVnIHRoYXQgd291bGQgYmUgdHJpZ2dlcmVkIGluIHRoaXMgZW52aXJvbm1lbnQ/IE1heWJlIGl0J3MgYSBzdGF0aWMgYW5hbHl6ZXIgZmluZGluZyBvciBzb21ldGhpbmcgdGhhdCBvbmx5IGFmZmVjdHMgcmVhbCBoYXJkd2FyZT8gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0IGNvbmNlcm5zOiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgb3IgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIFFFTVUuXG5cbklzIGBiNTNgIGEgdmVuZG9yLXNwZWNpZmljIHN3aXRjaCBkcml2ZXIgdGhhdCBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZT8gWWVzLCBpdCdzIEJyb2FkY29tIEJDTTUzeHguIExldCdzIHNlZSBpZiBRRU1VIGVtdWxhdGVzIEJDTTUzeHguIE5vcGUsIHN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoYXQgc3BlY2lmaWMgQnJvYWRjb20gY2hpcC5cblxuQnV0IHdhaXQsIFFFTVUgKmRvZXMqIGVtdWxhdGUgc29tZSBCcm9hZGNvbSBib2FyZHMsIGxpa2UgYHJhc3BpYCAoUmFzcGJlcnJ5IFBpKSBvciBgYmNtMjgzNWAuIERvIHRob3NlIGhhdmUgYSBCQ001M3h4IHN3aXRjaD8gTm8sIG5laXRoZXIgb2YgdGhlbSBkby4gV2hhdCBhYm91dCBgYmNtNTN4eGA/IFFFTVUgZG9lc24ndCBoYXZlIGEgc3BlY2lmaWMgYGJjbTUzeHhgIG1hY2hpbmUgdHlwZS5cblxuT2theSwgc28gSSdtIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHF1ZXN0aW9uLiBJcyB0aGVyZSAqYW55KiB3YXkgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBRRU1VPyBJJ2QgY2hlY2sgdGhlIFFFTVUgc291cmNlIGZvciBgYjUzYCwgYnV0IEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdC5cblxuTGV0J3Mgc2VlIGlmIGl0J3MgYSBQQ0kgZGV2aWNlLiBgYjUzX21tYXBgIGlzIHBsYXRmb3JtLiBgYjUzX21kaW9gIGlzIE1ESU8uIGBiNTNfc3BpYCBpcyBTUEkuIGBiNTNfc3JhYmAgaXMgcGxhdGZvcm0uIFNvLCBub25lIG9mIHRoZXNlIGFyZSBQQ0kuIENhbiBJIHNvbWVob3cgdXNlIGBzcGlkZXZgIHRvIHNpbXVsYXRlIGEgZGV2aWNlPyBObywgdGhhdCdzIGp1c3QgYSB1c2VyLXNwYWNlIGludGVyZmFjZSB0byBTUEksIG5vdCBkZXZpY2UgZW11bGF0aW9uLlxuXG5XYWl0LCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgc2ltdWxhdG9ycyBmb3IgSTJDLCBTUEksIHRoaW5ncyBsaWtlIHRoYXQsIHJpZ2h0PyBJJ20gdGhpbmtpbmcgb2YgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYHZoY2lgIGZvciBVU0IsIGB1aW5wdXRgIGZvciBpbnB1dCwgYHZrbXNgIGZvciBEUk0sIGBuZXRkZXZzaW1gIGZvciBuZXR3b3JraW5nLiBJcyB0aGVyZSBhIHNpbXVsYXRvciBmb3IgRFNBPyBZZXMsIHRoZXJlJ3MgYGRzYV9sb29wYC4gSSBzaG91bGQgY2hlY2sgdGhhdCBvbmUgb3V0LiBMZXQgbWUgbG9vayBhdCBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTM2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjUwOjE3LjQ2MTIzNDk2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwMzc5MDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImI1M1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NTA6MTcuNTIwMjgxNzE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzUwNTQ2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGI1M2AgRHJpdmVyIGFuZCBpdHMgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayB0aGlzIGRvd24uIGBkc2FfbG9vcGAgaXMganVzdCBhIG1vY2sgZHJpdmVyOyBpdCdzIG5vdCBhY3R1YWxseSB1c2luZyBgYjUzYC4gVGhpcyBtZWFucyBgYjUzYCBpcyBkZWZpbml0ZWx5IGhhcmR3YXJlLXNwZWNpZmljLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZSBCcm9hZGNvbSBCQ001M3h4IHN3aXRjaCwgYW5kIHRoYXQgbWVhbnMgd2UgY2FuJ3QgZ2V0IHRvIGl0IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBzdGFuZGFyZCBRRU1VLiBJdCBuZWVkcyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBmdXp6aW5nIHdvdWxkIGJlIGltcG9zc2libGUgb3IgcG9pbnRsZXNzLlxuXG5CdXQgaG9sZCBvbiwgbGV0IG1lIGJlIHRob3JvdWdoLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgbG9vcGhvbGVzLiBDb3VsZCBgYjUzX2ZkYl9kdW1wYCBiZSBjYWxsZWQgZnJvbSAqc29tZXdoZXJlKiBlbHNlLCBwZXJoYXBzIGluZGlyZWN0bHk/IE5vcGUsIGl0J3MgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgYGI1M19tbWFwYCwgYGI1M19tZGlvYCwgYGI1M19zcGlgLCBhbmQgYGI1M19zcmFiYC4gQW5kIGEgcXVpY2sgZ2xhbmNlIGF0IHRob3NlIGNvbmZpcm1zIGl0IC0gdGhleSdyZSBhbGwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmNgLiBBaCwgeWVzLCBjb25maXJtZWQuIE5vdGhpbmcgdGhlcmUgdGhhdCBkZXZpYXRlcyBmcm9tIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBuYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6NTA6MjIuNDU1MzM5OTc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qXFxuICAgMjpcXHQgKiBCNTMgcmVnaXN0ZXIgYWNjZXNzIHRocm91Z2ggTUlJIHJlZ2lzdGVyc1xcbiAgIDM6XFx0ICpcXG4gICA0OlxcdCAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEpvbmFzIEdvcnNraSBcXHUwMDNjam9nb0BvcGVud3J0Lm9yZ1xcdTAwM2VcXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcXG4gICA3OlxcdCAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmVcXG4gICA4OlxcdCAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXFxuICAgOTpcXHQgKlxcbiAgMTA6XFx0ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFxcXCJBUyBJU1xcXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXFxuICAxMTpcXHQgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXFxuICAxMjpcXHQgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxcbiAgMTM6XFx0ICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xcbiAgMTQ6XFx0ICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXFxuICAxNTpcXHQgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRlxcbiAgMTY6XFx0ICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cXG4gIDE3OlxcdCAqL1xcbiAgMTg6XFx0XFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICAyMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAyMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAgMjQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JyY21waHkuaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuICAyNzpcXHRcXG4gIDI4OlxcdCNpbmNsdWRlIFxcXCJiNTNfcHJpdi5oXFxcIlxcbiAgMjk6XFx0XFxuICAzMDpcXHQvKiBNSUkgcmVnaXN0ZXJzICovXFxuICAzMTpcXHQjZGVmaW5lIFJFR19NSUlfUEFHRSAgICAweDEwICAgIC8qIE1JSSBQYWdlIHJlZ2lzdGVyICovXFxuICAzMjpcXHQjZGVmaW5lIFJFR19NSUlfQUREUiAgICAweDExICAgIC8qIE1JSSBBZGRyZXNzIHJlZ2lzdGVyICovXFxuICAzMzpcXHQjZGVmaW5lIFJFR19NSUlfREFUQTAgICAweDE4ICAgIC8qIE1JSSBEYXRhIHJlZ2lzdGVyIDAgKi9cXG4gIDM0OlxcdCNkZWZpbmUgUkVHX01JSV9EQVRBMSAgIDB4MTkgICAgLyogTUlJIERhdGEgcmVnaXN0ZXIgMSAqL1xcbiAgMzU6XFx0I2RlZmluZSBSRUdfTUlJX0RBVEEyICAgMHgxYSAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAyICovXFxuICAzNjpcXHQjZGVmaW5lIFJFR19NSUlfREFUQTMgICAweDFiICAgIC8qIE1JSSBEYXRhIHJlZ2lzdGVyIDMgKi9cXG4gIDM3OlxcdFxcbiAgMzg6XFx0I2RlZmluZSBSRUdfTUlJX1BBR0VfRU5BQkxFICAgICBCSVQoMClcXG4gIDM5OlxcdCNkZWZpbmUgUkVHX01JSV9BRERSX1dSSVRFICAgICAgQklUKDApXFxuICA0MDpcXHQjZGVmaW5lIFJFR19NSUlfQUREUl9SRUFEICAgICAgIEJJVCgxKVxcbiAgNDE6XFx0XFxuICA0MjpcXHRzdGF0aWMgaW50IGI1M19tZGlvX29wKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTE2IG9wKVxcbiAgNDM6XFx0e1xcbiAgNDQ6XFx0XFx0aW50IGk7XFxuICA0NTpcXHRcXHR1MTYgdjtcXG4gIDQ2OlxcdFxcdGludCByZXQ7XFxuICA0NzpcXHRcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2LVxcdTAwM2Vwcml2O1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VjdXJyZW50X3BhZ2UgIT0gcGFnZSkge1xcbiAgNTA6XFx0XFx0XFx0Lyogc2V0IHBhZ2UgbnVtYmVyICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjUwOjIyLjQ1NTQzNDI1NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzI0MTUwMDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1ESU8gRHJpdmVyIEZ1enppbmcgQ29uY2VybnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGZvciBhbiBNRElPIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gd2UgZXZlbiBmdXp6IE1ESU8gZGV2aWNlcyB3aXRoIHN5emthbGxlcj8gVGhlIHByb2JsZW0gaXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGJ1aWx0LWluLCBnZW5lcmljIHdheSB0byBjcmVhdGUgdmlydHVhbCBNRElPIGRldmljZXMuIEkgbWVhbiwgaXQgaGFzIHRoaW5ncyBsaWtlIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgLCBidXQgbm90aGluZyBzcGVjaWZpYyBmb3IgTURJTyB0byBqdXN0IHNwaW4gdXAgYXJiaXRyYXJ5IGRldmljZXMgZm9yIHRlc3RpbmcuXG5cblRoZW4gSSByZS1yZWFkIHRoZSBwcm9tcHQsIGFuZCBpdCBzYXlzIFwiV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLlwiIEkgc2VlIHRoZSBzaW1pbGFyaXRpZXMsIGV2ZW4gdGhvdWdoIHRoaXMgaXNuJ3QgUENJZS4gSXQncyBhIHZlbmRvci1zcGVjaWZpYyBzd2l0Y2ggZHJpdmVyIOKAkyBhIEJyb2FkY29tIEJDTTUzeHgg4oCTIHdoaWNoIGlzIGp1c3QgdGhlIHNhbWUuIEl0IHJlbGllcyBvbiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzbid0IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBzbyBpdCBmYWxscyBpbnRvIHRoZSBzYW1lIGNhdGVnb3J5IGFzIHRob3NlIGRyaXZlcnMgdGhleSBtZW50aW9uLlxuXG5MZXQgbWUgcXVpY2tseSBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgKm9ubHkqIGZpbGUgdG91Y2hlZCBieSB0aGUgcGF0Y2guIFllcCwgaXQncyBqdXN0IGBkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY2AuXG5cbkdpdmVuIHRoYXQsIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjk1LCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjUwOjI4LjE3OTU4Njk0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiNTNfZmRiX2R1bXAgZnVuY3Rpb24gaW4gdGhlIEJyb2FkY29tIEJDTTUzeHggRFNBIHN3aXRjaCBkcml2ZXIgKGI1MykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgc3dpdGNoIGhhcmR3YXJlIChjb25uZWN0ZWQgdmlhIE1ESU8sIE1NQVAsIFNQSSwgb3IgU1JBQikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGI1M19mZGJfZHVtcCBmdW5jdGlvbiBpbiB0aGUgQnJvYWRjb20gQkNNNTN4eCBEU0Egc3dpdGNoIGRyaXZlciAoYjUzKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgKGNvbm5lY3RlZCB2aWEgTURJTywgTU1BUCwgU1BJLCBvciBTUkFCKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDo1MDoyOC4xNzk2MTgzMTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7zx85[1] Phase: Running StartedAt: 2026-08-12 20:50:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7zx85[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-12 20:50:40 +0000 UTC FinishedAt: 2026-08-12 20:50:45 +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,}