Name: series-workflowr7l2g Phase: Failed StartedAt: 2026-09-15 16:35:45 +0000 UTC FinishedAt: 2026-09-15 17:03:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7l2g[0] Phase: Succeeded StartedAt: 2026-09-15 16:35:45 +0000 UTC FinishedAt: 2026-09-15 17:03:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7l2g[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 16:35:45 +0000 UTC FinishedAt: 2026-09-15 17:03:14 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIHRoZSBzdHJpbmcgXCYjMzQ7UlNWX0hVR0VUTEJcJiMzNDsgY29ycmVzcG9uZGluZyB0byB0aGUgTUVNQkxPQ0tfUlNSVl9IVUdFVExCIGZsYWcgdG8gdGhlIGZsYWduYW1lW10gdGFibGUgaW4gbW0vbWVtYmxvY2suYy4gVGhpcyBhcnJheSBpcyBzb2xlbHkgdXNlZCBmb3IgZm9ybWF0dGluZyBodW1hbi1yZWFkYWJsZSBmbGFnIG5hbWVzIGluIGRlYnVnZnMgKG1lbWJsb2NrX2RlYnVnX3Nob3cpLiBJdCBpcyBwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nL291dHB1dCBmb3JtYXR0aW5nIHRoYXQgZG9lcyBub3QgYWx0ZXIgYW55IGtlcm5lbCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIGFuZCBpbnRyb2R1Y2VzIG5vIGFzc2VydGlvbnMuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3Qgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDllZjc0YTYxM2FhMGFlYjVjOWI1OWZhYTRiMWMyYjUxOTNhYjRjZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxNjo1NToyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xuaW5kZXggMzE5NjFlZDYyOGIwYS4uZjUxODExZGIxMThhMSAxMDA2NDRcbi0tLSBhL21tL21lbWJsb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmNcbkBAIC0yODc0LDYgJiM0MzsyODc0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xuIFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfTk9JTklUKV0gPSBcJiMzNDtSU1ZfTklUXCYjMzQ7LFxuIFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfS0VSTildID0gXCYjMzQ7UlNWX0tFUk5cJiMzNDssXG4gXHRbaWxvZzIoTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpXSA9IFwmIzM0O0tIT19TQ1JBVENIXCYjMzQ7LFxuJiM0MztcdFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFwmIzM0O1JTVl9IVUdFVExCXCYjMzQ7LFxuIH07XG4gXG4gc3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgdGhlIHN0cmluZyBcJiMzNDtSU1ZfSFVHRVRMQlwmIzM0OyBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRU1CTE9DS19SU1JWX0hVR0VUTEIgZmxhZyB0byB0aGUgZmxhZ25hbWVbXSB0YWJsZSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGFycmF5IGlzIHNvbGVseSB1c2VkIGZvciBmb3JtYXR0aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyAobWVtYmxvY2tfZGVidWdfc2hvdykuIEl0IGlzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcvb3V0cHV0IGZvcm1hdHRpbmcgdGhhdCBkb2VzIG5vdCBhbHRlciBhbnkga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGludHJvZHVjZXMgbm8gYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWVmNzRhNjEzYWEwYWViNWM5YjU5ZmFhNGIxYzJiNTE5M2FiNGNkZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDE2OjU1OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggMzE5NjFlZDYyOGIwYS4uZjUxODExZGIxMThhMSAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1ibG9jay5jCkBAIC0yODc0LDYgJiM0MzsyODc0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0gewogCVtpbG9nMihNRU1CTE9DS19SU1JWX05PSU5JVCldID0gJiMzNDtSU1ZfTklUJiMzNDssCiAJW2lsb2cyKE1FTUJMT0NLX1JTUlZfS0VSTildID0gJiMzNDtSU1ZfS0VSTiYjMzQ7LAogCVtpbG9nMihNRU1CTE9DS19LSE9fU0NSQVRDSCldID0gJiMzNDtLSE9fU0NSQVRDSCYjMzQ7LAomIzQzOwlbaWxvZzIoTUVNQkxPQ0tfUlNSVl9IVUdFVExCKV0gPSAmIzM0O1JTVl9IVUdFVExCJiMzNDssCiB9OwogCiBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBCbG9jayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaXRzIGltcGxpY2F0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgdGFyZ2V0IGlzIHRoZSBgbW0vbWVtYmxvY2suY2AgZmlsZSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nIOKAkyB0aGF0JiMzOTtzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGVycml0b3J5LiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB3aGF0JiMzOTtzIGJlaW5nIHR3ZWFrZWQuIEdpdmVuIHRoZSBsb2NhdGlvbiwgYW5kIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBsaWtlbHkgaGF2ZSB0byBkbyB3aXRoIHRoZSBpbml0aWFsIG1lbW9yeSBtYXAsIG1lbW9yeSBob3RwbHVnLCBvciByZXNlcnZhdGlvbiBvZiBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucy4KClJpZ2h0LCBgbW0vbWVtYmxvY2suY2AuLi4gbm93IEkgbmVlZCB0byBhY3R1YWxseSBzZWUgdGhlIGNoYW5nZXMuIExpbmUgMjg3NCBpcyB0aGUgbGlrZWx5IGtleSBhcmVhLCBzbyBJJiMzOTtsbCB3YW50IHRvIGZvY3VzIHRoZXJlLiBHb29kIHRoaW5nIEkgaGF2ZSBgcmVhZC1maWxlYCBhbmQgYGdyZXBwZXJgIGF0IG15IGRpc3Bvc2FsLiBJJiMzOTtsbCBzdGFydCB3aXRoIGByZWFkLWZpbGVgIHRvIGdldCBhIGdlbmVyYWwgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE5vIG5lZWQgdG8gaW1tZWRpYXRlbHkganVtcCBpbnRvIGEgZ3JlcCBzZWFyY2gsIGxldCYjMzk7cyBnZXQgc29tZSBjb250ZXh0IGZpcnN0LiBJIHdhbnQgdG8gc2VlIHRoZSAqZmxvdyogYW5kICpsb2dpYyogc3Vycm91bmRpbmcgdGhlIGNoYW5nZS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIGNvcnJlY3RuZXNzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg2MDpcdFx0cmV0dXJuIDE7XG4yODYxOlx0ZXJyX3BhcmFtOlxuMjg2MjpcdFx0cHJfZXJyKFwmIzM0O3Jlc2VydmVfbWVtOiBlbXB0eSBvciBtYWxmb3JtZWQgcGFyYW1ldGVyXFxuXCYjMzQ7KTtcbjI4NjM6XHRcdHJldHVybiAtRUlOVkFMO1xuMjg2NDpcdH1cbjI4NjU6XHRfX3NldHVwKFwmIzM0O3Jlc2VydmVfbWVtPVwmIzM0OywgcmVzZXJ2ZV9tZW0pO1xuMjg2NjpcdFxuMjg2NzpcdCNpZmRlZiBDT05GSUdfREVCVUdfRlNcbjI4Njg6XHQjaWZkZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xuMjg2OTpcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcbjI4NzA6XHRcdFtpbG9nMihNRU1CTE9DS19IT1RQTFVHKV0gPSBcJiMzNDtIT1RQTFVHXCYjMzQ7LFxuMjg3MTpcdFx0W2lsb2cyKE1FTUJMT0NLX01JUlJPUildID0gXCYjMzQ7TUlSUk9SXCYjMzQ7LFxuMjg3MjpcdFx0W2lsb2cyKE1FTUJMT0NLX05PTUFQKV0gPSBcJiMzNDtOT01BUFwmIzM0OyxcbjI4NzM6XHRcdFtpbG9nMihNRU1CTE9DS19EUklWRVJfTUFOQUdFRCldID0gXCYjMzQ7RFJWX01OR1wmIzM0OyxcbjI4NzQ6XHRcdFtpbG9nMihNRU1CTE9DS19SU1JWX05PSU5JVCldID0gXCYjMzQ7UlNWX05JVFwmIzM0OyxcbjI4NzU6XHRcdFtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9IFwmIzM0O1JTVl9LRVJOXCYjMzQ7LFxuMjg3NjpcdFx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcJiMzNDtLSE9fU0NSQVRDSFwmIzM0OyxcbjI4Nzc6XHRcdFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFwmIzM0O1JTVl9IVUdFVExCXCYjMzQ7LFxuMjg3ODpcdH07XG4yODc5Olx0XG4yODgwOlx0c3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcbjI4ODE6XHR7XG4yODgyOlx0XHRzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSA9IG0tXHUwMDNlcHJpdmF0ZTtcbjI4ODM6XHRcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZztcbjI4ODQ6XHRcdGludCBpLCBqLCBuaWQ7XG4yODg1Olx0XHR1bnNpZ25lZCBpbnQgY291bnQgPSBBUlJBWV9TSVpFKGZsYWduYW1lKTtcbjI4ODY6XHRcdHBoeXNfYWRkcl90IGVuZDtcbjI4ODc6XHRcbjI4ODg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR5cGUtXHUwMDNlY250OyBpJiM0MzsmIzQzOykge1xuMjg4OTpcdFx0XHRyZWcgPSBcdTAwMjZ0eXBlLVx1MDAzZXJlZ2lvbnNbaV07XG4yODkwOlx0XHRcdGVuZCA9IHJlZy1cdTAwM2ViYXNlICYjNDM7IHJlZy1cdTAwM2VzaXplIC0gMTtcbjI4OTE6XHRcdFx0bmlkID0gbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKHJlZyk7XG4yODkyOlx0XG4yODkzOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTRkOiBcJiMzNDssIGkpO1xuMjg5NDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVwYS4uJXBhIFwmIzM0OywgXHUwMDI2cmVnLVx1MDAzZWJhc2UsIFx1MDAyNmVuZCk7XG4yODk1Olx0XHRcdGlmIChudW1hX3ZhbGlkX25vZGUobmlkKSlcbjI4OTY6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU0ZCBcJiMzNDssIG5pZCk7XG4yODk3Olx0XHRcdGVsc2VcbjI4OTg6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU0YyBcJiMzNDssICYjMzk7eCYjMzk7KTtcbjI4OTk6XHRcdFx0aWYgKHJlZy1cdTAwM2VmbGFncykge1xuMjkwMDpcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncyA9IHJlZy1cdTAwM2VmbGFncztcbjI5MDE6XHRcdFx0XHRib29sIGZpcnN0ID0gdHJ1ZTtcbjI5MDI6XHRcbjI5MDM6XHRcdFx0XHRmb3IgKGogPSAwOyBmbGFnczsgaiYjNDM7JiM0MzssIGZsYWdzIFx1MDAzZVx1MDAzZT0gMSkge1xuMjkwNDpcdFx0XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IDEpKVxuMjkwNTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjI5MDY6XHRcdFx0XHRcdGlmICghZmlyc3QpXG4yOTA3Olx0XHRcdFx0XHRcdHNlcV9wdXRjKG0sICYjMzk7fCYjMzk7KTtcbjI5MDg6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIGogXHUwMDNjIGNvdW50ID8gZmxhZ25hbWVbal0gOiBcJiMzNDtVTktOT1dOXCYjMzQ7KTtcbjI5MDk6XHRcdFx0XHRcdGZpcnN0ID0gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYE1FTUJMT0NLX1JTUlZfSFVHRVRMQmAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCBhY3R1YWxseSByZXByZXNlbnRzIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZy4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMsIG9mIGNvdXJzZSwgYSB0YXJnZXRlZCBzZWFyY2guIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBmaW5kIHRoaXMgd2l0aGluIHRoZSByZWxldmFudCBjb2RlIG9yIGRvY3VtZW50YXRpb24uIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB0aGF0IHN0cmluZy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyB1c2FnZSBhbmQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1CTE9DS19SU1JWX0hVR0VUTEImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTI1PWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3Bvc3NpYmxlX3Bmbjtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNTMtICogYWxsb2NhdGlvbnMgbWF5IGhhcHBlbiBmcm9tIGluIHRoaXMgcGhhc2UuXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NTQ6ICogQE1FTUJMT0NLX1JTUlZfSFVHRVRMQjogbWVtb3J5IGlzIHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNTUtICovXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9NTY9ZW51bSBtZW1ibG9ja19mbGFncyB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTY0LVx0TUVNQkxPQ0tfS0hPX1NDUkFUQ0hcdD0gMHg0MCxcdC8qIHNjcmF0Y2ggbWVtb3J5IGZvciBrZXhlYyBoYW5kb3ZlciAqL1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjY1Olx0TUVNQkxPQ0tfUlNSVl9IVUdFVExCXHQ9IDB4ODAsIC8qIG1lbW9yeSByZXNlcnZlZCBmb3IgaHVnZXRsYiBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTY2LX07XG4tLVxubW0vbWVtYmxvY2suYz0xNzc3PXZvaWQgKiBfX2luaXQgbWVtYmxvY2tfYWxsb2NfaHVnZXRsYihwaHlzX2FkZHJfdCBzaXplLCBpbnQgbmlkLCBib29sIGV4YWN0X25pZClcbi0tXG5tbS9tZW1ibG9jay5jLTE4MjYtXG5tbS9tZW1ibG9jay5jOjE4Mjc6XHRpZiAoX19tZW1ibG9ja19yZXNlcnZlKGFkZHIsIHNpemUsIG5pZCwgTUVNQkxPQ0tfUlNSVl9LRVJOIHwgTUVNQkxPQ0tfUlNSVl9IVUdFVExCKSlcbm1tL21lbWJsb2NrLmMtMTgyOC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vbWVtYmxvY2suYz0xOTAzPXBoeXNfYWRkcl90IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUocGh5c19hZGRyX3QgbGltaXQsIGludCBuaWQpXG4tLVxubW0vbWVtYmxvY2suYy0xOTE3LVx0XHRpZiAobmlkID09IG1lbWJsb2NrX2dldF9yZWdpb25fbm9kZShyKSB8fCAhbnVtYV92YWxpZF9ub2RlKG5pZCkpXG5tbS9tZW1ibG9jay5jOjE5MTg6XHRcdFx0aWYgKHItXHUwMDNlZmxhZ3MgXHUwMDI2IE1FTUJMT0NLX1JTUlZfSFVHRVRMQilcbm1tL21lbWJsb2NrLmMtMTkxOS1cdFx0XHRcdHRvdGFsICYjNDM7PSBzaXplO1xuLS1cbm1tL21lbWJsb2NrLmM9Mjg2OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XG4tLVxubW0vbWVtYmxvY2suYy0yODc2LVx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcJiMzNDtLSE9fU0NSQVRDSFwmIzM0Oyxcbm1tL21lbWJsb2NrLmM6Mjg3NzpcdFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFwmIzM0O1JTVl9IVUdFVExCXCYjMzQ7LFxubW0vbWVtYmxvY2suYy0yODc4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1c2UgYGdpdCBsb2dgIHRvIHNlZSB0aGUgY29tbWl0IGhpc3RvcnksIG1heWJlIHRyYWNrIGRvd24gd2hlbiBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCB3YXMgaW50cm9kdWNlZCwgb3IgcXVpY2tseSBncm9rIHRoZSBjb250ZXh0LiBCdXQsIHdhaXQsIEkgZG9uJiMzOTt0IGhhdmUgdGhhdCB0b29sIGF2YWlsYWJsZSEgTm8gcHJvYmxlbSwgbGV0JiMzOTtzIGp1c3QgbG9vayBhdCB0aGUgZGlmZi4KClRoZSBkaWZmIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYSB2ZXJ5IHNtYWxsIG1vZGlmaWNhdGlvbiB0byBgbW0vbWVtYmxvY2suY2AuIFRoZSBvbmx5IGxpbmUgYWRkZWQgaXMgYFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9ICYjMzQ7UlNWX0hVR0VUTEImIzM0OyxgIGluc2lkZSB0aGUgYGZsYWduYW1lW11gIGFycmF5LiBUaGF0JiMzOTtzIGl0IQoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgaXMgYGZsYWduYW1lYCBkb2luZz8gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgZmxhZyBvciByZXNlcnZhdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgbWVtb3J5IGJsb2NrIG1hbmFnZW1lbnQuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYG1tL21lbWJsb2NrLmNgIGFyb3VuZCB0aG9zZSBsaW5lcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgbmV3bHkgYWRkZWQgc3RyaW5nIGBSU1ZfSFVHRVRMQmAgaXMgdXNlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBNRU1CTE9DS19SU1JWX0hVR0VUTEJgIGFuZCB3aHkgdGhpcyBpcyBiZWluZyBhZGRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4OTA6XHRcdFx0ZW5kID0gcmVnLVx1MDAzZWJhc2UgJiM0MzsgcmVnLVx1MDAzZXNpemUgLSAxO1xuMjg5MTpcdFx0XHRuaWQgPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmVnKTtcbjI4OTI6XHRcbjI4OTM6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslNGQ6IFwmIzM0OywgaSk7XG4yODk0Olx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JXBhLi4lcGEgXCYjMzQ7LCBcdTAwMjZyZWctXHUwMDNlYmFzZSwgXHUwMDI2ZW5kKTtcbjI4OTU6XHRcdFx0aWYgKG51bWFfdmFsaWRfbm9kZShuaWQpKVxuMjg5NjpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTRkIFwmIzM0OywgbmlkKTtcbjI4OTc6XHRcdFx0ZWxzZVxuMjg5ODpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTRjIFwmIzM0OywgJiMzOTt4JiMzOTspO1xuMjg5OTpcdFx0XHRpZiAocmVnLVx1MDAzZWZsYWdzKSB7XG4yOTAwOlx0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzID0gcmVnLVx1MDAzZWZsYWdzO1xuMjkwMTpcdFx0XHRcdGJvb2wgZmlyc3QgPSB0cnVlO1xuMjkwMjpcdFxuMjkwMzpcdFx0XHRcdGZvciAoaiA9IDA7IGZsYWdzOyBqJiM0MzsmIzQzOywgZmxhZ3MgXHUwMDNlXHUwMDNlPSAxKSB7XG4yOTA0Olx0XHRcdFx0XHRpZiAoIShmbGFncyBcdTAwMjYgMSkpXG4yOTA1Olx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjkwNjpcdFx0XHRcdFx0aWYgKCFmaXJzdClcbjI5MDc6XHRcdFx0XHRcdFx0c2VxX3B1dGMobSwgJiMzOTt8JiMzOTspO1xuMjkwODpcdFx0XHRcdFx0c2VxX3B1dHMobSwgaiBcdTAwM2MgY291bnQgPyBmbGFnbmFtZVtqXSA6IFwmIzM0O1VOS05PV05cJiMzNDspO1xuMjkwOTpcdFx0XHRcdFx0Zmlyc3QgPSBmYWxzZTtcbjI5MTA6XHRcdFx0XHR9XG4yOTExOlx0XHRcdFx0c2VxX3B1dGMobSwgJiMzOTtcXG4mIzM5Oyk7XG4yOTEyOlx0XHRcdH0gZWxzZSB7XG4yOTEzOlx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslc1xcblwmIzM0OywgXCYjMzQ7Tk9ORVwmIzM0Oyk7XG4yOTE0Olx0XHRcdH1cbjI5MTU6XHRcdH1cbjI5MTY6XHRcdHJldHVybiAwO1xuMjkxNzpcdH1cbjI5MTg6XHRERUZJTkVfU0hPV19BVFRSSUJVVEUobWVtYmxvY2tfZGVidWcpO1xuMjkxOTpcdFxuMjkyMDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdClcbjI5MjE6XHR7XG4yOTIyOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O21lbW9yeVwmIzM0OywgMDQ0NCwgcm9vdCxcbjI5MjM6XHRcdFx0XHQgICAgXHUwMDI2bWVtYmxvY2subWVtb3J5LCBcdTAwMjZtZW1ibG9ja19kZWJ1Z19mb3BzKTtcbjI5MjQ6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cmVzZXJ2ZWRcJiMzNDssIDA0NDQsIHJvb3QsXG4yOTI1Olx0XHRcdFx0ICAgIFx1MDAyNm1lbWJsb2NrLnJlc2VydmVkLCBcdTAwMjZtZW1ibG9ja19kZWJ1Z19mb3BzKTtcbjI5MjY6XHQjaWZkZWYgQ09ORklHX0hBVkVfTUVNQkxPQ0tfUEhZU19NQVBcbjI5Mjc6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cGh5c21lbVwmIzM0OywgMDQ0NCwgcm9vdCwgXHUwMDI2cGh5c21lbSxcbjI5Mjg6XHRcdFx0XHQgICAgXHUwMDI2bWVtYmxvY2tfZGVidWdfZm9wcyk7XG4yOTI5Olx0I2VuZGlmXG4yOTMwOlx0fVxuMjkzMTpcdFxuMjkzMjpcdCNlbHNlXG4yOTMzOlx0XG4yOTM0Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2RlYnVnZnNfZXhwb3NlX2FycmF5cyhzdHJ1Y3QgZGVudHJ5ICpyb290KSB7IH1cbjI5MzU6XHRcbjI5MzY6XHQjZW5kaWYgLyogQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSyAqL1xuMjkzNzpcdFxuMjkzODpcdHN0YXRpYyBpbnQgbWVtYmxvY2tfcmVzZXJ2ZV9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXG4yOTM5Olx0e1xuMjk0MDpcdFx0c3RydWN0IHJlc2VydmVfbWVtX3RhYmxlICptYXA7XG4yOTQxOlx0XHRjaGFyIHR4dHN6WzE2XTtcbjI5NDI6XHRcbjI5NDM6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZyZXNlcnZlX21lbV9sb2NrKTtcbjI5NDQ6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyByZXNlcnZlZF9tZW1fY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4yOTQ1Olx0XHRcdG1hcCA9IFx1MDAyNnJlc2VydmVkX21lbV90YWJsZVtpXTtcbjI5NDY6XHRcdFx0aWYgKCFtYXAtXHUwMDNlc2l6ZSlcbjI5NDc6XHRcdFx0XHRjb250aW51ZTtcbjI5NDg6XHRcbjI5NDk6XHRcdFx0bWVtc2V0KHR4dHN6LCAwLCBzaXplb2YodHh0c3opKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBEZWJ1Z2ZzIFN0cmluZyBBcnJheSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU2VjdGlvbiAyIG9mIHRoZSBwcm9tcHQgb3V0bGluZXMgdGhlIGNyaXRlcmlhIGZvciAqbm90KiBmdXp6aW5nIGEgY2hhbmdlLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGFycmF5IG1vZGlmaWNhdGlvbiBmYWxscyB1bmRlciB0aG9zZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgdGhpcyBhbHRlcmF0aW9uIGludHJvZHVjZXMgcG90ZW50aWFsIGZvciBidWdzIG9yIGFsdGVycyBjb3JlIGZ1bmN0aW9uYWxpdHksIG9yIGlmIGl0JiMzOTtzIHB1cmVseSBjb3NtZXRpYy4KCkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlOiBleHRlbmRpbmcgdGhlIGBmbGFnbmFtZWAgYXJyYXkgdXNlZCBpbiBgbWVtYmxvY2tfZGVidWdfc2hvdygpYCBieSBhZGRpbmcgYW4gZW50cnkgZm9yICYjMzQ7UlNWX0hVR0VUTEImIzM0Oy4gUHJldmlvdXNseSwgdGhlIGNvZGUgcHJpbnRlZCAmIzM0O1VOS05PV04mIzM0OyBmb3IgdGhpcyBmbGFnLCBub3cgaXQgcHJpbnRzIHRoZSBhc3NvY2lhdGVkIHN0cmluZy4KCkkgbmVlZCB0byBhbmFseXplIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgY2hhbmdlIHRvIGRvY3VtZW50YXRpb24/IE5vLiBJcyB0aGlzIGEgdXNlci1zcGFjZSBtb2RpZmljYXRpb24gbm90IGFmZmVjdGluZyB0aGUga2VybmVsIGltYWdlPyBOby4gSXMgdGhpcyBwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIHRoYXQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcz8gVGhhdCYjMzk7cyB0aGUgcXVlc3Rpb24uIEFkZGluZyBhIHN0cmluZyB0byBhbiBhcnJheSAqY291bGQqIGJlIGNvbnNpZGVyZWQgcHVyZWx5IGRlY29yYXRpdmUuICpIb3dldmVyKiwgSSBuZWVkIHRvIGJlIHN1cmUuIEkgc2VlIHRoYXQgdGhlIGxvZ2dpbmcgKmlzKiBjaGFuZ2luZyBub3cuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gSXMgdGhlcmUgYSBidWZmZXIgb3ZlcmZsb3cgY29uY2VybiBoZXJlPyBObywgSSBkb24mIzM5O3Qgc2VlIGFueSBkaXJlY3Qgd3JpdGVzICp0byogdGhlIGFycmF5LiBJcyB0aGVyZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gUG90ZW50aWFsbHkuIFByZXZpb3VzbHksIHRoZSBjb2RlIGNoZWNrZWQgYGogJmx0OyBjb3VudGAsIGFuZCB0aGF0IHdvdWxkIGhhdmUgc2hvcnQtY2lyY3VpdGVkLiBOb3csIGl0IHByaW50cyB0aGUgc3RyaW5nLiBTbyB0aGUgbG9naWMgaGFzIGNoYW5nZWQsIGluIHRoYXQgYnJhbmNoIG9mIGNvZGUuIElzIGl0IHBvc3NpYmxlIHRoYXQgYGZsYWduYW1lYCAqY291bGQqIGhhdmUgYSBgTlVMTGAgZWxlbWVudCBzb21ld2hlcmU/IEkgc2hvdWxkIGNoZWNrIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIG5vdCBwb3NzaWJsZSBieSBkZXNpZ24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlY2xhcmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gQW5kIHRoZSB2YWx1ZXMgb2YgYE1FTUJMT0NLXypgIGluIGBpbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhgLiBJdCBhcHBlYXJzIHRvIGJlIGluaXRpYWxpemVkIGluIHRoZSBhcnJheS4gVGhpcyBpcyBnb29kLiBJdCBzZWVtcyBzYWZlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMuCgpTbywgaW4gc3VtbWFyeSwgZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSAqYXBwZWFycyogcHVyZWx5IGRlY29yYXRpdmUgYXQgZmlyc3QgZ2xhbmNlLCB0aGUgY2hhbmdlIGluIG91dHB1dCBvZiBpbmZvcm1hdGlvbiBkb2VzIGNvbnN0aXR1dGUgYSBjaGFuZ2UgdG8gYSBsb2dnaW5nIGZ1bmN0aW9uLiBUaGlzIHdvdWxkIG5vdCBiZSBhICYjMzQ7c3RyaWN0bHkmIzM0OyBkZWNvcmF0aXZlIGxvZ2dpbmcgY2hhbmdlLCB3aGljaCBpcyBvbmUgb2YgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLgoKT2theSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBjaGFuZ2UgKmRvZXMqIHdhcnJhbnQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0ICoga2VybmVsIGluIGhhbmRvdmVyIG1vZGUuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGxcbiAgNTE6XHQgKiBtZW1vcnkgcmVzZXJ2YXRpb25zIHlldCwgc28gd2UgZ2V0IHNjcmF0Y2ggbWVtb3J5IGZyb20gdGhlIHByZXZpb3VzXG4gIDUyOlx0ICoga2VybmVsIHRoYXQgd2Uga25vdyBpcyBnb29kIHRvIHVzZS4gSXQgaXMgdGhlIG9ubHkgbWVtb3J5IHRoYXRcbiAgNTM6XHQgKiBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb20gaW4gdGhpcyBwaGFzZS5cbiAgNTQ6XHQgKiBATUVNQkxPQ0tfUlNSVl9IVUdFVExCOiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXNcbiAgNTU6XHQgKi9cbiAgNTY6XHRlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcbiAgNTc6XHRcdE1FTUJMT0NLX05PTkVcdFx0PSAweDAsXHQvKiBObyBzcGVjaWFsIHJlcXVlc3QgKi9cbiAgNTg6XHRcdE1FTUJMT0NLX0hPVFBMVUdcdD0gMHgxLFx0LyogaG90cGx1Z2dhYmxlIHJlZ2lvbiAqL1xuICA1OTpcdFx0TUVNQkxPQ0tfTUlSUk9SXHRcdD0gMHgyLFx0LyogbWlycm9yZWQgcmVnaW9uICovXG4gIDYwOlx0XHRNRU1CTE9DS19OT01BUFx0XHQ9IDB4NCxcdC8qIGRvbiYjMzk7dCBhZGQgdG8ga2VybmVsIGRpcmVjdCBtYXBwaW5nICovXG4gIDYxOlx0XHRNRU1CTE9DS19EUklWRVJfTUFOQUdFRCA9IDB4OCxcdC8qIGFsd2F5cyBkZXRlY3RlZCB2aWEgYSBkcml2ZXIgKi9cbiAgNjI6XHRcdE1FTUJMT0NLX1JTUlZfTk9JTklUXHQ9IDB4MTAsXHQvKiBkb24mIzM5O3QgaW5pdGlhbGl6ZSBzdHJ1Y3QgcGFnZXMgKi9cbiAgNjM6XHRcdE1FTUJMT0NLX1JTUlZfS0VSTlx0PSAweDIwLFx0LyogbWVtb3J5IHJlc2VydmVkIGZvciBrZXJuZWwgdXNlICovXG4gIDY0Olx0XHRNRU1CTE9DS19LSE9fU0NSQVRDSFx0PSAweDQwLFx0Lyogc2NyYXRjaCBtZW1vcnkgZm9yIGtleGVjIGhhbmRvdmVyICovXG4gIDY1Olx0XHRNRU1CTE9DS19SU1JWX0hVR0VUTEJcdD0gMHg4MCwgLyogbWVtb3J5IHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzICovXG4gIDY2Olx0fTtcbiAgNjc6XHRcbiAgNjg6XHQvKipcbiAgNjk6XHQgKiBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uIC0gcmVwcmVzZW50cyBhIG1lbW9yeSByZWdpb25cbiAgNzA6XHQgKiBAYmFzZTogYmFzZSBhZGRyZXNzIG9mIHRoZSByZWdpb25cbiAgNzE6XHQgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcmVnaW9uXG4gIDcyOlx0ICogQGZsYWdzOiBtZW1vcnkgcmVnaW9uIGF0dHJpYnV0ZXNcbiAgNzM6XHQgKiBAbmlkOiBOVU1BIG5vZGUgaWRcbiAgNzQ6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEwNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBmb3IgRnV6emluZzogbWVtYmxvY2sgRmxhZyBEZWZpbml0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYE1FTUJMT0NLXypgIGZsYWcgZGVmaW5pdGlvbnMuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGVhY2ggZmxhZyBpcyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBiaXQsIGNhbGN1bGF0ZWQgYXMgYSBwb3dlciBvZiAyIChpbG9nMikuIEkgY2FuIHNlZSB0aGF0IHRoZSBhcnJheSBpcyBmdWxseSBwb3B1bGF0ZWQsIGluZGV4ZWQgZnJvbSAwIHRvIDcuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNhcmVmdWxseSBjb25zaWRlciB0aGUgcHJvbXB0LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2hhbmdlIGlzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgb3Igbm90LCBhbmQgdGhlcmUgYXJlIHNwZWNpZmljICpuZWdhdGl2ZSogY3JpdGVyaWEgdGhhdCB3b3VsZCBleGNsdWRlIGl0LiBUaGUgcHJvbXB0IG91dGxpbmVzIHNldmVyYWwgY2F0ZWdvcmllcyB3aGVyZSBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gSSBuZWVkIHRvIGVuc3VyZSBpZiB0aGUgY2hhbmdlIGZhbGxzIHVuZGVyICYjMzQ7Tm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyYjMzQ7IG9yIHNvbWV0aGluZyBlbHNlIHRvIHNhdGlzZnkgYSBgZmFsc2VgIHJldHVybi4KClRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyYjMzQ7IGNhdGVnb3J5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgYWZmZWN0cyB0aGUgY29tcGlsZWQga2VybmVsIG9yIGEgZGF0YSBzdHJ1Y3R1cmUuIFRoZSBmbGFncyB0aGVtc2VsdmVzIHNlZW0gaW5ub2N1b3VzLCBidXQgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGV5IGFyZSB1c2VkLgoKQWhhISBJdCBsb29rcyBsaWtlIHRoZXNlIGZsYWdzIGFyZSB1c2VkIGluIGBtZW1ibG9ja19kZWJ1Z19zaG93KClgIHdpdGhpbiBkZWJ1Z2ZzLCBzcGVjaWZpY2FsbHkgaW4gYSBmaWxlIG5hbWVkICYjMzQ7bWVtb3J5JiMzNDsgYW5kIHNvbWV0aGluZyBjYWxsZWQgJiMzNDtyZXNlcnZlZCYjMzQ7LiBgc2VxX3B1dHMobSwgaiAmbHQ7IGNvdW50ID8gZmxhZ25hbWVbal0gOiAmIzM0O1VOS05PV04mIzM0Oyk7YCBpcyB3aGF0IEkgc2VlIGluIG15IGNvZGUuCgpTbyB3aGF0IGlzIGBmbGFnbmFtZWA/IEl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXWAuIFRoaXMgaXMgYW4gYXJyYXkuIEFycmF5cyAqYXJlKiBkYXRhIHN0cnVjdHVyZXMuIEFkZGluZyBhbiBlbGVtZW50IHRvIGl0IGxpdGVyYWxseSBpbmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIGFycmF5LiBTbywgaXMgZGVidWdmcyBwcmludGluZyBjb25zaWRlcmVkICYjMzQ7cHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyYjMzQ7PwoKR29pbmcgYmFjayB0byB0aGUgcHJvbXB0LCBpdCBjbGVhcmx5IHN0YXRlcyAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pICpvciogdHJhY2Vwb2ludHMgKnRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMqLiYjMzQ7IFNvLCB3aGlsZSB0aGlzIGRlYnVnZnMgb3V0cHV0ICpsb29rcyogbGlrZSBsb2dnaW5nLCBpdCYjMzk7cyBhbHNvIHRpZWQgdG8gYSBkYXRhIHN0cnVjdHVyZSAoYGZsYWduYW1lYCkuIEJ5IG1vZGlmeWluZyBhIGRhdGEgc3RydWN0dXJlLCB0aGUgY2hhbmdlIGlzbiYjMzk7dCAqcHVyZWx5KiBkZWNvcmF0aXZlLCBpdCBzZWVtcyB0byBhbHRlciBhIGRhdGEgc3RydWN0dXJlLiBUaGUgZmxhZ3MgdGhlbXNlbHZlcyBhcmUgcGFydCBvZiB0aGUgYG1lbWJsb2NrYCBkYXRhIHN0cnVjdHVyZSBpbiB0aGUgZWFybHkgYm9vdCBtZW1vcnkgYWxsb2NhdG9yLgoKQnV0IHdhaXQsIGNhbiB0aGlzIGJlIGZ1enplZD8gV2hhdCBkb2VzIHN5emthbGxlciBkbz8gRG9lcyBpdCByZWFkIGAvc3lzL2tlcm5lbC9kZWJ1Zy9tZW1ibG9jay9yZXNlcnZlZGA/IFRoYXQmIzM5O3Mgd2hhdCBJIHdhbnQgdG8ga25vdyEKCkFoLCBhIGNydWNpYWwgcXVlc3Rpb24sIGRvZXMgYGFtZDY0YCBldmVuIGtlZXAgdGhlIGBtZW1ibG9ja2A/IExldCBtZSBzZWUuIEkgc2VlIGAjaWZkZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS2AgLSBpcyB0aGF0IGRlZmluZWQgb24gYGFtZDY0YD8gVGhpcyBpcyBjcml0aWNhbCEgTGV0IG1lIGdyZXAgZm9yIHRoaXMgYW5kIGNoZWNrLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGV2ZW4gZXhpc3RzIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9LRUVQX01FTUJMT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy0zNS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL2FybS9LY29uZmlnOjM2Olx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9hcm0vS2NvbmZpZy0zNy1cdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy02My1cdHNlbGVjdCBBUkNIX0hBVkVfVFJBQ0VfTU1JT19BQ0NFU1NcbmFyY2gvYXJtNjQvS2NvbmZpZzo2NDpcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbmFyY2gvYXJtNjQvS2NvbmZpZy02NS1cdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01OC1cdHNlbGVjdCBBUkNIX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlmICFQUkVFTVBUSU9OXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjU5Olx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02MC1cdHNlbGVjdCBBUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVFxuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0yMS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL21pcHMvS2NvbmZpZzoyMjpcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbmFyY2gvbWlwcy9LY29uZmlnLTIzLVx0c2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVBcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE2Mi1cdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuYXJjaC9wb3dlcnBjL0tjb25maWc6MTYzOlx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9wb3dlcnBjL0tjb25maWctMTY0LVx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXHRpZiBQUENfUkFESVhfTU1VXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy02MC1cdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuYXJjaC9yaXNjdi9LY29uZmlnOjYxOlx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DSyBpZiBBQ1BJIHx8IEtFWEVDXG5hcmNoL3Jpc2N2L0tjb25maWctNjItXHRzZWxlY3QgQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcdGlmIDY0QklUIFx1MDAyNlx1MDAyNiBNTVVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE4NjQ9Y29uZmlnIElOVEVMX1REWF9IT1NUXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODY5LVx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG5hcmNoL3g4Ni9LY29uZmlnOjE4NzA6XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG5hcmNoL3g4Ni9LY29uZmlnLTE4NzEtXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jPTExMDQ9c3RhdGljIGludCBlZmlfbWVtX3Jlc2VydmVfaW9tZW0ocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTEyNi1cdCAqL1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6MTEyNzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spIFx1MDAyNlx1MDAyNiAhcmV0KVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTEyOC1cdFx0bWVtYmxvY2tfcmVzZXJ2ZShhZGRyLCBzaXplKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTE0PWV4dGVybiBzdHJ1Y3QgbWVtYmxvY2sgbWVtYmxvY2s7XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTE1LVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjExNjojaWZuZGVmIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMTctI2RlZmluZSBfX2luaXRfbWVtYmxvY2sgX19tZW1pbml0XG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYz01ODA9c3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2soc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYwNi1cbmtlcm5lbC9rZXhlY19maWxlLmM6NjA3OiNpZmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYwOC1zdGF0aWMgaW50IGtleGVjX3dhbGtfbWVtYmxvY2soc3RydWN0IGtleGVjX2J1ZiAqa2J1Zixcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTczNj1pbnQga2V4ZWNfbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy03NTgtXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc1OTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcbmtlcm5lbC9rZXhlY19maWxlLmMtNzYwLVx0XHRyZXQgPSBrZXhlY193YWxrX3Jlc291cmNlcyhrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xuLS1cbm1tL0tjb25maWc9NDg2PWNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxuLS1cbm1tL0tjb25maWctNDkxLSMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxubW0vS2NvbmZpZzo0OTI6Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xubW0vS2NvbmZpZy00OTMtXHRib29sXG4tLVxubW0vbWVtYmxvY2suYy0xMDAtICpcbm1tL21lbWJsb2NrLmM6MTAxOiAqIFVubGVzcyBhbiBhcmNoaXRlY3R1cmUgZW5hYmxlcyAlQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSywgdGhlXG5tbS9tZW1ibG9jay5jLTEwMi0gKiBtZW1ibG9jayBkYXRhIHN0cnVjdHVyZXMgKGV4Y2VwdCBcJiMzNDtwaHlzbWVtXCYjMzQ7KSB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGVcbi0tXG5tbS9tZW1ibG9jay5jPTM2ND1zdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcmVtb3ZlX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyByKVxuLS1cbm1tL21lbWJsb2NrLmMtMzgwLVxubW0vbWVtYmxvY2suYzozODE6I2lmbmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXG5tbS9tZW1ibG9jay5jLTM4Mi0vKipcbi0tXG5tbS9tZW1ibG9jay5jPTkzMj11bnNpZ25lZCBsb25nIGZyZWVfcmVzZXJ2ZWRfYXJlYSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQgcG9pc29uLCBjb25zdCBjaGFyICpzKVxuLS1cbm1tL21lbWJsb2NrLmMtOTUwLVxubW0vbWVtYmxvY2suYzo5NTE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSkge1xubW0vbWVtYmxvY2suYy05NTItXHRcdGlmIChzdGFydF9wYSBcdTAwM2MgZW5kX3BhKVxuLS1cbm1tL21lbWJsb2NrLmM9OTg4PWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcGh5c19mcmVlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4tLVxubW0vbWVtYmxvY2suYy05OTctXG5tbS9tZW1ibG9jay5jOjk5ODpcdGlmICghc2xhYl9pc19hdmFpbGFibGUoKSB8fCBJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxubW0vbWVtYmxvY2suYy05OTktXHRcdHJldCA9IG1lbWJsb2NrX3JlbW92ZV9yYW5nZShcdTAwMjZtZW1ibG9jay5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7XG4tLVxubW0vbWVtYmxvY2suYz0yODY1PV9fc2V0dXAoXCYjMzQ7cmVzZXJ2ZV9tZW09XCYjMzQ7LCByZXNlcnZlX21lbSk7XG4tLVxubW0vbWVtYmxvY2suYy0yODY3LSNpZmRlZiBDT05GSUdfREVCVUdfRlNcbm1tL21lbWJsb2NrLmM6Mjg2ODojaWZkZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xubW0vbWVtYmxvY2suYy0yODY5LXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcbi0tXG5tbS9tZW1ibG9jay5jPTI5MzQ9c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2RlYnVnZnNfZXhwb3NlX2FycmF5cyhzdHJ1Y3QgZGVudHJ5ICpyb290KSB7IH1cbm1tL21lbWJsb2NrLmMtMjkzNS1cbm1tL21lbWJsb2NrLmM6MjkzNjojZW5kaWYgLyogQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSyAqL1xubW0vbWVtYmxvY2suYy0yOTM3LVxuLS1cbm1tL21lbWJsb2NrLmM9Mjk1OD1zdGF0aWMgaW50IF9faW5pdCBtZW1ibG9ja19pbml0X2RlYnVnZnModm9pZClcbi0tXG5tbS9tZW1ibG9jay5jLTI5NjEtXG5tbS9tZW1ibG9jay5jOjI5NjI6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykgXHUwMDI2XHUwMDI2ICFyZXNlcnZlZF9tZW1fY291bnQpXG5tbS9tZW1ibG9jay5jLTI5NjMtXHRcdHJldHVybiAwO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUwMj1zdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzMi1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTUzMzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1MzQtXHRcdGlmIChyZXMtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUkVTT1VSQ0VfU1lTUkFNX0RSSVZFUl9NQU5BR0VEKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYwMy1lcnJvcl9tZW1ibG9ja19yZW1vdmU6XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2MDQ6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYwNS1cdFx0bWVtYmxvY2tfcmVtb3ZlKHN0YXJ0LCBzaXplKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTIyOTY9c3RhdGljIGludCB0cnlfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjMzNi1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MjMzNzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzM4LVx0XHRtZW1ibG9ja19yZW1vdmUoc3RhcnQsIHNpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBBUkNIX0tFRVBfTUVNQkxPQ0sgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgYEFSQ0hfS0VFUF9NRU1CTE9DS2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCBgQ09ORklHX0lOVEVMX1REWF9IT1NUYCBzZWxlY3RzIGl0LCBmb3VuZCBpbiBgYXJjaC94ODYvS2NvbmZpZ2AuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyB0cmlnZ2VyaW5nIHRoaXMgc2VsZWN0aW9uIHdpdGhpbiB0aGUgeDg2IGNvbmZpZyBzcGFjZS4gQSBxdWljayBncmVwIG9mIHRoZSBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgcmV2ZWFsIHRob3NlIGRlcGVuZGVuY2llcy4gQWhhISBMaW5lIDE4NzAsIGFjY29yZGluZyB0byB0aGUgbG9nLCBpcyB3aGVyZSB0aGUgc2VsZWN0aW9uIG9mIGBBUkNIX0tFRVBfTUVNQkxPQ0tgIG9jY3Vycy4gTGV0JiMzOTtzIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoYXQgc2VjdGlvbiBvZiBgYXJjaC94ODYvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIHVzaW5nIGBBUkNIX0tFRVBfTUVNQkxPQ0tgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYXJjaC94ODYvc2hzdGsucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTg2MTpcdFxuMTg2MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMTg2MzpcdFxuMTg2NDpcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxuMTg2NTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbjE4NjY6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxuMTg2NzpcdFx0ZGVwZW5kcyBvbiBYODZfNjRcbjE4Njg6XHRcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXG4xODY5Olx0XHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcbjE4NzA6XHRcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbjE4NzE6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4xODcyOlx0XHRkZXBlbmRzIG9uIFg4Nl9NQ0VcbjE4NzM6XHRcdGhlbHBcbjE4NzQ6XHRcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXG4xODc1Olx0XHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxuMTg3NjpcdFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cbjE4Nzc6XHRcbjE4Nzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4Nzk6XHRcbjE4ODA6XHRjb25maWcgRUZJXG4xODgxOlx0XHRib29sIFwmIzM0O0VGSSBydW50aW1lIHNlcnZpY2Ugc3VwcG9ydFwmIzM0O1xuMTg4MjpcdFx0ZGVwZW5kcyBvbiBBQ1BJXG4xODgzOlx0XHRzZWxlY3QgVUNTMl9TVFJJTkdcbjE4ODQ6XHRcdHNlbGVjdCBFRklfUlVOVElNRV9XUkFQUEVSU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE1lbWJsb2NrIERlYnVnZnMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYEFSQ0hfS0VFUF9NRU1CTE9DS2AgaXMgd2lkZWx5IHVzZWQgYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLCBhbmQgSSYjMzk7dmUgcXVpY2tseSBjb25maXJtZWQgaXRzIHByZXNlbmNlIGFjcm9zcyBBUk0sIEFSTTY0LCBMb29uZ0FyY2gsIE1JUFMsIFBvd2VyUEMsIFJJU0MtViAoY29uZGl0aW9uYWxseSksIGFuZCB4ODYgKGNvbmRpdGlvbmFsbHkpLiAgTm93LCBvbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0JiMzOTtzIGFkZGluZyBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCYjMzk7cyBuYW1lLCAmIzM0O1JTVl9IVUdFVExCJiMzNDssIHRvIHRoZSBgZmxhZ25hbWVgIGFycmF5LCB3aGljaCBpcyB1c2VkIGluIGBtZW1ibG9ja19kZWJ1Z19zaG93KClgIHRvIGRpc3BsYXkgbWVtb3J5IGJsb2NrIGZsYWdzIGluIGRlYnVnZnMuCgpUaGUgY29yZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGNvbnN0aXR1dGUgYSBjaGFuZ2UgdGhhdCYjMzk7cyAqd29ydGgqIGZ1enppbmc/ICBJIG5lZWQgdG8gY29uc2lkZXIgdGhlICYjMzQ7bmVnYXRpdmUgY3JpdGVyaWEuJiMzNDsgIFRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGZhbGwgdW5kZXIgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIC4uLiB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzJiMzNDs/IFRoZSBrZXkgc2VlbXMgdG8gYmUgd2hldGhlciB0aGUgYWRkaXRpb24gaXMgKnB1cmVseSBkZWNvcmF0aXZlKi4KClRoZSBgZmxhZ25hbWVgIGFycmF5LCB3aXRoaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3dgLCBpcyB1c2VkIHRvIHByaW50IGZsYWdzIHdoZW4gcmVhZGluZyBgL3N5cy9rZXJuZWwvZGVidWcvbWVtYmxvY2sve21lbW9yeSxyZXNlcnZlZH1gLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgb3V0cHV0IHdvdWxkIGRpc3BsYXkgJiMzNDtVTktOT1dOJiMzNDsgaWYgYSByZWdpb24gaGFkIHRoZSBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCBmbGFnLiBOb3csIGl0IHdpbGwgY29ycmVjdGx5IHByaW50ICYjMzQ7UlNWX0hVR0VUTEIuJiMzNDsgIFRoZSBjb2RlIGluIGBtZW1ibG9ja19kZWJ1Z19zaG93YCByZWFkcyB0aGVzZSBmbGFncyBmcm9tIHRoZSBtZW1vcnkgYmxvY2sgc3RydWN0dXJlcyBhbmQsICpiYXNlZCBvbiB0aGVzZSBmbGFncyosIHNlbGVjdHMgYSBzdHJpbmcgZnJvbSBgZmxhZ25hbWVgIGFuZCBwcmludHMgaXQuIFRoZSBwYXRjaCBzaW1wbHkgZW5zdXJlcyB0aGF0IHRoZSBjb3JyZWN0IHN0cmluZyBpcyBwcmludGVkLCAqaW5zdGVhZCBvZiAmIzM0O1VOS05PV04mIzM0OyouCgpTbywgZG9lcyB0aGlzIGNoYW5nZSBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzPyBOby4gSXQgYWZmZWN0cyAqb25seSogdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuIEl0IGlzLCBpbiBlc3NlbmNlLCBtZXJlbHkgYSBmb3JtYXR0aW5nIGNoYW5nZSBmb3IgZGlhZ25vc3RpYyBvdXRwdXQgKGFuZCB0aGUgZmxhZyBuYW1lcyBhcmUgcHJlc2VudCBzdGF0aWNhbGx5KS4gIEl0JiMzOTtzICpwdXJlbHkqIGRlY29yYXRpdmUgbG9nZ2luZy4gVGhlIG91dHB1dCBvZiBgL3N5cy9rZXJuZWwvZGVidWcvbWVtYmxvY2svbWVtb3J5YCBhbmQgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL3Jlc2VydmVkYCBpcyAqb25seSogc3RyaW5nIG91dHB1dCwgYW5kIG5vIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gaGFwcGVucy4KClRoZSAmIzM0O2UuZy4mIzM0OyBpbiB0aGUgZGVmaW5pdGlvbiBvZiB3aGF0JiMzOTtzIG5vdCB3b3J0aCBmdXp6aW5nIGlzIGNydWNpYWwuIERpc3BsYXlpbmcgaHVtYW4tcmVhZGFibGUgZmxhZyBuYW1lcyBpbiBkZWJ1Z2ZzIGZpdHMgdGhlIGludGVudCBvZiAmIzM0O2RlY29yYXRpdmUgbG9nZ2luZy4mIzM0OyAgU2luY2UgYWxsIHRoZSBhcnJheSBpbmRpY2VzIGhhdmUgc3RhdGljYWxseSBhc3NpZ25lZCBzdHJpbmcgbGl0ZXJhbHMsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiBhIGNyYXNoLiBUaGVyZSBpcyBubyBjaGFuZ2UgdG8ga2VybmVsIGNvbnRyb2wgZmxvdywgbm8gbWFuaXB1bGF0aW9uIG9mIHN1YnN0YW50aXZlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBubyBhbHRlcmVkIGFsZ29yaXRobWljIGxvZ2ljLiAgVGh1cywgdGhpcyBjaGFuZ2UgaXMgbm90IGdvaW5nIHRvIGxlYWQgdG8gYSBidWcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpGaW5hbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyByZWFjaGFibGUgb24gbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQuIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgU3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIGNvbmZpZyBlbmFibGVzIGBDT05GSUdfSU5URUxfVERYX0hPU1RgLCBvciB3aGV0aGVyIHNvbWUgb3RoZXIgY29uZmlnIGluIHg4NiBlbmFibGVzIGBBUkNIX0tFRVBfTUVNQkxPQ0tgLiBJJiMzOTtsbCBncmVwIGZvciBgSU5URUxfVERYX0hPU1RgIGluIHRoZSBrZXJuZWwgY29uZmlncyBqdXN0IHRvIGJlIHN1cmUsIGV2ZW4gaWYgdGhlIHJlc3VsdCBvZiB0aGUgcHJpb3IgYW5hbHlzaXMgaXMgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTg0NT1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaD0xMDM9c3RhdGljIGlubGluZSBsb25nIHRkeF9rdm1faHlwZXJjYWxsKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC0xMTAtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDoxMTE6I2lmZGVmIENPTkZJR19JTlRFTF9URFhfSE9TVFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtMTEyLXZvaWQgdGR4X2luaXQodm9pZCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9MjA3PXN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZCkgeyB9XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDoyMDg6I2VuZGlmXHQvKiBDT05GSUdfSU5URUxfVERYX0hPU1QgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTIwOS1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzYtXHRkZWZhdWx0IHlcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNzpcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzOC1cdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5hcmNoL3g4Ni92aXJ0L3ZteC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19JTlRFTF9URFhfSE9TVClcdCYjNDM7PSB0ZHgvXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU9OD1vYmotJChDT05GSUdfSU5URUxfVERYX0dVRVNUKVx0JiM0Mzs9IHRkeC1ndWVzdC9cbmRyaXZlcnMvdmlydC9jb2NvL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVx0JiM0Mzs9IHRkeC1ob3N0L1xuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0FSTV9DQ0FfR1VFU1QpXHQmIzQzOz0gYXJtLWNjYS1ndWVzdC9cbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtaG9zdC9LY29uZmlnPTE9Y29uZmlnIFREWF9IT1NUX1NFUlZJQ0VTXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtaG9zdC9LY29uZmlnLTItXHR0cmlzdGF0ZVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWhvc3QvS2NvbmZpZzozOlx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWhvc3QvS2NvbmZpZy00LVx0c2VsZWN0IEZXX0xPQURFUlxuLS1cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaD0xND1lbnVtIG1pc2NfcmVzX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC0yMC0jZW5kaWZcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDoyMTojaWZkZWYgQ09ORklHX0lOVEVMX1REWF9IT1NUXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtMjItXHQvKiogQE1JU0NfQ0dfUkVTX1REWDogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXG4tLVxua2VybmVsL2Nncm91cC9taXNjLmM9MjA9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1pc2NfcmVzX25hbWVbXSA9IHtcbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0yNi0jZW5kaWZcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjI3OiNpZmRlZiBDT05GSUdfSU5URUxfVERYX0hPU1Rcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTI4LVx0LyogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDM5CgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDEwMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBOb3QgV29ydGh5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBBUkNIX0tFRVBfTUVNQkxPQ0tgIG9uIHg4NiBpcyBnYXRlZCBieSBgSU5URUxfVERYX0hPU1RgLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgSU5URUxfVERYX0hPU1RgIGRlcGVuZHMgb24sIHNvIEkgc2VlIGl0JiMzOTtzIGNvbmRpdGlvbmVkIG9uIGBDUFVfU1VQX0lOVEVMYCwgYFg4Nl82NGAsIGBLVk1fSU5URUxgLCBgWDg2X1gyQVBJQ2AsIGBDT05USUdfQUxMT0NgLCBhbmQgYFg4Nl9NQ0VgLiBCdXQgdWx0aW1hdGVseSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBJTlRFTF9URFhfSE9TVGAgaXMgZW5hYmxlZCBvciBub3QsIHRoZSBjb3JlIGNoYW5nZSBpbiB0aGlzIHBhdGNoIGlzIGluY3JlZGlibHkgbG9jYWxpemVkLgoKSXQmIzM5O3MgbGl0ZXJhbGx5IGp1c3QgYWRkaW5nIGAmIzM0O1JTVl9IVUdFVExCJiMzNDtgIHRvIHRoZSBgZmxhZ25hbWVgIGFycmF5LiAgVGhpcyBhcnJheSBpcyAqb25seSogdXNlZCB3aXRoaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3coKWAsIHdoaWNoIGlzIGEgZGVidWdmcyBmdW5jdGlvbiBjYWxsZWQgdG8gcHJpbnQgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL3ttZW1vcnkscmVzZXJ2ZWR9YC4gU28gdGhlIG9ubHkgZWZmZWN0IGlzIHRvIGNoYW5nZSB0aGUgdGV4dCBvdXRwdXQgaW4gdGhpcyBkZWJ1Z2ZzIGludGVyZmFjZSBmcm9tICYjMzQ7VU5LTk9XTiYjMzQ7IHRvICYjMzQ7UlNWX0hVR0VUTEImIzM0OyBmb3IgYSBzcGVjaWZpYyBmbGFnIGJpdC4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBTZWN0aW9uIDEgZm9jdXNlcyBvbiBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXRjLiBTZWN0aW9uIDIsIHRoZSAmIzM0O25lZ2F0aXZlIGNyaXRlcmlhLCYjMzQ7IGlzIGtleTogJiMzNDtwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5n4oCmIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuJiMzNDsgVGhpcyAqZGVmaW5pdGVseSogZmFsbHMgdW5kZXIgdGhhdCBjYXRlZ29yeS4gIEl0JiMzOTtzIGp1c3QgYWRkaW5nIGEgc3RyaW5nIGxpdGVyYWw7IGl0JiMzOTtzIG5vdCB0b3VjaGluZyBhbnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgY29udHJvbCBmbG93LCBsb2NraW5nLCBvciBleGVjdXRhYmxlIGFsZ29yaXRobXMuIFdlIGFyZSB0YWxraW5nIGFib3V0IHJlYWRpbmcgYSBjb25zdGFudCBzdHJpbmcgaW4gYHNlcV9wdXRzYCwgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcy4gVGhlcmUmIzM5O3Mgbm8gY2hhbmNlIG9mIGZpbmRpbmcgY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIHRyaWdnZXJpbmcgbmV3IGFzc2VydGlvbnMuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhlIGV4cGVjdGVkIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2A6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgYFJlYXNvbmluZ2AsIGBGb2N1c1N5bWJvbHM6IFtdYCwgYW5kIGBFbmFibGVDb25maWdzOiBbXWAuIFRoZSBzY2hlbWEgY29uZmlybXMgdGhhdC4KCkZpbmFsbHksIHRoZSByZWFzb25pbmcgbmVlZHMgdG8gYmUgY29uY2lzZS4gSGVyZSYjMzk7cyB3aGF0IEkmIzM5O2xsIHN1Ym1pdDogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIHRoZSBzdHJpbmcgJiMzOTtSU1ZfSFVHRVRMQiYjMzk7IGNvcnJlc3BvbmRpbmcgdG8gdGhlIE1FTUJMT0NLX1JTUlZfSFVHRVRMQiBmbGFnIHRvIHRoZSBgZmxhZ25hbWVgIGFycmF5LCB3aGljaCBpcyB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBmb3JtYXR0aW5nIGRlYnVnZnMgb3V0cHV0IGluIGBtZW1ibG9ja19kZWJ1Z19zaG93KClgLiBUaGlzIGlzIHB1cmVseSBkZWNvcmF0aXZlIHN0cmluZyBmb3JtYXR0aW5nIGZvciBkZWJ1ZyBvdXRwdXQgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb250cm9sIGZsb3csIHN0YXRlIG1hbmFnZW1lbnQsIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGVyZWZvcmUsIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OyBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgdGhlIHN0cmluZyBcJiMzNDtSU1ZfSFVHRVRMQlwmIzM0OyBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRU1CTE9DS19SU1JWX0hVR0VUTEIgZmxhZyB0byB0aGUgZmxhZ25hbWVbXSB0YWJsZSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGFycmF5IGlzIHNvbGVseSB1c2VkIGZvciBmb3JtYXR0aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyAobWVtYmxvY2tfZGVidWdfc2hvdykuIEl0IGlzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcvb3V0cHV0IGZvcm1hdHRpbmcgdGhhdCBkb2VzIG5vdCBhbHRlciBhbnkga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGludHJvZHVjZXMgbm8gYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgdGhlIHN0cmluZyBcJiMzNDtSU1ZfSFVHRVRMQlwmIzM0OyBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRU1CTE9DS19SU1JWX0hVR0VUTEIgZmxhZyB0byB0aGUgZmxhZ25hbWVbXSB0YWJsZSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGFycmF5IGlzIHNvbGVseSB1c2VkIGZvciBmb3JtYXR0aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyAobWVtYmxvY2tfZGVidWdfc2hvdykuIEl0IGlzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcvb3V0cHV0IGZvcm1hdHRpbmcgdGhhdCBkb2VzIG5vdCBhbHRlciBhbnkga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGludHJvZHVjZXMgbm8gYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzowMzwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTU6MjIuNjQzMDE1NjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA1MTE3MjQ2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgdGhlIHN0cmluZyBcXFwiUlNWX0hVR0VUTEJcXFwiIGNvcnJlc3BvbmRpbmcgdG8gdGhlIE1FTUJMT0NLX1JTUlZfSFVHRVRMQiBmbGFnIHRvIHRoZSBmbGFnbmFtZVtdIHRhYmxlIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgYXJyYXkgaXMgc29sZWx5IHVzZWQgZm9yIGZvcm1hdHRpbmcgaHVtYW4tcmVhZGFibGUgZmxhZyBuYW1lcyBpbiBkZWJ1Z2ZzIChtZW1ibG9ja19kZWJ1Z19zaG93KS4gSXQgaXMgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy9vdXRwdXQgZm9ybWF0dGluZyB0aGF0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBhbmQgaW50cm9kdWNlcyBubyBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjU1OjIyLjY0MzAyMDI1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcxMjU4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZWY3NGE2MTNhYTBhZWI1YzliNTlmYWE0YjFjMmI1MTkzYWI0Y2RkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDE2OjU1OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXFxuaW5kZXggMzE5NjFlZDYyOGIwYS4uZjUxODExZGIxMThhMSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1ibG9jay5jXFxuKysrIGIvbW0vbWVtYmxvY2suY1xcbkBAIC0yODc0LDYgKzI4NzQsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XFxuIFxcdFtpbG9nMihNRU1CTE9DS19SU1JWX05PSU5JVCldID0gXFxcIlJTVl9OSVRcXFwiLFxcbiBcXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9LRVJOKV0gPSBcXFwiUlNWX0tFUk5cXFwiLFxcbiBcXHRbaWxvZzIoTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpXSA9IFxcXCJLSE9fU0NSQVRDSFxcXCIsXFxuK1xcdFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFxcXCJSU1ZfSFVHRVRMQlxcXCIsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1NToyMy4xMDA3NTQzNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2MDA1Mzk1ODg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIHRoZSBzdHJpbmcgXFxcIlJTVl9IVUdFVExCXFxcIiBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRU1CTE9DS19SU1JWX0hVR0VUTEIgZmxhZyB0byB0aGUgZmxhZ25hbWVbXSB0YWJsZSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGFycmF5IGlzIHNvbGVseSB1c2VkIGZvciBmb3JtYXR0aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyAobWVtYmxvY2tfZGVidWdfc2hvdykuIEl0IGlzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcvb3V0cHV0IGZvcm1hdHRpbmcgdGhhdCBkb2VzIG5vdCBhbHRlciBhbnkga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGludHJvZHVjZXMgbm8gYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDllZjc0YTYxM2FhMGFlYjVjOWI1OWZhYTRiMWMyYjUxOTNhYjRjZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxNjo1NToyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCAzMTk2MWVkNjI4YjBhLi5mNTE4MTFkYjExOGExIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuKysrIGIvbW0vbWVtYmxvY2suY1xuQEAgLTI4NzQsNiArMjg3NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcbiBcdFtpbG9nMihNRU1CTE9DS19SU1JWX05PSU5JVCldID0gXCJSU1ZfTklUXCIsXG4gXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9LRVJOKV0gPSBcIlJTVl9LRVJOXCIsXG4gXHRbaWxvZzIoTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpXSA9IFwiS0hPX1NDUkFUQ0hcIixcbitcdFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFwiUlNWX0hVR0VUTEJcIixcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1NToyMy4xMDA3NTU5MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzI3ODMyNTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IEJsb2NrIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaXRzIGltcGxpY2F0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgdGFyZ2V0IGlzIHRoZSBgbW0vbWVtYmxvY2suY2AgZmlsZSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nIOKAkyB0aGF0J3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0ZXJyaXRvcnkuIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHdoYXQncyBiZWluZyB0d2Vha2VkLiBHaXZlbiB0aGUgbG9jYXRpb24sIGFuZCBteSBleHBlcmllbmNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBsaWtlbHkgaGF2ZSB0byBkbyB3aXRoIHRoZSBpbml0aWFsIG1lbW9yeSBtYXAsIG1lbW9yeSBob3RwbHVnLCBvciByZXNlcnZhdGlvbiBvZiBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucy5cblxuUmlnaHQsIGBtbS9tZW1ibG9jay5jYC4uLiBub3cgSSBuZWVkIHRvIGFjdHVhbGx5IHNlZSB0aGUgY2hhbmdlcy4gTGluZSAyODc0IGlzIHRoZSBsaWtlbHkga2V5IGFyZWEsIHNvIEknbGwgd2FudCB0byBmb2N1cyB0aGVyZS4gR29vZCB0aGluZyBJIGhhdmUgYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCBhdCBteSBkaXNwb3NhbC4gSSdsbCBzdGFydCB3aXRoIGByZWFkLWZpbGVgIHRvIGdldCBhIGdlbmVyYWwgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE5vIG5lZWQgdG8gaW1tZWRpYXRlbHkganVtcCBpbnRvIGEgZ3JlcCBzZWFyY2gsIGxldCdzIGdldCBzb21lIGNvbnRleHQgZmlyc3QuIEkgd2FudCB0byBzZWUgdGhlICpmbG93KiBhbmQgKmxvZ2ljKiBzdXJyb3VuZGluZyB0aGUgY2hhbmdlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgY29ycmVjdG5lc3MgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjU1OjQ2LjM3OTA4NDIyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1ibG9jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4NjA6XFx0XFx0cmV0dXJuIDE7XFxuMjg2MTpcXHRlcnJfcGFyYW06XFxuMjg2MjpcXHRcXHRwcl9lcnIoXFxcInJlc2VydmVfbWVtOiBlbXB0eSBvciBtYWxmb3JtZWQgcGFyYW1ldGVyXFxcXG5cXFwiKTtcXG4yODYzOlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI4NjQ6XFx0fVxcbjI4NjU6XFx0X19zZXR1cChcXFwicmVzZXJ2ZV9tZW09XFxcIiwgcmVzZXJ2ZV9tZW0pO1xcbjI4NjY6XFx0XFxuMjg2NzpcXHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxuMjg2ODpcXHQjaWZkZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xcbjI4Njk6XFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xcbjI4NzA6XFx0XFx0W2lsb2cyKE1FTUJMT0NLX0hPVFBMVUcpXSA9IFxcXCJIT1RQTFVHXFxcIixcXG4yODcxOlxcdFxcdFtpbG9nMihNRU1CTE9DS19NSVJST1IpXSA9IFxcXCJNSVJST1JcXFwiLFxcbjI4NzI6XFx0XFx0W2lsb2cyKE1FTUJMT0NLX05PTUFQKV0gPSBcXFwiTk9NQVBcXFwiLFxcbjI4NzM6XFx0XFx0W2lsb2cyKE1FTUJMT0NLX0RSSVZFUl9NQU5BR0VEKV0gPSBcXFwiRFJWX01OR1xcXCIsXFxuMjg3NDpcXHRcXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9OT0lOSVQpXSA9IFxcXCJSU1ZfTklUXFxcIixcXG4yODc1OlxcdFxcdFtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9IFxcXCJSU1ZfS0VSTlxcXCIsXFxuMjg3NjpcXHRcXHRbaWxvZzIoTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpXSA9IFxcXCJLSE9fU0NSQVRDSFxcXCIsXFxuMjg3NzpcXHRcXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9IVUdFVExCKV0gPSBcXFwiUlNWX0hVR0VUTEJcXFwiLFxcbjI4Nzg6XFx0fTtcXG4yODc5OlxcdFxcbjI4ODA6XFx0c3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcXG4yODgxOlxcdHtcXG4yODgyOlxcdFxcdHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlID0gbS1cXHUwMDNlcHJpdmF0ZTtcXG4yODgzOlxcdFxcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZztcXG4yODg0OlxcdFxcdGludCBpLCBqLCBuaWQ7XFxuMjg4NTpcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQgPSBBUlJBWV9TSVpFKGZsYWduYW1lKTtcXG4yODg2OlxcdFxcdHBoeXNfYWRkcl90IGVuZDtcXG4yODg3OlxcdFxcbjI4ODg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR5cGUtXFx1MDAzZWNudDsgaSsrKSB7XFxuMjg4OTpcXHRcXHRcXHRyZWcgPSBcXHUwMDI2dHlwZS1cXHUwMDNlcmVnaW9uc1tpXTtcXG4yODkwOlxcdFxcdFxcdGVuZCA9IHJlZy1cXHUwMDNlYmFzZSArIHJlZy1cXHUwMDNlc2l6ZSAtIDE7XFxuMjg5MTpcXHRcXHRcXHRuaWQgPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmVnKTtcXG4yODkyOlxcdFxcbjI4OTM6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTRkOiBcXFwiLCBpKTtcXG4yODk0OlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiVwYS4uJXBhIFxcXCIsIFxcdTAwMjZyZWctXFx1MDAzZWJhc2UsIFxcdTAwMjZlbmQpO1xcbjI4OTU6XFx0XFx0XFx0aWYgKG51bWFfdmFsaWRfbm9kZShuaWQpKVxcbjI4OTY6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTRkIFxcXCIsIG5pZCk7XFxuMjg5NzpcXHRcXHRcXHRlbHNlXFxuMjg5ODpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNGMgXFxcIiwgJ3gnKTtcXG4yODk5OlxcdFxcdFxcdGlmIChyZWctXFx1MDAzZWZsYWdzKSB7XFxuMjkwMDpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSByZWctXFx1MDAzZWZsYWdzO1xcbjI5MDE6XFx0XFx0XFx0XFx0Ym9vbCBmaXJzdCA9IHRydWU7XFxuMjkwMjpcXHRcXG4yOTAzOlxcdFxcdFxcdFxcdGZvciAoaiA9IDA7IGZsYWdzOyBqKyssIGZsYWdzIFxcdTAwM2VcXHUwMDNlPSAxKSB7XFxuMjkwNDpcXHRcXHRcXHRcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IDEpKVxcbjI5MDU6XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjkwNjpcXHRcXHRcXHRcXHRcXHRpZiAoIWZpcnN0KVxcbjI5MDc6XFx0XFx0XFx0XFx0XFx0XFx0c2VxX3B1dGMobSwgJ3wnKTtcXG4yOTA4OlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIGogXFx1MDAzYyBjb3VudCA/IGZsYWduYW1lW2pdIDogXFxcIlVOS05PV05cXFwiKTtcXG4yOTA5OlxcdFxcdFxcdFxcdFxcdGZpcnN0ID0gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjU1OjQ2LjM3OTI4MjY2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NDIwMjI0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHF1ZXJ5LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIGBNRU1CTE9DS19SU1JWX0hVR0VUTEJgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCBhY3R1YWxseSByZXByZXNlbnRzIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJdCdzIGEga2V5IHBpZWNlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcywgb2YgY291cnNlLCBhIHRhcmdldGVkIHNlYXJjaC4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gZmluZCB0aGlzIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZSBvciBkb2N1bWVudGF0aW9uLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB0aGF0IHN0cmluZy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyB1c2FnZSBhbmQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA3OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTU6NDguMzIxMzA2ODkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTgzOTU1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVNQkxPQ0tfUlNSVl9IVUdFVExCXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtYmxvY2suaD0yNT1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1heF9wb3NzaWJsZV9wZm47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNTMtICogYWxsb2NhdGlvbnMgbWF5IGhhcHBlbiBmcm9tIGluIHRoaXMgcGhhc2UuXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjU0OiAqIEBNRU1CTE9DS19SU1JWX0hVR0VUTEI6IG1lbW9yeSBpcyByZXNlcnZlZCBmb3IgaHVnZXRsYiBwYWdlc1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC01NS0gKi9cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9NTY9ZW51bSBtZW1ibG9ja19mbGFncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNjQtXFx0TUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXHQ9IDB4NDAsXFx0Lyogc2NyYXRjaCBtZW1vcnkgZm9yIGtleGVjIGhhbmRvdmVyICovXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjY1OlxcdE1FTUJMT0NLX1JTUlZfSFVHRVRMQlxcdD0gMHg4MCwgLyogbWVtb3J5IHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTY2LX07XFxuLS1cXG5tbS9tZW1ibG9jay5jPTE3Nzc9dm9pZCAqIF9faW5pdCBtZW1ibG9ja19hbGxvY19odWdldGxiKHBoeXNfYWRkcl90IHNpemUsIGludCBuaWQsIGJvb2wgZXhhY3RfbmlkKVxcbi0tXFxubW0vbWVtYmxvY2suYy0xODI2LVxcbm1tL21lbWJsb2NrLmM6MTgyNzpcXHRpZiAoX19tZW1ibG9ja19yZXNlcnZlKGFkZHIsIHNpemUsIG5pZCwgTUVNQkxPQ0tfUlNSVl9LRVJOIHwgTUVNQkxPQ0tfUlNSVl9IVUdFVExCKSlcXG5tbS9tZW1ibG9jay5jLTE4MjgtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9tZW1ibG9jay5jPTE5MDM9cGh5c19hZGRyX3QgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3Jlc2VydmVkX2h1Z2V0bGJfc2l6ZShwaHlzX2FkZHJfdCBsaW1pdCwgaW50IG5pZClcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTkxNy1cXHRcXHRpZiAobmlkID09IG1lbWJsb2NrX2dldF9yZWdpb25fbm9kZShyKSB8fCAhbnVtYV92YWxpZF9ub2RlKG5pZCkpXFxubW0vbWVtYmxvY2suYzoxOTE4OlxcdFxcdFxcdGlmIChyLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1FTUJMT0NLX1JTUlZfSFVHRVRMQilcXG5tbS9tZW1ibG9jay5jLTE5MTktXFx0XFx0XFx0XFx0dG90YWwgKz0gc2l6ZTtcXG4tLVxcbm1tL21lbWJsb2NrLmM9Mjg2OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XFxuLS1cXG5tbS9tZW1ibG9jay5jLTI4NzYtXFx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcXFwiS0hPX1NDUkFUQ0hcXFwiLFxcbm1tL21lbWJsb2NrLmM6Mjg3NzpcXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9IVUdFVExCKV0gPSBcXFwiUlNWX0hVR0VUTEJcXFwiLFxcbm1tL21lbWJsb2NrLmMtMjg3OC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1NTo1MC4xMTk3MTI4NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzA5ODgxMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIGBnaXQgbG9nYCB0byBzZWUgdGhlIGNvbW1pdCBoaXN0b3J5LCBtYXliZSB0cmFjayBkb3duIHdoZW4gYE1FTUJMT0NLX1JTUlZfSFVHRVRMQmAgd2FzIGludHJvZHVjZWQsIG9yIHF1aWNrbHkgZ3JvayB0aGUgY29udGV4dC4gQnV0LCB3YWl0LCBJIGRvbid0IGhhdmUgdGhhdCB0b29sIGF2YWlsYWJsZSEgTm8gcHJvYmxlbSwgbGV0J3MganVzdCBsb29rIGF0IHRoZSBkaWZmLlxuXG5UaGUgZGlmZiBpcyBzdHJhaWdodGZvcndhcmQ7IGl0J3MgYSB2ZXJ5IHNtYWxsIG1vZGlmaWNhdGlvbiB0byBgbW0vbWVtYmxvY2suY2AuIFRoZSBvbmx5IGxpbmUgYWRkZWQgaXMgYFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFwiUlNWX0hVR0VUTEJcIixgIGluc2lkZSB0aGUgYGZsYWduYW1lW11gIGFycmF5LiBUaGF0J3MgaXQhXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGlzIGBmbGFnbmFtZWAgZG9pbmc/IEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQncyByZWxhdGVkIHRvIHNvbWUgc29ydCBvZiBmbGFnIG9yIHJlc2VydmF0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudC4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBgbW0vbWVtYmxvY2suY2AgYXJvdW5kIHRob3NlIGxpbmVzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIG5ld2x5IGFkZGVkIHN0cmluZyBgUlNWX0hVR0VUTEJgIGlzIHVzZWQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCBhbmQgd2h5IHRoaXMgaXMgYmVpbmcgYWRkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4OTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTU6NTQuNDI5NTk2NTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWJsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg5MDpcXHRcXHRcXHRlbmQgPSByZWctXFx1MDAzZWJhc2UgKyByZWctXFx1MDAzZXNpemUgLSAxO1xcbjI4OTE6XFx0XFx0XFx0bmlkID0gbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKHJlZyk7XFxuMjg5MjpcXHRcXG4yODkzOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiU0ZDogXFxcIiwgaSk7XFxuMjg5NDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlcGEuLiVwYSBcXFwiLCBcXHUwMDI2cmVnLVxcdTAwM2ViYXNlLCBcXHUwMDI2ZW5kKTtcXG4yODk1OlxcdFxcdFxcdGlmIChudW1hX3ZhbGlkX25vZGUobmlkKSlcXG4yODk2OlxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiU0ZCBcXFwiLCBuaWQpO1xcbjI4OTc6XFx0XFx0XFx0ZWxzZVxcbjI4OTg6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTRjIFxcXCIsICd4Jyk7XFxuMjg5OTpcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2VmbGFncykge1xcbjI5MDA6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzID0gcmVnLVxcdTAwM2VmbGFncztcXG4yOTAxOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3QgPSB0cnVlO1xcbjI5MDI6XFx0XFxuMjkwMzpcXHRcXHRcXHRcXHRmb3IgKGogPSAwOyBmbGFnczsgaisrLCBmbGFncyBcXHUwMDNlXFx1MDAzZT0gMSkge1xcbjI5MDQ6XFx0XFx0XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiAxKSlcXG4yOTA1OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI5MDY6XFx0XFx0XFx0XFx0XFx0aWYgKCFmaXJzdClcXG4yOTA3OlxcdFxcdFxcdFxcdFxcdFxcdHNlcV9wdXRjKG0sICd8Jyk7XFxuMjkwODpcXHRcXHRcXHRcXHRcXHRzZXFfcHV0cyhtLCBqIFxcdTAwM2MgY291bnQgPyBmbGFnbmFtZVtqXSA6IFxcXCJVTktOT1dOXFxcIik7XFxuMjkwOTpcXHRcXHRcXHRcXHRcXHRmaXJzdCA9IGZhbHNlO1xcbjI5MTA6XFx0XFx0XFx0XFx0fVxcbjI5MTE6XFx0XFx0XFx0XFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuMjkxMjpcXHRcXHRcXHR9IGVsc2Uge1xcbjI5MTM6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJXNcXFxcblxcXCIsIFxcXCJOT05FXFxcIik7XFxuMjkxNDpcXHRcXHRcXHR9XFxuMjkxNTpcXHRcXHR9XFxuMjkxNjpcXHRcXHRyZXR1cm4gMDtcXG4yOTE3OlxcdH1cXG4yOTE4OlxcdERFRklORV9TSE9XX0FUVFJJQlVURShtZW1ibG9ja19kZWJ1Zyk7XFxuMjkxOTpcXHRcXG4yOTIwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdClcXG4yOTIxOlxcdHtcXG4yOTIyOlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcIm1lbW9yeVxcXCIsIDA0NDQsIHJvb3QsXFxuMjkyMzpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm1lbWJsb2NrLm1lbW9yeSwgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5MjQ6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicmVzZXJ2ZWRcXFwiLCAwNDQ0LCByb290LFxcbjI5MjU6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtZW1ibG9jay5yZXNlcnZlZCwgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5MjY6XFx0I2lmZGVmIENPTkZJR19IQVZFX01FTUJMT0NLX1BIWVNfTUFQXFxuMjkyNzpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJwaHlzbWVtXFxcIiwgMDQ0NCwgcm9vdCwgXFx1MDAyNnBoeXNtZW0sXFxuMjkyODpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5Mjk6XFx0I2VuZGlmXFxuMjkzMDpcXHR9XFxuMjkzMTpcXHRcXG4yOTMyOlxcdCNlbHNlXFxuMjkzMzpcXHRcXG4yOTM0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdCkgeyB9XFxuMjkzNTpcXHRcXG4yOTM2OlxcdCNlbmRpZiAvKiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLICovXFxuMjkzNzpcXHRcXG4yOTM4OlxcdHN0YXRpYyBpbnQgbWVtYmxvY2tfcmVzZXJ2ZV9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXFxuMjkzOTpcXHR7XFxuMjk0MDpcXHRcXHRzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUgKm1hcDtcXG4yOTQxOlxcdFxcdGNoYXIgdHh0c3pbMTZdO1xcbjI5NDI6XFx0XFxuMjk0MzpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNnJlc2VydmVfbWVtX2xvY2spO1xcbjI5NDQ6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyByZXNlcnZlZF9tZW1fY291bnQ7IGkrKykge1xcbjI5NDU6XFx0XFx0XFx0bWFwID0gXFx1MDAyNnJlc2VydmVkX21lbV90YWJsZVtpXTtcXG4yOTQ2OlxcdFxcdFxcdGlmICghbWFwLVxcdTAwM2VzaXplKVxcbjI5NDc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjk0ODpcXHRcXG4yOTQ5OlxcdFxcdFxcdG1lbXNldCh0eHRzeiwgMCwgc2l6ZW9mKHR4dHN6KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjU1OjU0LjQyOTc0MzU0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMTA0NDQ4ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBEZWJ1Z2ZzIFN0cmluZyBBcnJheSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFNlY3Rpb24gMiBvZiB0aGUgcHJvbXB0IG91dGxpbmVzIHRoZSBjcml0ZXJpYSBmb3IgKm5vdCogZnV6emluZyBhIGNoYW5nZSwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBhcnJheSBtb2RpZmljYXRpb24gZmFsbHMgdW5kZXIgdGhvc2UgbmVnYXRpdmUgY3JpdGVyaWEuIFRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIHRoaXMgYWx0ZXJhdGlvbiBpbnRyb2R1Y2VzIHBvdGVudGlhbCBmb3IgYnVncyBvciBhbHRlcnMgY29yZSBmdW5jdGlvbmFsaXR5LCBvciBpZiBpdCdzIHB1cmVseSBjb3NtZXRpYy5cblxuRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2U6IGV4dGVuZGluZyB0aGUgYGZsYWduYW1lYCBhcnJheSB1c2VkIGluIGBtZW1ibG9ja19kZWJ1Z19zaG93KClgIGJ5IGFkZGluZyBhbiBlbnRyeSBmb3IgXCJSU1ZfSFVHRVRMQlwiLiBQcmV2aW91c2x5LCB0aGUgY29kZSBwcmludGVkIFwiVU5LTk9XTlwiIGZvciB0aGlzIGZsYWcsIG5vdyBpdCBwcmludHMgdGhlIGFzc29jaWF0ZWQgc3RyaW5nLlxuXG5JIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIGNoYW5nZSB0byBkb2N1bWVudGF0aW9uPyBOby4gSXMgdGhpcyBhIHVzZXItc3BhY2UgbW9kaWZpY2F0aW9uIG5vdCBhZmZlY3RpbmcgdGhlIGtlcm5lbCBpbWFnZT8gTm8uIElzIHRoaXMgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyB0aGF0IGRvZXMgbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXM/IFRoYXQncyB0aGUgcXVlc3Rpb24uIEFkZGluZyBhIHN0cmluZyB0byBhbiBhcnJheSAqY291bGQqIGJlIGNvbnNpZGVyZWQgcHVyZWx5IGRlY29yYXRpdmUuICpIb3dldmVyKiwgSSBuZWVkIHRvIGJlIHN1cmUuIEkgc2VlIHRoYXQgdGhlIGxvZ2dpbmcgKmlzKiBjaGFuZ2luZyBub3cuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIElzIHRoZXJlIGEgYnVmZmVyIG92ZXJmbG93IGNvbmNlcm4gaGVyZT8gTm8sIEkgZG9uJ3Qgc2VlIGFueSBkaXJlY3Qgd3JpdGVzICp0byogdGhlIGFycmF5LiBJcyB0aGVyZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gUG90ZW50aWFsbHkuIFByZXZpb3VzbHksIHRoZSBjb2RlIGNoZWNrZWQgYGogXHUwMDNjIGNvdW50YCwgYW5kIHRoYXQgd291bGQgaGF2ZSBzaG9ydC1jaXJjdWl0ZWQuIE5vdywgaXQgcHJpbnRzIHRoZSBzdHJpbmcuIFNvIHRoZSBsb2dpYyBoYXMgY2hhbmdlZCwgaW4gdGhhdCBicmFuY2ggb2YgY29kZS4gSXMgaXQgcG9zc2libGUgdGhhdCBgZmxhZ25hbWVgICpjb3VsZCogaGF2ZSBhIGBOVUxMYCBlbGVtZW50IHNvbWV3aGVyZT8gSSBzaG91bGQgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgbm90IHBvc3NpYmxlIGJ5IGRlc2lnbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWNsYXJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIEFuZCB0aGUgdmFsdWVzIG9mIGBNRU1CTE9DS18qYCBpbiBgaW5jbHVkZS9saW51eC9tZW1ibG9jay5oYC4gSXQgYXBwZWFycyB0byBiZSBpbml0aWFsaXplZCBpbiB0aGUgYXJyYXkuIFRoaXMgaXMgZ29vZC4gSXQgc2VlbXMgc2FmZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLlxuXG5TbywgaW4gc3VtbWFyeSwgZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSAqYXBwZWFycyogcHVyZWx5IGRlY29yYXRpdmUgYXQgZmlyc3QgZ2xhbmNlLCB0aGUgY2hhbmdlIGluIG91dHB1dCBvZiBpbmZvcm1hdGlvbiBkb2VzIGNvbnN0aXR1dGUgYSBjaGFuZ2UgdG8gYSBsb2dnaW5nIGZ1bmN0aW9uLiBUaGlzIHdvdWxkIG5vdCBiZSBhIFwic3RyaWN0bHlcIiBkZWNvcmF0aXZlIGxvZ2dpbmcgY2hhbmdlLCB3aGljaCBpcyBvbmUgb2YgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLlxuXG5Pa2F5LCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgY2hhbmdlICpkb2VzKiB3YXJyYW50IGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1NjowNS41MzQxOTQ1NDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdCAqIGtlcm5lbCBpbiBoYW5kb3ZlciBtb2RlLiBEdXJpbmcgZWFybHkgYm9vdCwgd2UgZG8gbm90IGtub3cgYWJvdXQgYWxsXFxuICA1MTpcXHQgKiBtZW1vcnkgcmVzZXJ2YXRpb25zIHlldCwgc28gd2UgZ2V0IHNjcmF0Y2ggbWVtb3J5IGZyb20gdGhlIHByZXZpb3VzXFxuICA1MjpcXHQgKiBrZXJuZWwgdGhhdCB3ZSBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdFxcbiAgNTM6XFx0ICogYWxsb2NhdGlvbnMgbWF5IGhhcHBlbiBmcm9tIGluIHRoaXMgcGhhc2UuXFxuICA1NDpcXHQgKiBATUVNQkxPQ0tfUlNSVl9IVUdFVExCOiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXNcXG4gIDU1OlxcdCAqL1xcbiAgNTY6XFx0ZW51bSBtZW1ibG9ja19mbGFncyB7XFxuICA1NzpcXHRcXHRNRU1CTE9DS19OT05FXFx0XFx0PSAweDAsXFx0LyogTm8gc3BlY2lhbCByZXF1ZXN0ICovXFxuICA1ODpcXHRcXHRNRU1CTE9DS19IT1RQTFVHXFx0PSAweDEsXFx0LyogaG90cGx1Z2dhYmxlIHJlZ2lvbiAqL1xcbiAgNTk6XFx0XFx0TUVNQkxPQ0tfTUlSUk9SXFx0XFx0PSAweDIsXFx0LyogbWlycm9yZWQgcmVnaW9uICovXFxuICA2MDpcXHRcXHRNRU1CTE9DS19OT01BUFxcdFxcdD0gMHg0LFxcdC8qIGRvbid0IGFkZCB0byBrZXJuZWwgZGlyZWN0IG1hcHBpbmcgKi9cXG4gIDYxOlxcdFxcdE1FTUJMT0NLX0RSSVZFUl9NQU5BR0VEID0gMHg4LFxcdC8qIGFsd2F5cyBkZXRlY3RlZCB2aWEgYSBkcml2ZXIgKi9cXG4gIDYyOlxcdFxcdE1FTUJMT0NLX1JTUlZfTk9JTklUXFx0PSAweDEwLFxcdC8qIGRvbid0IGluaXRpYWxpemUgc3RydWN0IHBhZ2VzICovXFxuICA2MzpcXHRcXHRNRU1CTE9DS19SU1JWX0tFUk5cXHQ9IDB4MjAsXFx0LyogbWVtb3J5IHJlc2VydmVkIGZvciBrZXJuZWwgdXNlICovXFxuICA2NDpcXHRcXHRNRU1CTE9DS19LSE9fU0NSQVRDSFxcdD0gMHg0MCxcXHQvKiBzY3JhdGNoIG1lbW9yeSBmb3Iga2V4ZWMgaGFuZG92ZXIgKi9cXG4gIDY1OlxcdFxcdE1FTUJMT0NLX1JTUlZfSFVHRVRMQlxcdD0gMHg4MCwgLyogbWVtb3J5IHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzICovXFxuICA2NjpcXHR9O1xcbiAgNjc6XFx0XFxuICA2ODpcXHQvKipcXG4gIDY5OlxcdCAqIHN0cnVjdCBtZW1ibG9ja19yZWdpb24gLSByZXByZXNlbnRzIGEgbWVtb3J5IHJlZ2lvblxcbiAgNzA6XFx0ICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVnaW9uXFxuICA3MTpcXHQgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcmVnaW9uXFxuICA3MjpcXHQgKiBAZmxhZ3M6IG1lbW9yeSByZWdpb24gYXR0cmlidXRlc1xcbiAgNzM6XFx0ICogQG5pZDogTlVNQSBub2RlIGlkXFxuICA3NDpcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTY6MDUuNTM0Mjg5MTI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxOTMyMDU2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgZm9yIEZ1enppbmc6IG1lbWJsb2NrIEZsYWcgRGVmaW5pdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBgTUVNQkxPQ0tfKmAgZmxhZyBkZWZpbml0aW9ucy4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogZWFjaCBmbGFnIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGJpdCwgY2FsY3VsYXRlZCBhcyBhIHBvd2VyIG9mIDIgKGlsb2cyKS4gSSBjYW4gc2VlIHRoYXQgdGhlIGFycmF5IGlzIGZ1bGx5IHBvcHVsYXRlZCwgaW5kZXhlZCBmcm9tIDAgdG8gNy5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNhcmVmdWxseSBjb25zaWRlciB0aGUgcHJvbXB0LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2hhbmdlIGlzIFwiV29ydGhGdXp6aW5nXCIgb3Igbm90LCBhbmQgdGhlcmUgYXJlIHNwZWNpZmljICpuZWdhdGl2ZSogY3JpdGVyaWEgdGhhdCB3b3VsZCBleGNsdWRlIGl0LiBUaGUgcHJvbXB0IG91dGxpbmVzIHNldmVyYWwgY2F0ZWdvcmllcyB3aGVyZSBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gSSBuZWVkIHRvIGVuc3VyZSBpZiB0aGUgY2hhbmdlIGZhbGxzIHVuZGVyIFwiTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlc1wiIG9yIHNvbWV0aGluZyBlbHNlIHRvIHNhdGlzZnkgYSBgZmFsc2VgIHJldHVybi5cblxuVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgXCJQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nXCIgY2F0ZWdvcnkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBhZmZlY3RzIHRoZSBjb21waWxlZCBrZXJuZWwgb3IgYSBkYXRhIHN0cnVjdHVyZS4gVGhlIGZsYWdzIHRoZW1zZWx2ZXMgc2VlbSBpbm5vY3VvdXMsIGJ1dCBsZXQncyBzZWUgd2hlcmUgdGhleSBhcmUgdXNlZC5cblxuQWhhISBJdCBsb29rcyBsaWtlIHRoZXNlIGZsYWdzIGFyZSB1c2VkIGluIGBtZW1ibG9ja19kZWJ1Z19zaG93KClgIHdpdGhpbiBkZWJ1Z2ZzLCBzcGVjaWZpY2FsbHkgaW4gYSBmaWxlIG5hbWVkIFwibWVtb3J5XCIgYW5kIHNvbWV0aGluZyBjYWxsZWQgXCJyZXNlcnZlZFwiLiBgc2VxX3B1dHMobSwgaiBcdTAwM2MgY291bnQgPyBmbGFnbmFtZVtqXSA6IFwiVU5LTk9XTlwiKTtgIGlzIHdoYXQgSSBzZWUgaW4gbXkgY29kZS5cblxuU28gd2hhdCBpcyBgZmxhZ25hbWVgPyBJdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXWAuIFRoaXMgaXMgYW4gYXJyYXkuIEFycmF5cyAqYXJlKiBkYXRhIHN0cnVjdHVyZXMuIEFkZGluZyBhbiBlbGVtZW50IHRvIGl0IGxpdGVyYWxseSBpbmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIGFycmF5LiBTbywgaXMgZGVidWdmcyBwcmludGluZyBjb25zaWRlcmVkIFwicHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZ1wiP1xuXG5Hb2luZyBiYWNrIHRvIHRoZSBwcm9tcHQsIGl0IGNsZWFybHkgc3RhdGVzIFwiUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgKm9yKiB0cmFjZXBvaW50cyAqdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcyouXCIgU28sIHdoaWxlIHRoaXMgZGVidWdmcyBvdXRwdXQgKmxvb2tzKiBsaWtlIGxvZ2dpbmcsIGl0J3MgYWxzbyB0aWVkIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgKGBmbGFnbmFtZWApLiBCeSBtb2RpZnlpbmcgYSBkYXRhIHN0cnVjdHVyZSwgdGhlIGNoYW5nZSBpc24ndCAqcHVyZWx5KiBkZWNvcmF0aXZlLCBpdCBzZWVtcyB0byBhbHRlciBhIGRhdGEgc3RydWN0dXJlLiBUaGUgZmxhZ3MgdGhlbXNlbHZlcyBhcmUgcGFydCBvZiB0aGUgYG1lbWJsb2NrYCBkYXRhIHN0cnVjdHVyZSBpbiB0aGUgZWFybHkgYm9vdCBtZW1vcnkgYWxsb2NhdG9yLlxuXG5CdXQgd2FpdCwgY2FuIHRoaXMgYmUgZnV6emVkPyBXaGF0IGRvZXMgc3l6a2FsbGVyIGRvPyBEb2VzIGl0IHJlYWQgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL3Jlc2VydmVkYD8gVGhhdCdzIHdoYXQgSSB3YW50IHRvIGtub3chXG5cbkFoLCBhIGNydWNpYWwgcXVlc3Rpb24sIGRvZXMgYGFtZDY0YCBldmVuIGtlZXAgdGhlIGBtZW1ibG9ja2A/IExldCBtZSBzZWUuIEkgc2VlIGAjaWZkZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS2AgLSBpcyB0aGF0IGRlZmluZWQgb24gYGFtZDY0YD8gVGhpcyBpcyBjcml0aWNhbCEgTGV0IG1lIGdyZXAgZm9yIHRoaXMgYW5kIGNoZWNrLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGV2ZW4gZXhpc3RzIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1Njo1Ny40NjYzNDk4NDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTkxMjc1NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9LRUVQX01FTUJMT0NLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLTM1LVxcdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXFxuYXJjaC9hcm0vS2NvbmZpZzozNjpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC9hcm0vS2NvbmZpZy0zNy1cXHRzZWxlY3QgQVJDSF9IQVNfVUJTQU5cXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTYzLVxcdHNlbGVjdCBBUkNIX0hBVkVfVFJBQ0VfTU1JT19BQ0NFU1NcXG5hcmNoL2FybTY0L0tjb25maWc6NjQ6XFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xcbmFyY2gvYXJtNjQvS2NvbmZpZy02NS1cXHRzZWxlY3QgQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTU4LVxcdHNlbGVjdCBBUkNIX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlmICFQUkVFTVBUSU9OXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1OTpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02MC1cXHRzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlRcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTIxLVxcdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXFxuYXJjaC9taXBzL0tjb25maWc6MjI6XFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xcbmFyY2gvbWlwcy9LY29uZmlnLTIzLVxcdHNlbGVjdCBBUkNIX1VTRV9CVUlMVElOX0JTV0FQXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTYyLVxcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjE2MzpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTY0LVxcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcdGlmIFBQQ19SQURJWF9NTVVcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy02MC1cXHRzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG5hcmNoL3Jpc2N2L0tjb25maWc6NjE6XFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DSyBpZiBBQ1BJIHx8IEtFWEVDXFxuYXJjaC9yaXNjdi9LY29uZmlnLTYyLVxcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcdGlmIDY0QklUIFxcdTAwMjZcXHUwMDI2IE1NVVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0xODY0PWNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODY5LVxcdGRlcGVuZHMgb24gWDg2X1gyQVBJQ1xcbmFyY2gveDg2L0tjb25maWc6MTg3MDpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC94ODYvS2NvbmZpZy0xODcxLVxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYz0xMTA0PXN0YXRpYyBpbnQgZWZpX21lbV9yZXNlcnZlX2lvbWVtKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTEyNi1cXHQgKi9cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYzoxMTI3OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spIFxcdTAwMjZcXHUwMDI2ICFyZXQpXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTEyOC1cXHRcXHRtZW1ibG9ja19yZXNlcnZlKGFkZHIsIHNpemUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTExND1leHRlcm4gc3RydWN0IG1lbWJsb2NrIG1lbWJsb2NrO1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMTUtXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjExNjojaWZuZGVmIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tcXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTE3LSNkZWZpbmUgX19pbml0X21lbWJsb2NrIF9fbWVtaW5pdFxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYz01ODA9c3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2soc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNjA2LVxcbmtlcm5lbC9rZXhlY19maWxlLmM6NjA3OiNpZmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXFxua2VybmVsL2tleGVjX2ZpbGUuYy02MDgtc3RhdGljIGludCBrZXhlY193YWxrX21lbWJsb2NrKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTczNj1pbnQga2V4ZWNfbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc1OC1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc1OTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxua2VybmVsL2tleGVjX2ZpbGUuYy03NjAtXFx0XFx0cmV0ID0ga2V4ZWNfd2Fsa19yZXNvdXJjZXMoa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcXG4tLVxcbm1tL0tjb25maWc9NDg2PWNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxcbi0tXFxubW0vS2NvbmZpZy00OTEtIyBBbHNvLCBtZW1ibG9ja3MgYXJlIHVwZGF0ZWQgd2l0aCBtZW1vcnkgaG90KHVuKXBsdWcuXFxubW0vS2NvbmZpZzo0OTI6Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xcbm1tL0tjb25maWctNDkzLVxcdGJvb2xcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTAwLSAqXFxubW0vbWVtYmxvY2suYzoxMDE6ICogVW5sZXNzIGFuIGFyY2hpdGVjdHVyZSBlbmFibGVzICVDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLLCB0aGVcXG5tbS9tZW1ibG9jay5jLTEwMi0gKiBtZW1ibG9jayBkYXRhIHN0cnVjdHVyZXMgKGV4Y2VwdCBcXFwicGh5c21lbVxcXCIpIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZVxcbi0tXFxubW0vbWVtYmxvY2suYz0zNjQ9c3RhdGljIHZvaWQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3JlbW92ZV9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgcilcXG4tLVxcbm1tL21lbWJsb2NrLmMtMzgwLVxcbm1tL21lbWJsb2NrLmM6MzgxOiNpZm5kZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xcbm1tL21lbWJsb2NrLmMtMzgyLS8qKlxcbi0tXFxubW0vbWVtYmxvY2suYz05MzI9dW5zaWduZWQgbG9uZyBmcmVlX3Jlc2VydmVkX2FyZWEodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCwgaW50IHBvaXNvbiwgY29uc3QgY2hhciAqcylcXG4tLVxcbm1tL21lbWJsb2NrLmMtOTUwLVxcbm1tL21lbWJsb2NrLmM6OTUxOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKSB7XFxubW0vbWVtYmxvY2suYy05NTItXFx0XFx0aWYgKHN0YXJ0X3BhIFxcdTAwM2MgZW5kX3BhKVxcbi0tXFxubW0vbWVtYmxvY2suYz05ODg9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19waHlzX2ZyZWUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcXG4tLVxcbm1tL21lbWJsb2NrLmMtOTk3LVxcbm1tL21lbWJsb2NrLmM6OTk4OlxcdGlmICghc2xhYl9pc19hdmFpbGFibGUoKSB8fCBJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxcbm1tL21lbWJsb2NrLmMtOTk5LVxcdFxcdHJldCA9IG1lbWJsb2NrX3JlbW92ZV9yYW5nZShcXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpO1xcbi0tXFxubW0vbWVtYmxvY2suYz0yODY1PV9fc2V0dXAoXFxcInJlc2VydmVfbWVtPVxcXCIsIHJlc2VydmVfbWVtKTtcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjg2Ny0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0vbWVtYmxvY2suYzoyODY4OiNpZmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXFxubW0vbWVtYmxvY2suYy0yODY5LXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcXG4tLVxcbm1tL21lbWJsb2NrLmM9MjkzND1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfZGVidWdmc19leHBvc2VfYXJyYXlzKHN0cnVjdCBkZW50cnkgKnJvb3QpIHsgfVxcbm1tL21lbWJsb2NrLmMtMjkzNS1cXG5tbS9tZW1ibG9jay5jOjI5MzY6I2VuZGlmIC8qIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0sgKi9cXG5tbS9tZW1ibG9jay5jLTI5MzctXFxuLS1cXG5tbS9tZW1ibG9jay5jPTI5NTg9c3RhdGljIGludCBfX2luaXQgbWVtYmxvY2tfaW5pdF9kZWJ1Z2ZzKHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI5NjEtXFxubW0vbWVtYmxvY2suYzoyOTYyOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSBcXHUwMDI2XFx1MDAyNiAhcmVzZXJ2ZWRfbWVtX2NvdW50KVxcbm1tL21lbWJsb2NrLmMtMjk2My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUwMj1zdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTMyLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTUzMzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSkge1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzNC1cXHRcXHRpZiAocmVzLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUkVTT1VSQ0VfU1lTUkFNX0RSSVZFUl9NQU5BR0VEKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjAzLWVycm9yX21lbWJsb2NrX3JlbW92ZTpcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2MDQ6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjA1LVxcdFxcdG1lbWJsb2NrX3JlbW92ZShzdGFydCwgc2l6ZSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTIyOTY9c3RhdGljIGludCB0cnlfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzM2LVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjMzNzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMzgtXFx0XFx0bWVtYmxvY2tfcmVtb3ZlKHN0YXJ0LCBzaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTY6NTkuNTg1NDgyMjc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ2NDk3MDYxMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEFSQ0hfS0VFUF9NRU1CTE9DSyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgYEFSQ0hfS0VFUF9NRU1CTE9DS2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCBgQ09ORklHX0lOVEVMX1REWF9IT1NUYCBzZWxlY3RzIGl0LCBmb3VuZCBpbiBgYXJjaC94ODYvS2NvbmZpZ2AuIEknbSBjdXJpb3VzIHRvIHNlZSBpZiBhbnl0aGluZyBlbHNlIGlzIHRyaWdnZXJpbmcgdGhpcyBzZWxlY3Rpb24gd2l0aGluIHRoZSB4ODYgY29uZmlnIHNwYWNlLiBBIHF1aWNrIGdyZXAgb2YgdGhlIGBLY29uZmlnYCBmaWxlIHNob3VsZCByZXZlYWwgdGhvc2UgZGVwZW5kZW5jaWVzLiBBaGEhIExpbmUgMTg3MCwgYWNjb3JkaW5nIHRvIHRoZSBsb2csIGlzIHdoZXJlIHRoZSBzZWxlY3Rpb24gb2YgYEFSQ0hfS0VFUF9NRU1CTE9DS2Agb2NjdXJzLiBMZXQncyBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGF0IHNlY3Rpb24gb2YgYGFyY2gveDg2L0tjb25maWdgIHRvIHNlZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgaXQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmF0aW9uYWxlIGJlaGluZCB1c2luZyBgQVJDSF9LRUVQX01FTUJMT0NLYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTc6NDYuMDgyNTQ2Nzk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjA6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni9zaHN0ay5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuMTg2MTpcXHRcXG4xODYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODYzOlxcdFxcbjE4NjQ6XFx0Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuMTg2NTpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuMTg2NjpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcXG4xODY3OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuMTg2ODpcXHRcXHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxcbjE4Njk6XFx0XFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuMTg3MDpcXHRcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuMTg3MTpcXHRcXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbjE4NzI6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTUNFXFxuMTg3MzpcXHRcXHRoZWxwXFxuMTg3NDpcXHRcXHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xcbjE4NzU6XFx0XFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcXG4xODc2OlxcdFxcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXFxuMTg3NzpcXHRcXG4xODc4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODc5OlxcdFxcbjE4ODA6XFx0Y29uZmlnIEVGSVxcbjE4ODE6XFx0XFx0Ym9vbCBcXFwiRUZJIHJ1bnRpbWUgc2VydmljZSBzdXBwb3J0XFxcIlxcbjE4ODI6XFx0XFx0ZGVwZW5kcyBvbiBBQ1BJXFxuMTg4MzpcXHRcXHRzZWxlY3QgVUNTMl9TVFJJTkdcXG4xODg0OlxcdFxcdHNlbGVjdCBFRklfUlVOVElNRV9XUkFQUEVSU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1Nzo0Ni4wODI3MDQ4MDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA3MzI5MjIwNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBNZW1ibG9jayBEZWJ1Z2ZzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQVJDSF9LRUVQX01FTUJMT0NLYCBpcyB3aWRlbHkgdXNlZCBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMsIGFuZCBJJ3ZlIHF1aWNrbHkgY29uZmlybWVkIGl0cyBwcmVzZW5jZSBhY3Jvc3MgQVJNLCBBUk02NCwgTG9vbmdBcmNoLCBNSVBTLCBQb3dlclBDLCBSSVNDLVYgKGNvbmRpdGlvbmFsbHkpLCBhbmQgeDg2IChjb25kaXRpb25hbGx5KS4gIE5vdywgb250byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIGFkZGluZyBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCdzIG5hbWUsIFwiUlNWX0hVR0VUTEJcIiwgdG8gdGhlIGBmbGFnbmFtZWAgYXJyYXksIHdoaWNoIGlzIHVzZWQgaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3coKWAgdG8gZGlzcGxheSBtZW1vcnkgYmxvY2sgZmxhZ3MgaW4gZGVidWdmcy5cblxuVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgY2hhbmdlIHRoYXQncyAqd29ydGgqIGZ1enppbmc/ICBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIFwibmVnYXRpdmUgY3JpdGVyaWEuXCIgIFRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGZhbGwgdW5kZXIgXCJQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIC4uLiB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzXCI/IFRoZSBrZXkgc2VlbXMgdG8gYmUgd2hldGhlciB0aGUgYWRkaXRpb24gaXMgKnB1cmVseSBkZWNvcmF0aXZlKi5cblxuVGhlIGBmbGFnbmFtZWAgYXJyYXksIHdpdGhpbiBgbWVtYmxvY2tfZGVidWdfc2hvd2AsIGlzIHVzZWQgdG8gcHJpbnQgZmxhZ3Mgd2hlbiByZWFkaW5nIGAvc3lzL2tlcm5lbC9kZWJ1Zy9tZW1ibG9jay97bWVtb3J5LHJlc2VydmVkfWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBvdXRwdXQgd291bGQgZGlzcGxheSBcIlVOS05PV05cIiBpZiBhIHJlZ2lvbiBoYWQgdGhlIGBNRU1CTE9DS19SU1JWX0hVR0VUTEJgIGZsYWcuIE5vdywgaXQgd2lsbCBjb3JyZWN0bHkgcHJpbnQgXCJSU1ZfSFVHRVRMQi5cIiAgVGhlIGNvZGUgaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3dgIHJlYWRzIHRoZXNlIGZsYWdzIGZyb20gdGhlIG1lbW9yeSBibG9jayBzdHJ1Y3R1cmVzIGFuZCwgKmJhc2VkIG9uIHRoZXNlIGZsYWdzKiwgc2VsZWN0cyBhIHN0cmluZyBmcm9tIGBmbGFnbmFtZWAgYW5kIHByaW50cyBpdC4gVGhlIHBhdGNoIHNpbXBseSBlbnN1cmVzIHRoYXQgdGhlIGNvcnJlY3Qgc3RyaW5nIGlzIHByaW50ZWQsICppbnN0ZWFkIG9mIFwiVU5LTk9XTlwiKi5cblxuU28sIGRvZXMgdGhpcyBjaGFuZ2UgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcz8gTm8uIEl0IGFmZmVjdHMgKm9ubHkqIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gcHJlc2VudGVkIHRvIHRoZSB1c2VyLiBJdCBpcywgaW4gZXNzZW5jZSwgbWVyZWx5IGEgZm9ybWF0dGluZyBjaGFuZ2UgZm9yIGRpYWdub3N0aWMgb3V0cHV0IChhbmQgdGhlIGZsYWcgbmFtZXMgYXJlIHByZXNlbnQgc3RhdGljYWxseSkuICBJdCdzICpwdXJlbHkqIGRlY29yYXRpdmUgbG9nZ2luZy4gVGhlIG91dHB1dCBvZiBgL3N5cy9rZXJuZWwvZGVidWcvbWVtYmxvY2svbWVtb3J5YCBhbmQgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL3Jlc2VydmVkYCBpcyAqb25seSogc3RyaW5nIG91dHB1dCwgYW5kIG5vIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gaGFwcGVucy5cblxuVGhlIFwiZS5nLlwiIGluIHRoZSBkZWZpbml0aW9uIG9mIHdoYXQncyBub3Qgd29ydGggZnV6emluZyBpcyBjcnVjaWFsLiBEaXNwbGF5aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyBmaXRzIHRoZSBpbnRlbnQgb2YgXCJkZWNvcmF0aXZlIGxvZ2dpbmcuXCIgIFNpbmNlIGFsbCB0aGUgYXJyYXkgaW5kaWNlcyBoYXZlIHN0YXRpY2FsbHkgYXNzaWduZWQgc3RyaW5nIGxpdGVyYWxzLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgYSBjcmFzaC4gVGhlcmUgaXMgbm8gY2hhbmdlIHRvIGtlcm5lbCBjb250cm9sIGZsb3csIG5vIG1hbmlwdWxhdGlvbiBvZiBzdWJzdGFudGl2ZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gYWx0ZXJlZCBhbGdvcml0aG1pYyBsb2dpYy4gIFRodXMsIHRoaXMgY2hhbmdlIGlzIG5vdCBnb2luZyB0byBsZWFkIHRvIGEgYnVnIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyByZWFjaGFibGUgb24gbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQuIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgU3l6a2FsbGVyJ3Mgc3RhbmRhcmQgY29uZmlnIGVuYWJsZXMgYENPTkZJR19JTlRFTF9URFhfSE9TVGAsIG9yIHdoZXRoZXIgc29tZSBvdGhlciBjb25maWcgaW4geDg2IGVuYWJsZXMgYEFSQ0hfS0VFUF9NRU1CTE9DS2AuIEknbGwgZ3JlcCBmb3IgYElOVEVMX1REWF9IT1NUYCBpbiB0aGUga2VybmVsIGNvbmZpZ3MganVzdCB0byBiZSBzdXJlLCBldmVuIGlmIHRoZSByZXN1bHQgb2YgdGhlIHByaW9yIGFuYWx5c2lzIGlzIGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzowMjo1My40MTE5Mjg0OTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTczNTY0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5URUxfVERYX0hPU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODQ1PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg2My1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTEwMz1zdGF0aWMgaW5saW5lIGxvbmcgdGR4X2t2bV9oeXBlcmNhbGwodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtMTEwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oOjExMTojaWZkZWYgQ09ORklHX0lOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtMTEyLXZvaWQgdGR4X2luaXQodm9pZCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaD0yMDc9c3RhdGljIGlubGluZSB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKSB7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDoyMDg6I2VuZGlmXFx0LyogQ09ORklHX0lOVEVMX1REWF9IT1NUICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtMjA5LVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzYtXFx0ZGVmYXVsdCB5XFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM3OlxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzgtXFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmFyY2gveDg2L3ZpcnQvdm14L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVxcdCs9IHRkeC9cXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0lOVEVMX1REWF9HVUVTVClcXHQrPSB0ZHgtZ3Vlc3QvXFxuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU5URUxfVERYX0hPU1QpXFx0Kz0gdGR4LWhvc3QvXFxuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0FSTV9DQ0FfR1VFU1QpXFx0Kz0gYXJtLWNjYS1ndWVzdC9cXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ob3N0L0tjb25maWc9MT1jb25maWcgVERYX0hPU1RfU0VSVklDRVNcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtaG9zdC9LY29uZmlnLTItXFx0dHJpc3RhdGVcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtaG9zdC9LY29uZmlnOjM6XFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ob3N0L0tjb25maWctNC1cXHRzZWxlY3QgRldfTE9BREVSXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9MTQ9ZW51bSBtaXNjX3Jlc190eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC0yMC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg6MjE6I2lmZGVmIENPTkZJR19JTlRFTF9URFhfSE9TVFxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC0yMi1cXHQvKiogQE1JU0NfQ0dfUkVTX1REWDogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0yMD1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWlzY19yZXNfbmFtZVtdID0ge1xcbi0tXFxua2VybmVsL2Nncm91cC9taXNjLmMtMjYtI2VuZGlmXFxua2VybmVsL2Nncm91cC9taXNjLmM6Mjc6I2lmZGVmIENPTkZJR19JTlRFTF9URFhfSE9TVFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTI4LVxcdC8qIEludGVsIFREWCBIS0lEcyByZXNvdXJjZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzowMjo1Ni4xMDkyOTE2NTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzA0NTM2NjMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFZlcmRpY3Q6IE5vdCBXb3J0aHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBBUkNIX0tFRVBfTUVNQkxPQ0tgIG9uIHg4NiBpcyBnYXRlZCBieSBgSU5URUxfVERYX0hPU1RgLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgSU5URUxfVERYX0hPU1RgIGRlcGVuZHMgb24sIHNvIEkgc2VlIGl0J3MgY29uZGl0aW9uZWQgb24gYENQVV9TVVBfSU5URUxgLCBgWDg2XzY0YCwgYEtWTV9JTlRFTGAsIGBYODZfWDJBUElDYCwgYENPTlRJR19BTExPQ2AsIGFuZCBgWDg2X01DRWAuIEJ1dCB1bHRpbWF0ZWx5LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYElOVEVMX1REWF9IT1NUYCBpcyBlbmFibGVkIG9yIG5vdCwgdGhlIGNvcmUgY2hhbmdlIGluIHRoaXMgcGF0Y2ggaXMgaW5jcmVkaWJseSBsb2NhbGl6ZWQuXG5cbkl0J3MgbGl0ZXJhbGx5IGp1c3QgYWRkaW5nIGBcIlJTVl9IVUdFVExCXCJgIHRvIHRoZSBgZmxhZ25hbWVgIGFycmF5LiAgVGhpcyBhcnJheSBpcyAqb25seSogdXNlZCB3aXRoaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3coKWAsIHdoaWNoIGlzIGEgZGVidWdmcyBmdW5jdGlvbiBjYWxsZWQgdG8gcHJpbnQgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL3ttZW1vcnkscmVzZXJ2ZWR9YC4gU28gdGhlIG9ubHkgZWZmZWN0IGlzIHRvIGNoYW5nZSB0aGUgdGV4dCBvdXRwdXQgaW4gdGhpcyBkZWJ1Z2ZzIGludGVyZmFjZSBmcm9tIFwiVU5LTk9XTlwiIHRvIFwiUlNWX0hVR0VUTEJcIiBmb3IgYSBzcGVjaWZpYyBmbGFnIGJpdC5cblxuTm93LCBsZXQncyBhcHBseSB0aGUgZnV6emluZyBjcml0ZXJpYS4gU2VjdGlvbiAxIGZvY3VzZXMgb24gY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV0Yy4gU2VjdGlvbiAyLCB0aGUgXCJuZWdhdGl2ZSBjcml0ZXJpYSxcIiBpcyBrZXk6IFwicHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZ+KApiB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlwiIFRoaXMgKmRlZmluaXRlbHkqIGZhbGxzIHVuZGVyIHRoYXQgY2F0ZWdvcnkuICBJdCdzIGp1c3QgYWRkaW5nIGEgc3RyaW5nIGxpdGVyYWw7IGl0J3Mgbm90IHRvdWNoaW5nIGFueSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBjb250cm9sIGZsb3csIGxvY2tpbmcsIG9yIGV4ZWN1dGFibGUgYWxnb3JpdGhtcy4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgcmVhZGluZyBhIGNvbnN0YW50IHN0cmluZyBpbiBgc2VxX3B1dHNgLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzLiBUaGVyZSdzIG5vIGNoYW5jZSBvZiBmaW5kaW5nIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciB0cmlnZ2VyaW5nIG5ldyBhc3NlcnRpb25zLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgOiBgV29ydGhGdXp6aW5nOiBmYWxzZWAsIGBSZWFzb25pbmdgLCBgRm9jdXNTeW1ib2xzOiBbXWAsIGFuZCBgRW5hYmxlQ29uZmlnczogW11gLiBUaGUgc2NoZW1hIGNvbmZpcm1zIHRoYXQuXG5cbkZpbmFsbHksIHRoZSByZWFzb25pbmcgbmVlZHMgdG8gYmUgY29uY2lzZS4gSGVyZSdzIHdoYXQgSSdsbCBzdWJtaXQ6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyB0aGUgc3RyaW5nICdSU1ZfSFVHRVRMQicgY29ycmVzcG9uZGluZyB0byB0aGUgTUVNQkxPQ0tfUlNSVl9IVUdFVExCIGZsYWcgdG8gdGhlIGBmbGFnbmFtZWAgYXJyYXksIHdoaWNoIGlzIHVzZWQgZXhjbHVzaXZlbHkgZm9yIGZvcm1hdHRpbmcgZGVidWdmcyBvdXRwdXQgaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3coKWAuIFRoaXMgaXMgcHVyZWx5IGRlY29yYXRpdmUgc3RyaW5nIGZvcm1hdHRpbmcgZm9yIGRlYnVnIG91dHB1dCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvbnRyb2wgZmxvdywgc3RhdGUgbWFuYWdlbWVudCwgb3IgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoZXJlZm9yZSwgZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDM5LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6MDM6MDMuMTU0NjYzNzI1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIHRoZSBzdHJpbmcgXFxcIlJTVl9IVUdFVExCXFxcIiBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRU1CTE9DS19SU1JWX0hVR0VUTEIgZmxhZyB0byB0aGUgZmxhZ25hbWVbXSB0YWJsZSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGFycmF5IGlzIHNvbGVseSB1c2VkIGZvciBmb3JtYXR0aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyAobWVtYmxvY2tfZGVidWdfc2hvdykuIEl0IGlzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcvb3V0cHV0IGZvcm1hdHRpbmcgdGhhdCBkb2VzIG5vdCBhbHRlciBhbnkga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGludHJvZHVjZXMgbm8gYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgdGhlIHN0cmluZyBcXFwiUlNWX0hVR0VUTEJcXFwiIGNvcnJlc3BvbmRpbmcgdG8gdGhlIE1FTUJMT0NLX1JTUlZfSFVHRVRMQiBmbGFnIHRvIHRoZSBmbGFnbmFtZVtdIHRhYmxlIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgYXJyYXkgaXMgc29sZWx5IHVzZWQgZm9yIGZvcm1hdHRpbmcgaHVtYW4tcmVhZGFibGUgZmxhZyBuYW1lcyBpbiBkZWJ1Z2ZzIChtZW1ibG9ja19kZWJ1Z19zaG93KS4gSXQgaXMgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy9vdXRwdXQgZm9ybWF0dGluZyB0aGF0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBhbmQgaW50cm9kdWNlcyBubyBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjAzOjAzLjE1NDcxNzIwNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7l2g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 16:35:45 +0000 UTC FinishedAt: 2026-09-15 17:03:04 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIHRoZSBzdHJpbmcgXCYjMzQ7UlNWX0hVR0VUTEJcJiMzNDsgY29ycmVzcG9uZGluZyB0byB0aGUgTUVNQkxPQ0tfUlNSVl9IVUdFVExCIGZsYWcgdG8gdGhlIGZsYWduYW1lW10gdGFibGUgaW4gbW0vbWVtYmxvY2suYy4gVGhpcyBhcnJheSBpcyBzb2xlbHkgdXNlZCBmb3IgZm9ybWF0dGluZyBodW1hbi1yZWFkYWJsZSBmbGFnIG5hbWVzIGluIGRlYnVnZnMgKG1lbWJsb2NrX2RlYnVnX3Nob3cpLiBJdCBpcyBwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nL291dHB1dCBmb3JtYXR0aW5nIHRoYXQgZG9lcyBub3QgYWx0ZXIgYW55IGtlcm5lbCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIGFuZCBpbnRyb2R1Y2VzIG5vIGFzc2VydGlvbnMuIFRoZXJlZm9yZSwgaXQgZG9lcyBub3Qgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDllZjc0YTYxM2FhMGFlYjVjOWI1OWZhYTRiMWMyYjUxOTNhYjRjZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxNjo1NToyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xuaW5kZXggMzE5NjFlZDYyOGIwYS4uZjUxODExZGIxMThhMSAxMDA2NDRcbi0tLSBhL21tL21lbWJsb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmNcbkBAIC0yODc0LDYgJiM0MzsyODc0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xuIFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfTk9JTklUKV0gPSBcJiMzNDtSU1ZfTklUXCYjMzQ7LFxuIFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfS0VSTildID0gXCYjMzQ7UlNWX0tFUk5cJiMzNDssXG4gXHRbaWxvZzIoTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpXSA9IFwmIzM0O0tIT19TQ1JBVENIXCYjMzQ7LFxuJiM0MztcdFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFwmIzM0O1JTVl9IVUdFVExCXCYjMzQ7LFxuIH07XG4gXG4gc3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgdGhlIHN0cmluZyBcJiMzNDtSU1ZfSFVHRVRMQlwmIzM0OyBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRU1CTE9DS19SU1JWX0hVR0VUTEIgZmxhZyB0byB0aGUgZmxhZ25hbWVbXSB0YWJsZSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGFycmF5IGlzIHNvbGVseSB1c2VkIGZvciBmb3JtYXR0aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyAobWVtYmxvY2tfZGVidWdfc2hvdykuIEl0IGlzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcvb3V0cHV0IGZvcm1hdHRpbmcgdGhhdCBkb2VzIG5vdCBhbHRlciBhbnkga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGludHJvZHVjZXMgbm8gYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWVmNzRhNjEzYWEwYWViNWM5YjU5ZmFhNGIxYzJiNTE5M2FiNGNkZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDE2OjU1OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggMzE5NjFlZDYyOGIwYS4uZjUxODExZGIxMThhMSAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1ibG9jay5jCkBAIC0yODc0LDYgJiM0MzsyODc0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0gewogCVtpbG9nMihNRU1CTE9DS19SU1JWX05PSU5JVCldID0gJiMzNDtSU1ZfTklUJiMzNDssCiAJW2lsb2cyKE1FTUJMT0NLX1JTUlZfS0VSTildID0gJiMzNDtSU1ZfS0VSTiYjMzQ7LAogCVtpbG9nMihNRU1CTE9DS19LSE9fU0NSQVRDSCldID0gJiMzNDtLSE9fU0NSQVRDSCYjMzQ7LAomIzQzOwlbaWxvZzIoTUVNQkxPQ0tfUlNSVl9IVUdFVExCKV0gPSAmIzM0O1JTVl9IVUdFVExCJiMzNDssCiB9OwogCiBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBCbG9jayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaXRzIGltcGxpY2F0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgdGFyZ2V0IGlzIHRoZSBgbW0vbWVtYmxvY2suY2AgZmlsZSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nIOKAkyB0aGF0JiMzOTtzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGVycml0b3J5LiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB3aGF0JiMzOTtzIGJlaW5nIHR3ZWFrZWQuIEdpdmVuIHRoZSBsb2NhdGlvbiwgYW5kIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBsaWtlbHkgaGF2ZSB0byBkbyB3aXRoIHRoZSBpbml0aWFsIG1lbW9yeSBtYXAsIG1lbW9yeSBob3RwbHVnLCBvciByZXNlcnZhdGlvbiBvZiBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucy4KClJpZ2h0LCBgbW0vbWVtYmxvY2suY2AuLi4gbm93IEkgbmVlZCB0byBhY3R1YWxseSBzZWUgdGhlIGNoYW5nZXMuIExpbmUgMjg3NCBpcyB0aGUgbGlrZWx5IGtleSBhcmVhLCBzbyBJJiMzOTtsbCB3YW50IHRvIGZvY3VzIHRoZXJlLiBHb29kIHRoaW5nIEkgaGF2ZSBgcmVhZC1maWxlYCBhbmQgYGdyZXBwZXJgIGF0IG15IGRpc3Bvc2FsLiBJJiMzOTtsbCBzdGFydCB3aXRoIGByZWFkLWZpbGVgIHRvIGdldCBhIGdlbmVyYWwgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE5vIG5lZWQgdG8gaW1tZWRpYXRlbHkganVtcCBpbnRvIGEgZ3JlcCBzZWFyY2gsIGxldCYjMzk7cyBnZXQgc29tZSBjb250ZXh0IGZpcnN0LiBJIHdhbnQgdG8gc2VlIHRoZSAqZmxvdyogYW5kICpsb2dpYyogc3Vycm91bmRpbmcgdGhlIGNoYW5nZS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIGNvcnJlY3RuZXNzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg2MDpcdFx0cmV0dXJuIDE7XG4yODYxOlx0ZXJyX3BhcmFtOlxuMjg2MjpcdFx0cHJfZXJyKFwmIzM0O3Jlc2VydmVfbWVtOiBlbXB0eSBvciBtYWxmb3JtZWQgcGFyYW1ldGVyXFxuXCYjMzQ7KTtcbjI4NjM6XHRcdHJldHVybiAtRUlOVkFMO1xuMjg2NDpcdH1cbjI4NjU6XHRfX3NldHVwKFwmIzM0O3Jlc2VydmVfbWVtPVwmIzM0OywgcmVzZXJ2ZV9tZW0pO1xuMjg2NjpcdFxuMjg2NzpcdCNpZmRlZiBDT05GSUdfREVCVUdfRlNcbjI4Njg6XHQjaWZkZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xuMjg2OTpcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcbjI4NzA6XHRcdFtpbG9nMihNRU1CTE9DS19IT1RQTFVHKV0gPSBcJiMzNDtIT1RQTFVHXCYjMzQ7LFxuMjg3MTpcdFx0W2lsb2cyKE1FTUJMT0NLX01JUlJPUildID0gXCYjMzQ7TUlSUk9SXCYjMzQ7LFxuMjg3MjpcdFx0W2lsb2cyKE1FTUJMT0NLX05PTUFQKV0gPSBcJiMzNDtOT01BUFwmIzM0OyxcbjI4NzM6XHRcdFtpbG9nMihNRU1CTE9DS19EUklWRVJfTUFOQUdFRCldID0gXCYjMzQ7RFJWX01OR1wmIzM0OyxcbjI4NzQ6XHRcdFtpbG9nMihNRU1CTE9DS19SU1JWX05PSU5JVCldID0gXCYjMzQ7UlNWX05JVFwmIzM0OyxcbjI4NzU6XHRcdFtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9IFwmIzM0O1JTVl9LRVJOXCYjMzQ7LFxuMjg3NjpcdFx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcJiMzNDtLSE9fU0NSQVRDSFwmIzM0OyxcbjI4Nzc6XHRcdFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFwmIzM0O1JTVl9IVUdFVExCXCYjMzQ7LFxuMjg3ODpcdH07XG4yODc5Olx0XG4yODgwOlx0c3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcbjI4ODE6XHR7XG4yODgyOlx0XHRzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSA9IG0tXHUwMDNlcHJpdmF0ZTtcbjI4ODM6XHRcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZztcbjI4ODQ6XHRcdGludCBpLCBqLCBuaWQ7XG4yODg1Olx0XHR1bnNpZ25lZCBpbnQgY291bnQgPSBBUlJBWV9TSVpFKGZsYWduYW1lKTtcbjI4ODY6XHRcdHBoeXNfYWRkcl90IGVuZDtcbjI4ODc6XHRcbjI4ODg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR5cGUtXHUwMDNlY250OyBpJiM0MzsmIzQzOykge1xuMjg4OTpcdFx0XHRyZWcgPSBcdTAwMjZ0eXBlLVx1MDAzZXJlZ2lvbnNbaV07XG4yODkwOlx0XHRcdGVuZCA9IHJlZy1cdTAwM2ViYXNlICYjNDM7IHJlZy1cdTAwM2VzaXplIC0gMTtcbjI4OTE6XHRcdFx0bmlkID0gbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKHJlZyk7XG4yODkyOlx0XG4yODkzOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTRkOiBcJiMzNDssIGkpO1xuMjg5NDpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVwYS4uJXBhIFwmIzM0OywgXHUwMDI2cmVnLVx1MDAzZWJhc2UsIFx1MDAyNmVuZCk7XG4yODk1Olx0XHRcdGlmIChudW1hX3ZhbGlkX25vZGUobmlkKSlcbjI4OTY6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU0ZCBcJiMzNDssIG5pZCk7XG4yODk3Olx0XHRcdGVsc2VcbjI4OTg6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU0YyBcJiMzNDssICYjMzk7eCYjMzk7KTtcbjI4OTk6XHRcdFx0aWYgKHJlZy1cdTAwM2VmbGFncykge1xuMjkwMDpcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncyA9IHJlZy1cdTAwM2VmbGFncztcbjI5MDE6XHRcdFx0XHRib29sIGZpcnN0ID0gdHJ1ZTtcbjI5MDI6XHRcbjI5MDM6XHRcdFx0XHRmb3IgKGogPSAwOyBmbGFnczsgaiYjNDM7JiM0MzssIGZsYWdzIFx1MDAzZVx1MDAzZT0gMSkge1xuMjkwNDpcdFx0XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IDEpKVxuMjkwNTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbjI5MDY6XHRcdFx0XHRcdGlmICghZmlyc3QpXG4yOTA3Olx0XHRcdFx0XHRcdHNlcV9wdXRjKG0sICYjMzk7fCYjMzk7KTtcbjI5MDg6XHRcdFx0XHRcdHNlcV9wdXRzKG0sIGogXHUwMDNjIGNvdW50ID8gZmxhZ25hbWVbal0gOiBcJiMzNDtVTktOT1dOXCYjMzQ7KTtcbjI5MDk6XHRcdFx0XHRcdGZpcnN0ID0gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYE1FTUJMT0NLX1JTUlZfSFVHRVRMQmAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCBhY3R1YWxseSByZXByZXNlbnRzIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZy4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMsIG9mIGNvdXJzZSwgYSB0YXJnZXRlZCBzZWFyY2guIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBmaW5kIHRoaXMgd2l0aGluIHRoZSByZWxldmFudCBjb2RlIG9yIGRvY3VtZW50YXRpb24uIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB0aGF0IHN0cmluZy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyB1c2FnZSBhbmQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1CTE9DS19SU1JWX0hVR0VUTEImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTI1PWV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3Bvc3NpYmxlX3Bmbjtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNTMtICogYWxsb2NhdGlvbnMgbWF5IGhhcHBlbiBmcm9tIGluIHRoaXMgcGhhc2UuXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NTQ6ICogQE1FTUJMT0NLX1JTUlZfSFVHRVRMQjogbWVtb3J5IGlzIHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNTUtICovXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9NTY9ZW51bSBtZW1ibG9ja19mbGFncyB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTY0LVx0TUVNQkxPQ0tfS0hPX1NDUkFUQ0hcdD0gMHg0MCxcdC8qIHNjcmF0Y2ggbWVtb3J5IGZvciBrZXhlYyBoYW5kb3ZlciAqL1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjY1Olx0TUVNQkxPQ0tfUlNSVl9IVUdFVExCXHQ9IDB4ODAsIC8qIG1lbW9yeSByZXNlcnZlZCBmb3IgaHVnZXRsYiBwYWdlcyAqL1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTY2LX07XG4tLVxubW0vbWVtYmxvY2suYz0xNzc3PXZvaWQgKiBfX2luaXQgbWVtYmxvY2tfYWxsb2NfaHVnZXRsYihwaHlzX2FkZHJfdCBzaXplLCBpbnQgbmlkLCBib29sIGV4YWN0X25pZClcbi0tXG5tbS9tZW1ibG9jay5jLTE4MjYtXG5tbS9tZW1ibG9jay5jOjE4Mjc6XHRpZiAoX19tZW1ibG9ja19yZXNlcnZlKGFkZHIsIHNpemUsIG5pZCwgTUVNQkxPQ0tfUlNSVl9LRVJOIHwgTUVNQkxPQ0tfUlNSVl9IVUdFVExCKSlcbm1tL21lbWJsb2NrLmMtMTgyOC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vbWVtYmxvY2suYz0xOTAzPXBoeXNfYWRkcl90IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUocGh5c19hZGRyX3QgbGltaXQsIGludCBuaWQpXG4tLVxubW0vbWVtYmxvY2suYy0xOTE3LVx0XHRpZiAobmlkID09IG1lbWJsb2NrX2dldF9yZWdpb25fbm9kZShyKSB8fCAhbnVtYV92YWxpZF9ub2RlKG5pZCkpXG5tbS9tZW1ibG9jay5jOjE5MTg6XHRcdFx0aWYgKHItXHUwMDNlZmxhZ3MgXHUwMDI2IE1FTUJMT0NLX1JTUlZfSFVHRVRMQilcbm1tL21lbWJsb2NrLmMtMTkxOS1cdFx0XHRcdHRvdGFsICYjNDM7PSBzaXplO1xuLS1cbm1tL21lbWJsb2NrLmM9Mjg2OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XG4tLVxubW0vbWVtYmxvY2suYy0yODc2LVx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcJiMzNDtLSE9fU0NSQVRDSFwmIzM0Oyxcbm1tL21lbWJsb2NrLmM6Mjg3NzpcdFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFwmIzM0O1JTVl9IVUdFVExCXCYjMzQ7LFxubW0vbWVtYmxvY2suYy0yODc4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1c2UgYGdpdCBsb2dgIHRvIHNlZSB0aGUgY29tbWl0IGhpc3RvcnksIG1heWJlIHRyYWNrIGRvd24gd2hlbiBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCB3YXMgaW50cm9kdWNlZCwgb3IgcXVpY2tseSBncm9rIHRoZSBjb250ZXh0LiBCdXQsIHdhaXQsIEkgZG9uJiMzOTt0IGhhdmUgdGhhdCB0b29sIGF2YWlsYWJsZSEgTm8gcHJvYmxlbSwgbGV0JiMzOTtzIGp1c3QgbG9vayBhdCB0aGUgZGlmZi4KClRoZSBkaWZmIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYSB2ZXJ5IHNtYWxsIG1vZGlmaWNhdGlvbiB0byBgbW0vbWVtYmxvY2suY2AuIFRoZSBvbmx5IGxpbmUgYWRkZWQgaXMgYFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9ICYjMzQ7UlNWX0hVR0VUTEImIzM0OyxgIGluc2lkZSB0aGUgYGZsYWduYW1lW11gIGFycmF5LiBUaGF0JiMzOTtzIGl0IQoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgaXMgYGZsYWduYW1lYCBkb2luZz8gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgZmxhZyBvciByZXNlcnZhdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgbWVtb3J5IGJsb2NrIG1hbmFnZW1lbnQuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYG1tL21lbWJsb2NrLmNgIGFyb3VuZCB0aG9zZSBsaW5lcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgbmV3bHkgYWRkZWQgc3RyaW5nIGBSU1ZfSFVHRVRMQmAgaXMgdXNlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBNRU1CTE9DS19SU1JWX0hVR0VUTEJgIGFuZCB3aHkgdGhpcyBpcyBiZWluZyBhZGRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4OTA6XHRcdFx0ZW5kID0gcmVnLVx1MDAzZWJhc2UgJiM0MzsgcmVnLVx1MDAzZXNpemUgLSAxO1xuMjg5MTpcdFx0XHRuaWQgPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmVnKTtcbjI4OTI6XHRcbjI4OTM6XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslNGQ6IFwmIzM0OywgaSk7XG4yODk0Olx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JXBhLi4lcGEgXCYjMzQ7LCBcdTAwMjZyZWctXHUwMDNlYmFzZSwgXHUwMDI2ZW5kKTtcbjI4OTU6XHRcdFx0aWYgKG51bWFfdmFsaWRfbm9kZShuaWQpKVxuMjg5NjpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTRkIFwmIzM0OywgbmlkKTtcbjI4OTc6XHRcdFx0ZWxzZVxuMjg5ODpcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTRjIFwmIzM0OywgJiMzOTt4JiMzOTspO1xuMjg5OTpcdFx0XHRpZiAocmVnLVx1MDAzZWZsYWdzKSB7XG4yOTAwOlx0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzID0gcmVnLVx1MDAzZWZsYWdzO1xuMjkwMTpcdFx0XHRcdGJvb2wgZmlyc3QgPSB0cnVlO1xuMjkwMjpcdFxuMjkwMzpcdFx0XHRcdGZvciAoaiA9IDA7IGZsYWdzOyBqJiM0MzsmIzQzOywgZmxhZ3MgXHUwMDNlXHUwMDNlPSAxKSB7XG4yOTA0Olx0XHRcdFx0XHRpZiAoIShmbGFncyBcdTAwMjYgMSkpXG4yOTA1Olx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjkwNjpcdFx0XHRcdFx0aWYgKCFmaXJzdClcbjI5MDc6XHRcdFx0XHRcdFx0c2VxX3B1dGMobSwgJiMzOTt8JiMzOTspO1xuMjkwODpcdFx0XHRcdFx0c2VxX3B1dHMobSwgaiBcdTAwM2MgY291bnQgPyBmbGFnbmFtZVtqXSA6IFwmIzM0O1VOS05PV05cJiMzNDspO1xuMjkwOTpcdFx0XHRcdFx0Zmlyc3QgPSBmYWxzZTtcbjI5MTA6XHRcdFx0XHR9XG4yOTExOlx0XHRcdFx0c2VxX3B1dGMobSwgJiMzOTtcXG4mIzM5Oyk7XG4yOTEyOlx0XHRcdH0gZWxzZSB7XG4yOTEzOlx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDslc1xcblwmIzM0OywgXCYjMzQ7Tk9ORVwmIzM0Oyk7XG4yOTE0Olx0XHRcdH1cbjI5MTU6XHRcdH1cbjI5MTY6XHRcdHJldHVybiAwO1xuMjkxNzpcdH1cbjI5MTg6XHRERUZJTkVfU0hPV19BVFRSSUJVVEUobWVtYmxvY2tfZGVidWcpO1xuMjkxOTpcdFxuMjkyMDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdClcbjI5MjE6XHR7XG4yOTIyOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O21lbW9yeVwmIzM0OywgMDQ0NCwgcm9vdCxcbjI5MjM6XHRcdFx0XHQgICAgXHUwMDI2bWVtYmxvY2subWVtb3J5LCBcdTAwMjZtZW1ibG9ja19kZWJ1Z19mb3BzKTtcbjI5MjQ6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cmVzZXJ2ZWRcJiMzNDssIDA0NDQsIHJvb3QsXG4yOTI1Olx0XHRcdFx0ICAgIFx1MDAyNm1lbWJsb2NrLnJlc2VydmVkLCBcdTAwMjZtZW1ibG9ja19kZWJ1Z19mb3BzKTtcbjI5MjY6XHQjaWZkZWYgQ09ORklHX0hBVkVfTUVNQkxPQ0tfUEhZU19NQVBcbjI5Mjc6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cGh5c21lbVwmIzM0OywgMDQ0NCwgcm9vdCwgXHUwMDI2cGh5c21lbSxcbjI5Mjg6XHRcdFx0XHQgICAgXHUwMDI2bWVtYmxvY2tfZGVidWdfZm9wcyk7XG4yOTI5Olx0I2VuZGlmXG4yOTMwOlx0fVxuMjkzMTpcdFxuMjkzMjpcdCNlbHNlXG4yOTMzOlx0XG4yOTM0Olx0c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2RlYnVnZnNfZXhwb3NlX2FycmF5cyhzdHJ1Y3QgZGVudHJ5ICpyb290KSB7IH1cbjI5MzU6XHRcbjI5MzY6XHQjZW5kaWYgLyogQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSyAqL1xuMjkzNzpcdFxuMjkzODpcdHN0YXRpYyBpbnQgbWVtYmxvY2tfcmVzZXJ2ZV9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXG4yOTM5Olx0e1xuMjk0MDpcdFx0c3RydWN0IHJlc2VydmVfbWVtX3RhYmxlICptYXA7XG4yOTQxOlx0XHRjaGFyIHR4dHN6WzE2XTtcbjI5NDI6XHRcbjI5NDM6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZyZXNlcnZlX21lbV9sb2NrKTtcbjI5NDQ6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyByZXNlcnZlZF9tZW1fY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4yOTQ1Olx0XHRcdG1hcCA9IFx1MDAyNnJlc2VydmVkX21lbV90YWJsZVtpXTtcbjI5NDY6XHRcdFx0aWYgKCFtYXAtXHUwMDNlc2l6ZSlcbjI5NDc6XHRcdFx0XHRjb250aW51ZTtcbjI5NDg6XHRcbjI5NDk6XHRcdFx0bWVtc2V0KHR4dHN6LCAwLCBzaXplb2YodHh0c3opKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBEZWJ1Z2ZzIFN0cmluZyBBcnJheSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU2VjdGlvbiAyIG9mIHRoZSBwcm9tcHQgb3V0bGluZXMgdGhlIGNyaXRlcmlhIGZvciAqbm90KiBmdXp6aW5nIGEgY2hhbmdlLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGFycmF5IG1vZGlmaWNhdGlvbiBmYWxscyB1bmRlciB0aG9zZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgdGhpcyBhbHRlcmF0aW9uIGludHJvZHVjZXMgcG90ZW50aWFsIGZvciBidWdzIG9yIGFsdGVycyBjb3JlIGZ1bmN0aW9uYWxpdHksIG9yIGlmIGl0JiMzOTtzIHB1cmVseSBjb3NtZXRpYy4KCkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlOiBleHRlbmRpbmcgdGhlIGBmbGFnbmFtZWAgYXJyYXkgdXNlZCBpbiBgbWVtYmxvY2tfZGVidWdfc2hvdygpYCBieSBhZGRpbmcgYW4gZW50cnkgZm9yICYjMzQ7UlNWX0hVR0VUTEImIzM0Oy4gUHJldmlvdXNseSwgdGhlIGNvZGUgcHJpbnRlZCAmIzM0O1VOS05PV04mIzM0OyBmb3IgdGhpcyBmbGFnLCBub3cgaXQgcHJpbnRzIHRoZSBhc3NvY2lhdGVkIHN0cmluZy4KCkkgbmVlZCB0byBhbmFseXplIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgY2hhbmdlIHRvIGRvY3VtZW50YXRpb24/IE5vLiBJcyB0aGlzIGEgdXNlci1zcGFjZSBtb2RpZmljYXRpb24gbm90IGFmZmVjdGluZyB0aGUga2VybmVsIGltYWdlPyBOby4gSXMgdGhpcyBwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIHRoYXQgZG9lcyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcz8gVGhhdCYjMzk7cyB0aGUgcXVlc3Rpb24uIEFkZGluZyBhIHN0cmluZyB0byBhbiBhcnJheSAqY291bGQqIGJlIGNvbnNpZGVyZWQgcHVyZWx5IGRlY29yYXRpdmUuICpIb3dldmVyKiwgSSBuZWVkIHRvIGJlIHN1cmUuIEkgc2VlIHRoYXQgdGhlIGxvZ2dpbmcgKmlzKiBjaGFuZ2luZyBub3cuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gSXMgdGhlcmUgYSBidWZmZXIgb3ZlcmZsb3cgY29uY2VybiBoZXJlPyBObywgSSBkb24mIzM5O3Qgc2VlIGFueSBkaXJlY3Qgd3JpdGVzICp0byogdGhlIGFycmF5LiBJcyB0aGVyZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gUG90ZW50aWFsbHkuIFByZXZpb3VzbHksIHRoZSBjb2RlIGNoZWNrZWQgYGogJmx0OyBjb3VudGAsIGFuZCB0aGF0IHdvdWxkIGhhdmUgc2hvcnQtY2lyY3VpdGVkLiBOb3csIGl0IHByaW50cyB0aGUgc3RyaW5nLiBTbyB0aGUgbG9naWMgaGFzIGNoYW5nZWQsIGluIHRoYXQgYnJhbmNoIG9mIGNvZGUuIElzIGl0IHBvc3NpYmxlIHRoYXQgYGZsYWduYW1lYCAqY291bGQqIGhhdmUgYSBgTlVMTGAgZWxlbWVudCBzb21ld2hlcmU/IEkgc2hvdWxkIGNoZWNrIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIG5vdCBwb3NzaWJsZSBieSBkZXNpZ24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlY2xhcmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gQW5kIHRoZSB2YWx1ZXMgb2YgYE1FTUJMT0NLXypgIGluIGBpbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhgLiBJdCBhcHBlYXJzIHRvIGJlIGluaXRpYWxpemVkIGluIHRoZSBhcnJheS4gVGhpcyBpcyBnb29kLiBJdCBzZWVtcyBzYWZlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMuCgpTbywgaW4gc3VtbWFyeSwgZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSAqYXBwZWFycyogcHVyZWx5IGRlY29yYXRpdmUgYXQgZmlyc3QgZ2xhbmNlLCB0aGUgY2hhbmdlIGluIG91dHB1dCBvZiBpbmZvcm1hdGlvbiBkb2VzIGNvbnN0aXR1dGUgYSBjaGFuZ2UgdG8gYSBsb2dnaW5nIGZ1bmN0aW9uLiBUaGlzIHdvdWxkIG5vdCBiZSBhICYjMzQ7c3RyaWN0bHkmIzM0OyBkZWNvcmF0aXZlIGxvZ2dpbmcgY2hhbmdlLCB3aGljaCBpcyBvbmUgb2YgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLgoKT2theSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBjaGFuZ2UgKmRvZXMqIHdhcnJhbnQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0ICoga2VybmVsIGluIGhhbmRvdmVyIG1vZGUuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGxcbiAgNTE6XHQgKiBtZW1vcnkgcmVzZXJ2YXRpb25zIHlldCwgc28gd2UgZ2V0IHNjcmF0Y2ggbWVtb3J5IGZyb20gdGhlIHByZXZpb3VzXG4gIDUyOlx0ICoga2VybmVsIHRoYXQgd2Uga25vdyBpcyBnb29kIHRvIHVzZS4gSXQgaXMgdGhlIG9ubHkgbWVtb3J5IHRoYXRcbiAgNTM6XHQgKiBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb20gaW4gdGhpcyBwaGFzZS5cbiAgNTQ6XHQgKiBATUVNQkxPQ0tfUlNSVl9IVUdFVExCOiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXNcbiAgNTU6XHQgKi9cbiAgNTY6XHRlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcbiAgNTc6XHRcdE1FTUJMT0NLX05PTkVcdFx0PSAweDAsXHQvKiBObyBzcGVjaWFsIHJlcXVlc3QgKi9cbiAgNTg6XHRcdE1FTUJMT0NLX0hPVFBMVUdcdD0gMHgxLFx0LyogaG90cGx1Z2dhYmxlIHJlZ2lvbiAqL1xuICA1OTpcdFx0TUVNQkxPQ0tfTUlSUk9SXHRcdD0gMHgyLFx0LyogbWlycm9yZWQgcmVnaW9uICovXG4gIDYwOlx0XHRNRU1CTE9DS19OT01BUFx0XHQ9IDB4NCxcdC8qIGRvbiYjMzk7dCBhZGQgdG8ga2VybmVsIGRpcmVjdCBtYXBwaW5nICovXG4gIDYxOlx0XHRNRU1CTE9DS19EUklWRVJfTUFOQUdFRCA9IDB4OCxcdC8qIGFsd2F5cyBkZXRlY3RlZCB2aWEgYSBkcml2ZXIgKi9cbiAgNjI6XHRcdE1FTUJMT0NLX1JTUlZfTk9JTklUXHQ9IDB4MTAsXHQvKiBkb24mIzM5O3QgaW5pdGlhbGl6ZSBzdHJ1Y3QgcGFnZXMgKi9cbiAgNjM6XHRcdE1FTUJMT0NLX1JTUlZfS0VSTlx0PSAweDIwLFx0LyogbWVtb3J5IHJlc2VydmVkIGZvciBrZXJuZWwgdXNlICovXG4gIDY0Olx0XHRNRU1CTE9DS19LSE9fU0NSQVRDSFx0PSAweDQwLFx0Lyogc2NyYXRjaCBtZW1vcnkgZm9yIGtleGVjIGhhbmRvdmVyICovXG4gIDY1Olx0XHRNRU1CTE9DS19SU1JWX0hVR0VUTEJcdD0gMHg4MCwgLyogbWVtb3J5IHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzICovXG4gIDY2Olx0fTtcbiAgNjc6XHRcbiAgNjg6XHQvKipcbiAgNjk6XHQgKiBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uIC0gcmVwcmVzZW50cyBhIG1lbW9yeSByZWdpb25cbiAgNzA6XHQgKiBAYmFzZTogYmFzZSBhZGRyZXNzIG9mIHRoZSByZWdpb25cbiAgNzE6XHQgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcmVnaW9uXG4gIDcyOlx0ICogQGZsYWdzOiBtZW1vcnkgcmVnaW9uIGF0dHJpYnV0ZXNcbiAgNzM6XHQgKiBAbmlkOiBOVU1BIG5vZGUgaWRcbiAgNzQ6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEwNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBmb3IgRnV6emluZzogbWVtYmxvY2sgRmxhZyBEZWZpbml0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYE1FTUJMT0NLXypgIGZsYWcgZGVmaW5pdGlvbnMuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGVhY2ggZmxhZyBpcyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBiaXQsIGNhbGN1bGF0ZWQgYXMgYSBwb3dlciBvZiAyIChpbG9nMikuIEkgY2FuIHNlZSB0aGF0IHRoZSBhcnJheSBpcyBmdWxseSBwb3B1bGF0ZWQsIGluZGV4ZWQgZnJvbSAwIHRvIDcuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNhcmVmdWxseSBjb25zaWRlciB0aGUgcHJvbXB0LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2hhbmdlIGlzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgb3Igbm90LCBhbmQgdGhlcmUgYXJlIHNwZWNpZmljICpuZWdhdGl2ZSogY3JpdGVyaWEgdGhhdCB3b3VsZCBleGNsdWRlIGl0LiBUaGUgcHJvbXB0IG91dGxpbmVzIHNldmVyYWwgY2F0ZWdvcmllcyB3aGVyZSBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gSSBuZWVkIHRvIGVuc3VyZSBpZiB0aGUgY2hhbmdlIGZhbGxzIHVuZGVyICYjMzQ7Tm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcyYjMzQ7IG9yIHNvbWV0aGluZyBlbHNlIHRvIHNhdGlzZnkgYSBgZmFsc2VgIHJldHVybi4KClRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyYjMzQ7IGNhdGVnb3J5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgYWZmZWN0cyB0aGUgY29tcGlsZWQga2VybmVsIG9yIGEgZGF0YSBzdHJ1Y3R1cmUuIFRoZSBmbGFncyB0aGVtc2VsdmVzIHNlZW0gaW5ub2N1b3VzLCBidXQgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGV5IGFyZSB1c2VkLgoKQWhhISBJdCBsb29rcyBsaWtlIHRoZXNlIGZsYWdzIGFyZSB1c2VkIGluIGBtZW1ibG9ja19kZWJ1Z19zaG93KClgIHdpdGhpbiBkZWJ1Z2ZzLCBzcGVjaWZpY2FsbHkgaW4gYSBmaWxlIG5hbWVkICYjMzQ7bWVtb3J5JiMzNDsgYW5kIHNvbWV0aGluZyBjYWxsZWQgJiMzNDtyZXNlcnZlZCYjMzQ7LiBgc2VxX3B1dHMobSwgaiAmbHQ7IGNvdW50ID8gZmxhZ25hbWVbal0gOiAmIzM0O1VOS05PV04mIzM0Oyk7YCBpcyB3aGF0IEkgc2VlIGluIG15IGNvZGUuCgpTbyB3aGF0IGlzIGBmbGFnbmFtZWA/IEl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXWAuIFRoaXMgaXMgYW4gYXJyYXkuIEFycmF5cyAqYXJlKiBkYXRhIHN0cnVjdHVyZXMuIEFkZGluZyBhbiBlbGVtZW50IHRvIGl0IGxpdGVyYWxseSBpbmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIGFycmF5LiBTbywgaXMgZGVidWdmcyBwcmludGluZyBjb25zaWRlcmVkICYjMzQ7cHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyYjMzQ7PwoKR29pbmcgYmFjayB0byB0aGUgcHJvbXB0LCBpdCBjbGVhcmx5IHN0YXRlcyAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pICpvciogdHJhY2Vwb2ludHMgKnRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMqLiYjMzQ7IFNvLCB3aGlsZSB0aGlzIGRlYnVnZnMgb3V0cHV0ICpsb29rcyogbGlrZSBsb2dnaW5nLCBpdCYjMzk7cyBhbHNvIHRpZWQgdG8gYSBkYXRhIHN0cnVjdHVyZSAoYGZsYWduYW1lYCkuIEJ5IG1vZGlmeWluZyBhIGRhdGEgc3RydWN0dXJlLCB0aGUgY2hhbmdlIGlzbiYjMzk7dCAqcHVyZWx5KiBkZWNvcmF0aXZlLCBpdCBzZWVtcyB0byBhbHRlciBhIGRhdGEgc3RydWN0dXJlLiBUaGUgZmxhZ3MgdGhlbXNlbHZlcyBhcmUgcGFydCBvZiB0aGUgYG1lbWJsb2NrYCBkYXRhIHN0cnVjdHVyZSBpbiB0aGUgZWFybHkgYm9vdCBtZW1vcnkgYWxsb2NhdG9yLgoKQnV0IHdhaXQsIGNhbiB0aGlzIGJlIGZ1enplZD8gV2hhdCBkb2VzIHN5emthbGxlciBkbz8gRG9lcyBpdCByZWFkIGAvc3lzL2tlcm5lbC9kZWJ1Zy9tZW1ibG9jay9yZXNlcnZlZGA/IFRoYXQmIzM5O3Mgd2hhdCBJIHdhbnQgdG8ga25vdyEKCkFoLCBhIGNydWNpYWwgcXVlc3Rpb24sIGRvZXMgYGFtZDY0YCBldmVuIGtlZXAgdGhlIGBtZW1ibG9ja2A/IExldCBtZSBzZWUuIEkgc2VlIGAjaWZkZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS2AgLSBpcyB0aGF0IGRlZmluZWQgb24gYGFtZDY0YD8gVGhpcyBpcyBjcml0aWNhbCEgTGV0IG1lIGdyZXAgZm9yIHRoaXMgYW5kIGNoZWNrLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGV2ZW4gZXhpc3RzIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9LRUVQX01FTUJMT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy0zNS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL2FybS9LY29uZmlnOjM2Olx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9hcm0vS2NvbmZpZy0zNy1cdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy02My1cdHNlbGVjdCBBUkNIX0hBVkVfVFJBQ0VfTU1JT19BQ0NFU1NcbmFyY2gvYXJtNjQvS2NvbmZpZzo2NDpcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbmFyY2gvYXJtNjQvS2NvbmZpZy02NS1cdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01OC1cdHNlbGVjdCBBUkNIX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlmICFQUkVFTVBUSU9OXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjU5Olx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02MC1cdHNlbGVjdCBBUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVFxuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0yMS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL21pcHMvS2NvbmZpZzoyMjpcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbmFyY2gvbWlwcy9LY29uZmlnLTIzLVx0c2VsZWN0IEFSQ0hfVVNFX0JVSUxUSU5fQlNXQVBcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE2Mi1cdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuYXJjaC9wb3dlcnBjL0tjb25maWc6MTYzOlx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuYXJjaC9wb3dlcnBjL0tjb25maWctMTY0LVx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXHRpZiBQUENfUkFESVhfTU1VXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy02MC1cdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuYXJjaC9yaXNjdi9LY29uZmlnOjYxOlx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DSyBpZiBBQ1BJIHx8IEtFWEVDXG5hcmNoL3Jpc2N2L0tjb25maWctNjItXHRzZWxlY3QgQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcdGlmIDY0QklUIFx1MDAyNlx1MDAyNiBNTVVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTE4NjQ9Y29uZmlnIElOVEVMX1REWF9IT1NUXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODY5LVx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG5hcmNoL3g4Ni9LY29uZmlnOjE4NzA6XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG5hcmNoL3g4Ni9LY29uZmlnLTE4NzEtXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jPTExMDQ9c3RhdGljIGludCBlZmlfbWVtX3Jlc2VydmVfaW9tZW0ocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTEyNi1cdCAqL1xuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmM6MTEyNzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spIFx1MDAyNlx1MDAyNiAhcmV0KVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTEyOC1cdFx0bWVtYmxvY2tfcmVzZXJ2ZShhZGRyLCBzaXplKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTE0PWV4dGVybiBzdHJ1Y3QgbWVtYmxvY2sgbWVtYmxvY2s7XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTE1LVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjExNjojaWZuZGVmIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMTctI2RlZmluZSBfX2luaXRfbWVtYmxvY2sgX19tZW1pbml0XG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYz01ODA9c3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2soc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYwNi1cbmtlcm5lbC9rZXhlY19maWxlLmM6NjA3OiNpZmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTYwOC1zdGF0aWMgaW50IGtleGVjX3dhbGtfbWVtYmxvY2soc3RydWN0IGtleGVjX2J1ZiAqa2J1Zixcbi0tXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTczNj1pbnQga2V4ZWNfbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXG4tLVxua2VybmVsL2tleGVjX2ZpbGUuYy03NTgtXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc1OTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcbmtlcm5lbC9rZXhlY19maWxlLmMtNzYwLVx0XHRyZXQgPSBrZXhlY193YWxrX3Jlc291cmNlcyhrYnVmLCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2spO1xuLS1cbm1tL0tjb25maWc9NDg2PWNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxuLS1cbm1tL0tjb25maWctNDkxLSMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxubW0vS2NvbmZpZzo0OTI6Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xubW0vS2NvbmZpZy00OTMtXHRib29sXG4tLVxubW0vbWVtYmxvY2suYy0xMDAtICpcbm1tL21lbWJsb2NrLmM6MTAxOiAqIFVubGVzcyBhbiBhcmNoaXRlY3R1cmUgZW5hYmxlcyAlQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSywgdGhlXG5tbS9tZW1ibG9jay5jLTEwMi0gKiBtZW1ibG9jayBkYXRhIHN0cnVjdHVyZXMgKGV4Y2VwdCBcJiMzNDtwaHlzbWVtXCYjMzQ7KSB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGVcbi0tXG5tbS9tZW1ibG9jay5jPTM2ND1zdGF0aWMgdm9pZCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcmVtb3ZlX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyByKVxuLS1cbm1tL21lbWJsb2NrLmMtMzgwLVxubW0vbWVtYmxvY2suYzozODE6I2lmbmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXG5tbS9tZW1ibG9jay5jLTM4Mi0vKipcbi0tXG5tbS9tZW1ibG9jay5jPTkzMj11bnNpZ25lZCBsb25nIGZyZWVfcmVzZXJ2ZWRfYXJlYSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQgcG9pc29uLCBjb25zdCBjaGFyICpzKVxuLS1cbm1tL21lbWJsb2NrLmMtOTUwLVxubW0vbWVtYmxvY2suYzo5NTE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSkge1xubW0vbWVtYmxvY2suYy05NTItXHRcdGlmIChzdGFydF9wYSBcdTAwM2MgZW5kX3BhKVxuLS1cbm1tL21lbWJsb2NrLmM9OTg4PWludCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfcGh5c19mcmVlKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4tLVxubW0vbWVtYmxvY2suYy05OTctXG5tbS9tZW1ibG9jay5jOjk5ODpcdGlmICghc2xhYl9pc19hdmFpbGFibGUoKSB8fCBJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxubW0vbWVtYmxvY2suYy05OTktXHRcdHJldCA9IG1lbWJsb2NrX3JlbW92ZV9yYW5nZShcdTAwMjZtZW1ibG9jay5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7XG4tLVxubW0vbWVtYmxvY2suYz0yODY1PV9fc2V0dXAoXCYjMzQ7cmVzZXJ2ZV9tZW09XCYjMzQ7LCByZXNlcnZlX21lbSk7XG4tLVxubW0vbWVtYmxvY2suYy0yODY3LSNpZmRlZiBDT05GSUdfREVCVUdfRlNcbm1tL21lbWJsb2NrLmM6Mjg2ODojaWZkZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xubW0vbWVtYmxvY2suYy0yODY5LXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcbi0tXG5tbS9tZW1ibG9jay5jPTI5MzQ9c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2RlYnVnZnNfZXhwb3NlX2FycmF5cyhzdHJ1Y3QgZGVudHJ5ICpyb290KSB7IH1cbm1tL21lbWJsb2NrLmMtMjkzNS1cbm1tL21lbWJsb2NrLmM6MjkzNjojZW5kaWYgLyogQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSyAqL1xubW0vbWVtYmxvY2suYy0yOTM3LVxuLS1cbm1tL21lbWJsb2NrLmM9Mjk1OD1zdGF0aWMgaW50IF9faW5pdCBtZW1ibG9ja19pbml0X2RlYnVnZnModm9pZClcbi0tXG5tbS9tZW1ibG9jay5jLTI5NjEtXG5tbS9tZW1ibG9jay5jOjI5NjI6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykgXHUwMDI2XHUwMDI2ICFyZXNlcnZlZF9tZW1fY291bnQpXG5tbS9tZW1ibG9jay5jLTI5NjMtXHRcdHJldHVybiAwO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUwMj1zdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzMi1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTUzMzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1MzQtXHRcdGlmIChyZXMtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUkVTT1VSQ0VfU1lTUkFNX0RSSVZFUl9NQU5BR0VEKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYwMy1lcnJvcl9tZW1ibG9ja19yZW1vdmU6XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2MDQ6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYwNS1cdFx0bWVtYmxvY2tfcmVtb3ZlKHN0YXJ0LCBzaXplKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTIyOTY9c3RhdGljIGludCB0cnlfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjMzNi1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MjMzNzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzM4LVx0XHRtZW1ibG9ja19yZW1vdmUoc3RhcnQsIHNpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBBUkNIX0tFRVBfTUVNQkxPQ0sgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgYEFSQ0hfS0VFUF9NRU1CTE9DS2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCBgQ09ORklHX0lOVEVMX1REWF9IT1NUYCBzZWxlY3RzIGl0LCBmb3VuZCBpbiBgYXJjaC94ODYvS2NvbmZpZ2AuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyB0cmlnZ2VyaW5nIHRoaXMgc2VsZWN0aW9uIHdpdGhpbiB0aGUgeDg2IGNvbmZpZyBzcGFjZS4gQSBxdWljayBncmVwIG9mIHRoZSBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgcmV2ZWFsIHRob3NlIGRlcGVuZGVuY2llcy4gQWhhISBMaW5lIDE4NzAsIGFjY29yZGluZyB0byB0aGUgbG9nLCBpcyB3aGVyZSB0aGUgc2VsZWN0aW9uIG9mIGBBUkNIX0tFRVBfTUVNQkxPQ0tgIG9jY3Vycy4gTGV0JiMzOTtzIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoYXQgc2VjdGlvbiBvZiBgYXJjaC94ODYvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIHVzaW5nIGBBUkNIX0tFRVBfTUVNQkxPQ0tgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYXJjaC94ODYvc2hzdGsucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTg2MTpcdFxuMTg2MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMTg2MzpcdFxuMTg2NDpcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxuMTg2NTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbjE4NjY6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxuMTg2NzpcdFx0ZGVwZW5kcyBvbiBYODZfNjRcbjE4Njg6XHRcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXG4xODY5Olx0XHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcbjE4NzA6XHRcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbjE4NzE6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4xODcyOlx0XHRkZXBlbmRzIG9uIFg4Nl9NQ0VcbjE4NzM6XHRcdGhlbHBcbjE4NzQ6XHRcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXG4xODc1Olx0XHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxuMTg3NjpcdFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cbjE4Nzc6XHRcbjE4Nzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4Nzk6XHRcbjE4ODA6XHRjb25maWcgRUZJXG4xODgxOlx0XHRib29sIFwmIzM0O0VGSSBydW50aW1lIHNlcnZpY2Ugc3VwcG9ydFwmIzM0O1xuMTg4MjpcdFx0ZGVwZW5kcyBvbiBBQ1BJXG4xODgzOlx0XHRzZWxlY3QgVUNTMl9TVFJJTkdcbjE4ODQ6XHRcdHNlbGVjdCBFRklfUlVOVElNRV9XUkFQUEVSU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE1lbWJsb2NrIERlYnVnZnMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYEFSQ0hfS0VFUF9NRU1CTE9DS2AgaXMgd2lkZWx5IHVzZWQgYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLCBhbmQgSSYjMzk7dmUgcXVpY2tseSBjb25maXJtZWQgaXRzIHByZXNlbmNlIGFjcm9zcyBBUk0sIEFSTTY0LCBMb29uZ0FyY2gsIE1JUFMsIFBvd2VyUEMsIFJJU0MtViAoY29uZGl0aW9uYWxseSksIGFuZCB4ODYgKGNvbmRpdGlvbmFsbHkpLiAgTm93LCBvbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0JiMzOTtzIGFkZGluZyBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCYjMzk7cyBuYW1lLCAmIzM0O1JTVl9IVUdFVExCJiMzNDssIHRvIHRoZSBgZmxhZ25hbWVgIGFycmF5LCB3aGljaCBpcyB1c2VkIGluIGBtZW1ibG9ja19kZWJ1Z19zaG93KClgIHRvIGRpc3BsYXkgbWVtb3J5IGJsb2NrIGZsYWdzIGluIGRlYnVnZnMuCgpUaGUgY29yZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGNvbnN0aXR1dGUgYSBjaGFuZ2UgdGhhdCYjMzk7cyAqd29ydGgqIGZ1enppbmc/ICBJIG5lZWQgdG8gY29uc2lkZXIgdGhlICYjMzQ7bmVnYXRpdmUgY3JpdGVyaWEuJiMzNDsgIFRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGZhbGwgdW5kZXIgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIC4uLiB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzJiMzNDs/IFRoZSBrZXkgc2VlbXMgdG8gYmUgd2hldGhlciB0aGUgYWRkaXRpb24gaXMgKnB1cmVseSBkZWNvcmF0aXZlKi4KClRoZSBgZmxhZ25hbWVgIGFycmF5LCB3aXRoaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3dgLCBpcyB1c2VkIHRvIHByaW50IGZsYWdzIHdoZW4gcmVhZGluZyBgL3N5cy9rZXJuZWwvZGVidWcvbWVtYmxvY2sve21lbW9yeSxyZXNlcnZlZH1gLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgb3V0cHV0IHdvdWxkIGRpc3BsYXkgJiMzNDtVTktOT1dOJiMzNDsgaWYgYSByZWdpb24gaGFkIHRoZSBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCBmbGFnLiBOb3csIGl0IHdpbGwgY29ycmVjdGx5IHByaW50ICYjMzQ7UlNWX0hVR0VUTEIuJiMzNDsgIFRoZSBjb2RlIGluIGBtZW1ibG9ja19kZWJ1Z19zaG93YCByZWFkcyB0aGVzZSBmbGFncyBmcm9tIHRoZSBtZW1vcnkgYmxvY2sgc3RydWN0dXJlcyBhbmQsICpiYXNlZCBvbiB0aGVzZSBmbGFncyosIHNlbGVjdHMgYSBzdHJpbmcgZnJvbSBgZmxhZ25hbWVgIGFuZCBwcmludHMgaXQuIFRoZSBwYXRjaCBzaW1wbHkgZW5zdXJlcyB0aGF0IHRoZSBjb3JyZWN0IHN0cmluZyBpcyBwcmludGVkLCAqaW5zdGVhZCBvZiAmIzM0O1VOS05PV04mIzM0OyouCgpTbywgZG9lcyB0aGlzIGNoYW5nZSBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzPyBOby4gSXQgYWZmZWN0cyAqb25seSogdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuIEl0IGlzLCBpbiBlc3NlbmNlLCBtZXJlbHkgYSBmb3JtYXR0aW5nIGNoYW5nZSBmb3IgZGlhZ25vc3RpYyBvdXRwdXQgKGFuZCB0aGUgZmxhZyBuYW1lcyBhcmUgcHJlc2VudCBzdGF0aWNhbGx5KS4gIEl0JiMzOTtzICpwdXJlbHkqIGRlY29yYXRpdmUgbG9nZ2luZy4gVGhlIG91dHB1dCBvZiBgL3N5cy9rZXJuZWwvZGVidWcvbWVtYmxvY2svbWVtb3J5YCBhbmQgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL3Jlc2VydmVkYCBpcyAqb25seSogc3RyaW5nIG91dHB1dCwgYW5kIG5vIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gaGFwcGVucy4KClRoZSAmIzM0O2UuZy4mIzM0OyBpbiB0aGUgZGVmaW5pdGlvbiBvZiB3aGF0JiMzOTtzIG5vdCB3b3J0aCBmdXp6aW5nIGlzIGNydWNpYWwuIERpc3BsYXlpbmcgaHVtYW4tcmVhZGFibGUgZmxhZyBuYW1lcyBpbiBkZWJ1Z2ZzIGZpdHMgdGhlIGludGVudCBvZiAmIzM0O2RlY29yYXRpdmUgbG9nZ2luZy4mIzM0OyAgU2luY2UgYWxsIHRoZSBhcnJheSBpbmRpY2VzIGhhdmUgc3RhdGljYWxseSBhc3NpZ25lZCBzdHJpbmcgbGl0ZXJhbHMsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyBvZiBhIGNyYXNoLiBUaGVyZSBpcyBubyBjaGFuZ2UgdG8ga2VybmVsIGNvbnRyb2wgZmxvdywgbm8gbWFuaXB1bGF0aW9uIG9mIHN1YnN0YW50aXZlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBubyBhbHRlcmVkIGFsZ29yaXRobWljIGxvZ2ljLiAgVGh1cywgdGhpcyBjaGFuZ2UgaXMgbm90IGdvaW5nIHRvIGxlYWQgdG8gYSBidWcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpGaW5hbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyByZWFjaGFibGUgb24gbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQuIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgU3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIGNvbmZpZyBlbmFibGVzIGBDT05GSUdfSU5URUxfVERYX0hPU1RgLCBvciB3aGV0aGVyIHNvbWUgb3RoZXIgY29uZmlnIGluIHg4NiBlbmFibGVzIGBBUkNIX0tFRVBfTUVNQkxPQ0tgLiBJJiMzOTtsbCBncmVwIGZvciBgSU5URUxfVERYX0hPU1RgIGluIHRoZSBrZXJuZWwgY29uZmlncyBqdXN0IHRvIGJlIHN1cmUsIGV2ZW4gaWYgdGhlIHJlc3VsdCBvZiB0aGUgcHJpb3IgYW5hbHlzaXMgaXMgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTg0NT1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaD0xMDM9c3RhdGljIGlubGluZSBsb25nIHRkeF9rdm1faHlwZXJjYWxsKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaC0xMTAtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDoxMTE6I2lmZGVmIENPTkZJR19JTlRFTF9URFhfSE9TVFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtMTEyLXZvaWQgdGR4X2luaXQodm9pZCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4Lmg9MjA3PXN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZCkgeyB9XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDoyMDg6I2VuZGlmXHQvKiBDT05GSUdfSU5URUxfVERYX0hPU1QgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oLTIwOS1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzYtXHRkZWZhdWx0IHlcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNzpcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzOC1cdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5hcmNoL3g4Ni92aXJ0L3ZteC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19JTlRFTF9URFhfSE9TVClcdCYjNDM7PSB0ZHgvXG4tLVxuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU9OD1vYmotJChDT05GSUdfSU5URUxfVERYX0dVRVNUKVx0JiM0Mzs9IHRkeC1ndWVzdC9cbmRyaXZlcnMvdmlydC9jb2NvL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVx0JiM0Mzs9IHRkeC1ob3N0L1xuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0FSTV9DQ0FfR1VFU1QpXHQmIzQzOz0gYXJtLWNjYS1ndWVzdC9cbi0tXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtaG9zdC9LY29uZmlnPTE9Y29uZmlnIFREWF9IT1NUX1NFUlZJQ0VTXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtaG9zdC9LY29uZmlnLTItXHR0cmlzdGF0ZVxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWhvc3QvS2NvbmZpZzozOlx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxuZHJpdmVycy92aXJ0L2NvY28vdGR4LWhvc3QvS2NvbmZpZy00LVx0c2VsZWN0IEZXX0xPQURFUlxuLS1cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaD0xND1lbnVtIG1pc2NfcmVzX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC0yMC0jZW5kaWZcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDoyMTojaWZkZWYgQ09ORklHX0lOVEVMX1REWF9IT1NUXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtMjItXHQvKiogQE1JU0NfQ0dfUkVTX1REWDogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXG4tLVxua2VybmVsL2Nncm91cC9taXNjLmM9MjA9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1pc2NfcmVzX25hbWVbXSA9IHtcbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0yNi0jZW5kaWZcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjI3OiNpZmRlZiBDT05GSUdfSU5URUxfVERYX0hPU1Rcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTI4LVx0LyogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDM5CgkJCQkJCQlvdXRwdXQ6IDEzNQoJCQkJCQkJdGhvdWdodHM6IDEwMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBOb3QgV29ydGh5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBBUkNIX0tFRVBfTUVNQkxPQ0tgIG9uIHg4NiBpcyBnYXRlZCBieSBgSU5URUxfVERYX0hPU1RgLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgSU5URUxfVERYX0hPU1RgIGRlcGVuZHMgb24sIHNvIEkgc2VlIGl0JiMzOTtzIGNvbmRpdGlvbmVkIG9uIGBDUFVfU1VQX0lOVEVMYCwgYFg4Nl82NGAsIGBLVk1fSU5URUxgLCBgWDg2X1gyQVBJQ2AsIGBDT05USUdfQUxMT0NgLCBhbmQgYFg4Nl9NQ0VgLiBCdXQgdWx0aW1hdGVseSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBJTlRFTF9URFhfSE9TVGAgaXMgZW5hYmxlZCBvciBub3QsIHRoZSBjb3JlIGNoYW5nZSBpbiB0aGlzIHBhdGNoIGlzIGluY3JlZGlibHkgbG9jYWxpemVkLgoKSXQmIzM5O3MgbGl0ZXJhbGx5IGp1c3QgYWRkaW5nIGAmIzM0O1JTVl9IVUdFVExCJiMzNDtgIHRvIHRoZSBgZmxhZ25hbWVgIGFycmF5LiAgVGhpcyBhcnJheSBpcyAqb25seSogdXNlZCB3aXRoaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3coKWAsIHdoaWNoIGlzIGEgZGVidWdmcyBmdW5jdGlvbiBjYWxsZWQgdG8gcHJpbnQgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL3ttZW1vcnkscmVzZXJ2ZWR9YC4gU28gdGhlIG9ubHkgZWZmZWN0IGlzIHRvIGNoYW5nZSB0aGUgdGV4dCBvdXRwdXQgaW4gdGhpcyBkZWJ1Z2ZzIGludGVyZmFjZSBmcm9tICYjMzQ7VU5LTk9XTiYjMzQ7IHRvICYjMzQ7UlNWX0hVR0VUTEImIzM0OyBmb3IgYSBzcGVjaWZpYyBmbGFnIGJpdC4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBTZWN0aW9uIDEgZm9jdXNlcyBvbiBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXRjLiBTZWN0aW9uIDIsIHRoZSAmIzM0O25lZ2F0aXZlIGNyaXRlcmlhLCYjMzQ7IGlzIGtleTogJiMzNDtwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5n4oCmIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuJiMzNDsgVGhpcyAqZGVmaW5pdGVseSogZmFsbHMgdW5kZXIgdGhhdCBjYXRlZ29yeS4gIEl0JiMzOTtzIGp1c3QgYWRkaW5nIGEgc3RyaW5nIGxpdGVyYWw7IGl0JiMzOTtzIG5vdCB0b3VjaGluZyBhbnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgY29udHJvbCBmbG93LCBsb2NraW5nLCBvciBleGVjdXRhYmxlIGFsZ29yaXRobXMuIFdlIGFyZSB0YWxraW5nIGFib3V0IHJlYWRpbmcgYSBjb25zdGFudCBzdHJpbmcgaW4gYHNlcV9wdXRzYCwgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcy4gVGhlcmUmIzM5O3Mgbm8gY2hhbmNlIG9mIGZpbmRpbmcgY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIHRyaWdnZXJpbmcgbmV3IGFzc2VydGlvbnMuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhlIGV4cGVjdGVkIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2A6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgYFJlYXNvbmluZ2AsIGBGb2N1c1N5bWJvbHM6IFtdYCwgYW5kIGBFbmFibGVDb25maWdzOiBbXWAuIFRoZSBzY2hlbWEgY29uZmlybXMgdGhhdC4KCkZpbmFsbHksIHRoZSByZWFzb25pbmcgbmVlZHMgdG8gYmUgY29uY2lzZS4gSGVyZSYjMzk7cyB3aGF0IEkmIzM5O2xsIHN1Ym1pdDogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIHRoZSBzdHJpbmcgJiMzOTtSU1ZfSFVHRVRMQiYjMzk7IGNvcnJlc3BvbmRpbmcgdG8gdGhlIE1FTUJMT0NLX1JTUlZfSFVHRVRMQiBmbGFnIHRvIHRoZSBgZmxhZ25hbWVgIGFycmF5LCB3aGljaCBpcyB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBmb3JtYXR0aW5nIGRlYnVnZnMgb3V0cHV0IGluIGBtZW1ibG9ja19kZWJ1Z19zaG93KClgLiBUaGlzIGlzIHB1cmVseSBkZWNvcmF0aXZlIHN0cmluZyBmb3JtYXR0aW5nIGZvciBkZWJ1ZyBvdXRwdXQgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb250cm9sIGZsb3csIHN0YXRlIG1hbmFnZW1lbnQsIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGVyZWZvcmUsIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OyBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgdGhlIHN0cmluZyBcJiMzNDtSU1ZfSFVHRVRMQlwmIzM0OyBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRU1CTE9DS19SU1JWX0hVR0VUTEIgZmxhZyB0byB0aGUgZmxhZ25hbWVbXSB0YWJsZSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGFycmF5IGlzIHNvbGVseSB1c2VkIGZvciBmb3JtYXR0aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyAobWVtYmxvY2tfZGVidWdfc2hvdykuIEl0IGlzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcvb3V0cHV0IGZvcm1hdHRpbmcgdGhhdCBkb2VzIG5vdCBhbHRlciBhbnkga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGludHJvZHVjZXMgbm8gYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgdGhlIHN0cmluZyBcJiMzNDtSU1ZfSFVHRVRMQlwmIzM0OyBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRU1CTE9DS19SU1JWX0hVR0VUTEIgZmxhZyB0byB0aGUgZmxhZ25hbWVbXSB0YWJsZSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGFycmF5IGlzIHNvbGVseSB1c2VkIGZvciBmb3JtYXR0aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyAobWVtYmxvY2tfZGVidWdfc2hvdykuIEl0IGlzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcvb3V0cHV0IGZvcm1hdHRpbmcgdGhhdCBkb2VzIG5vdCBhbHRlciBhbnkga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGludHJvZHVjZXMgbm8gYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzowMzwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTU6MjIuNjQzMDE1NjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA1MTE3MjQ2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgdGhlIHN0cmluZyBcXFwiUlNWX0hVR0VUTEJcXFwiIGNvcnJlc3BvbmRpbmcgdG8gdGhlIE1FTUJMT0NLX1JTUlZfSFVHRVRMQiBmbGFnIHRvIHRoZSBmbGFnbmFtZVtdIHRhYmxlIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgYXJyYXkgaXMgc29sZWx5IHVzZWQgZm9yIGZvcm1hdHRpbmcgaHVtYW4tcmVhZGFibGUgZmxhZyBuYW1lcyBpbiBkZWJ1Z2ZzIChtZW1ibG9ja19kZWJ1Z19zaG93KS4gSXQgaXMgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy9vdXRwdXQgZm9ybWF0dGluZyB0aGF0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBhbmQgaW50cm9kdWNlcyBubyBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjU1OjIyLjY0MzAyMDI1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcxMjU4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZWY3NGE2MTNhYTBhZWI1YzliNTlmYWE0YjFjMmI1MTkzYWI0Y2RkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDE2OjU1OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXFxuaW5kZXggMzE5NjFlZDYyOGIwYS4uZjUxODExZGIxMThhMSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1ibG9jay5jXFxuKysrIGIvbW0vbWVtYmxvY2suY1xcbkBAIC0yODc0LDYgKzI4NzQsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XFxuIFxcdFtpbG9nMihNRU1CTE9DS19SU1JWX05PSU5JVCldID0gXFxcIlJTVl9OSVRcXFwiLFxcbiBcXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9LRVJOKV0gPSBcXFwiUlNWX0tFUk5cXFwiLFxcbiBcXHRbaWxvZzIoTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpXSA9IFxcXCJLSE9fU0NSQVRDSFxcXCIsXFxuK1xcdFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFxcXCJSU1ZfSFVHRVRMQlxcXCIsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1NToyMy4xMDA3NTQzNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2MDA1Mzk1ODg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIHRoZSBzdHJpbmcgXFxcIlJTVl9IVUdFVExCXFxcIiBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRU1CTE9DS19SU1JWX0hVR0VUTEIgZmxhZyB0byB0aGUgZmxhZ25hbWVbXSB0YWJsZSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGFycmF5IGlzIHNvbGVseSB1c2VkIGZvciBmb3JtYXR0aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyAobWVtYmxvY2tfZGVidWdfc2hvdykuIEl0IGlzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcvb3V0cHV0IGZvcm1hdHRpbmcgdGhhdCBkb2VzIG5vdCBhbHRlciBhbnkga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGludHJvZHVjZXMgbm8gYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDllZjc0YTYxM2FhMGFlYjVjOWI1OWZhYTRiMWMyYjUxOTNhYjRjZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxNjo1NToyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCAzMTk2MWVkNjI4YjBhLi5mNTE4MTFkYjExOGExIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuKysrIGIvbW0vbWVtYmxvY2suY1xuQEAgLTI4NzQsNiArMjg3NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcbiBcdFtpbG9nMihNRU1CTE9DS19SU1JWX05PSU5JVCldID0gXCJSU1ZfTklUXCIsXG4gXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9LRVJOKV0gPSBcIlJTVl9LRVJOXCIsXG4gXHRbaWxvZzIoTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpXSA9IFwiS0hPX1NDUkFUQ0hcIixcbitcdFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFwiUlNWX0hVR0VUTEJcIixcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1NToyMy4xMDA3NTU5MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzI3ODMyNTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IEJsb2NrIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaXRzIGltcGxpY2F0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgdGFyZ2V0IGlzIHRoZSBgbW0vbWVtYmxvY2suY2AgZmlsZSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nIOKAkyB0aGF0J3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0ZXJyaXRvcnkuIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHdoYXQncyBiZWluZyB0d2Vha2VkLiBHaXZlbiB0aGUgbG9jYXRpb24sIGFuZCBteSBleHBlcmllbmNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBsaWtlbHkgaGF2ZSB0byBkbyB3aXRoIHRoZSBpbml0aWFsIG1lbW9yeSBtYXAsIG1lbW9yeSBob3RwbHVnLCBvciByZXNlcnZhdGlvbiBvZiBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucy5cblxuUmlnaHQsIGBtbS9tZW1ibG9jay5jYC4uLiBub3cgSSBuZWVkIHRvIGFjdHVhbGx5IHNlZSB0aGUgY2hhbmdlcy4gTGluZSAyODc0IGlzIHRoZSBsaWtlbHkga2V5IGFyZWEsIHNvIEknbGwgd2FudCB0byBmb2N1cyB0aGVyZS4gR29vZCB0aGluZyBJIGhhdmUgYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCBhdCBteSBkaXNwb3NhbC4gSSdsbCBzdGFydCB3aXRoIGByZWFkLWZpbGVgIHRvIGdldCBhIGdlbmVyYWwgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE5vIG5lZWQgdG8gaW1tZWRpYXRlbHkganVtcCBpbnRvIGEgZ3JlcCBzZWFyY2gsIGxldCdzIGdldCBzb21lIGNvbnRleHQgZmlyc3QuIEkgd2FudCB0byBzZWUgdGhlICpmbG93KiBhbmQgKmxvZ2ljKiBzdXJyb3VuZGluZyB0aGUgY2hhbmdlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgY29ycmVjdG5lc3MgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjU1OjQ2LjM3OTA4NDIyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1ibG9jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4NjA6XFx0XFx0cmV0dXJuIDE7XFxuMjg2MTpcXHRlcnJfcGFyYW06XFxuMjg2MjpcXHRcXHRwcl9lcnIoXFxcInJlc2VydmVfbWVtOiBlbXB0eSBvciBtYWxmb3JtZWQgcGFyYW1ldGVyXFxcXG5cXFwiKTtcXG4yODYzOlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI4NjQ6XFx0fVxcbjI4NjU6XFx0X19zZXR1cChcXFwicmVzZXJ2ZV9tZW09XFxcIiwgcmVzZXJ2ZV9tZW0pO1xcbjI4NjY6XFx0XFxuMjg2NzpcXHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxuMjg2ODpcXHQjaWZkZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xcbjI4Njk6XFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xcbjI4NzA6XFx0XFx0W2lsb2cyKE1FTUJMT0NLX0hPVFBMVUcpXSA9IFxcXCJIT1RQTFVHXFxcIixcXG4yODcxOlxcdFxcdFtpbG9nMihNRU1CTE9DS19NSVJST1IpXSA9IFxcXCJNSVJST1JcXFwiLFxcbjI4NzI6XFx0XFx0W2lsb2cyKE1FTUJMT0NLX05PTUFQKV0gPSBcXFwiTk9NQVBcXFwiLFxcbjI4NzM6XFx0XFx0W2lsb2cyKE1FTUJMT0NLX0RSSVZFUl9NQU5BR0VEKV0gPSBcXFwiRFJWX01OR1xcXCIsXFxuMjg3NDpcXHRcXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9OT0lOSVQpXSA9IFxcXCJSU1ZfTklUXFxcIixcXG4yODc1OlxcdFxcdFtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9IFxcXCJSU1ZfS0VSTlxcXCIsXFxuMjg3NjpcXHRcXHRbaWxvZzIoTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpXSA9IFxcXCJLSE9fU0NSQVRDSFxcXCIsXFxuMjg3NzpcXHRcXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9IVUdFVExCKV0gPSBcXFwiUlNWX0hVR0VUTEJcXFwiLFxcbjI4Nzg6XFx0fTtcXG4yODc5OlxcdFxcbjI4ODA6XFx0c3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcXG4yODgxOlxcdHtcXG4yODgyOlxcdFxcdHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlID0gbS1cXHUwMDNlcHJpdmF0ZTtcXG4yODgzOlxcdFxcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZztcXG4yODg0OlxcdFxcdGludCBpLCBqLCBuaWQ7XFxuMjg4NTpcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQgPSBBUlJBWV9TSVpFKGZsYWduYW1lKTtcXG4yODg2OlxcdFxcdHBoeXNfYWRkcl90IGVuZDtcXG4yODg3OlxcdFxcbjI4ODg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR5cGUtXFx1MDAzZWNudDsgaSsrKSB7XFxuMjg4OTpcXHRcXHRcXHRyZWcgPSBcXHUwMDI2dHlwZS1cXHUwMDNlcmVnaW9uc1tpXTtcXG4yODkwOlxcdFxcdFxcdGVuZCA9IHJlZy1cXHUwMDNlYmFzZSArIHJlZy1cXHUwMDNlc2l6ZSAtIDE7XFxuMjg5MTpcXHRcXHRcXHRuaWQgPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmVnKTtcXG4yODkyOlxcdFxcbjI4OTM6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTRkOiBcXFwiLCBpKTtcXG4yODk0OlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiVwYS4uJXBhIFxcXCIsIFxcdTAwMjZyZWctXFx1MDAzZWJhc2UsIFxcdTAwMjZlbmQpO1xcbjI4OTU6XFx0XFx0XFx0aWYgKG51bWFfdmFsaWRfbm9kZShuaWQpKVxcbjI4OTY6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTRkIFxcXCIsIG5pZCk7XFxuMjg5NzpcXHRcXHRcXHRlbHNlXFxuMjg5ODpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNGMgXFxcIiwgJ3gnKTtcXG4yODk5OlxcdFxcdFxcdGlmIChyZWctXFx1MDAzZWZsYWdzKSB7XFxuMjkwMDpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSByZWctXFx1MDAzZWZsYWdzO1xcbjI5MDE6XFx0XFx0XFx0XFx0Ym9vbCBmaXJzdCA9IHRydWU7XFxuMjkwMjpcXHRcXG4yOTAzOlxcdFxcdFxcdFxcdGZvciAoaiA9IDA7IGZsYWdzOyBqKyssIGZsYWdzIFxcdTAwM2VcXHUwMDNlPSAxKSB7XFxuMjkwNDpcXHRcXHRcXHRcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IDEpKVxcbjI5MDU6XFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjkwNjpcXHRcXHRcXHRcXHRcXHRpZiAoIWZpcnN0KVxcbjI5MDc6XFx0XFx0XFx0XFx0XFx0XFx0c2VxX3B1dGMobSwgJ3wnKTtcXG4yOTA4OlxcdFxcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIGogXFx1MDAzYyBjb3VudCA/IGZsYWduYW1lW2pdIDogXFxcIlVOS05PV05cXFwiKTtcXG4yOTA5OlxcdFxcdFxcdFxcdFxcdGZpcnN0ID0gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjU1OjQ2LjM3OTI4MjY2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NDIwMjI0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHF1ZXJ5LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIGBNRU1CTE9DS19SU1JWX0hVR0VUTEJgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCBhY3R1YWxseSByZXByZXNlbnRzIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJdCdzIGEga2V5IHBpZWNlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcywgb2YgY291cnNlLCBhIHRhcmdldGVkIHNlYXJjaC4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gZmluZCB0aGlzIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZSBvciBkb2N1bWVudGF0aW9uLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB0aGF0IHN0cmluZy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyB1c2FnZSBhbmQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA3OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTU6NDguMzIxMzA2ODkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTgzOTU1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVNQkxPQ0tfUlNSVl9IVUdFVExCXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtYmxvY2suaD0yNT1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1heF9wb3NzaWJsZV9wZm47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNTMtICogYWxsb2NhdGlvbnMgbWF5IGhhcHBlbiBmcm9tIGluIHRoaXMgcGhhc2UuXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjU0OiAqIEBNRU1CTE9DS19SU1JWX0hVR0VUTEI6IG1lbW9yeSBpcyByZXNlcnZlZCBmb3IgaHVnZXRsYiBwYWdlc1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC01NS0gKi9cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9NTY9ZW51bSBtZW1ibG9ja19mbGFncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNjQtXFx0TUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXHQ9IDB4NDAsXFx0Lyogc2NyYXRjaCBtZW1vcnkgZm9yIGtleGVjIGhhbmRvdmVyICovXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjY1OlxcdE1FTUJMT0NLX1JTUlZfSFVHRVRMQlxcdD0gMHg4MCwgLyogbWVtb3J5IHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzICovXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTY2LX07XFxuLS1cXG5tbS9tZW1ibG9jay5jPTE3Nzc9dm9pZCAqIF9faW5pdCBtZW1ibG9ja19hbGxvY19odWdldGxiKHBoeXNfYWRkcl90IHNpemUsIGludCBuaWQsIGJvb2wgZXhhY3RfbmlkKVxcbi0tXFxubW0vbWVtYmxvY2suYy0xODI2LVxcbm1tL21lbWJsb2NrLmM6MTgyNzpcXHRpZiAoX19tZW1ibG9ja19yZXNlcnZlKGFkZHIsIHNpemUsIG5pZCwgTUVNQkxPQ0tfUlNSVl9LRVJOIHwgTUVNQkxPQ0tfUlNSVl9IVUdFVExCKSlcXG5tbS9tZW1ibG9jay5jLTE4MjgtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9tZW1ibG9jay5jPTE5MDM9cGh5c19hZGRyX3QgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3Jlc2VydmVkX2h1Z2V0bGJfc2l6ZShwaHlzX2FkZHJfdCBsaW1pdCwgaW50IG5pZClcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTkxNy1cXHRcXHRpZiAobmlkID09IG1lbWJsb2NrX2dldF9yZWdpb25fbm9kZShyKSB8fCAhbnVtYV92YWxpZF9ub2RlKG5pZCkpXFxubW0vbWVtYmxvY2suYzoxOTE4OlxcdFxcdFxcdGlmIChyLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1FTUJMT0NLX1JTUlZfSFVHRVRMQilcXG5tbS9tZW1ibG9jay5jLTE5MTktXFx0XFx0XFx0XFx0dG90YWwgKz0gc2l6ZTtcXG4tLVxcbm1tL21lbWJsb2NrLmM9Mjg2OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XFxuLS1cXG5tbS9tZW1ibG9jay5jLTI4NzYtXFx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcXFwiS0hPX1NDUkFUQ0hcXFwiLFxcbm1tL21lbWJsb2NrLmM6Mjg3NzpcXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9IVUdFVExCKV0gPSBcXFwiUlNWX0hVR0VUTEJcXFwiLFxcbm1tL21lbWJsb2NrLmMtMjg3OC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1NTo1MC4xMTk3MTI4NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MzA5ODgxMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIGBnaXQgbG9nYCB0byBzZWUgdGhlIGNvbW1pdCBoaXN0b3J5LCBtYXliZSB0cmFjayBkb3duIHdoZW4gYE1FTUJMT0NLX1JTUlZfSFVHRVRMQmAgd2FzIGludHJvZHVjZWQsIG9yIHF1aWNrbHkgZ3JvayB0aGUgY29udGV4dC4gQnV0LCB3YWl0LCBJIGRvbid0IGhhdmUgdGhhdCB0b29sIGF2YWlsYWJsZSEgTm8gcHJvYmxlbSwgbGV0J3MganVzdCBsb29rIGF0IHRoZSBkaWZmLlxuXG5UaGUgZGlmZiBpcyBzdHJhaWdodGZvcndhcmQ7IGl0J3MgYSB2ZXJ5IHNtYWxsIG1vZGlmaWNhdGlvbiB0byBgbW0vbWVtYmxvY2suY2AuIFRoZSBvbmx5IGxpbmUgYWRkZWQgaXMgYFtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9IFwiUlNWX0hVR0VUTEJcIixgIGluc2lkZSB0aGUgYGZsYWduYW1lW11gIGFycmF5LiBUaGF0J3MgaXQhXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGlzIGBmbGFnbmFtZWAgZG9pbmc/IEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQncyByZWxhdGVkIHRvIHNvbWUgc29ydCBvZiBmbGFnIG9yIHJlc2VydmF0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudC4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBgbW0vbWVtYmxvY2suY2AgYXJvdW5kIHRob3NlIGxpbmVzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIG5ld2x5IGFkZGVkIHN0cmluZyBgUlNWX0hVR0VUTEJgIGlzIHVzZWQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCBhbmQgd2h5IHRoaXMgaXMgYmVpbmcgYWRkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4OTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTU6NTQuNDI5NTk2NTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWJsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg5MDpcXHRcXHRcXHRlbmQgPSByZWctXFx1MDAzZWJhc2UgKyByZWctXFx1MDAzZXNpemUgLSAxO1xcbjI4OTE6XFx0XFx0XFx0bmlkID0gbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKHJlZyk7XFxuMjg5MjpcXHRcXG4yODkzOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiU0ZDogXFxcIiwgaSk7XFxuMjg5NDpcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlcGEuLiVwYSBcXFwiLCBcXHUwMDI2cmVnLVxcdTAwM2ViYXNlLCBcXHUwMDI2ZW5kKTtcXG4yODk1OlxcdFxcdFxcdGlmIChudW1hX3ZhbGlkX25vZGUobmlkKSlcXG4yODk2OlxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiU0ZCBcXFwiLCBuaWQpO1xcbjI4OTc6XFx0XFx0XFx0ZWxzZVxcbjI4OTg6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTRjIFxcXCIsICd4Jyk7XFxuMjg5OTpcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2VmbGFncykge1xcbjI5MDA6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzID0gcmVnLVxcdTAwM2VmbGFncztcXG4yOTAxOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3QgPSB0cnVlO1xcbjI5MDI6XFx0XFxuMjkwMzpcXHRcXHRcXHRcXHRmb3IgKGogPSAwOyBmbGFnczsgaisrLCBmbGFncyBcXHUwMDNlXFx1MDAzZT0gMSkge1xcbjI5MDQ6XFx0XFx0XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiAxKSlcXG4yOTA1OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI5MDY6XFx0XFx0XFx0XFx0XFx0aWYgKCFmaXJzdClcXG4yOTA3OlxcdFxcdFxcdFxcdFxcdFxcdHNlcV9wdXRjKG0sICd8Jyk7XFxuMjkwODpcXHRcXHRcXHRcXHRcXHRzZXFfcHV0cyhtLCBqIFxcdTAwM2MgY291bnQgPyBmbGFnbmFtZVtqXSA6IFxcXCJVTktOT1dOXFxcIik7XFxuMjkwOTpcXHRcXHRcXHRcXHRcXHRmaXJzdCA9IGZhbHNlO1xcbjI5MTA6XFx0XFx0XFx0XFx0fVxcbjI5MTE6XFx0XFx0XFx0XFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuMjkxMjpcXHRcXHRcXHR9IGVsc2Uge1xcbjI5MTM6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJXNcXFxcblxcXCIsIFxcXCJOT05FXFxcIik7XFxuMjkxNDpcXHRcXHRcXHR9XFxuMjkxNTpcXHRcXHR9XFxuMjkxNjpcXHRcXHRyZXR1cm4gMDtcXG4yOTE3OlxcdH1cXG4yOTE4OlxcdERFRklORV9TSE9XX0FUVFJJQlVURShtZW1ibG9ja19kZWJ1Zyk7XFxuMjkxOTpcXHRcXG4yOTIwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdClcXG4yOTIxOlxcdHtcXG4yOTIyOlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcIm1lbW9yeVxcXCIsIDA0NDQsIHJvb3QsXFxuMjkyMzpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm1lbWJsb2NrLm1lbW9yeSwgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5MjQ6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicmVzZXJ2ZWRcXFwiLCAwNDQ0LCByb290LFxcbjI5MjU6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtZW1ibG9jay5yZXNlcnZlZCwgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5MjY6XFx0I2lmZGVmIENPTkZJR19IQVZFX01FTUJMT0NLX1BIWVNfTUFQXFxuMjkyNzpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJwaHlzbWVtXFxcIiwgMDQ0NCwgcm9vdCwgXFx1MDAyNnBoeXNtZW0sXFxuMjkyODpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5Mjk6XFx0I2VuZGlmXFxuMjkzMDpcXHR9XFxuMjkzMTpcXHRcXG4yOTMyOlxcdCNlbHNlXFxuMjkzMzpcXHRcXG4yOTM0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdCkgeyB9XFxuMjkzNTpcXHRcXG4yOTM2OlxcdCNlbmRpZiAvKiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLICovXFxuMjkzNzpcXHRcXG4yOTM4OlxcdHN0YXRpYyBpbnQgbWVtYmxvY2tfcmVzZXJ2ZV9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXFxuMjkzOTpcXHR7XFxuMjk0MDpcXHRcXHRzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUgKm1hcDtcXG4yOTQxOlxcdFxcdGNoYXIgdHh0c3pbMTZdO1xcbjI5NDI6XFx0XFxuMjk0MzpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNnJlc2VydmVfbWVtX2xvY2spO1xcbjI5NDQ6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyByZXNlcnZlZF9tZW1fY291bnQ7IGkrKykge1xcbjI5NDU6XFx0XFx0XFx0bWFwID0gXFx1MDAyNnJlc2VydmVkX21lbV90YWJsZVtpXTtcXG4yOTQ2OlxcdFxcdFxcdGlmICghbWFwLVxcdTAwM2VzaXplKVxcbjI5NDc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjk0ODpcXHRcXG4yOTQ5OlxcdFxcdFxcdG1lbXNldCh0eHRzeiwgMCwgc2l6ZW9mKHR4dHN6KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE2OjU1OjU0LjQyOTc0MzU0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMTA0NDQ4ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBEZWJ1Z2ZzIFN0cmluZyBBcnJheSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFNlY3Rpb24gMiBvZiB0aGUgcHJvbXB0IG91dGxpbmVzIHRoZSBjcml0ZXJpYSBmb3IgKm5vdCogZnV6emluZyBhIGNoYW5nZSwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBhcnJheSBtb2RpZmljYXRpb24gZmFsbHMgdW5kZXIgdGhvc2UgbmVnYXRpdmUgY3JpdGVyaWEuIFRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIHRoaXMgYWx0ZXJhdGlvbiBpbnRyb2R1Y2VzIHBvdGVudGlhbCBmb3IgYnVncyBvciBhbHRlcnMgY29yZSBmdW5jdGlvbmFsaXR5LCBvciBpZiBpdCdzIHB1cmVseSBjb3NtZXRpYy5cblxuRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2U6IGV4dGVuZGluZyB0aGUgYGZsYWduYW1lYCBhcnJheSB1c2VkIGluIGBtZW1ibG9ja19kZWJ1Z19zaG93KClgIGJ5IGFkZGluZyBhbiBlbnRyeSBmb3IgXCJSU1ZfSFVHRVRMQlwiLiBQcmV2aW91c2x5LCB0aGUgY29kZSBwcmludGVkIFwiVU5LTk9XTlwiIGZvciB0aGlzIGZsYWcsIG5vdyBpdCBwcmludHMgdGhlIGFzc29jaWF0ZWQgc3RyaW5nLlxuXG5JIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIGNoYW5nZSB0byBkb2N1bWVudGF0aW9uPyBOby4gSXMgdGhpcyBhIHVzZXItc3BhY2UgbW9kaWZpY2F0aW9uIG5vdCBhZmZlY3RpbmcgdGhlIGtlcm5lbCBpbWFnZT8gTm8uIElzIHRoaXMgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyB0aGF0IGRvZXMgbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXM/IFRoYXQncyB0aGUgcXVlc3Rpb24uIEFkZGluZyBhIHN0cmluZyB0byBhbiBhcnJheSAqY291bGQqIGJlIGNvbnNpZGVyZWQgcHVyZWx5IGRlY29yYXRpdmUuICpIb3dldmVyKiwgSSBuZWVkIHRvIGJlIHN1cmUuIEkgc2VlIHRoYXQgdGhlIGxvZ2dpbmcgKmlzKiBjaGFuZ2luZyBub3cuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIElzIHRoZXJlIGEgYnVmZmVyIG92ZXJmbG93IGNvbmNlcm4gaGVyZT8gTm8sIEkgZG9uJ3Qgc2VlIGFueSBkaXJlY3Qgd3JpdGVzICp0byogdGhlIGFycmF5LiBJcyB0aGVyZSBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcz8gUG90ZW50aWFsbHkuIFByZXZpb3VzbHksIHRoZSBjb2RlIGNoZWNrZWQgYGogXHUwMDNjIGNvdW50YCwgYW5kIHRoYXQgd291bGQgaGF2ZSBzaG9ydC1jaXJjdWl0ZWQuIE5vdywgaXQgcHJpbnRzIHRoZSBzdHJpbmcuIFNvIHRoZSBsb2dpYyBoYXMgY2hhbmdlZCwgaW4gdGhhdCBicmFuY2ggb2YgY29kZS4gSXMgaXQgcG9zc2libGUgdGhhdCBgZmxhZ25hbWVgICpjb3VsZCogaGF2ZSBhIGBOVUxMYCBlbGVtZW50IHNvbWV3aGVyZT8gSSBzaG91bGQgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgbm90IHBvc3NpYmxlIGJ5IGRlc2lnbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWNsYXJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIEFuZCB0aGUgdmFsdWVzIG9mIGBNRU1CTE9DS18qYCBpbiBgaW5jbHVkZS9saW51eC9tZW1ibG9jay5oYC4gSXQgYXBwZWFycyB0byBiZSBpbml0aWFsaXplZCBpbiB0aGUgYXJyYXkuIFRoaXMgaXMgZ29vZC4gSXQgc2VlbXMgc2FmZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLlxuXG5TbywgaW4gc3VtbWFyeSwgZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSAqYXBwZWFycyogcHVyZWx5IGRlY29yYXRpdmUgYXQgZmlyc3QgZ2xhbmNlLCB0aGUgY2hhbmdlIGluIG91dHB1dCBvZiBpbmZvcm1hdGlvbiBkb2VzIGNvbnN0aXR1dGUgYSBjaGFuZ2UgdG8gYSBsb2dnaW5nIGZ1bmN0aW9uLiBUaGlzIHdvdWxkIG5vdCBiZSBhIFwic3RyaWN0bHlcIiBkZWNvcmF0aXZlIGxvZ2dpbmcgY2hhbmdlLCB3aGljaCBpcyBvbmUgb2YgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLlxuXG5Pa2F5LCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgY2hhbmdlICpkb2VzKiB3YXJyYW50IGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1NjowNS41MzQxOTQ1NDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdCAqIGtlcm5lbCBpbiBoYW5kb3ZlciBtb2RlLiBEdXJpbmcgZWFybHkgYm9vdCwgd2UgZG8gbm90IGtub3cgYWJvdXQgYWxsXFxuICA1MTpcXHQgKiBtZW1vcnkgcmVzZXJ2YXRpb25zIHlldCwgc28gd2UgZ2V0IHNjcmF0Y2ggbWVtb3J5IGZyb20gdGhlIHByZXZpb3VzXFxuICA1MjpcXHQgKiBrZXJuZWwgdGhhdCB3ZSBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdFxcbiAgNTM6XFx0ICogYWxsb2NhdGlvbnMgbWF5IGhhcHBlbiBmcm9tIGluIHRoaXMgcGhhc2UuXFxuICA1NDpcXHQgKiBATUVNQkxPQ0tfUlNSVl9IVUdFVExCOiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXNcXG4gIDU1OlxcdCAqL1xcbiAgNTY6XFx0ZW51bSBtZW1ibG9ja19mbGFncyB7XFxuICA1NzpcXHRcXHRNRU1CTE9DS19OT05FXFx0XFx0PSAweDAsXFx0LyogTm8gc3BlY2lhbCByZXF1ZXN0ICovXFxuICA1ODpcXHRcXHRNRU1CTE9DS19IT1RQTFVHXFx0PSAweDEsXFx0LyogaG90cGx1Z2dhYmxlIHJlZ2lvbiAqL1xcbiAgNTk6XFx0XFx0TUVNQkxPQ0tfTUlSUk9SXFx0XFx0PSAweDIsXFx0LyogbWlycm9yZWQgcmVnaW9uICovXFxuICA2MDpcXHRcXHRNRU1CTE9DS19OT01BUFxcdFxcdD0gMHg0LFxcdC8qIGRvbid0IGFkZCB0byBrZXJuZWwgZGlyZWN0IG1hcHBpbmcgKi9cXG4gIDYxOlxcdFxcdE1FTUJMT0NLX0RSSVZFUl9NQU5BR0VEID0gMHg4LFxcdC8qIGFsd2F5cyBkZXRlY3RlZCB2aWEgYSBkcml2ZXIgKi9cXG4gIDYyOlxcdFxcdE1FTUJMT0NLX1JTUlZfTk9JTklUXFx0PSAweDEwLFxcdC8qIGRvbid0IGluaXRpYWxpemUgc3RydWN0IHBhZ2VzICovXFxuICA2MzpcXHRcXHRNRU1CTE9DS19SU1JWX0tFUk5cXHQ9IDB4MjAsXFx0LyogbWVtb3J5IHJlc2VydmVkIGZvciBrZXJuZWwgdXNlICovXFxuICA2NDpcXHRcXHRNRU1CTE9DS19LSE9fU0NSQVRDSFxcdD0gMHg0MCxcXHQvKiBzY3JhdGNoIG1lbW9yeSBmb3Iga2V4ZWMgaGFuZG92ZXIgKi9cXG4gIDY1OlxcdFxcdE1FTUJMT0NLX1JTUlZfSFVHRVRMQlxcdD0gMHg4MCwgLyogbWVtb3J5IHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzICovXFxuICA2NjpcXHR9O1xcbiAgNjc6XFx0XFxuICA2ODpcXHQvKipcXG4gIDY5OlxcdCAqIHN0cnVjdCBtZW1ibG9ja19yZWdpb24gLSByZXByZXNlbnRzIGEgbWVtb3J5IHJlZ2lvblxcbiAgNzA6XFx0ICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVnaW9uXFxuICA3MTpcXHQgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcmVnaW9uXFxuICA3MjpcXHQgKiBAZmxhZ3M6IG1lbW9yeSByZWdpb24gYXR0cmlidXRlc1xcbiAgNzM6XFx0ICogQG5pZDogTlVNQSBub2RlIGlkXFxuICA3NDpcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTY6MDUuNTM0Mjg5MTI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxOTMyMDU2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgZm9yIEZ1enppbmc6IG1lbWJsb2NrIEZsYWcgRGVmaW5pdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBgTUVNQkxPQ0tfKmAgZmxhZyBkZWZpbml0aW9ucy4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogZWFjaCBmbGFnIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGJpdCwgY2FsY3VsYXRlZCBhcyBhIHBvd2VyIG9mIDIgKGlsb2cyKS4gSSBjYW4gc2VlIHRoYXQgdGhlIGFycmF5IGlzIGZ1bGx5IHBvcHVsYXRlZCwgaW5kZXhlZCBmcm9tIDAgdG8gNy5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNhcmVmdWxseSBjb25zaWRlciB0aGUgcHJvbXB0LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2hhbmdlIGlzIFwiV29ydGhGdXp6aW5nXCIgb3Igbm90LCBhbmQgdGhlcmUgYXJlIHNwZWNpZmljICpuZWdhdGl2ZSogY3JpdGVyaWEgdGhhdCB3b3VsZCBleGNsdWRlIGl0LiBUaGUgcHJvbXB0IG91dGxpbmVzIHNldmVyYWwgY2F0ZWdvcmllcyB3aGVyZSBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZyA9IGZhbHNlYC4gSSBuZWVkIHRvIGVuc3VyZSBpZiB0aGUgY2hhbmdlIGZhbGxzIHVuZGVyIFwiTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlc1wiIG9yIHNvbWV0aGluZyBlbHNlIHRvIHNhdGlzZnkgYSBgZmFsc2VgIHJldHVybi5cblxuVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgXCJQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nXCIgY2F0ZWdvcnkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBhZmZlY3RzIHRoZSBjb21waWxlZCBrZXJuZWwgb3IgYSBkYXRhIHN0cnVjdHVyZS4gVGhlIGZsYWdzIHRoZW1zZWx2ZXMgc2VlbSBpbm5vY3VvdXMsIGJ1dCBsZXQncyBzZWUgd2hlcmUgdGhleSBhcmUgdXNlZC5cblxuQWhhISBJdCBsb29rcyBsaWtlIHRoZXNlIGZsYWdzIGFyZSB1c2VkIGluIGBtZW1ibG9ja19kZWJ1Z19zaG93KClgIHdpdGhpbiBkZWJ1Z2ZzLCBzcGVjaWZpY2FsbHkgaW4gYSBmaWxlIG5hbWVkIFwibWVtb3J5XCIgYW5kIHNvbWV0aGluZyBjYWxsZWQgXCJyZXNlcnZlZFwiLiBgc2VxX3B1dHMobSwgaiBcdTAwM2MgY291bnQgPyBmbGFnbmFtZVtqXSA6IFwiVU5LTk9XTlwiKTtgIGlzIHdoYXQgSSBzZWUgaW4gbXkgY29kZS5cblxuU28gd2hhdCBpcyBgZmxhZ25hbWVgPyBJdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXWAuIFRoaXMgaXMgYW4gYXJyYXkuIEFycmF5cyAqYXJlKiBkYXRhIHN0cnVjdHVyZXMuIEFkZGluZyBhbiBlbGVtZW50IHRvIGl0IGxpdGVyYWxseSBpbmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIGFycmF5LiBTbywgaXMgZGVidWdmcyBwcmludGluZyBjb25zaWRlcmVkIFwicHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZ1wiP1xuXG5Hb2luZyBiYWNrIHRvIHRoZSBwcm9tcHQsIGl0IGNsZWFybHkgc3RhdGVzIFwiUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgKm9yKiB0cmFjZXBvaW50cyAqdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcyouXCIgU28sIHdoaWxlIHRoaXMgZGVidWdmcyBvdXRwdXQgKmxvb2tzKiBsaWtlIGxvZ2dpbmcsIGl0J3MgYWxzbyB0aWVkIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgKGBmbGFnbmFtZWApLiBCeSBtb2RpZnlpbmcgYSBkYXRhIHN0cnVjdHVyZSwgdGhlIGNoYW5nZSBpc24ndCAqcHVyZWx5KiBkZWNvcmF0aXZlLCBpdCBzZWVtcyB0byBhbHRlciBhIGRhdGEgc3RydWN0dXJlLiBUaGUgZmxhZ3MgdGhlbXNlbHZlcyBhcmUgcGFydCBvZiB0aGUgYG1lbWJsb2NrYCBkYXRhIHN0cnVjdHVyZSBpbiB0aGUgZWFybHkgYm9vdCBtZW1vcnkgYWxsb2NhdG9yLlxuXG5CdXQgd2FpdCwgY2FuIHRoaXMgYmUgZnV6emVkPyBXaGF0IGRvZXMgc3l6a2FsbGVyIGRvPyBEb2VzIGl0IHJlYWQgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL3Jlc2VydmVkYD8gVGhhdCdzIHdoYXQgSSB3YW50IHRvIGtub3chXG5cbkFoLCBhIGNydWNpYWwgcXVlc3Rpb24sIGRvZXMgYGFtZDY0YCBldmVuIGtlZXAgdGhlIGBtZW1ibG9ja2A/IExldCBtZSBzZWUuIEkgc2VlIGAjaWZkZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS2AgLSBpcyB0aGF0IGRlZmluZWQgb24gYGFtZDY0YD8gVGhpcyBpcyBjcml0aWNhbCEgTGV0IG1lIGdyZXAgZm9yIHRoaXMgYW5kIGNoZWNrLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGV2ZW4gZXhpc3RzIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1Njo1Ny40NjYzNDk4NDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTkxMjc1NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9LRUVQX01FTUJMT0NLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLTM1LVxcdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXFxuYXJjaC9hcm0vS2NvbmZpZzozNjpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC9hcm0vS2NvbmZpZy0zNy1cXHRzZWxlY3QgQVJDSF9IQVNfVUJTQU5cXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTYzLVxcdHNlbGVjdCBBUkNIX0hBVkVfVFJBQ0VfTU1JT19BQ0NFU1NcXG5hcmNoL2FybTY0L0tjb25maWc6NjQ6XFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xcbmFyY2gvYXJtNjQvS2NvbmZpZy02NS1cXHRzZWxlY3QgQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTU4LVxcdHNlbGVjdCBBUkNIX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlmICFQUkVFTVBUSU9OXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1OTpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy02MC1cXHRzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlRcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTIxLVxcdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXFxuYXJjaC9taXBzL0tjb25maWc6MjI6XFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xcbmFyY2gvbWlwcy9LY29uZmlnLTIzLVxcdHNlbGVjdCBBUkNIX1VTRV9CVUlMVElOX0JTV0FQXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTYyLVxcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjE2MzpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTY0LVxcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcdGlmIFBQQ19SQURJWF9NTVVcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy02MC1cXHRzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG5hcmNoL3Jpc2N2L0tjb25maWc6NjE6XFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DSyBpZiBBQ1BJIHx8IEtFWEVDXFxuYXJjaC9yaXNjdi9LY29uZmlnLTYyLVxcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcdGlmIDY0QklUIFxcdTAwMjZcXHUwMDI2IE1NVVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0xODY0PWNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODY5LVxcdGRlcGVuZHMgb24gWDg2X1gyQVBJQ1xcbmFyY2gveDg2L0tjb25maWc6MTg3MDpcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuYXJjaC94ODYvS2NvbmZpZy0xODcxLVxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYz0xMTA0PXN0YXRpYyBpbnQgZWZpX21lbV9yZXNlcnZlX2lvbWVtKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTEyNi1cXHQgKi9cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYzoxMTI3OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spIFxcdTAwMjZcXHUwMDI2ICFyZXQpXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMtMTEyOC1cXHRcXHRtZW1ibG9ja19yZXNlcnZlKGFkZHIsIHNpemUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTExND1leHRlcm4gc3RydWN0IG1lbWJsb2NrIG1lbWJsb2NrO1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xMTUtXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjExNjojaWZuZGVmIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0tcXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTE3LSNkZWZpbmUgX19pbml0X21lbWJsb2NrIF9fbWVtaW5pdFxcbi0tXFxua2VybmVsL2tleGVjX2ZpbGUuYz01ODA9c3RhdGljIGludCBsb2NhdGVfbWVtX2hvbGVfY2FsbGJhY2soc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcXG4tLVxcbmtlcm5lbC9rZXhlY19maWxlLmMtNjA2LVxcbmtlcm5lbC9rZXhlY19maWxlLmM6NjA3OiNpZmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXFxua2VybmVsL2tleGVjX2ZpbGUuYy02MDgtc3RhdGljIGludCBrZXhlY193YWxrX21lbWJsb2NrKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jPTczNj1pbnQga2V4ZWNfbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYpXFxuLS1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jLTc1OC1cXG5rZXJuZWwva2V4ZWNfZmlsZS5jOjc1OTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxua2VybmVsL2tleGVjX2ZpbGUuYy03NjAtXFx0XFx0cmV0ID0ga2V4ZWNfd2Fsa19yZXNvdXJjZXMoa2J1ZiwgbG9jYXRlX21lbV9ob2xlX2NhbGxiYWNrKTtcXG4tLVxcbm1tL0tjb25maWc9NDg2PWNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxcbi0tXFxubW0vS2NvbmZpZy00OTEtIyBBbHNvLCBtZW1ibG9ja3MgYXJlIHVwZGF0ZWQgd2l0aCBtZW1vcnkgaG90KHVuKXBsdWcuXFxubW0vS2NvbmZpZzo0OTI6Y29uZmlnIEFSQ0hfS0VFUF9NRU1CTE9DS1xcbm1tL0tjb25maWctNDkzLVxcdGJvb2xcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTAwLSAqXFxubW0vbWVtYmxvY2suYzoxMDE6ICogVW5sZXNzIGFuIGFyY2hpdGVjdHVyZSBlbmFibGVzICVDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLLCB0aGVcXG5tbS9tZW1ibG9jay5jLTEwMi0gKiBtZW1ibG9jayBkYXRhIHN0cnVjdHVyZXMgKGV4Y2VwdCBcXFwicGh5c21lbVxcXCIpIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZVxcbi0tXFxubW0vbWVtYmxvY2suYz0zNjQ9c3RhdGljIHZvaWQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3JlbW92ZV9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgcilcXG4tLVxcbm1tL21lbWJsb2NrLmMtMzgwLVxcbm1tL21lbWJsb2NrLmM6MzgxOiNpZm5kZWYgQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DS1xcbm1tL21lbWJsb2NrLmMtMzgyLS8qKlxcbi0tXFxubW0vbWVtYmxvY2suYz05MzI9dW5zaWduZWQgbG9uZyBmcmVlX3Jlc2VydmVkX2FyZWEodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCwgaW50IHBvaXNvbiwgY29uc3QgY2hhciAqcylcXG4tLVxcbm1tL21lbWJsb2NrLmMtOTUwLVxcbm1tL21lbWJsb2NrLmM6OTUxOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKSB7XFxubW0vbWVtYmxvY2suYy05NTItXFx0XFx0aWYgKHN0YXJ0X3BhIFxcdTAwM2MgZW5kX3BhKVxcbi0tXFxubW0vbWVtYmxvY2suYz05ODg9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19waHlzX2ZyZWUocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcXG4tLVxcbm1tL21lbWJsb2NrLmMtOTk3LVxcbm1tL21lbWJsb2NrLmM6OTk4OlxcdGlmICghc2xhYl9pc19hdmFpbGFibGUoKSB8fCBJU19FTkFCTEVEKENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0spKVxcbm1tL21lbWJsb2NrLmMtOTk5LVxcdFxcdHJldCA9IG1lbWJsb2NrX3JlbW92ZV9yYW5nZShcXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpO1xcbi0tXFxubW0vbWVtYmxvY2suYz0yODY1PV9fc2V0dXAoXFxcInJlc2VydmVfbWVtPVxcXCIsIHJlc2VydmVfbWVtKTtcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjg2Ny0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0vbWVtYmxvY2suYzoyODY4OiNpZmRlZiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLXFxubW0vbWVtYmxvY2suYy0yODY5LXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcXG4tLVxcbm1tL21lbWJsb2NrLmM9MjkzND1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfZGVidWdmc19leHBvc2VfYXJyYXlzKHN0cnVjdCBkZW50cnkgKnJvb3QpIHsgfVxcbm1tL21lbWJsb2NrLmMtMjkzNS1cXG5tbS9tZW1ibG9jay5jOjI5MzY6I2VuZGlmIC8qIENPTkZJR19BUkNIX0tFRVBfTUVNQkxPQ0sgKi9cXG5tbS9tZW1ibG9jay5jLTI5MzctXFxuLS1cXG5tbS9tZW1ibG9jay5jPTI5NTg9c3RhdGljIGludCBfX2luaXQgbWVtYmxvY2tfaW5pdF9kZWJ1Z2ZzKHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI5NjEtXFxubW0vbWVtYmxvY2suYzoyOTYyOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSBcXHUwMDI2XFx1MDAyNiAhcmVzZXJ2ZWRfbWVtX2NvdW50KVxcbm1tL21lbWJsb2NrLmMtMjk2My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUwMj1zdGF0aWMgaW50IF9fYWRkX21lbW9yeV9yZXNvdXJjZShpbnQgbmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgbWhwX3QgbWhwX2ZsYWdzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTMyLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTUzMzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSkge1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTUzNC1cXHRcXHRpZiAocmVzLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUkVTT1VSQ0VfU1lTUkFNX0RSSVZFUl9NQU5BR0VEKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjAzLWVycm9yX21lbWJsb2NrX3JlbW92ZTpcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2MDQ6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjA1LVxcdFxcdG1lbWJsb2NrX3JlbW92ZShzdGFydCwgc2l6ZSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTIyOTY9c3RhdGljIGludCB0cnlfcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMzM2LVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjMzNzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIzMzgtXFx0XFx0bWVtYmxvY2tfcmVtb3ZlKHN0YXJ0LCBzaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTY6NTkuNTg1NDgyMjc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ2NDk3MDYxMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEFSQ0hfS0VFUF9NRU1CTE9DSyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgYEFSQ0hfS0VFUF9NRU1CTE9DS2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRoZSBpbml0aWFsIGNsdWUgaXMgdGhhdCBgQ09ORklHX0lOVEVMX1REWF9IT1NUYCBzZWxlY3RzIGl0LCBmb3VuZCBpbiBgYXJjaC94ODYvS2NvbmZpZ2AuIEknbSBjdXJpb3VzIHRvIHNlZSBpZiBhbnl0aGluZyBlbHNlIGlzIHRyaWdnZXJpbmcgdGhpcyBzZWxlY3Rpb24gd2l0aGluIHRoZSB4ODYgY29uZmlnIHNwYWNlLiBBIHF1aWNrIGdyZXAgb2YgdGhlIGBLY29uZmlnYCBmaWxlIHNob3VsZCByZXZlYWwgdGhvc2UgZGVwZW5kZW5jaWVzLiBBaGEhIExpbmUgMTg3MCwgYWNjb3JkaW5nIHRvIHRoZSBsb2csIGlzIHdoZXJlIHRoZSBzZWxlY3Rpb24gb2YgYEFSQ0hfS0VFUF9NRU1CTE9DS2Agb2NjdXJzLiBMZXQncyBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGF0IHNlY3Rpb24gb2YgYGFyY2gveDg2L0tjb25maWdgIHRvIHNlZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgaXQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmF0aW9uYWxlIGJlaGluZCB1c2luZyBgQVJDSF9LRUVQX01FTUJMT0NLYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTY6NTc6NDYuMDgyNTQ2Nzk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjA6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni9zaHN0ay5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuMTg2MTpcXHRcXG4xODYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODYzOlxcdFxcbjE4NjQ6XFx0Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuMTg2NTpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuMTg2NjpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcXG4xODY3OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuMTg2ODpcXHRcXHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxcbjE4Njk6XFx0XFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuMTg3MDpcXHRcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuMTg3MTpcXHRcXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbjE4NzI6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTUNFXFxuMTg3MzpcXHRcXHRoZWxwXFxuMTg3NDpcXHRcXHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xcbjE4NzU6XFx0XFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcXG4xODc2OlxcdFxcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXFxuMTg3NzpcXHRcXG4xODc4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODc5OlxcdFxcbjE4ODA6XFx0Y29uZmlnIEVGSVxcbjE4ODE6XFx0XFx0Ym9vbCBcXFwiRUZJIHJ1bnRpbWUgc2VydmljZSBzdXBwb3J0XFxcIlxcbjE4ODI6XFx0XFx0ZGVwZW5kcyBvbiBBQ1BJXFxuMTg4MzpcXHRcXHRzZWxlY3QgVUNTMl9TVFJJTkdcXG4xODg0OlxcdFxcdHNlbGVjdCBFRklfUlVOVElNRV9XUkFQUEVSU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNjo1Nzo0Ni4wODI3MDQ4MDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA3MzI5MjIwNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBNZW1ibG9jayBEZWJ1Z2ZzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQVJDSF9LRUVQX01FTUJMT0NLYCBpcyB3aWRlbHkgdXNlZCBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMsIGFuZCBJJ3ZlIHF1aWNrbHkgY29uZmlybWVkIGl0cyBwcmVzZW5jZSBhY3Jvc3MgQVJNLCBBUk02NCwgTG9vbmdBcmNoLCBNSVBTLCBQb3dlclBDLCBSSVNDLVYgKGNvbmRpdGlvbmFsbHkpLCBhbmQgeDg2IChjb25kaXRpb25hbGx5KS4gIE5vdywgb250byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIGFkZGluZyBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCdzIG5hbWUsIFwiUlNWX0hVR0VUTEJcIiwgdG8gdGhlIGBmbGFnbmFtZWAgYXJyYXksIHdoaWNoIGlzIHVzZWQgaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3coKWAgdG8gZGlzcGxheSBtZW1vcnkgYmxvY2sgZmxhZ3MgaW4gZGVidWdmcy5cblxuVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgY2hhbmdlIHRoYXQncyAqd29ydGgqIGZ1enppbmc/ICBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIFwibmVnYXRpdmUgY3JpdGVyaWEuXCIgIFRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIGZhbGwgdW5kZXIgXCJQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIC4uLiB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzXCI/IFRoZSBrZXkgc2VlbXMgdG8gYmUgd2hldGhlciB0aGUgYWRkaXRpb24gaXMgKnB1cmVseSBkZWNvcmF0aXZlKi5cblxuVGhlIGBmbGFnbmFtZWAgYXJyYXksIHdpdGhpbiBgbWVtYmxvY2tfZGVidWdfc2hvd2AsIGlzIHVzZWQgdG8gcHJpbnQgZmxhZ3Mgd2hlbiByZWFkaW5nIGAvc3lzL2tlcm5lbC9kZWJ1Zy9tZW1ibG9jay97bWVtb3J5LHJlc2VydmVkfWAuIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBvdXRwdXQgd291bGQgZGlzcGxheSBcIlVOS05PV05cIiBpZiBhIHJlZ2lvbiBoYWQgdGhlIGBNRU1CTE9DS19SU1JWX0hVR0VUTEJgIGZsYWcuIE5vdywgaXQgd2lsbCBjb3JyZWN0bHkgcHJpbnQgXCJSU1ZfSFVHRVRMQi5cIiAgVGhlIGNvZGUgaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3dgIHJlYWRzIHRoZXNlIGZsYWdzIGZyb20gdGhlIG1lbW9yeSBibG9jayBzdHJ1Y3R1cmVzIGFuZCwgKmJhc2VkIG9uIHRoZXNlIGZsYWdzKiwgc2VsZWN0cyBhIHN0cmluZyBmcm9tIGBmbGFnbmFtZWAgYW5kIHByaW50cyBpdC4gVGhlIHBhdGNoIHNpbXBseSBlbnN1cmVzIHRoYXQgdGhlIGNvcnJlY3Qgc3RyaW5nIGlzIHByaW50ZWQsICppbnN0ZWFkIG9mIFwiVU5LTk9XTlwiKi5cblxuU28sIGRvZXMgdGhpcyBjaGFuZ2UgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcz8gTm8uIEl0IGFmZmVjdHMgKm9ubHkqIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gcHJlc2VudGVkIHRvIHRoZSB1c2VyLiBJdCBpcywgaW4gZXNzZW5jZSwgbWVyZWx5IGEgZm9ybWF0dGluZyBjaGFuZ2UgZm9yIGRpYWdub3N0aWMgb3V0cHV0IChhbmQgdGhlIGZsYWcgbmFtZXMgYXJlIHByZXNlbnQgc3RhdGljYWxseSkuICBJdCdzICpwdXJlbHkqIGRlY29yYXRpdmUgbG9nZ2luZy4gVGhlIG91dHB1dCBvZiBgL3N5cy9rZXJuZWwvZGVidWcvbWVtYmxvY2svbWVtb3J5YCBhbmQgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL3Jlc2VydmVkYCBpcyAqb25seSogc3RyaW5nIG91dHB1dCwgYW5kIG5vIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24gaGFwcGVucy5cblxuVGhlIFwiZS5nLlwiIGluIHRoZSBkZWZpbml0aW9uIG9mIHdoYXQncyBub3Qgd29ydGggZnV6emluZyBpcyBjcnVjaWFsLiBEaXNwbGF5aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyBmaXRzIHRoZSBpbnRlbnQgb2YgXCJkZWNvcmF0aXZlIGxvZ2dpbmcuXCIgIFNpbmNlIGFsbCB0aGUgYXJyYXkgaW5kaWNlcyBoYXZlIHN0YXRpY2FsbHkgYXNzaWduZWQgc3RyaW5nIGxpdGVyYWxzLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlza3Mgb2YgYSBjcmFzaC4gVGhlcmUgaXMgbm8gY2hhbmdlIHRvIGtlcm5lbCBjb250cm9sIGZsb3csIG5vIG1hbmlwdWxhdGlvbiBvZiBzdWJzdGFudGl2ZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gYWx0ZXJlZCBhbGdvcml0aG1pYyBsb2dpYy4gIFRodXMsIHRoaXMgY2hhbmdlIGlzIG5vdCBnb2luZyB0byBsZWFkIHRvIGEgYnVnIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyByZWFjaGFibGUgb24gbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQuIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgU3l6a2FsbGVyJ3Mgc3RhbmRhcmQgY29uZmlnIGVuYWJsZXMgYENPTkZJR19JTlRFTF9URFhfSE9TVGAsIG9yIHdoZXRoZXIgc29tZSBvdGhlciBjb25maWcgaW4geDg2IGVuYWJsZXMgYEFSQ0hfS0VFUF9NRU1CTE9DS2AuIEknbGwgZ3JlcCBmb3IgYElOVEVMX1REWF9IT1NUYCBpbiB0aGUga2VybmVsIGNvbmZpZ3MganVzdCB0byBiZSBzdXJlLCBldmVuIGlmIHRoZSByZXN1bHQgb2YgdGhlIHByaW9yIGFuYWx5c2lzIGlzIGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzowMjo1My40MTE5Mjg0OTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTczNTY0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5URUxfVERYX0hPU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODQ1PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg2My1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oPTEwMz1zdGF0aWMgaW5saW5lIGxvbmcgdGR4X2t2bV9oeXBlcmNhbGwodW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtMTEwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oOjExMTojaWZkZWYgQ09ORklHX0lOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtMTEyLXZvaWQgdGR4X2luaXQodm9pZCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaD0yMDc9c3RhdGljIGlubGluZSB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKSB7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaDoyMDg6I2VuZGlmXFx0LyogQ09ORklHX0lOVEVMX1REWF9IT1NUICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgtMjA5LVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzYtXFx0ZGVmYXVsdCB5XFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM3OlxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzgtXFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmFyY2gveDg2L3ZpcnQvdm14L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lOVEVMX1REWF9IT1NUKVxcdCs9IHRkeC9cXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX0lOVEVMX1REWF9HVUVTVClcXHQrPSB0ZHgtZ3Vlc3QvXFxuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU5URUxfVERYX0hPU1QpXFx0Kz0gdGR4LWhvc3QvXFxuZHJpdmVycy92aXJ0L2NvY28vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0FSTV9DQ0FfR1VFU1QpXFx0Kz0gYXJtLWNjYS1ndWVzdC9cXG4tLVxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ob3N0L0tjb25maWc9MT1jb25maWcgVERYX0hPU1RfU0VSVklDRVNcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtaG9zdC9LY29uZmlnLTItXFx0dHJpc3RhdGVcXG5kcml2ZXJzL3ZpcnQvY29jby90ZHgtaG9zdC9LY29uZmlnOjM6XFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxcbmRyaXZlcnMvdmlydC9jb2NvL3RkeC1ob3N0L0tjb25maWctNC1cXHRzZWxlY3QgRldfTE9BREVSXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9MTQ9ZW51bSBtaXNjX3Jlc190eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC0yMC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg6MjE6I2lmZGVmIENPTkZJR19JTlRFTF9URFhfSE9TVFxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC0yMi1cXHQvKiogQE1JU0NfQ0dfUkVTX1REWDogSW50ZWwgVERYIEhLSURzIHJlc291cmNlICovXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0yMD1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWlzY19yZXNfbmFtZVtdID0ge1xcbi0tXFxua2VybmVsL2Nncm91cC9taXNjLmMtMjYtI2VuZGlmXFxua2VybmVsL2Nncm91cC9taXNjLmM6Mjc6I2lmZGVmIENPTkZJR19JTlRFTF9URFhfSE9TVFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTI4LVxcdC8qIEludGVsIFREWCBIS0lEcyByZXNvdXJjZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzowMjo1Ni4xMDkyOTE2NTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzA0NTM2NjMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFZlcmRpY3Q6IE5vdCBXb3J0aHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBBUkNIX0tFRVBfTUVNQkxPQ0tgIG9uIHg4NiBpcyBnYXRlZCBieSBgSU5URUxfVERYX0hPU1RgLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgSU5URUxfVERYX0hPU1RgIGRlcGVuZHMgb24sIHNvIEkgc2VlIGl0J3MgY29uZGl0aW9uZWQgb24gYENQVV9TVVBfSU5URUxgLCBgWDg2XzY0YCwgYEtWTV9JTlRFTGAsIGBYODZfWDJBUElDYCwgYENPTlRJR19BTExPQ2AsIGFuZCBgWDg2X01DRWAuIEJ1dCB1bHRpbWF0ZWx5LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYElOVEVMX1REWF9IT1NUYCBpcyBlbmFibGVkIG9yIG5vdCwgdGhlIGNvcmUgY2hhbmdlIGluIHRoaXMgcGF0Y2ggaXMgaW5jcmVkaWJseSBsb2NhbGl6ZWQuXG5cbkl0J3MgbGl0ZXJhbGx5IGp1c3QgYWRkaW5nIGBcIlJTVl9IVUdFVExCXCJgIHRvIHRoZSBgZmxhZ25hbWVgIGFycmF5LiAgVGhpcyBhcnJheSBpcyAqb25seSogdXNlZCB3aXRoaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3coKWAsIHdoaWNoIGlzIGEgZGVidWdmcyBmdW5jdGlvbiBjYWxsZWQgdG8gcHJpbnQgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL3ttZW1vcnkscmVzZXJ2ZWR9YC4gU28gdGhlIG9ubHkgZWZmZWN0IGlzIHRvIGNoYW5nZSB0aGUgdGV4dCBvdXRwdXQgaW4gdGhpcyBkZWJ1Z2ZzIGludGVyZmFjZSBmcm9tIFwiVU5LTk9XTlwiIHRvIFwiUlNWX0hVR0VUTEJcIiBmb3IgYSBzcGVjaWZpYyBmbGFnIGJpdC5cblxuTm93LCBsZXQncyBhcHBseSB0aGUgZnV6emluZyBjcml0ZXJpYS4gU2VjdGlvbiAxIGZvY3VzZXMgb24gY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV0Yy4gU2VjdGlvbiAyLCB0aGUgXCJuZWdhdGl2ZSBjcml0ZXJpYSxcIiBpcyBrZXk6IFwicHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZ+KApiB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlwiIFRoaXMgKmRlZmluaXRlbHkqIGZhbGxzIHVuZGVyIHRoYXQgY2F0ZWdvcnkuICBJdCdzIGp1c3QgYWRkaW5nIGEgc3RyaW5nIGxpdGVyYWw7IGl0J3Mgbm90IHRvdWNoaW5nIGFueSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBjb250cm9sIGZsb3csIGxvY2tpbmcsIG9yIGV4ZWN1dGFibGUgYWxnb3JpdGhtcy4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgcmVhZGluZyBhIGNvbnN0YW50IHN0cmluZyBpbiBgc2VxX3B1dHNgLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2tzLiBUaGVyZSdzIG5vIGNoYW5jZSBvZiBmaW5kaW5nIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciB0cmlnZ2VyaW5nIG5ldyBhc3NlcnRpb25zLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgOiBgV29ydGhGdXp6aW5nOiBmYWxzZWAsIGBSZWFzb25pbmdgLCBgRm9jdXNTeW1ib2xzOiBbXWAsIGFuZCBgRW5hYmxlQ29uZmlnczogW11gLiBUaGUgc2NoZW1hIGNvbmZpcm1zIHRoYXQuXG5cbkZpbmFsbHksIHRoZSByZWFzb25pbmcgbmVlZHMgdG8gYmUgY29uY2lzZS4gSGVyZSdzIHdoYXQgSSdsbCBzdWJtaXQ6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyB0aGUgc3RyaW5nICdSU1ZfSFVHRVRMQicgY29ycmVzcG9uZGluZyB0byB0aGUgTUVNQkxPQ0tfUlNSVl9IVUdFVExCIGZsYWcgdG8gdGhlIGBmbGFnbmFtZWAgYXJyYXksIHdoaWNoIGlzIHVzZWQgZXhjbHVzaXZlbHkgZm9yIGZvcm1hdHRpbmcgZGVidWdmcyBvdXRwdXQgaW4gYG1lbWJsb2NrX2RlYnVnX3Nob3coKWAuIFRoaXMgaXMgcHVyZWx5IGRlY29yYXRpdmUgc3RyaW5nIGZvcm1hdHRpbmcgZm9yIGRlYnVnIG91dHB1dCBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvbnRyb2wgZmxvdywgc3RhdGUgbWFuYWdlbWVudCwgb3IgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMuIFRoZXJlZm9yZSwgZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDM5LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6MDM6MDMuMTU0NjYzNzI1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIHRoZSBzdHJpbmcgXFxcIlJTVl9IVUdFVExCXFxcIiBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRU1CTE9DS19SU1JWX0hVR0VUTEIgZmxhZyB0byB0aGUgZmxhZ25hbWVbXSB0YWJsZSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGFycmF5IGlzIHNvbGVseSB1c2VkIGZvciBmb3JtYXR0aW5nIGh1bWFuLXJlYWRhYmxlIGZsYWcgbmFtZXMgaW4gZGVidWdmcyAobWVtYmxvY2tfZGVidWdfc2hvdykuIEl0IGlzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcvb3V0cHV0IGZvcm1hdHRpbmcgdGhhdCBkb2VzIG5vdCBhbHRlciBhbnkga2VybmVsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGludHJvZHVjZXMgbm8gYXNzZXJ0aW9ucy4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgdGhlIHN0cmluZyBcXFwiUlNWX0hVR0VUTEJcXFwiIGNvcnJlc3BvbmRpbmcgdG8gdGhlIE1FTUJMT0NLX1JTUlZfSFVHRVRMQiBmbGFnIHRvIHRoZSBmbGFnbmFtZVtdIHRhYmxlIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgYXJyYXkgaXMgc29sZWx5IHVzZWQgZm9yIGZvcm1hdHRpbmcgaHVtYW4tcmVhZGFibGUgZmxhZyBuYW1lcyBpbiBkZWJ1Z2ZzIChtZW1ibG9ja19kZWJ1Z19zaG93KS4gSXQgaXMgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy9vdXRwdXQgZm9ybWF0dGluZyB0aGF0IGRvZXMgbm90IGFsdGVyIGFueSBrZXJuZWwgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBhbmQgaW50cm9kdWNlcyBubyBhc3NlcnRpb25zLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjAzOjAzLjE1NDcxNzIwNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7l2g[1] Phase: Running StartedAt: 2026-09-15 17:03:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7l2g[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-15 17:03:14 +0000 UTC FinishedAt: 2026-09-15 17:03:18 +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,}