{
 "agent_version": "0.145.0",
 "files": [
  {
   "check": "bash",
   "content_b64": "IyEvYmluL2Jhc2gKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBmZWxob20tbWtmcy1ndWFyZGVkIOKAlCB0aGUgT05MWSBta2ZzIHBhdGggdGhlIGZlbGhvbS1hZ2VudCBzdWRvZXJzIHBlcm1pdHMgKEltcGwtMSBQYXJ0IEIsCiMgU1BJS0UtZHJpdmUtZW5yb2xsbWVudC0yMDI2LTA3LTAxIMKnU1EzKS4gRGVmZW5zZS1pbi1kZXB0aCBCRUxPVyB0aGUgYWdlbnQ6IGV2ZW4gYSBidWdneSBvcgojIGNvbXByb21pc2VkIGFnZW50IGNhbm5vdCBta2ZzIGEgY2F0YXN0cm9waGljIHRhcmdldCB0aHJvdWdoIHRoaXMg4oCUIGl0IHJlLWNoZWNrcywgYXMgcm9vdCwgdGhlCiMgY2hlYXAgY2F0YXN0cm9waGljIGNhc2VzIChPUy9zeXN0ZW0gZGlzaywgTFZNIHBoeXNpY2FsIHZvbHVtZSwgYSBmb3JlaWduIG1vdW50LCBhIHJlYWQtb25seQojIGRldmljZSwgYW5kIGFueSBMVk0vWkZTL21kcmFpZC9MVUtTL3N3YXAgbWVtYmVyIHNpZ25hdHVyZSDigJQgYXVkaXQgRDEpIGFuZCByZWZ1c2VzLgojCiMgVGhlIGFnZW50J3MgZnVsbCB1bmNsYWltZWQtZGlzayBmaWx0ZXIgKGludGVybmFsL3N0b3JhZ2UvY2xhaW0uZ28pIGlzIHRoZSBQUklNQVJZIGd1YXJkOyB0aGlzCiMgd3JhcHBlciBpcyBhIGRlbGliZXJhdGVseSBtaW5pbWFsLCBhdWRpdGFibGUgc2Vjb25kIGdhdGUuIEl0IGlzIE5PVCB0aGUgcGxhY2UgZm9yIHRoZSBmdWxsIGZpbHRlci4KIwojIFVzYWdlOiAgZmVsaG9tLW1rZnMtZ3VhcmRlZCA8ZGV2aWNlPiA8ZnN0eXBlOmV4dDR8eGZzPgojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzZXQgLWV1byBwaXBlZmFpbAoKZGllKCkgeyBlY2hvICJmZWxob20tbWtmcy1ndWFyZGVkOiBSRUZVU0VEOiAkKiIgPiYyOyBleGl0IDE7IH0KCmRldj0iJHsxOi19IjsgZnN0eXBlPSIkezI6LX0iCltbIC1uICIkZGV2IiAmJiAtbiAiJGZzdHlwZSIgXV0gfHwgZGllICJ1c2FnZTogZmVsaG9tLW1rZnMtZ3VhcmRlZCA8ZGV2aWNlPiA8ZnN0eXBlPiIKCiMgVGhlIGRldmljZSBtdXN0IGJlIGEgUkVBTCBibG9jay1kZXZpY2Ugbm9kZSB1bmRlciAvZGV2IOKAlCBubyBzeW1saW5rIChlLmcuIC9kZXYvZGlzay9ieS0qKSwgbm8gdHJhdmVyc2FsLgpbWyAiJGRldiIgPT0gL2Rldi8qIF1dICB8fCBkaWUgImRldmljZSBtdXN0IGJlIHVuZGVyIC9kZXYgKCRkZXYpIgpbWyAiJGRldiIgIT0gKi4uKiBdXSAgICB8fCBkaWUgInBhdGggdHJhdmVyc2FsICgkZGV2KSIKW1sgLWIgIiRkZXYiIF1dICAgICAgICAgfHwgZGllICJub3QgYSBibG9jayBkZXZpY2UgKCRkZXYpIgpbWyAhIC1MICIkZGV2IiBdXSAgICAgICB8fCBkaWUgImRldmljZSBtdXN0IGJlIGEgcmVhbCBub2RlLCBub3QgYSBzeW1saW5rICgkZGV2KSIKCiMgV2hvbGUtZGlzayBvZiB0aGUgdGFyZ2V0IChhIHBhcnRpdGlvbidzIHBhcmVudCwgZWxzZSB0aGUgZGlzayBpdHNlbGYpLgpwaz0iJChsc2JsayAtbmRvIFBLTkFNRSAiJGRldiIgMj4vZGV2L251bGwgfHwgdHJ1ZSkiCndob2xlPSIkZGV2IjsgW1sgLW4gIiRwayIgXV0gJiYgd2hvbGU9Ii9kZXYvJHBrIgoKIyAxKSBPUy9zeXN0ZW0gZGlzayDigJQgZG9lcyB0aGUgdGFyZ2V0J3Mgd2hvbGUtZGlzayBiYWNrIC8sIC9ib290IG9yIC9ib290L2VmaT8Kd2hpbGUgcmVhZCAtciBzcmMgbW50IF9yZXN0OyBkbwogIGNhc2UgIiRtbnQiIGluCiAgICAvfC9ib290fC9ib290L2VmaSkKICAgICAgc3BrPSIkKGxzYmxrIC1uZG8gUEtOQU1FICIkc3JjIiAyPi9kZXYvbnVsbCB8fCB0cnVlKSIKICAgICAgc3dob2xlPSIkc3JjIjsgW1sgLW4gIiRzcGsiIF1dICYmIHN3aG9sZT0iL2Rldi8kc3BrIgogICAgICBbWyAiJHN3aG9sZSIgPT0gIiR3aG9sZSIgfHwgIiRzcmMiID09ICIkZGV2IiB8fCAiJHNyYyIgPT0gIiR3aG9sZSIgXV0gJiYgZGllICJzeXN0ZW0vT1MgZGlzayAoJGRldiBiYWNrcyAkbW50KSIKICAgICAgOzsKICBlc2FjCmRvbmUgPCAvcHJvYy9tb3VudHMKCiMgMikgTFZNIHBoeXNpY2FsIHZvbHVtZSBhbnl3aGVyZSBvbiB0aGUgdGFyZ2V0IGRpc2sgb3IgaXRzIHBhcnRpdGlvbnMuIHB2cyBpcyByZXNvbHZlZCBieSBBQlNPTFVURQojICAgIHBhdGggKGF1ZGl0IEQxOiBgY29tbWFuZCAtdiBwdnNgIHNpbGVudGx5IHNraXBwZWQgdGhpcyBjaGVjayB3aGVuIHB2cyB3YXNuJ3Qgb24gdGhlIGNhbGxlcidzCiMgICAgUEFUSCk7IGlmIG5laXRoZXIgY2FuZGlkYXRlIGV4aXN0cywgY2hlY2sgNSdzIExWTTJfbWVtYmVyIEZTVFlQRSBsb29wIHN0aWxsIGNhdGNoZXMgYSBQVgojICAgIGluZGVwZW5kZW50bHkg4oCUIHB2cy1hYnNlbnQgbmV2ZXIgc2lsZW50bHkgZHJvcHMgTFZNIGRldGVjdGlvbi4KcHZzYmluPSIiCmZvciBjIGluIC91c3Ivc2Jpbi9wdnMgL3NiaW4vcHZzOyBkbwogIFtbIC14ICIkYyIgXV0gJiYgeyBwdnNiaW49IiRjIjsgYnJlYWs7IH0KZG9uZQppZiBbWyAtbiAiJHB2c2JpbiIgXV07IHRoZW4KICB3aGlsZSByZWFkIC1yIHB2OyBkbwogICAgcHY9IiR7cHYvL1tbOnNwYWNlOl1dL30iOyBbWyAteiAiJHB2IiBdXSAmJiBjb250aW51ZQogICAgcHZwaz0iJChsc2JsayAtbmRvIFBLTkFNRSAiJHB2IiAyPi9kZXYvbnVsbCB8fCB0cnVlKSIKICAgIHB2d2hvbGU9IiRwdiI7IFtbIC1uICIkcHZwayIgXV0gJiYgcHZ3aG9sZT0iL2Rldi8kcHZwayIKICAgIFtbICIkcHZ3aG9sZSIgPT0gIiR3aG9sZSIgXV0gJiYgZGllICJkZXZpY2UgaG9sZHMgYW4gTFZNIHBoeXNpY2FsIHZvbHVtZSAoJHB2KSIKICBkb25lIDwgPCgiJHB2c2JpbiIgLS1ub2hlYWRpbmdzIC1vIHB2X25hbWUgMj4vZGV2L251bGwgfHwgdHJ1ZSkKZmkKCiMgMykgbW91bnRlZCBPVVRTSURFIEZlbGhvbSdzIG93biBkcml2ZSBhcmVhID0gYSBsaXZlIGZvcmVpZ24gZmlsZXN5c3RlbSDihpIgY2F0YXN0cm9waGljLiBNb3VudHMgdW5kZXIKIyAgICAvbW50L2ZlbGhvbS1kcml2ZXMgYXJlIG91ciBvd24gZHJpdmVzICh0aGUgYWdlbnQgZGV0YWNoZXMgYmVmb3JlIGEgcmUtaW5pdCkg4oaSIGFsbG93ZWQuCndoaWxlIHJlYWQgLXIgbXA7IGRvCiAgW1sgLXogIiRtcCIgXV0gJiYgY29udGludWUKICBjYXNlICIkbXAiIGluCiAgICAvbW50L2ZlbGhvbS1kcml2ZXN8L21udC9mZWxob20tZHJpdmVzLyopIDogOzsKICAgICopIGRpZSAiZGV2aWNlIChvciBhIHBhcnRpdGlvbikgaXMgbW91bnRlZCBhdCAkbXAgKCRkZXYpIiA7OwogIGVzYWMKZG9uZSA8IDwobHNibGsgLW5ybyBNT1VOVFBPSU5UICIkd2hvbGUiIDI+L2Rldi9udWxsIHx8IHRydWUpCgojIDQpIHJlYWQtb25seSBkZXZpY2UgKGF1ZGl0IEQxKTogYSBkZXZpY2UgdGhlIGtlcm5lbCBtYXJrcyBSTyBpcyBuZXZlciBhIGZvcm1hdHRhYmxlIGRhdGEgZGlzay4Kd2Jhc2U9IiR7d2hvbGUjL2Rldi99Igpyb2Y9Ii9zeXMvYmxvY2svJHdiYXNlL3JvIgppZiBbWyAtciAiJHJvZiIgXV07IHRoZW4KICBybz0iJChjYXQgIiRyb2YiIDI+L2Rldi9udWxsIHx8IHRydWUpIgogIFtbICIkcm8iID09ICIxIiBdXSAmJiBkaWUgInJlYWQtb25seSBkZXZpY2UgKCR3aG9sZSkiCmZpCgojIDUpIG1lbWJlci9hY3RpdmUgRlNUWVBFcyBhbnl3aGVyZSBvbiB0aGUgdGFyZ2V0IGRpc2sgb3IgaXRzIHBhcnRpdGlvbnMgKGF1ZGl0IEQxKS4gTWlycm9ycwojICAgIGNsYWltLmdvIG1lbWJlckZTVHlwZXMgZXhhY3RseTogYSBtZW1iZXIgb2YgTFZNL1pGUy9tZHJhaWQvTFVLUyBvciBhY3RpdmUtc3dhcCBzaWduYXR1cmUgaXMKIyAgICBhbHdheXMgYSBjbGFpbSwgbmV2ZXIgYSBwbGFpbiBmb3JtYXR0YWJsZSBkYXRhIGRpc2suIFRoaXMgYWxzbyBpbmRlcGVuZGVudGx5IGNhdGNoZXMgYW4gTFZNIFBWCiMgICAgd2hlbiBwdnMgaXMgbm90IGluc3RhbGxlZCAoY2hlY2sgMidzIGJlbHQtYW5kLXN1c3BlbmRlcnMpLgp3aGlsZSByZWFkIC1yIGZzdDsgZG8KICBbWyAteiAiJGZzdCIgXV0gJiYgY29udGludWUKICBjYXNlICIkZnN0IiBpbgogICAgTFZNMl9tZW1iZXJ8emZzX21lbWJlcnxsaW51eF9yYWlkX21lbWJlcnxjcnlwdG9fTFVLU3xzd2FwKQogICAgICBkaWUgImRldmljZSBob2xkcyBhICRmc3Qgc2lnbmF0dXJlICgkd2hvbGUpIiA7OwogIGVzYWMKZG9uZSA8IDwobHNibGsgLW5ybyBGU1RZUEUgIiR3aG9sZSIgMj4vZGV2L251bGwgfHwgdHJ1ZSkKCiMgUGFzc2VkIHRoZSBjYXRhc3Ryb3BoaWMgY2hlY2tzIOKGkiBmb3JtYXQuIGV4ZWMgc28gdGhlIG1rZnMgZXhpdCBzdGF0dXMgaXMgdGhlIHdyYXBwZXIncy4KY2FzZSAiJGZzdHlwZSIgaW4KICBleHQ0KSBleGVjIC91c3Ivc2Jpbi9ta2ZzLmV4dDQgLUYgIiRkZXYiIDs7CiAgeGZzKSAgZXhlYyAvdXNyL3NiaW4vbWtmcy54ZnMgIC1mICIkZGV2IiA7OwogICopICAgIGRpZSAidW5zdXBwb3J0ZWQgZnN0eXBlICgkZnN0eXBlKSIgOzsKZXNhYwo=",
   "mode": "0o755",
   "path": "/usr/local/sbin/felhom-mkfs-guarded",
   "policy": "replace",
   "sha256": "fe24cacd90899bf9217f7e0cc8bb4e2cdfa1c15c4c9c13cc16861b45b5bb441c",
   "source": "configs/felhom-mkfs-guarded.sh"
  },
  {
   "check": "sh",
   "content_b64": "IyEvYmluL3NoCiMgZmVsaG9tLXNlbGZ1cGRhdGUtZ3VhcmRlZCDigJQgdGhlIFJPT1QgaGFsZiBvZiB0aGUgYWdlbnQncyBBL0Igc2VsZi11cGRhdGUgKFRBU0sgRDEpLgojCiMgSW5zdGFsbCBhcyAvdXNyL2xvY2FsL3NiaW4vZmVsaG9tLXNlbGZ1cGRhdGUtZ3VhcmRlZCAoMDc1NSByb290OnJvb3QpLiBUaGUgbm9uLXJvb3QgYWdlbnQgaW52b2tlcwojIGBhcHBseWAvYGNvbW1pdGAgdmlhIGBzdWRvIC1uYCAoRkVMSE9NX1NFTEZVUERBVEUgYWxpYXMpOyBgcm9sbGJhY2tgIGlzIEFMU08gdGhlIEV4ZWNTdGFydCBvZgojIGZlbGhvbS1hZ2VudC1yb2xsYmFjay5zZXJ2aWNlIOKAlCB0aGUgT25GYWlsdXJlPSB0YXJnZXQgdGhhdCBhdXRvLXJldmVydHMgYSBjcmFzaC1sb29waW5nIHVwZGF0ZS4KIwojIERlc2lnbiBwcm92ZW5hbmNlOiBTUElLRS1hZ2VudC1zZWxmdXBkYXRlLTIwMjYtMDctMDUgKGl0cyBTRi1maW5kaW5ncyBhcmUgY2l0ZWQgaW5saW5lKS4gVGhlIGNvcmUKIyBwcmluY2lwbGU6IHRoZSB0aGluZyB0aGF0IHBlcmZvcm1zIHJvbGxiYWNrIGlzIG5ldmVyIHRoZSB0aGluZyBiZWluZyB1cGRhdGVkIOKAlCB0aGlzIHdyYXBwZXIgKwojIHN5c3RlbWQgY2hhbmdlIGFsbW9zdCBuZXZlcjsgdGhlIGFnZW50IGJpbmFyeSBpcyB3aGF0IGZsaXBzLgojCiMgVHJ1c3QgbW9kZWw6IHRoZSBhZ2VudCB2ZXJpZmllcyB0aGUgZG93bmxvYWQgYWdhaW5zdCB0aGUgT1BFUkFUT1ItU0lHTkVEIHNoYSBiZWZvcmUgc3RhZ2luZzsgdGhpcwojIHdyYXBwZXIgUkUtdmVyaWZpZXMgdGhlIHNhbWUgc2hhIGFzIHJvb3QgKGRlZmVuc2UgaW4gZGVwdGgg4oCUIHRoZSBzdWRvZXJzIGFyZyBnbG9iIGlzIGNvYXJzZSwgdGhlCiMgc2hhIGNoZWNrIGhlcmUgaXMgdGhlIHJlYWwgZ2F0ZSkuIFBhdGggY29uZmluZW1lbnQ6IGFwcGx5IG9ubHkgZXZlciByZWFkcyBmcm9tIHRoZSBhZ2VudCdzIG93bgojIHN0YWdpbmcgZGlyIGFuZCBvbmx5IGV2ZXIgd3JpdGVzIHRoZSBmaXhlZCBsaXZlIHBhdGggKyBpdHMgc2libGluZ3MuIE5PIGVudi1vdmVycmlkYWJsZSBwYXRocyDigJQKIyBwYXRoLWZpeGVkbmVzcyBJUyB0aGUgc2VjdXJpdHkgcHJvcGVydHkgKGEgdGVzdC1tb2RlIG92ZXJyaWRlIHdvdWxkIGJlIGEgcm9vdCBlc2NhbGF0aW9uIGhvbGUpLgojCiMgVmVyYnM6CiMgICBhcHBseSA8c3RhZ2VkPiA8c2hhMjU2PiAgc3RhZ2UtdmVyaWZ5IOKGkiAucHJldiDihpIgYXRvbWljIGZsaXAg4oaSIHBlbmRpbmcgbWFya2VyIOKGkiBkZXRhY2hlZCByZXN0YXJ0CiMgICBjb21taXQgICAgICAgICAgICAgICAgICAgY2xlYXIgdGhlIHBlbmRpbmcgbWFya2VyIChpZGVtcG90ZW50OyAucHJldiByZXRhaW5lZCBhcyBhIG1hbnVhbCBuZXQpCiMgICByb2xsYmFjayAgICAgICAgICAgICAgICAgcGVuZGluZy1ndWFyZGVkIHJldmVydCB0byAucHJldiArIHJlc3RhcnQgKG5vIHBlbmRpbmcg4oaSIGV4aXQgMCBuby1vcCkKc2V0IC11CgpCSU49L3Vzci9sb2NhbC9iaW4vZmVsaG9tLWFnZW50ClBSRVY9JEJJTi5wcmV2ClNUQUdJTkc9L3Zhci9saWIvZmVsaG9tLWFnZW50L3NlbGZ1cGRhdGUKUEVORElORz0kU1RBR0lORy9wZW5kaW5nLmpzb24KVU5JVD1mZWxob20tYWdlbnQuc2VydmljZQoKIyBFdmVyeSByZWZ1c2FsL2RlY2lzaW9uIGdvZXMgdG8gc3RkZXJyIEFORCB0aGUgam91cm5hbCAoc3RyaWN0IHJ1bGUgMTApLgpsb2coKSB7IGVjaG8gImZlbGhvbS1zZWxmdXBkYXRlLWd1YXJkZWQ6ICQqIiA+JjI7IGxvZ2dlciAtdCBmZWxob20tc2VsZnVwZGF0ZS1ndWFyZGVkIC0tICIkKiIgMj4vZGV2L251bGwgfHwgdHJ1ZTsgfQoKY2FzZSAiJHsxOi19IiBpbgoKYXBwbHkpCiAgICBzdGFnZWQ9JHsyOi19OyB3YW50PSR7MzotfQogICAgIyBbU0YtN10gZW50cnkgc3dlZXA6IGEga2lsbCBiZXR3ZWVuIHN0YWdpbmctY29weSBhbmQgbXYgbGVhdmVzIGFuIG9ycGhhbmVkIHRlbXAg4oCUIGhhcm1sZXNzLAogICAgIyBidXQgc3dlZXAgaXQgc28gdGVtcHMgY2FuIG5ldmVyIGFjY3VtdWxhdGUuCiAgICBybSAtZiAiJEJJTiIubmV3LioKCiAgICBpZiBbIC16ICIkc3RhZ2VkIiBdIHx8IFsgLXogIiR3YW50IiBdOyB0aGVuCiAgICAgICAgbG9nICJyZWZ1c2luZyBhcHBseTogdXNhZ2U6IGFwcGx5IDxzdGFnZWQ+IDxzaGEyNTY+IgogICAgICAgIGV4aXQgMgogICAgZmkKICAgICMgUm9vdC1zaWRlIHBhdGggY29uZmluZW1lbnQ6IHRoZSBzdGFnZWQgYmluYXJ5IE1VU1QgbGl2ZSBpbiB0aGUgYWdlbnQncyBzdGFnaW5nIGRpci4KICAgIGNhc2UgIiRzdGFnZWQiIGluCiAgICAgICAgIiRTVEFHSU5HIi8qKSA7OwogICAgICAgICopIGxvZyAicmVmdXNpbmcgYXBwbHk6IHN0YWdlZCBwYXRoIG91dHNpZGUgJFNUQUdJTkc6ICRzdGFnZWQiOyBleGl0IDEgOzsKICAgIGVzYWMKICAgIGNhc2UgIiRzdGFnZWQiIGluCiAgICAgICAgKi4uKikgbG9nICJyZWZ1c2luZyBhcHBseTogc3RhZ2VkIHBhdGggY29udGFpbnMgJy4uJyI7IGV4aXQgMSA7OwogICAgZXNhYwogICAgWyAtZiAiJHN0YWdlZCIgXSB8fCB7IGxvZyAicmVmdXNpbmcgYXBwbHk6IHN0YWdlZCBmaWxlIG1pc3Npbmc6ICRzdGFnZWQiOyBleGl0IDE7IH0KICAgICMgVGhlIHNoYSBtdXN0IGJlIDY0IGxvd2VyY2FzZSBoZXggY2hhcnMg4oCUIGFueXRoaW5nIGVsc2UgaXMgcmVmdXNlZCBiZWZvcmUgYW55IGhhc2hpbmcuCiAgICBjYXNlICIkd2FudCIgaW4KICAgICAgICAqWyEwLTlhLWZdKikgbG9nICJyZWZ1c2luZyBhcHBseTogc2hhMjU2IGlzIG5vdCBsb3dlcmNhc2UgaGV4IjsgZXhpdCAxIDs7CiAgICBlc2FjCiAgICBbICIkeyN3YW50fSIgLWVxIDY0IF0gfHwgeyBsb2cgInJlZnVzaW5nIGFwcGx5OiBzaGEyNTYgbXVzdCBiZSA2NCBoZXggY2hhcnMgKGdvdCAkeyN3YW50fSkiOyBleGl0IDE7IH0KCiAgICAjIFtTRi03XSBzaGEtdmVyaWZ5IEZJUlNUIOKAlCBiZWZvcmUgLnByZXYsIGJlZm9yZSBhbnkgbXV0YXRpb24gKHNwaWtlIFMzYSBjb21wYW5pb24gb3JkZXJpbmcpLgogICAgZ290PSQoc2hhMjU2c3VtICIkc3RhZ2VkIiB8IGF3ayAne3ByaW50ICQxfScpCiAgICBpZiBbICIkZ290IiAhPSAiJHdhbnQiIF07IHRoZW4KICAgICAgICBsb2cgInJlZnVzaW5nIGFwcGx5OiBzaGEgbWlzbWF0Y2ggKGdvdD0kZ290IHdhbnQ9JHdhbnQpIgogICAgICAgIGV4aXQgMQogICAgZmkKCiAgICAjIFNhbWUtZnMgYXNzZXJ0ICjCpzgpOiB0aGUgYXRvbWljLXJlbmFtZSBndWFyYW50ZWUgb25seSBob2xkcyB3aXRoaW4gb25lIGZpbGVzeXN0ZW0uCiAgICBpZiBbICIkKHN0YXQgLWMgJWQgIiRzdGFnZWQiKSIgIT0gIiQoc3RhdCAtYyAlZCAvdXNyL2xvY2FsL2JpbikiIF07IHRoZW4KICAgICAgICBsb2cgInJlZnVzaW5nIGFwcGx5OiBzdGFnaW5nIGFuZCAvdXNyL2xvY2FsL2JpbiBhcmUgb24gZGlmZmVyZW50IGZpbGVzeXN0ZW1zIOKAlCBhdG9taWMgcmVuYW1lIGltcG9zc2libGUiCiAgICAgICAgZXhpdCAxCiAgICBmaQoKICAgIG9sZF92ZXI9JCgiJEJJTiIgLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgYXdrICd7cHJpbnQgJDJ9JykKICAgIFsgLW4gIiRvbGRfdmVyIiBdIHx8IG9sZF92ZXI9dW5rbm93bgogICAgIyBUaGUgc3RhZ2VkIGZpbGVuYW1lIGlzIGZlbGhvbS1hZ2VudC08dmVyc2lvbj4gKGV4ZWN1dG9yIGNvbnRyYWN0KSDigJQgdmVyc2lvbiB3aXRob3V0IGV4ZWN1dGluZy4KICAgIG5ld192ZXI9JChiYXNlbmFtZSAiJHN0YWdlZCIpOyBuZXdfdmVyPSR7bmV3X3ZlciNmZWxob20tYWdlbnQtfQoKICAgIGNwIC1wICIkQklOIiAiJFBSRVYiIHx8IHsgbG9nICJhcHBseSBmYWlsZWQ6IGNhbm5vdCBzbmFwc2hvdCBjdXJyZW50IGJpbmFyeSB0byAucHJldiI7IGV4aXQgMTsgfQogICAgIyBTdGFnZSBhIHJvb3Qtb3duZWQgMDc1NSBjb3B5IG5leHQgdG8gdGhlIGxpdmUgcGF0aCwgdGhlbiBBVE9NSUMgc2FtZS1mcyByZW5hbWUuCiAgICBpZiAhIGNwICIkc3RhZ2VkIiAiJEJJTi5uZXcuJCQiIHx8ICEgY2htb2QgMDc1NSAiJEJJTi5uZXcuJCQiIHx8ICEgY2hvd24gcm9vdDpyb290ICIkQklOLm5ldy4kJCI7IHRoZW4KICAgICAgICBybSAtZiAiJEJJTi5uZXcuJCQiOyBsb2cgImFwcGx5IGZhaWxlZDogc3RhZ2luZyBjb3B5IjsgZXhpdCAxCiAgICBmaQogICAgbXYgIiRCSU4ubmV3LiQkIiAiJEJJTiIgfHwgeyBybSAtZiAiJEJJTi5uZXcuJCQiOyBsb2cgImFwcGx5IGZhaWxlZDogYXRvbWljIHJlbmFtZSI7IGV4aXQgMTsgfQoKICAgICMgUGVuZGluZyBtYXJrZXI6IHdyaXR0ZW4gQUZURVIgdGhlIGZsaXAg4oCUIGl0cyBleGlzdGVuY2UgbWVhbnMgImFuIHVwZGF0ZSBpcyBhd2FpdGluZyBjb21taXQiLAogICAgIyB3aGljaCBpcyBleGFjdGx5IHRoZSByb2xsYmFjayB1bml0J3MgdHJpZ2dlciBjb25kaXRpb24uCiAgICBwcmludGYgJ3sib2xkX3ZlcnNpb24iOiIlcyIsIm5ld192ZXJzaW9uIjoiJXMiLCJzaGEyNTYiOiIlcyIsImFwcGxpZWRfYXQiOiIlcyJ9XG4nIFwKICAgICAgICAiJG9sZF92ZXIiICIkbmV3X3ZlciIgIiR3YW50IiAiJChkYXRlIC1JcykiID4gIiRQRU5ESU5HIiBcCiAgICAgICAgfHwgeyBsb2cgImFwcGx5IGZhaWxlZDogY2Fubm90IHdyaXRlIHBlbmRpbmcgbWFya2VyIjsgZXhpdCAxOyB9CgogICAgIyBbU0YtNC81XSBkZWxpYmVyYXRlIHJlc3RhcnRzIGNvbnN1bWUgc3RhcnQtbGltaXQgYnVkZ2V0IOKAlCBjbGVhciB0aGUgY291bnRlciBmaXJzdC4KICAgIHN5c3RlbWN0bCByZXNldC1mYWlsZWQgIiRVTklUIiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICAjIFtTRi02XSB0aGUgc3Bpa2UncyBTMmIgd2lubmVyLCB2ZXJiYXRpbTogZGV0YWNoZWQgdHJhbnNpZW50IHRpbWVyIE9VVFNJREUgdGhlIGFnZW50J3MgY2dyb3VwLAogICAgIyBzbyB0aGUgc3Vkby9hZ2VudCBjYWxsZXIgc3Vydml2ZXMgdG8gbG9nIHRoZSBoYW5kb2ZmIGFuZCB0aGUgcmVzdGFydCBjYW5ub3QgYmUgdG9ybiBkb3duCiAgICAjIGJ5IGl0cyBvd24gcmVxdWVzdGVyIGR5aW5nLgogICAgc3lzdGVtZC1ydW4gLS1vbi1hY3RpdmU9MnMgLS10aW1lci1wcm9wZXJ0eT1BY2N1cmFjeVNlYz0xMDBtcyBzeXN0ZW1jdGwgcmVzdGFydCAiJFVOSVQiIFwKICAgICAgICB8fCB7IGxvZyAiYXBwbHk6IGZsaXAgZG9uZSBidXQgZGV0YWNoZWQgcmVzdGFydCBzY2hlZHVsaW5nIEZBSUxFRCDigJQgcmVzdGFydCAkVU5JVCBtYW51YWxseSI7IGV4aXQgMTsgfQogICAgbG9nICJhcHBsaWVkICRuZXdfdmVyIChwcmV2ICRvbGRfdmVyLCBzaGEgJHdhbnQpOyBkZXRhY2hlZCByZXN0YXJ0IHNjaGVkdWxlZCIKICAgIDs7Cgpjb21taXQpCiAgICBpZiBbICEgLWYgIiRQRU5ESU5HIiBdOyB0aGVuCiAgICAgICAgbG9nICJjb21taXQ6IG5vIHBlbmRpbmcg4oCUIG5vLW9wIgogICAgICAgIGV4aXQgMAogICAgZmkKICAgICMgLnByZXYgaXMgZGVsaWJlcmF0ZWx5IFJFVEFJTkVEIChzcGlrZSBTM2QpIOKAlCBhIG1hbnVhbCBzYWZldHkgbmV0IHVudGlsIHRoZSBuZXh0IGFwcGx5LgogICAgcm0gLWYgIiRQRU5ESU5HIiB8fCB7IGxvZyAiY29tbWl0IGZhaWxlZDogY2Fubm90IHJlbW92ZSBwZW5kaW5nIG1hcmtlciI7IGV4aXQgMTsgfQogICAgbG9nICJjb21taXR0ZWQgKHBlbmRpbmcgY2xlYXJlZCwgLnByZXYgcmV0YWluZWQpIgogICAgOzsKCnJvbGxiYWNrKQogICAgIyBbU0YtMV0gT24gc3lzdGVtZCAyNTcgT25GYWlsdXJlPSBmaXJlcyBvbiBFVkVSWSBjcmFzaCwgc28gdGhpcyB2ZXJiIHJ1bnMgTUFOWSB0aW1lcyBwZXIKICAgICMgaW5jaWRlbnQg4oCUIHRoZSBwZW5kaW5nLWd1YXJkIG1ha2VzIGV2ZXJ5IGZpcmUgYWZ0ZXIgdGhlIGZpcnN0IGEgaGFybWxlc3Mgbm8tb3AsIGFuZCBtYWtlcyBhCiAgICAjIGNyYXNoIHdpdGggTk8gdXBkYXRlIGluIGZsaWdodCB0b3VjaCBub3RoaW5nIGF0IGFsbCAoc3Bpa2UgUzFkL1MzZSkuCiAgICBpZiBbICEgLWYgIiRQRU5ESU5HIiBdOyB0aGVuCiAgICAgICAgbG9nICJyb2xsYmFjazogbm8gcGVuZGluZyB1cGRhdGUg4oCUIG5vLW9wIgogICAgICAgIGV4aXQgMAogICAgZmkKICAgIFsgLWYgIiRQUkVWIiBdIHx8IHsgbG9nICJyb2xsYmFjayBGQUlMRUQ6IHBlbmRpbmcgZXhpc3RzIGJ1dCBubyAucHJldiBiaW5hcnkiOyBleGl0IDE7IH0KICAgIHJtIC1mICIkQklOIi5uZXcuKgogICAgaWYgISBjcCAiJFBSRVYiICIkQklOLm5ldy4kJCIgfHwgISBjaG1vZCAwNzU1ICIkQklOLm5ldy4kJCIgfHwgISBjaG93biByb290OnJvb3QgIiRCSU4ubmV3LiQkIjsgdGhlbgogICAgICAgIHJtIC1mICIkQklOLm5ldy4kJCI7IGxvZyAicm9sbGJhY2sgRkFJTEVEOiBzdGFnaW5nIGNvcHkiOyBleGl0IDEKICAgIGZpCiAgICBtdiAiJEJJTi5uZXcuJCQiICIkQklOIiB8fCB7IHJtIC1mICIkQklOLm5ldy4kJCI7IGxvZyAicm9sbGJhY2sgRkFJTEVEOiBhdG9taWMgcmVuYW1lIjsgZXhpdCAxOyB9CiAgICAjIENsZWFyIHBlbmRpbmcgQkVGT1JFIHRoZSByZXN0YXJ0OiBvbmNlIHRoZSBiaW5hcnkgaXMgcmV2ZXJ0ZWQsIGxhdGVyIE9uRmFpbHVyZSBmaXJlcyBtdXN0CiAgICAjIG5vLW9wICh0aGUgZ3VhcmQgYWJvdmUpIGluc3RlYWQgb2YgcmUtY29weWluZyAucHJldiBmb3JldmVyLgogICAgcm0gLWYgIiRQRU5ESU5HIgogICAgIyBbU0YtNC81XSB0aGUgY3Jhc2ggYnVyc3QgaGFzIGJlZW4gZWF0aW5nIHRoZSBzdGFydC1saW1pdCBidWRnZXQg4oCUIHJlc2V0IGJlZm9yZSBzdGFydGluZy4KICAgIHN5c3RlbWN0bCByZXNldC1mYWlsZWQgIiRVTklUIiAyPi9kZXYvbnVsbCB8fCB0cnVlCiAgICAjIERpcmVjdCByZXN0YXJ0IGlzIGNvcnJlY3QgSEVSRTogdGhpcyBjYWxsZXIgaXMgdGhlIHJvbGxiYWNrIG9uZXNob3QsIE9VVFNJREUgdGhlIGFnZW50IGNncm91cC4KICAgIHN5c3RlbWN0bCByZXN0YXJ0ICIkVU5JVCIgfHwgeyBsb2cgInJvbGxiYWNrOiBiaW5hcnkgcmV2ZXJ0ZWQgYnV0IHJlc3RhcnQgRkFJTEVEIjsgZXhpdCAxOyB9CiAgICBsb2cgInJvbGxlZCBiYWNrIHRvIHByZXZpb3VzIGJpbmFyeSBhbmQgcmVzdGFydGVkICRVTklUIgogICAgOzsKCiopCiAgICBsb2cgInVzYWdlOiBmZWxob20tc2VsZnVwZGF0ZS1ndWFyZGVkIGFwcGx5IDxzdGFnZWQ+IDxzaGEyNTY+IHwgY29tbWl0IHwgcm9sbGJhY2siCiAgICBleGl0IDIKICAgIDs7CmVzYWMK",
   "mode": "0o755",
   "path": "/usr/local/sbin/felhom-selfupdate-guarded",
   "policy": "replace",
   "sha256": "ac568dbfa5af874179696152689410f4b65e3fba69a0108e47f5472ca72f23fe",
   "source": "configs/felhom-selfupdate-guarded"
  },
  {
   "check": "bash",
   "content_b64": "IyEvYmluL2Jhc2gKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBmZWxob20tcGJzLWFwcGx5IOKAlCB0aGUgT05MWSBzdG9yYWdlLWVudHJ5IHBhdGggdGhlIGZlbGhvbS1hZ2VudCBzdWRvZXJzIHBlcm1pdHMgZm9yIHRoZSBQQlMgRFIKIyB0aWVyIChzbGljZSAyOyBTUElLRS1wYnMtdGllci1wcm92aXNpb25pbmctMjAyNi0wNy0xMCDCpzJiKS4gVGhlIGd1YXJkZWQtbWtmcyBzaGFwZTogdGhlIGFnZW50J3MKIyBpbi1wcm9jZXNzIHZhbGlkYXRpb24gaXMgdGhlIFBSSU1BUlkgZ2F0ZSAoZGVzY3JpcHRvci1maWVsZCBjaGFyc2V0ICsgZXF1YWxpdHkgY2hlY2tzIEJFRk9SRQojIGV4ZWMpOyB0aGlzIHdyYXBwZXIgaXMgdGhlIG1pbmltYWwsIGF1ZGl0YWJsZSBzZWNvbmQgZ2F0ZSBhcyByb290LgojCiMgVEhFIFNFVC1PTkxZIExBVyAoc3Bpa2Ugwqc0LCBkYXRhLWxvc3MgY2xhc3MpOiBgcHZlc21gIGVudHJ5IGRlbGV0aW9uIERFU1RST1lTIHRoZSBjbGllbnQKIyBlbmNyeXB0aW9uIGtleSBmaWxlICg8aWQ+LmVuYyA9IEspIOKAlCB1bi1kZWNyeXB0YWJsZSBiYWNrdXBzLiBUaGlzIHdyYXBwZXIgdGhlcmVmb3JlIGNvbnRhaW5zCiMgTk8gZGVsZXRpb24gcGF0aCBvZiBhbnkga2luZCwgYW5kIGEgcmUtYXBwbHkgaXMgYHB2ZXNtIHNldGAtb25seS4gR3JlcC1hc3NlcnRhYmxlOyBkbyBub3QgYWRkCiMgYSAiY2xlYW51cCIgdmVyYiBoZXJlLCBldmVyLiBEZXByb3Zpc2lvbiBpcyBhIGRlbGliZXJhdGUgZnV0dXJlIG9wZXJhdG9yIG9wLCBub3QgdGhpcyB0b29sLgojCiMgU0VDUkVUIERJU0NJUExJTkUgKHNwaWtlIMKnMmIpOiBzdWRvIGxvZ3MgaXRzIGZ1bGwgYXJndiB0byBhdXRoLmxvZyDihpIgdGhlIFBCUyB0b2tlbiBzZWNyZXQKIyBhcnJpdmVzIG9uIFNURElOLCBuZXZlciBhcyBhbiBhcmd1bWVudCB0byB0aGlzIHdyYXBwZXIuIEluc2lkZSwgaXQgaXMgcGFzc2VkIHRvIHB2ZXNtJ3MKIyAtLXBhc3N3b3JkIChyb290LWxvY2FsLCB0cmFuc2llbnQgcHMgZXhwb3N1cmUg4oCUIHRoZSBhY2NlcHRlZCBzcGlrZSBwb3N0dXJlKTsgaXQgaXMgbmV2ZXIKIyBlY2hvZWQsIG5ldmVyIHdyaXR0ZW4gYW55d2hlcmUgZXhjZXB0IGJ5IHB2ZXNtIGl0c2VsZiAodGhlIDA2MDAgLnB3IHN0b3JlKS4KIwojIE9wcyAobm9uLXNlY3JldCBhcmdzIG9uIGFyZ3YpOgojICAgY3JlYXRlICAgIDxpZD4gPHNlcnZlcj4gPGRhdGFzdG9yZT4gPG5hbWVzcGFjZT4gPHRva2VuLWlkPiA8ZmluZ2VycHJpbnQ+IDxzZWNyZXQtZGlyPgojICAgICAgICAgICAgIHNlY3JldCBvbiBzdGRpbiAocmVxdWlyZWQpLiBDcmVhdGVzIHRoZSBwYnMgZW50cnkgd2l0aCAtLWVuY3J5cHRpb24ta2V5IGF1dG9nZW4KIyAgICAgICAgICAgICAoSyBib3JuIGF0IC9ldGMvcHZlL3ByaXYvc3RvcmFnZS88aWQ+LmVuYyksIHRoZW4gcGxhY2VzIC5wdy8uZW5jIGNvcGllcyBpbgojICAgICAgICAgICAgIDxzZWNyZXQtZGlyPiB3aGVuIGl0IGRpZmZlcnMgKHRoZSDCpzRiIFdBUk4tZml4IGRpcjsgZXNjcm93LWNyZWF0ZSdzIFBCU0VuY0tleVBhdGgKIyAgICAgICAgICAgICBtdXN0IGZpbmQgSyB0aGVyZSDigJQgc3Bpa2Ugwqc0IGZsYWcpLgojICAgcmVjb25jaWxlIDxpZD4gPHNlcnZlcj4gPG5hbWVzcGFjZT4gPHRva2VuLWlkPiA8ZmluZ2VycHJpbnQ+IDxzZWNyZXQtZGlyPgojICAgICAgICAgICAgIHNlY3JldCBvbiBzdGRpbiAob3B0aW9uYWw7IGVtcHR5ID0gbm8gY3JlZGVudGlhbCBjaGFuZ2UpLiBgcHZlc20gc2V0YCBPTkxZOgojICAgICAgICAgICAgIHNlcnZlci9maW5nZXJwcmludCAoKyAtLXBhc3N3b3JkIHdoZW4gYSBzZWNyZXQgaXMgZmVkLCBlLmcuIGFmdGVyIGEgaHViIHJlLWlzc3VlKS4KIyAgICAgICAgICAgICBOT1RFIGRhdGFzdG9yZSBpcyBkZWxpYmVyYXRlbHkgTk9UIHNldHRhYmxlLCBhbmQgbmFtZXNwYWNlL3Rva2VuLWlkIGFyZSBhY2NlcHRlZAojICAgICAgICAgICAgIGZvciB2YWxpZGF0aW9uIHBhcml0eSBidXQgTk9UIGFwcGxpZWQg4oCUIHRlbmFuY3kgaWRlbnRpdHkgaXMgYWRvcHQtb25seSAodGhlCiMgICAgICAgICAgICAgZGVtbydzIGxpdmUgZW50cnkgbXVzdCBuZXZlciBiZSByZXBvaW50ZWQgYXQgYSBkaWZmZXJlbnQgbmFtZXNwYWNlKS4KIyAgIHJlYWQgICAgICA8aWQ+IDxzZWNyZXQtZGlyPgojICAgICAgICAgICAgIFItMzkgbGVnIChiKTogcHJpbnQgdGhlIHN0b3JhZ2UncyB0b2tlbiBzZWNyZXQgdG8gU1RET1VUIGFuZCBub3RoaW5nIGVsc2UuCiMgICAgICAgICAgICAgVGhlIG5vbi1yb290IGFnZW50IFdSSVRFUyB0aGlzIGZpbGUgdGhyb3VnaCB0aGlzIHdyYXBwZXIgYnV0IGNvdWxkIG5ldmVyIHJlYWQgaXQKIyAgICAgICAgICAgICBiYWNrICgvZXRjL3B2ZS9wcml2IGlzIDA3MDAgcm9vdDp3d3ctZGF0YSBhbmQgdGhlcmUgaXMgbm8gcmVhZCB2ZXJiKSwgc28gaXRzCiMgICAgICAgICAgICAgMTUtbWludXRlIFBCUyB2ZXJpZnkgbG9vcCB3YXMgcGVybWFuZW50bHkgYmxpbmQgdG8gdGhlIG9uZSBmYWlsdXJlIGl0IGV4aXN0cyB0bwojICAgICAgICAgICAgIGNhdGNoIOKAlCBhbiBgYXBwbGllZGAgdGllciBhdXRoZW50aWNhdGluZyA0MDEuIFRoaXMgdmVyYiBpcyB0aGF0IG1pc3NpbmcgcmVhZC4KIyAgICAgICAgICAgICBJdCBpcyBkZWxpYmVyYXRlbHkgdGhlIG5hcnJvd2VzdCB0aGluZyB0aGF0IHdvcmtzOiBubyBuZXR3b3JrLCBubyBtdXRhdGlvbiwgbm8KIyAgICAgICAgICAgICBsb2dnaW5nIG9mIHRoZSB2YWx1ZSwgb25lIGZpbGUsIHByZWZpeC1hc3NlcnRlZCB1bmRlciB0aGUgZ2l2ZW4gc2VjcmV0IGRpci4KIwojICAgZ3JhbnQgICAgIDxpZD4KIyAgICAgICAgICAgICBUaGUgUGFydC0wLWV2aWRlbmNlZCBkdWFsLWdyYW50OiBGZWxob21BZ2VudFN0b3JlIG9uIC9zdG9yYWdlLzxpZD4gdG8gdGhlIGFnZW50CiMgICAgICAgICAgICAgdXNlciBBTkQgdG9rZW4gKHByaXZzZXAgaW50ZXJzZWN0aW9uKS4gRGF0YXN0b3JlLkF1ZGl0IHJlYWRzIHJpZGUgdGhlIGJhc2Ugcm9sZS4KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc2V0IC1ldW8gcGlwZWZhaWwKCmRpZSgpIHsgZWNobyAiZmVsaG9tLXBicy1hcHBseTogUkVGVVNFRDogJCoiID4mMjsgZXhpdCAxOyB9CgpvcD0iJHsxOi19IjsgaWQ9IiR7MjotfSIKW1sgLW4gIiRvcCIgJiYgLW4gIiRpZCIgXV0gfHwgZGllICJ1c2FnZTogZmVsaG9tLXBicy1hcHBseSA8Y3JlYXRlfHJlY29uY2lsZXxncmFudHxyZWFkPiA8c3RvcmFnZS1pZD4gLi4uIgoKIyBTdG9yYWdlIGlkOiBQVkUgZ3JhbW1hciwgY29uc2VydmF0aXZlLiBBbHNvIHRoZSBBQ0wgcGF0aCBjb21wb25lbnQg4oCUIG5vIHNsYXNoZXMgcG9zc2libGUuCltbICIkaWQiID1+IF5bQS1aYS16XVtBLVphLXowLTlfLi1dezAsMjd9JCBdXSB8fCBkaWUgImJhZCBzdG9yYWdlIGlkICgkaWQpIgoKU1RPUkVDRkc9L2V0Yy9wdmUvc3RvcmFnZS5jZmcKUFJJVkRJUj0vZXRjL3B2ZS9wcml2L3N0b3JhZ2UKCmVudHJ5X2V4aXN0cygpIHsgZ3JlcCAtRXEgIl5wYnM6ICR7aWR9XCQiICIkU1RPUkVDRkciOyB9Cgp2YWxfc2VydmVyKCkgICAgeyBbWyAiJDEiID1+IF5bQS1aYS16MC05XVtBLVphLXowLTkuLV17MCw2Mn0kIF1dIHx8IGRpZSAiYmFkIHNlcnZlciAoJDEpIjsgfQp2YWxfZGF0YXN0b3JlKCkgeyBbWyAiJDEiID1+IF5bQS1aYS16MC05XVtBLVphLXowLTlfLi1dezAsMzF9JCBdXSB8fCBkaWUgImJhZCBkYXRhc3RvcmUgKCQxKSI7IH0KdmFsX25zKCkgICAgICAgIHsgW1sgIiQxIiA9fiBeW0EtWmEtejAtOV1bQS1aYS16MC05Xy4tXXswLDMxfSQgXV0gfHwgZGllICJiYWQgbmFtZXNwYWNlICgkMSkiOyB9CnZhbF90b2soKSAgICAgICB7IFtbICIkMSIgPX4gXltBLVphLXowLTlfLi1dK0BbQS1aYS16MC05XSshW0EtWmEtejAtOV8uLV0rJCBdXSB8fCBkaWUgImJhZCB0b2tlbiBpZCAoJDEpIjsgfQp2YWxfZnAoKSAgICAgICAgeyBbWyAiJDEiID1+IF4oW0EtRmEtZjAtOV17Mn06KXszMX1bQS1GYS1mMC05XXsyfSQgXV0gfHwgZGllICJiYWQgZmluZ2VycHJpbnQiOyB9CnZhbF9zZGlyKCkgewogIGNhc2UgIiQxIiBpbgogICAgL2V0Yy9wdmUvcHJpdi9zdG9yYWdlKSA6IDs7CiAgICAvdmFyL2xpYi9mZWxob20tYWdlbnQvKikgW1sgIiQxIiAhPSAqLi4qIF1dIHx8IGRpZSAic2VjcmV0LWRpciB0cmF2ZXJzYWwiIDs7CiAgICAqKSBkaWUgInNlY3JldC1kaXIgbXVzdCBiZSAkUFJJVkRJUiBvciB1bmRlciAvdmFyL2xpYi9mZWxob20tYWdlbnQgKCQxKSIgOzsKICBlc2FjCn0KCnJlYWRfc2VjcmV0KCkgeyAjIOKGkiBTRUNSRVQgKG1heSBiZSBlbXB0eSB3aGVuIG9wdGlvbmFsKQogIGxvY2FsIHMKICBzPSQoaGVhZCAtYyAyNTYgfHwgdHJ1ZSkKICBzPSIke3MlJCdcbid9Ijsgcz0iJHtzJSQnXHInfSIKICBwcmludGYgJyVzJyAiJHMiCn0KCnBsYWNlX2NvcGllcygpIHsgIyBzZWNyZXQtZGlyIOKAlCB0aGUgwqc0YiBXQVJOLWZpeCBwbGFjZW1lbnQgKG5vbi1yb290IGFnZW50IGNhbid0IHJlYWQgL2V0Yy9wdmUvcHJpdikKICBsb2NhbCBzZGlyPSIkMSIKICBbWyAiJHNkaXIiID09ICIkUFJJVkRJUiIgXV0gJiYgcmV0dXJuIDAKICBpbnN0YWxsIC1kIC1vIGZlbGhvbS1hZ2VudCAtZyBmZWxob20tYWdlbnQgLW0gMDcwMCAiJHNkaXIiCiAgW1sgLWYgIiRQUklWRElSLyRpZC5wdyIgXV0gJiYgaW5zdGFsbCAtbyBmZWxob20tYWdlbnQgLWcgZmVsaG9tLWFnZW50IC1tIDA2MDAgIiRQUklWRElSLyRpZC5wdyIgIiRzZGlyLyRpZC5wdyIKICAjIEsncyBjb3B5OiBlc2Nyb3ctY3JlYXRlIHN0YXRzIFBCU0VuY0tleVBhdGgoPHNlY3JldC1kaXI+LzxpZD4uZW5jKSDigJQgdGhlIHNwaWtlIMKnNCBmbGFnLgogIFtbIC1mICIkUFJJVkRJUi8kaWQuZW5jIiBdXSAmJiBpbnN0YWxsIC1vIHJvb3QgLWcgZmVsaG9tLWFnZW50IC1tIDA2NDAgIiRQUklWRElSLyRpZC5lbmMiICIkc2Rpci8kaWQuZW5jIgogIHJldHVybiAwCn0KCmNhc2UgIiRvcCIgaW4KY3JlYXRlKQogIFtbICQjIC1lcSA4IF1dIHx8IGRpZSAiY3JlYXRlIG5lZWRzIDcgYXJnczogPGlkPiA8c2VydmVyPiA8ZGF0YXN0b3JlPiA8bmFtZXNwYWNlPiA8dG9rZW4taWQ+IDxmaW5nZXJwcmludD4gPHNlY3JldC1kaXI+IgogIHNlcnZlcj0iJDMiOyBkYXRhc3RvcmU9IiQ0IjsgbnM9IiQ1IjsgdG9rPSIkNiI7IGZwPSIkNyI7IHNkaXI9IiQ4IgogIHZhbF9zZXJ2ZXIgIiRzZXJ2ZXIiOyB2YWxfZGF0YXN0b3JlICIkZGF0YXN0b3JlIjsgdmFsX25zICIkbnMiOyB2YWxfdG9rICIkdG9rIjsgdmFsX2ZwICIkZnAiOyB2YWxfc2RpciAiJHNkaXIiCiAgZW50cnlfZXhpc3RzICYmIGRpZSAiZW50cnkgJGlkIGFscmVhZHkgZXhpc3RzIChyZWNvbmNpbGUgaXMgdGhlIHJlLWFwcGx5IHBhdGgg4oCUIHNldC1vbmx5IGxhdykiCiAgU0VDUkVUPSQocmVhZF9zZWNyZXQpCiAgW1sgLW4gIiRTRUNSRVQiIF1dIHx8IGRpZSAiY3JlYXRlIHJlcXVpcmVzIHRoZSB0b2tlbiBzZWNyZXQgb24gc3RkaW4iCiAgcHZlc20gYWRkIHBicyAiJGlkIiBcCiAgICAtLXNlcnZlciAiJHNlcnZlciIgLS1kYXRhc3RvcmUgIiRkYXRhc3RvcmUiIC0tbmFtZXNwYWNlICIkbnMiIFwKICAgIC0tdXNlcm5hbWUgIiR0b2siIC0tcGFzc3dvcmQgIiRTRUNSRVQiIC0tZmluZ2VycHJpbnQgIiRmcCIgXAogICAgLS1jb250ZW50IGJhY2t1cCAtLWVuY3J5cHRpb24ta2V5IGF1dG9nZW4gPiYyCiAgW1sgLWYgIiRQUklWRElSLyRpZC5lbmMiIF1dIHx8IGRpZSAicHZlc20gYWRkIHN1Y2NlZWRlZCBidXQgSyAoJFBSSVZESVIvJGlkLmVuYykgd2FzIG5vdCBib3JuIgogIHBsYWNlX2NvcGllcyAiJHNkaXIiCiAgZWNobyAiZmVsaG9tLXBicy1hcHBseTogY3JlYXRlZCAkaWQgKEsgYm9ybjsgZW5jcnlwdGlvbi1rZXkgYXV0b2dlbikiID4mMgogIDs7CnJlY29uY2lsZSkKICBbWyAkIyAtZXEgNyBdXSB8fCBkaWUgInJlY29uY2lsZSBuZWVkcyA2IGFyZ3M6IDxpZD4gPHNlcnZlcj4gPG5hbWVzcGFjZT4gPHRva2VuLWlkPiA8ZmluZ2VycHJpbnQ+IDxzZWNyZXQtZGlyPiIKICBzZXJ2ZXI9IiQzIjsgbnM9IiQ0IjsgdG9rPSIkNSI7IGZwPSIkNiI7IHNkaXI9IiQ3IgogIHZhbF9zZXJ2ZXIgIiRzZXJ2ZXIiOyB2YWxfbnMgIiRucyI7IHZhbF90b2sgIiR0b2siOyB2YWxfZnAgIiRmcCI7IHZhbF9zZGlyICIkc2RpciIKICBlbnRyeV9leGlzdHMgfHwgZGllICJlbnRyeSAkaWQgZG9lcyBub3QgZXhpc3QgKGNyZWF0ZSBpcyB0aGUgZnJlc2ggcGF0aCkiCiAgU0VDUkVUPSQocmVhZF9zZWNyZXQpCiAgIyBSLTM5ICgyMDI2LTA3LTE4KTogTkVWRVIgcGFzcyAtLXNlcnZlciB0byBgcHZlc20gc2V0YC4gUFZFIHRyZWF0cyBgc2VydmVyYCBhcyBhIENSRUFURS1PTkxZCiAgIyBwYXJhbWV0ZXIgYW5kIHJlamVjdHMgdGhlIEVOVElSRSBjYWxsIOKAlCAiY2FuJ3QgY2hhbmdlIHZhbHVlIG9mIGZpeGVkIHBhcmFtZXRlciAnc2VydmVyJyIg4oCUCiAgIyBldmVuIHdoZW4gdGhlIHZhbHVlIGlzIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBzdG9yZWQgb25lLiBUaGF0IG1hZGUgZXZlcnkgcmVjb25jaWxlIGV4aXQgMjU1LAogICMgc28gZWFjaCBodWItcmUtaXNzdWVkIG9uZS10aW1lIHNlY3JldCB3YXMgY29uc3VtZWQtdGhlbi1idXJuZWQgYW5kIHRoZSB0aWVyIHN0YXllZCBwaW5uZWQgdG8KICAjIGEgcmV2b2tlZCBjcmVkZW50aWFsICg0MDEgZm9yZXZlcikuIFByb3ZlbiBsaXZlIG9uIHRoZSBOMTAwIGRlbW8gaG9zdDogYHB2ZXNtIHNldCA8aWQ+CiAgIyAtLXNlcnZlciA8c2FtZT4gLS1maW5nZXJwcmludCA8c2FtZT5gIC0+IHJlamVjdGVkOyB0aGUgc2FtZSBjYWxsIHdpdGhvdXQgLS1zZXJ2ZXIgLT4gcmMgMC4KICAjIFRoZSBzZXJ2ZXIgYWRkcmVzcyBpcyBpbW11dGFibGUgYnkgY29uc3RydWN0aW9uIChyZWxvY2F0aW5nIGEgUEJTIGVuZHBvaW50IG5lZWRzIGEgZnJlc2gKICAjIGNyZWF0ZSksIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSB0byByZWNvbmNpbGUuIEd1YXJkZWQgYnkKICAjIFRlc3RSZWNvbmNpbGVOZXZlclBhc3Nlc1NlcnZlclRvUHZlc21TZXQuCiAgYXJncz0oLS1maW5nZXJwcmludCAiJGZwIikKICBbWyAtbiAiJFNFQ1JFVCIgXV0gJiYgYXJncys9KC0tcGFzc3dvcmQgIiRTRUNSRVQiKQogIHB2ZXNtIHNldCAiJGlkIiAiJHthcmdzW0BdfSIgPiYyCiAgcGxhY2VfY29waWVzICIkc2RpciIKICBlY2hvICJmZWxob20tcGJzLWFwcGx5OiByZWNvbmNpbGVkICRpZCAoc2V0LW9ubHk7IHRlbmFuY3kgaWRlbnRpdHkgdW50b3VjaGVkKSIgPiYyCiAgOzsKcmVhZCkKICAjIFItMzkoYik6IHRoZSBtaXNzaW5nIHJlYWQgcGF0aC4gUHJpbnRzIHRoZSBzZWNyZXQgdG8gU1RET1VULCBub3RoaW5nIGVsc2Ug4oCUIG5vIHN0ZGVyciBub3RlIChpdAogICMgd291bGQgYmUgdGhlIG9ubHkgdmVyYiB3aG9zZSBzdWNjZXNzIGxpbmUgY291bGQgYmUgY29uZnVzZWQgd2l0aCB0aGUgdmFsdWUpLCBubyBtdXRhdGlvbi4KICAjCiAgIyBUcmF2ZXJzYWwgaXMgcmVmdXNlZCB0aHJlZSB0aW1lcyBvdmVyLCBiZWNhdXNlIHRoaXMgaXMgdGhlIG9uZSB2ZXJiIHRoYXQgRVhGSUxUUkFURVMgYSBmaWxlIGFuZAogICMgaXRzIGFyZ3YgaXMgYXR0YWNrZXItc2hhcGVkIGlmIHRoZSBhZ2VudCBpcyBldmVyIGNvbXByb21pc2VkOgogICMgICAxLiBgaWRgIGFscmVhZHkgbWF0Y2hlZCBeW0EtWmEtel1bQS1aYS16MC05Xy4tXXswLDI3fSQgYXQgdGhlIHRvcCDigJQgaXQgY2Fubm90IHN0YXJ0IHdpdGggYSBkb3QKICAjICAgICAgYW5kIGNhbm5vdCBjb250YWluIGEgc2xhc2gsIHNvICIuLi8uLi9ldGMvc2hhZG93IiBuZXZlciByZWFjaGVzIGhlcmU7CiAgIyAgIDIuIHZhbF9zZGlyIHBpbnMgdGhlIGRpcmVjdG9yeSB0byBQUklWRElSIG9yIHVuZGVyIC92YXIvbGliL2ZlbGhvbS1hZ2VudCwgcmVqZWN0aW5nICIuLiI7CiAgIyAgIDMuIHRoZSBSRVNPTFZFRCBwYXRoIGlzIHByZWZpeC1hc3NlcnRlZCB1bmRlciB0aGF0IGRpcmVjdG9yeSBiZWxvdywgc28gZXZlbiBhIGZ1dHVyZSBjaGFuZ2UgdG8KICAjICAgICAgZWl0aGVyIGdyYW1tYXIgY2Fubm90IHdhbGsgb3V0LgogIFtbICQjIC1lcSAzIF1dIHx8IGRpZSAicmVhZCBuZWVkcyAyIGFyZ3M6IDxpZD4gPHNlY3JldC1kaXI+IgogIHNkaXI9IiQzIgogIHZhbF9zZGlyICIkc2RpciIKICB0YXJnZXQ9IiRzZGlyLyRpZC5wdyIKICAjIEJlbHQ6IHJlc29sdmUgYW5kIHJlLWNoZWNrIHRoZSBwcmVmaXggKGd1YXJkcyBhIHN5bWxpbmtlZCA8aWQ+LnB3IHBvaW50aW5nIG91dHNpZGUgdGhlIGRpcikuCiAgcmVzb2x2ZWQ9JChyZWFkbGluayAtZiAtLSAiJHRhcmdldCIgMj4vZGV2L251bGwgfHwgdHJ1ZSkKICBbWyAtbiAiJHJlc29sdmVkIiBdXSB8fCBkaWUgInNlY3JldCBmaWxlIG5vdCBmb3VuZCAoJHRhcmdldCkiCiAgY2FzZSAiJHJlc29sdmVkIiBpbgogICAgIiRzZGlyIi8qKSA6IDs7CiAgICAqKSBkaWUgInJlc29sdmVkIHNlY3JldCBwYXRoIGVzY2FwZXMgdGhlIHNlY3JldCBkaXIiIDs7CiAgZXNhYwogIFtbIC1mICIkcmVzb2x2ZWQiIF1dIHx8IGRpZSAic2VjcmV0IGZpbGUgbm90IGZvdW5kICgkdGFyZ2V0KSIKICBjYXQgLS0gIiRyZXNvbHZlZCIKICA7OwpncmFudCkKICBbWyAkIyAtZXEgMiBdXSB8fCBkaWUgImdyYW50IHRha2VzIG9ubHkgPGlkPiIKICBwdmV1bSBhY2wgbW9kaWZ5ICIvc3RvcmFnZS8kaWQiIC0tdXNlcnMgZmVsaG9tLWFnZW50QHB2ZSAtLXJvbGVzIEZlbGhvbUFnZW50U3RvcmUgPiYyCiAgcHZldW0gYWNsIG1vZGlmeSAiL3N0b3JhZ2UvJGlkIiAtLXRva2VucyAnZmVsaG9tLWFnZW50QHB2ZSFhZ2VudCcgLS1yb2xlcyBGZWxob21BZ2VudFN0b3JlID4mMgogIGVjaG8gImZlbGhvbS1wYnMtYXBwbHk6IGdyYW50ZWQgRmVsaG9tQWdlbnRTdG9yZSBvbiAvc3RvcmFnZS8kaWQgKHVzZXIgKyB0b2tlbikiID4mMgogIDs7CiopCiAgZGllICJ1bmtub3duIG9wICgkb3ApIgogIDs7CmVzYWMK",
   "mode": "0o755",
   "path": "/usr/local/sbin/felhom-pbs-apply",
   "policy": "replace",
   "sha256": "104db0a4401f65bbc476e82bfb1796433bcb36f8f8cce69efb3bb5c40fcb16b3",
   "source": "configs/felhom-pbs-apply"
  },
  {
   "check": "bash",
   "content_b64": "IyEvYmluL2Jhc2gKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBmZWxob20tYmFja3VwLXRhcmdldC1hcHBseSDigJQgdGhlIE9OTFkgcGF0aCB0aGUgZmVsaG9tLWFnZW50IHN1ZG9lcnMgcGVybWl0cyBmb3IgY3JlYXRpbmcgdGhlCiMgd2hvbGUtZ3Vlc3QgYmFja3VwIFRBUkdFVCBzdG9yYWdlIGFuZCBncmFudGluZyB0aGUgYWdlbnQgYWNjZXNzIHRvIGl0IChFLTJhKS4KIwojIFdIWSBBIFdSQVBQRVIgQVQgQUxMLiBDcmVhdGluZyBhIFBWRSBzdG9yYWdlIG5lZWRzIGBEYXRhc3RvcmUuQWxsb2NhdGVgIGF0IGAvc3RvcmFnZWAsIGFuZCB0aGUgQUNMCiMgZ3JhbnQgbmVlZHMgYFBlcm1pc3Npb25zLk1vZGlmeWAuIFRoZSBhZ2VudCBob2xkcyBORUlUSEVSIGJ5IGRlc2lnbiDigJQgaXRzIHRva2VuIGlzIHNjb3BlZCBwZXIKIyBzdG9yYWdlIHBhdGggZm9yIGJsYXN0LXJhZGl1cyBjb250YWlubWVudCwgYW5kIGBQZXJtaXNzaW9ucy5Nb2RpZnlgIHdvdWxkIGxldCBpdCByZXdyaXRlIGl0cyBvd24KIyBhdXRob3JpdHkuIFdpZGVuaW5nIHRoZSBQVkUgcm9sZSB0byBtYWtlIHRoZSBtb3ZlIHBvc3NpYmxlIHdvdWxkIHRyYWRlIHRoZSBlbnRpcmUgY29udGFpbm1lbnQgbW9kZWwKIyBmb3Igb25lIGZlYXR1cmUuIFNvIHRoZSBwcml2aWxlZ2VkIGhhbGYgbGl2ZXMgaGVyZTogYSBtaW5pbWFsLCBhdWRpdGFibGUgcm9vdCBzaGltIHdpdGggYSBmaXhlZAojIHZvY2FidWxhcnksIGV4YWN0bHkgbGlrZSBmZWxob20tbWtmcy1ndWFyZGVkIGFuZCBmZWxob20tcGJzLWFwcGx5LgojCiMgVEhFIE5PLURFTEVURSBMQVcgKGluaGVyaXRlZCBmcm9tIGZlbGhvbS1wYnMtYXBwbHksIHNhbWUgcmVhc29uaW5nIGNsYXNzKS4gVGhpcyB3cmFwcGVyIGNvbnRhaW5zIE5PCiMgc3RvcmFnZS1yZW1vdmFsIHBhdGggb2YgYW55IGtpbmQuIGBwdmVzbSByZW1vdmVgIG9uIGEgZGlyIHN0b3JhZ2UgZG9lcyBub3QgZGVsZXRlIHRoZSBhcmNoaXZlcywgYnV0CiMgaXQgRE9FUyBzaWxlbnRseSBvcnBoYW4gYSBjb25maWd1cmVkIGJhY2t1cCB0aWVyLCBhbmQgYSAiY2xlYW51cCIgdmVyYiBoZXJlIHdvdWxkIGJlIHJlYWNoYWJsZSBieQojIGFueSBidWcgaW4gdGhlIGFnZW50LiBSZXRpcmluZyBhIHRhcmdldCBpcyBhIGRlbGliZXJhdGUgb3BlcmF0b3Igb3AsIG5vdCB0aGlzIHRvb2wuIEdyZXAtYXNzZXJ0YWJsZTsKIyBkbyBub3QgYWRkIG9uZS4KIwojIFRIRSBUV08gTEFXUyBFLTEgUEFJRCBGT1IgT04gTElWRSBIQVJEV0FSRSwgYm90aCBlbmZvcmNlZCBoZXJlIHJhdGhlciB0aGFuIHRydXN0ZWQgdG8gdGhlIGNhbGxlcjoKIwojICAgRi0xICB0aGUgc3RvcmFnZSBwYXRoIG11c3QgQkUgdGhlIGRyaXZlJ3Mgb3duIG1vdW50cG9pbnQuIEEgc3ViZGlyZWN0b3J5IGZhaWxzIHRoZSBhZ2VudCdzCiMgICAgICAgIGV4YWN0TW91bnQgY2hlY2ssIHNvIHRoZSB0YXJnZXQgcmVwb3J0cyBgZGlzY29ubmVjdGVkYCBGT1JFVkVSIGFuZCBpdHMgZHVyYWJsZSBpZCBkZWdyYWRlcwojICAgICAgICBvZmYgdGhlIGZpbGVzeXN0ZW0gVVVJRC4gRW5mb3JjZWQ6IGBtb3VudHBvaW50IC1xYCBtdXN0IHBhc3Mgb24gdGhlIGV4YWN0IHBhdGggZ2l2ZW4uCiMKIyAgIEYtMiAgLS1pc19tb3VudHBvaW50IDEgaXMgbm90IG9wdGlvbmFsLiBXaXRob3V0IGl0LCBhbiB1bnBsdWdnZWQgb3IgbGF0ZS1tb3VudGluZyBkcml2ZSBsZWF2ZXMgYQojICAgICAgICBiYXJlIGRpcmVjdG9yeSBvbiB0aGUgUk9PVCBmaWxlc3lzdGVtIGFuZCB2emR1bXAgd3JpdGVzIHRoZSB3aG9sZS1ndWVzdCBiYWNrdXAgb250byB0aGUKIyAgICAgICAgc3lzdGVtIGRyaXZlIOKAlCB0aGUgZXhhY3QgZGV2aWNlIHRoZSB3aG9sZSBjaGFuZ2UgZXhpc3RzIHRvIGVzY2FwZSDigJQgd2hpbGUgUFZFIHJlcG9ydHMgdGhlCiMgICAgICAgIHN0b3JhZ2UgYGFjdGl2ZWAgYW5kIGFkdmVydGlzZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSdzIGZyZWUgc3BhY2UuIFByb3ZlbiBsaXZlOiB0aGUgdW5ndWFyZGVkCiMgICAgICAgIGZvcm0gaGFkIGFscmVhZHkgY3JlYXRlZCBkdW1wLyBvbiBwdmUtcm9vdC4gSGFyZGNvZGVkIGJlbG93OyBub3QgYSBjYWxsZXItc3VwcGxpZWQgZmxhZy4KIwojIE9wcyAoYWxsIG5vbi1zZWNyZXQ7IG5vdGhpbmcgaGVyZSB0b3VjaGVzIGEgY3JlZGVudGlhbCwgc28gbm90aGluZyBhcnJpdmVzIG9uIHN0ZGluKToKIyAgIGNyZWF0ZSA8aWQ+IDxtb3VudHBvaW50PgojICAgICAgICAgICBDcmVhdGUgYSBgZGlyYCBzdG9yYWdlIHdpdGggY29udGVudD1iYWNrdXAgYXQgPG1vdW50cG9pbnQ+LCBpc19tb3VudHBvaW50IDEuCiMgICAgICAgICAgIElERU1QT1RFTlQ6IGFuIGV4aXN0aW5nIGVudHJ5IHdpdGggdGhlIFNBTUUgcGF0aCBpcyBhY2NlcHRlZCAocmUtcnVuIHNhZmUsIGFuZCB0aGUKIyAgICAgICAgICAgaW5zdGFsbGVyIHJlLXJ1biBwYXRoIGRlcGVuZHMgb24gaXQpLiBBbiBleGlzdGluZyBlbnRyeSB3aXRoIGEgRElGRkVSRU5UIHBhdGggaXMgUkVGVVNFRAojICAgICAgICAgICDigJQgc2lsZW50bHkgcmVwb2ludGluZyBhIGxpdmUgYmFja3VwIHRhcmdldCBpcyB0aGUgZmFpbHVyZSB0aGlzIHdob2xlIGFyYyBjbG9zZXMuCiMgICBncmFudCAgPGlkPgojICAgICAgICAgICBUaGUgZHVhbCBncmFudDogRmVsaG9tQWdlbnRTdG9yZSBvbiAvc3RvcmFnZS88aWQ+IHRvIHRoZSBhZ2VudCB1c2VyIEFORCB0b2tlbiAocHJpdnNlcAojICAgICAgICAgICBpbnRlcnNlY3Rpb24g4oCUIGEgdG9rZW4ncyByaWdodHMgYXJlIHRoZSBpbnRlcnNlY3Rpb24sIHNvIGdyYW50aW5nIG9uZSBpcyBncmFudGluZyBuZWl0aGVyKS4KIyAgICAgICAgICAgV2l0aG91dCBpdCBldmVyeSBiYWNrdXAgNDAzcyBvbiBmaXJzdCBydW4gKEUtMSBmaW5kaW5nIEYtMywgZm91bmQgYnkgdGhlIGZpcnN0IHJlYWwgYmFja3VwKS4KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc2V0IC1ldW8gcGlwZWZhaWwKCmRpZSgpIHsgZWNobyAiZmVsaG9tLWJhY2t1cC10YXJnZXQtYXBwbHk6IFJFRlVTRUQ6ICQqIiA+JjI7IGV4aXQgMTsgfQoKb3A9IiR7MTotfSI7IGlkPSIkezI6LX0iCltbIC1uICIkb3AiICYmIC1uICIkaWQiIF1dIHx8IGRpZSAidXNhZ2U6IGZlbGhvbS1iYWNrdXAtdGFyZ2V0LWFwcGx5IDxjcmVhdGV8Z3JhbnQ+IDxzdG9yYWdlLWlkPiBbbW91bnRwb2ludF0iCgojIFN0b3JhZ2UgaWQ6IFBWRSBncmFtbWFyLCBjb25zZXJ2YXRpdmUuIEFsc28gdGhlIEFDTCBwYXRoIGNvbXBvbmVudCDigJQgbm8gc2xhc2hlcyBwb3NzaWJsZS4KW1sgIiRpZCIgPX4gXltBLVphLXpdW0EtWmEtejAtOV8uLV17MCwyN30kIF1dIHx8IGRpZSAiYmFkIHN0b3JhZ2UgaWQgKCRpZCkiCgpTVE9SRUNGRz0vZXRjL3B2ZS9zdG9yYWdlLmNmZwoKIyBjdXJyZW50X3BhdGhfb2YgPGlkPiDigJQgdGhlIGNvbmZpZ3VyZWQgYHBhdGhgIG9mIGRpciBzdG9yYWdlIDxpZD4sIG9yICIiIHdoZW4gYWJzZW50L25vdC1hLWRpci4KY3VycmVudF9wYXRoX29mKCkgewogIGF3ayAtdiB3YW50PSJkaXI6ICQxIiAnCiAgICAkMCA9PSB3YW50IHsgZm91bmQ9MTsgbmV4dCB9CiAgICBmb3VuZCAmJiAvXlthLXpdKzogLyB7IGV4aXQgfQogICAgZm91bmQgJiYgJDEgPT0gInBhdGgiIHsgcHJpbnQgJDI7IGV4aXQgfQogICcgIiRTVE9SRUNGRyIgMj4vZGV2L251bGwgfHwgdHJ1ZQp9CgpjYXNlICIkb3AiIGluCmNyZWF0ZSkKICBbWyAkIyAtZXEgMyBdXSB8fCBkaWUgImNyZWF0ZSB0YWtlcyA8aWQ+IDxtb3VudHBvaW50PiIKICBtcD0iJDMiCiAgIyBBYnNvbHV0ZSwgbm9ybWFsaXplZCwgbm8gdHJhdmVyc2FsLCBubyBzaGVsbCBtZXRhY2hhcmFjdGVycy4gVGhlIHZhbHVlIHJlYWNoZXMgcHZlc20gYW5kIHRoZQogICMgZmlsZXN5c3RlbSwgc28gaXQgaXMgdmFsaWRhdGVkIGhlcmUgcmF0aGVyIHRoYW4gYXNzdW1lZCB3ZWxsLWZvcm1lZC4KICBbWyAiJG1wIiA9IC8qIF1dICAgICAgICAgICAgfHwgZGllICJtb3VudHBvaW50IG11c3QgYmUgYWJzb2x1dGUgKCRtcCkiCiAgW1sgIiRtcCIgIT0gKiIuLiIqIF1dICAgICAgIHx8IGRpZSAibW91bnRwb2ludCBtdXN0IG5vdCBjb250YWluIC4uICgkbXApIgogIFtbICIkbXAiID1+IF5bQS1aYS16MC05L18uLV0rJCBdXSB8fCBkaWUgIm1vdW50cG9pbnQgaGFzIHVuZXhwZWN0ZWQgY2hhcmFjdGVycyAoJG1wKSIKICBbWyAiJG1wIiAhPSAiLyIgXV0gICAgICAgICAgfHwgZGllICJyZWZ1c2luZyAvIGFzIGEgYmFja3VwIHRhcmdldCIKCiAgIyBGLTEgKyBGLTIsIGNoZWNrZWQgYXMgb25lOiB0aGUgcGF0aCBtdXN0IEJFIGEgbW91bnRwb2ludCByaWdodCBub3cuIEEgYmFyZSBkaXJlY3RvcnkgaGVyZSBpcwogICMgcHJlY2lzZWx5IHRoZSBzaWxlbnQtcmV0YXJnZXQgc2hhcGUsIGFuZCBpc19tb3VudHBvaW50IHdvdWxkIG1ha2UgUFZFIHJlZnVzZSBpdCBsYXRlciBhbnl3YXkg4oCUCiAgIyBiZXR0ZXIgdG8gcmVmdXNlIG5vdywgd2l0aCBhIHJlYXNvbiwgdGhhbiB0byBjcmVhdGUgYSBzdG9yYWdlIHRoYXQgY2FuIG5ldmVyIGFjdGl2YXRlLgogIG1vdW50cG9pbnQgLXEgIiRtcCIgfHwgZGllICIkbXAgaXMgbm90IGEgbW91bnRwb2ludCDigJQgdGhlIGJhY2t1cCB0YXJnZXQgbXVzdCBiZSB0aGUgZHJpdmUncyBPV04gbW91bnRwb2ludCAoRi0xKSwgYW5kIGFuIHVubW91bnRlZCBwYXRoIHdvdWxkIHNpbGVudGx5IHJldGFyZ2V0IG9udG8gdGhlIHN5c3RlbSBkcml2ZSAoRi0yKSIKCiAgIyBOZXZlciB0aGUgc3lzdGVtIGRpc2s6IGEgdGFyZ2V0IG9uIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgbm90IGRyaXZlLWxvc3MgcHJvdGVjdGlvbiwgaXQgaXMgdGhlCiAgIyB0aGluZyB3ZSBhcmUgZXNjYXBpbmcuIFRoZSByb290IGRldmljZSBhbmQgdGhlIGNhbmRpZGF0ZSdzIGRldmljZSBhcmUgY29tcGFyZWQsIG5vdCB0aGVpciBwYXRocy4KICByb290X2Rldj0iJChmaW5kbW50IC1ubyBTT1VSQ0UgLyAyPi9kZXYvbnVsbCB8fCB0cnVlKSIKICBtcF9kZXY9IiQoZmluZG1udCAtbm8gU09VUkNFICIkbXAiIDI+L2Rldi9udWxsIHx8IHRydWUpIgogIFtbIC1uICIkbXBfZGV2IiBdXSB8fCBkaWUgImNvdWxkIG5vdCByZXNvbHZlIHRoZSBiYWNraW5nIGRldmljZSBvZiAkbXAiCiAgW1sgIiRtcF9kZXYiICE9ICIkcm9vdF9kZXYiIF1dIHx8IGRpZSAiJG1wIGlzIGJhY2tlZCBieSB0aGUgUk9PVCBkZXZpY2UgKCRyb290X2Rldikg4oCUIGEgYmFja3VwIHRhcmdldCB0aGVyZSBwcm90ZWN0cyBhZ2FpbnN0IGNvcnJ1cHRpb24gb25seSwgbmV2ZXIgZHJpdmUgbG9zcyIKCiAgZXhpc3Rpbmc9IiQoY3VycmVudF9wYXRoX29mICIkaWQiKSIKICBpZiBbWyAtbiAiJGV4aXN0aW5nIiBdXTsgdGhlbgogICAgaWYgW1sgIiRleGlzdGluZyIgPT0gIiRtcCIgXV07IHRoZW4KICAgICAgZWNobyAiZmVsaG9tLWJhY2t1cC10YXJnZXQtYXBwbHk6IHN0b3JhZ2UgJGlkIGFscmVhZHkgZXhpc3RzIGF0ICRtcCDigJQgbm90aGluZyB0byBkbyAoaWRlbXBvdGVudCkiID4mMgogICAgICBleGl0IDAKICAgIGZpCiAgICBkaWUgInN0b3JhZ2UgJGlkIGFscmVhZHkgZXhpc3RzIGF0ICRleGlzdGluZyDigJQgcmVmdXNpbmcgdG8gcmVwb2ludCBpdCBhdCAkbXAgKGEgbGl2ZSBiYWNrdXAgdGFyZ2V0IGlzIG5ldmVyIHNpbGVudGx5IG1vdmVkKSIKICBmaQoKICAjIGlzX21vdW50cG9pbnQgMSBpcyBIQVJEQ09ERUQgKEYtMikuIGNvbnRlbnQ9YmFja3VwIG9ubHk6IHRoaXMgc3RvcmFnZSBleGlzdHMgZm9yIHZ6ZHVtcCBhcmNoaXZlcwogICMgYW5kIG11c3QgbmV2ZXIgYmVjb21lIGEgcGxhY2UgZ3Vlc3RzIGFyZSBhbGxvY2F0ZWQgb24uCiAgcHZlc20gYWRkIGRpciAiJGlkIiAtLXBhdGggIiRtcCIgLS1jb250ZW50IGJhY2t1cCAtLWlzX21vdW50cG9pbnQgMSA+JjIKICBlY2hvICJmZWxob20tYmFja3VwLXRhcmdldC1hcHBseTogY3JlYXRlZCBkaXIgc3RvcmFnZSAkaWQgYXQgJG1wIChjb250ZW50PWJhY2t1cCwgaXNfbW91bnRwb2ludCAxKSIgPiYyCiAgOzsKZ3JhbnQpCiAgW1sgJCMgLWVxIDIgXV0gfHwgZGllICJncmFudCB0YWtlcyBvbmx5IDxpZD4iCiAgIyBCT1RILCBhbHdheXMuIEEgcHJpdnNlcCB0b2tlbidzIHJpZ2h0cyBhcmUgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgdXNlcidzIGFuZCB0aGUgdG9rZW4ncyBBQ0xzLAogICMgc28gZ3JhbnRpbmcgb25lIG9mIHRoZSB0d28gZ3JhbnRzIG5vdGhpbmcgdXNhYmxlLgogIHB2ZXVtIGFjbCBtb2RpZnkgIi9zdG9yYWdlLyRpZCIgLS11c2VycyBmZWxob20tYWdlbnRAcHZlIC0tcm9sZXMgRmVsaG9tQWdlbnRTdG9yZSA+JjIKICBwdmV1bSBhY2wgbW9kaWZ5ICIvc3RvcmFnZS8kaWQiIC0tdG9rZW5zICdmZWxob20tYWdlbnRAcHZlIWFnZW50JyAtLXJvbGVzIEZlbGhvbUFnZW50U3RvcmUgPiYyCiAgZWNobyAiZmVsaG9tLWJhY2t1cC10YXJnZXQtYXBwbHk6IGdyYW50ZWQgRmVsaG9tQWdlbnRTdG9yZSBvbiAvc3RvcmFnZS8kaWQgKHVzZXIgKyB0b2tlbikiID4mMgogIDs7CiopCiAgZGllICJ1bmtub3duIG9wICgkb3ApIgogIDs7CmVzYWMK",
   "mode": "0o755",
   "path": "/usr/local/sbin/felhom-backup-target-apply",
   "policy": "replace",
   "sha256": "b71d869871efae6d13e8dc0809b7ce112d2c0051333e55af0af35d5a4fee506e",
   "source": "configs/felhom-backup-target-apply"
  },
  {
   "check": "python",
   "content_b64": "IyEvdXNyL2Jpbi9weXRob24zCiMgZmVsaG9tLW9zLWFwcGx5IOKAlCB0aGUgUk9PVCBoYWxmIG9mIHRoZSBhZ2VudCdzIG9wZXJhdGluZy1zeXN0ZW0gdXBkYXRlIGxlZyAoYDExLW9zLXVwZGF0ZXMubWRgIMKnNS40LjEsIMKnOC4x4oCTOC4yKS4KIwojIEluc3RhbGwgYXMgL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1vcy1hcHBseSAoMDc1NSByb290OnJvb3QpLiBUaGUgbm9uLXJvb3QgYWdlbnQgaW52b2tlcyBpdCB2aWEgYHN1ZG8gLW5gCiMgKEZFTEhPTV9PU0FQUExZIGFsaWFzKSB3aXRoIEVYQUNUTFk6ICAgZmVsaG9tLW9zLWFwcGx5IC0tcGxhbiAvdmFyL2xpYi9mZWxob20tYWdlbnQvb3MvcGxhbi08aWQ+Lmpzb24KIyBOb3RoaW5nIGVsc2Ugb24gdGhlIGNvbW1hbmQgbGluZSBpcyBhY2NlcHRlZC4gUHl0aG9uIDMsIHN0YW5kYXJkIGxpYnJhcnkgb25seSAoYSBKU09OIHBsYW4gY2Fubm90IGJlIHBhcnNlZAojIHNhZmVseSBpbiBzaCkuIFRlc3RzOiBjb25maWdzL3Rlc3RfZmVsaG9tX29zX2FwcGx5LnB5IChhIGZha2UgcnVubmVyOyBub3RoaW5nIHJlYWwgaXMgZXhlY3V0ZWQpLgojCiMgVEhFIFRSVVNUIE1PREVMLiBUaGUgcGxhbiBpcyB3cml0dGVuIGJ5IHRoZSBhZ2VudCwgc28gYSBicm9rZW4taW50byBhZ2VudCB3cml0ZXMgd2hhdGV2ZXIgcGxhbiBpdCBsaWtlcy4gVGhlCiMgcHJvdGVjdGlvbiBpcyB0aGVyZWZvcmUgd2hhdCB0aGlzIGZpbGUgUkVGVVNFUywgbm90IHdoZXJlIHRoZSBwbGFuIGNhbWUgZnJvbTogbm8gcmVtb3ZhbCwgbm8gZG93bmdyYWRlLCBubyBuZXcKIyBwYWNrYWdlLCBubyBwYWNrYWdlIG91dHNpZGUgdGhlIHBsYW4sIG9ubHkgRGViaWFuIG9yaWdpbiBpbiB0aGUgZmFzdCBsYW5lLCBubyBrZXJuZWwgLyBib290IHBhY2thZ2Ugb24gdGhlIGhvc3QsCiMgb25seSB0aGUgYm94J3Mgb3duIGN1c3RvbWVyIGd1ZXN0LCBhbmQgdGhlIGhvc3QgbGF5ZXIgb25seSBvbiBhIGJveCB3aG9zZSBST09ULU9XTkVEIGluc3RhbGwgcmVjb3JkIHNheXMKIyAiYXBwbGlhbmNlIiAoYSBCWU8gaG9zdCBiZWxvbmdzIHRvIGl0cyBvd25lciwgYDExYCDCpzEpLiBQYWNrYWdlIHNpZ25hdHVyZXMgc3RheSBEZWJpYW4nczogYXB0IGNoZWNrcyBldmVyeSBSZWxlYXNlCiMgZmlsZSwgaW5jbHVkaW5nIHRoZSBzbmFwc2hvdC5kZWJpYW4ub3JnIGZhbGxiYWNrIChkZWNpc2lvbiA3OSkuIE5vdGhpbmcgaGVyZSBpcyBvdmVycmlkYWJsZSBmcm9tIHRoZSBlbnZpcm9ubWVudC4KIwojIExBWUVSUyAoYWdlbnQgdjAuMTQxLjApOiAiZ3Vlc3QiICh0aGUgY3VzdG9tZXIgTFhDLCBlbnRlcmVkIHdpdGggYHBjdCBleGVjYCkgYW5kICJob3N0IiAodGhpcyBQcm94bW94IGhvc3QsIHJ1bgojIGRpcmVjdGx5KS4gTEFORTogImZhc3QiIGZvciB0aG9zZSB0d28uIEFnZW50IHYwLjE0Mi4wIGFkZHMgdGhlIGxheWVyICJkb2NrZXIiICh0aGUgZ3Vlc3QncyBEb2NrZXIgZW5naW5lIHNldCwgYDExYAojIMKnNS44KSwgd2hpY2ggaXMgdGhlIFNMT1cgbGFuZTogbGFuZSAic2xvdyIgb25seSwgdGhlIHNpeCBEb2NrZXIgcGFja2FnZXMgb25seSwgb3JpZ2luICJEb2NrZXIgQ0UiIG9ubHksIGFuZCBvbmx5CiMgd2l0aCBhbiBhdXRob3JpdHkgdGhpcyBmaWxlIGNoZWNrcyBJVFNFTEYgKFIzKTogYSBzaWduZWQgb3BlcmF0b3Igam9iIHZlcmlmaWVkIHdpdGggYHNzaC1rZXlnZW4gLVkgdmVyaWZ5YCBhZ2FpbnN0CiMgdGhlIFJPT1QtT1dORUQgc2lnbmVycyBmaWxlIChUUlVTVF9TSUdORVJTKSwgYm91bmQgdG8gdGhpcyBob3N0IChUUlVTVF9GSUxFIGhvc3RfaWQpLCB1bmV4cGlyZWQgYW5kIG5ldmVyIHJlcGxheWVkOwojIG9yLCBmb3IgYW4gdW5zaWduZWQgcmluZy0wIHN0ZXAsIHRoZSByb290LW93bmVkIFRSVVNUX0ZJTEUgc2F5aW5nIGAicmluZzBfc2xvd19sYW5lIjogdHJ1ZWAgKHNldCBieSBoYW5kIG9uIHRoZSBkZW1vCiMgYm94ZXMgb25seSkuIFRoZSBhZ2VudCdzIG93biBjb25maWcgaXMgTk9UIHRydXN0ZWQgZm9yIGVpdGhlcjogdGhlIGFnZW50IGNhbiB3cml0ZSBpdC4gQSBEb2NrZXIgc3RlcCBhbHNvIG5lZWRzCiMgYGxpdmUtcmVzdG9yZWAgT04gKFIxNSkg4oCUIHdpdGhvdXQgaXQgZXZlcnkgY29udGFpbmVyIHJlc3RhcnRzLgojCiMgTW9kZXMgKHBsYW4gZmllbGQgIm1vZGUiKToKIyAgIGludmVudG9yeSAgIGBhcHQtZ2V0IHVwZGF0ZWAsIHRoZW4gcmVwb3J0IHdoYXQgaXMgaW5zdGFsbGVkICh3aXRoIG9yaWdpbiksIHdoYXQgaXMgcGVuZGluZywgYW5kIGhlYWx0aC4KIyAgIGFwcGx5ICAgICAgIHJlcGFpciBmaXJzdCwgcGljayB0aGUgcGFja2FnZXMgKHNlbGVjdCAibGlzdGVkIjogdGhlIHBsYW4ncyBuYW1lPXZlcnNpb24gbGlzdDsgInBlbmRpbmctZmFzdCI6IGV2ZXJ5CiMgICAgICAgICAgICAgICBwZW5kaW5nIERlYmlhbiAvIERlYmlhbi1TZWN1cml0eSB1cGdyYWRlLCBmb3IgcmluZyAwKSwgY2hlY2sgZXZlcnkgcmVmdXNhbCBvbiBhbiBgYXB0LWdldCAtc2AKIyAgICAgICAgICAgICAgIHNpbXVsYXRpb24gb2YgRVhBQ1RMWSBuYW1lPXZlcnNpb24sIGluc3RhbGwsIGNsZWFuLCBzY2FuIGZvciByZXN0YXJ0LW5lZWRlZCwgcmVwb3J0IGFzIGludmVudG9yeS4KIyAgIGhlYWx0aCAgICAgIHJlcG9ydCBoZWFsdGggb25seSAodGhlIGFnZW50IHBvbGxzIGl0IGFmdGVyIGEgcnVuKS4KIyAgIGZhY3RzICAgICAgICh2MC4xNDIuMCkgcmVhZC1vbmx5IHZlcnNpb25zIGZvciB0aGUgaHViJ3MgU3lzdGVtIHBhZ2U6IGhvc3QgRGViaWFuLCBydW5uaW5nIGFuZCBuZXh0LWJvb3Qga2VybmVsLAojICAgICAgICAgICAgICAgaGVsZCBwYWNrYWdlcywga2VybmVsIHRhaW50LCB0aGUgY3Jhc2ggZ3VhcmQ7IGd1ZXN0IERlYmlhbiwgRG9ja2VyIGVuZ2luZSwgY29udGFpbmVyZCwgbGl2ZS1yZXN0b3JlLgojICAgbGl2ZS1yZXN0b3JlLW9uICAodjAuMTQyLjAsIGxheWVyIGd1ZXN0KSB0aGUgT05FLVRJTUUgc3RlcCBvZiBgMDlgIGRlY2lzaW9uIDg3OiBtZXJnZSBgImxpdmUtcmVzdG9yZSI6IHRydWVgCiMgICAgICAgICAgICAgICBpbnRvIHRoZSBndWVzdCdzIC9ldGMvZG9ja2VyL2RhZW1vbi5qc29uIGFuZCBgc3lzdGVtY3RsIHJlbG9hZCBkb2NrZXJgLiBORVZFUiBhIHJlc3RhcnQgKFItODM1KS4KIyBPdXRwdXQ6IGxvZyBsaW5lcyBvbiBzdGRlcnIgYW5kIHRoZSBqb3VybmFsICh0YWcgZmVsaG9tLW9zLWFwcGx5KTsgdGhlIExBU1Qgc3Rkb3V0IGxpbmUgaXMKIyAgIE9TQVBQTFktUkVQT1JUIDxvbmUgSlNPTiBvYmplY3Q+CiMgd2hpY2ggaXMgd2hhdCB0aGUgYWdlbnQgcGFyc2VzLiBFeGl0IDAgPSBkb25lOyAyID0gcmVmdXNlZCAobm90aGluZyBjaGFuZ2VkKTsgMyA9IGZhaWxlZCBkdXJpbmcgaW5zdGFsbC4KIwojIFNQRUVEIChSLTg0NSwgYWdlbnQgdjAuMTQxLjApLiBFdmVyeSBgcGN0IGV4ZWNgIGNvc3RzIH4wLjkgcyAobWVhc3VyZWQgb24gZGVtby1ocCksIGFuZCB2MC4xNDAuMCBtYWRlIG9uZSBwZXIKIyBwYWNrYWdlIGZvciB2ZXJzaW9uIGNvbXBhcmlzb25zIOKAlCAyNzIgcGFja2FnZXMg4omIIDQgbWludXRlcy4gVmVyc2lvbnMgYXJlIG5vdyBjb21wYXJlZCB3aXRoIHRoZSBIT1NUJ3MgZHBrZyAodGhlIHNhbWUKIyBEZWJpYW4gYWxnb3JpdGhtKSwgbWFkaXNvbi9wb2xpY3kgcnVuIG9uY2UgcGVyIHBhc3MgZm9yIGFsbCBwYWNrYWdlcywgdGhlIHJlc3RhcnQgc2NhbiBydW5zIG9ubHkgYWZ0ZXIgYW4gaW5zdGFsbCwKIyBhbmQgb25lIHdyYXBwZXIgY2FsbCBkb2VzIHRoZSB3aG9sZSBwYXNzIChubyBzZXBhcmF0ZSBpbnZlbnRvcnkgY2FsbCBiZWZvcmUgYW4gYXBwbHkpLgppbXBvcnQgY2FsZW5kYXIKaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCByZQppbXBvcnQgc3RhdAppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc3lzCmltcG9ydCB0aW1lCgpQTEFOX0RJUiA9ICIvdmFyL2xpYi9mZWxob20tYWdlbnQvb3MiClBMQU5fUkUgPSByZS5jb21waWxlKHIiXnBsYW4tW0EtWmEtejAtOS5fLV17MSw4MH1cLmpzb24kIikKQUdFTlRfVVNFUiA9ICJmZWxob20tYWdlbnQiCkZBU1RfT1JJR0lOUyA9ICgiRGViaWFuIiwgIkRlYmlhbi1TZWN1cml0eSIpCiMgRGViaWFuIHBhY2thZ2UgbmFtZSBhbmQgdmVyc2lvbiBncmFtbWFyIChEZWJpYW4gcG9saWN5IMKnNS42LjEsIMKnNS42LjEyKS4KTkFNRV9SRSA9IHJlLmNvbXBpbGUociJeW2EtejAtOV1bYS16MC05Ky4tXSskIikKVkVSU0lPTl9SRSA9IHJlLmNvbXBpbGUociJeKD86WzAtOV0rOik/WzAtOV1bQS1aYS16MC05Lit+LV0qJCIpClNOQVBfUkUgPSByZS5jb21waWxlKHIiXlswLTldezh9VFswLTldezZ9WiQiKQpSRVNFUlZFRF9WTUlEUyA9IHNldChyYW5nZSg5OTAwMDAsIDk5MDAxMCkpIHwgezk5OTl9CkRSSVZFU19QQVJFTlQgPSAiL21udC9mZWxob20tZHJpdmVzIgpTTkFQU0hPVF9MSVNUID0gIi9ldGMvYXB0L3NvdXJjZXMubGlzdC5kL2ZlbGhvbS1vcy1zbmFwc2hvdC5saXN0IgpBUFRfRU5WID0gWyJlbnYiLCAiREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIiwgIkFQVF9MSVNUQ0hBTkdFU19GUk9OVEVORD1ub25lIiwgIk5FRURSRVNUQVJUX01PREU9bCIsICJMQ19BTEw9QyJdCkRQS0dfT1BUUyA9IFsiLW8iLCAiRHBrZzo6T3B0aW9uczo6PS0tZm9yY2UtY29uZm9sZCIsICItbyIsICJEcGtnOjpPcHRpb25zOjo9LS1mb3JjZS1jb25mZGVmIl0KTUlOX0ZSRUUgPSA1MDAgKiAxMDI0ICogMTAyNAojIFItODc2OiBkcGtnJ3Mgc3RhdGUgaW4gT05FIGNhbGwg4oCUIGAtLWF1ZGl0YCwgYSBtYXJrZXIgbGluZSwgdGhlbiB0aGUgdXBkYXRlIGpvdXJuYWwncyBmaWxlIG5hbWVzLgpKT1VSTkFMX01BUksgPSAiQEBGRUxIT00tRFBLRy1KT1VSTkFMQEAiCkRQS0dfU1RBVEVfU0NSSVBUID0gImRwa2cgLS1hdWRpdDsgZWNobyAiICsgSk9VUk5BTF9NQVJLICsgIjsgbHMgLUEgL3Zhci9saWIvZHBrZy91cGRhdGVzIDI+L2Rldi9udWxsOyB0cnVlIgojIFRoZSBpbnN0YWxsZXIncyBST09ULU9XTkVEIHJlY29yZCAoZmVsaG9tLWhvc3QtaW5zdGFsbC5zaCBgc3RhdGVfc2V0IG1vZGVgKTsgdGhlIGFnZW50IGNhbm5vdCB3cml0ZSBpdC4KSU5TVEFMTF9TVEFURSA9ICIvdmFyL2xpYi9mZWxob20taW5zdGFsbC9zdGF0ZS5qc29uIgojIEtlcm5lbCwgYm9vdCBhbmQgZmlybXdhcmUgcGFja2FnZXMgYXJlIHRoZSBTTE9XIGxhbmUgb24gdGhlIGhvc3Qgd2hhdGV2ZXIgdGhlaXIgb3JpZ2luIChgMTFgIEMzLCDCpzUuMik6IGEgaG9zdAojIHJlYm9vdCBpcyBuZWVkZWQgZm9yIHRoZW0gdG8gdGFrZSBlZmZlY3QsIGFuZCBhIGJhZCBvbmUgY2FuIHN0b3AgdGhlIGJveCBmcm9tIGJvb3RpbmcuCkhPU1RfU0xPV19SRSA9IHJlLmNvbXBpbGUociJeKGxpbnV4LShpbWFnZXxoZWFkZXJzfGtidWlsZHxtb2R1bGVzfGJhc2UpfHByb3htb3gta2VybmVsfHByb3htb3gtZGVmYXVsdC1rZXJuZWx8cHZlLWtlcm5lbHwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgciJwdmUtZmlybXdhcmV8ZmlybXdhcmUtfGdydWJ8c2hpbXxzeXN0ZW1kLWJvb3R8aW50ZWwtbWljcm9jb2RlfGFtZDY0LW1pY3JvY29kZXxlZmlib290bWdyKSIpCiMgcmVzdGFydF9uZWVkZWQoKSBsZWF2ZXMgb3V0IHByb2Nlc3NlcyB3aG9zZSBjZ3JvdXAgbGluZSBtYXRjaGVzIChncmVwIGJhc2ljIHJlZ2V4KS4gSG9zdDogdGhlIExYQyBndWVzdHMnIG93bgojIHByb2Nlc3NlcyAoYDA6Oi9seGMvPHZtaWQ+Ly4uLmApIC0tIE5PVCBseGMtc3RhcnQgaXRzZWxmLCB3aG9zZSBjZ3JvdXAgaXMgYDA6Oi9seGMubW9uaXRvci88dm1pZD5gIChtZWFzdXJlZAojIDIwMjYtMTAtMDQgb24gZGVtby1mZWxob206IHRoZSBvbGQgcGF0dGVybiAibHhjIiBoaWQgbHhjLXN0YXJ0IHdpdGggMjAgZGVsZXRlZCBtYXBzLCBzbyAicmVib290IG5lZWRlZCIgc3RheWVkIGZhbHNlCiMgYWZ0ZXIgYSBsaWJjNiB1cGRhdGUpLiBQaW5uZWQgYnkgdGVzdF9yZXN0YXJ0X3NraXBfcGF0dGVybnNfYWdhaW5zdF9yZWFsX2Nncm91cHMuClJFU1RBUlRfU0tJUF9DR1JPVVAgPSB7Imd1ZXN0IjogImRvY2tlciIsICJob3N0IjogIjovbHhjLyJ9CkhPU1RfU0VSVklDRVMgPSBbInB2ZXByb3h5IiwgInB2ZWRhZW1vbiIsICJwdmVzdGF0ZCIsICJwdmUtY2x1c3RlciIsICJmZWxob20tYWdlbnQiXQojIFRoZSBEb2NrZXIgZW5naW5lIHNldCAoYDExYCDCpzUuOCk6IHRoZSBvbmx5IG5hbWVzIHRoZSBkb2NrZXIgbGF5ZXIgbWF5IHRvdWNoLCBmcm9tIHRoZSBvbmx5IG9yaWdpbiBpdCBtYXkgdXNlLgpET0NLRVJfTkFNRVMgPSAoImNvbnRhaW5lcmQuaW8iLCAiZG9ja2VyLWJ1aWxkeC1wbHVnaW4iLCAiZG9ja2VyLWNlIiwgImRvY2tlci1jZS1jbGkiLCAiZG9ja2VyLWNlLXJvb3RsZXNzLWV4dHJhcyIsCiAgICAgICAgICAgICAgICAiZG9ja2VyLWNvbXBvc2UtcGx1Z2luIikKRE9DS0VSX09SSUdJTiA9ICJEb2NrZXIgQ0UiCiMgUk9PVC1PV05FRCB0cnVzdCBhbmNob3JzICh0aGUgaW5zdGFsbGVyIHdyaXRlcyB0aGVtOyB0aGUgZGVtbyBib3hlcyBnb3QgdGhlbSBieSBoYW5kLCBSLTg0MCkuIE5ldmVyIHRoZSBhZ2VudCdzIGNvbmZpZy4KVFJVU1RfRklMRSA9ICIvZXRjL2ZlbGhvbS9vcy10cnVzdC5qc29uIiAgICAgICAgICAjIHsiaG9zdF9pZCI6ICIuLi4iLCAicmluZzBfc2xvd19sYW5lIjogZmFsc2V9ClRSVVNUX1NJR05FUlMgPSAiL2V0Yy9mZWxob20vb3BlcmF0b3Itc2lnbmVycyIgICAgIyBzc2ggYWxsb3dlZF9zaWduZXJzOiA8a2V5X2lkPiBuYW1lc3BhY2VzPSJmZWxob20tb3AtdjEiIDxrZXk+ClNJR19OQU1FU1BBQ0UgPSAiZmVsaG9tLW9wLXYxIgpTSUdORURfT1AgPSAib3NfZG9ja2VyX3N0ZXAiCk5PTkNFX0ZJTEUgPSAiL3Zhci9saWIvZmVsaG9tLW9zLWFwcGx5L25vbmNlcy5qc29uIgpEQUVNT05fSlNPTiA9ICIvZXRjL2RvY2tlci9kYWVtb24uanNvbiIKIyBSLTg1OCAodjAuMTQyLjEpOiBhIERvY2tlciBlbmdpbmUgc3RlcCByZXN0YXJ0cyBkb2NrZXJkLCB3aGljaCBSRUNSRUFURVMgdGhlIHNvY2tldCBmaWxlLiBXaXRoIGxpdmUtcmVzdG9yZSB0aGUKIyBjb250YWluZXJzIGtlZXAgcnVubmluZyDigJQgYW5kIG9uZSB0aGF0IGJpbmQtbW91bnRzIHRoZSBzb2NrZXQgRklMRSBrZWVwcyB0aGUgZGVsZXRlZCBpbm9kZTogbWVhc3VyZWQgMjAyNi0xMC0wNCBvbgojIGRlbW8tZmVsaG9tLCB0aGUgY29udHJvbGxlciBhbmQgdHJhZWZpayB3ZXJlIGJsaW5kIHRvIERvY2tlciBmb3IgMWg0NG0uIEFmdGVyIGEgc3RlcCB0aGF0IGluc3RhbGxlZCBzb21ldGhpbmcsIHRoZQojIHdyYXBwZXIgcmVzdGFydHMgZXhhY3RseSB0aGUgY29udGFpbmVycyB0aGF0IG1vdW50IG9uZSBvZiB0aGVzZSBwYXRocyAobmV2ZXIgdGhlIGFwcHMsIG5ldmVyIHRoZSBlbmdpbmUpLgpET0NLRVJfU09DS0VUUyA9ICgiL3Zhci9ydW4vZG9ja2VyLnNvY2siLCAiL3J1bi9kb2NrZXIuc29jayIpCkNSQVNIX0dVQVJEX1NUQVRFID0gIi92YXIvbGliL2ZlbGhvbS1jcmFzaC1ndWFyZC9zdGF0ZS5qc29uIgoKIyAtLS0tLS0tLS0tIHRoZSBjb25maWcgYnVuZGxlIChSLTg0MCwgYWdlbnQgdjAuMTQzLjAsIGAxMWAgwqc1LjQuMikgLS0tLS0tLS0tLQojIEEgc2lnbmVkIGBhZ2VudF9jb25maWdfdXBkYXRlYCBqb2IgY2FycmllcyB7YWdlbnRfdmVyc2lvbiwgYnVuZGxlX3NoYTI1Nn07IHRoZSBidW5kbGUgaXMgT05FIEpTT04gZmlsZSBidWlsdCBmcm9tIHRoaXMKIyByZXBvJ3MgY29uZmlncy8gYXQgdGhlIGFnZW50IHRhZyAoc2NyaXB0cy9idWlsZC1jb25maWctYnVuZGxlLnB5KSBhbmQgcHVibGlzaGVkIGJlc2lkZSB0aGUgYmluYXJ5LiBUaGUgaW5zdGFsbGVyCiMgaW5zdGFsbHMgdGhlIFNBTUUgYnVuZGxlIHRocm91Z2ggdGhpcyBzYW1lIGNvZGUgKC0taW5zdGFsbC1idW5kbGUsIHJvb3Qgb25seSwgbmV2ZXIgcmVhY2hhYmxlIHRocm91Z2ggc3VkbyksIHNvIGEgbmV3CiMgYm94IGFuZCBhbiB1cGRhdGVkIGJveCBjYW5ub3QgZHJpZnQuIFRoaXMgdGFibGUgaXMgdGhlIE9OTFkgc2V0IG9mIHBhdGhzIGEgYnVuZGxlIG1heSB3cml0ZSDigJQgYSBzaWduZWQgYnVuZGxlIG5hbWluZwojIGFueSBvdGhlciBwYXRoIGlzIHJlZnVzZWQgKFIxNikg4oCUIGFuZCBpdCBpcyBhbHNvIHRoZSBidWlsZGVyJ3MgbGlzdCAob25lIHRhYmxlKS4gRWFjaCBlbnRyeToKIyAgIGRlc3Q6IChzb3VyY2UgZmlsZSB1bmRlciBjb25maWdzLywgbW9kZSwgY2hlY2ssIHBvbGljeSkKIyBjaGVjazogIHRoZSBjb250ZW50IGNoZWNrIEJFRk9SRSBhbnl0aGluZyBpcyB3cml0dGVuIChSMTgpOiBzdWRvZXJzIOKGkiB2aXN1ZG8gLWNmOyBzaCAvIGJhc2gg4oaSIC1uOyBweXRob24g4oaSIGNvbXBpbGU7CiMgICAgICAgICB1bml0IOKGkiBhIFtVbml0XS9bU2VydmljZV0vW1RpbWVyXSBzZWN0aW9uOyB1bml0LW5vcnQg4oaSIHRoYXQsIGFuZCBuZXZlciBSdW50aW1lRGlyZWN0b3J5PSAodGhlIEcxIGluY2lkZW50KTsKIyAgICAgICAgIGFnZW50LXVuaXQg4oaSIFVzZXI9ZmVsaG9tLWFnZW50OyBkcm9waW4g4oaSIGEgW1VuaXRdIHNlY3Rpb24gKFNGLTMpOyBuZnQg4oaSIG5mdCAtYyAtZjsgcGxhaW4g4oaSIG5vbmUuCiMgcG9saWN5OiByZXBsYWNlIOKGkiBhbHdheXMgd3JpdHRlbiB3aGVuIGl0IGRpZmZlcnM7IGlmLWFic2VudCDihpIgb25seSB3aGVuIHRoZSBib3ggaGFzIG5vbmUgKGEgc2V0dGluZyB0aGUgb3BlcmF0b3IgbWF5CiMgICAgICAgICBoYXZlIHR1bmVkKTsgb29iIOKGkiBvbmx5IG9uIGEgYm94IHdpdGggdGhlIE9PQiBiZWx0ICgvZXRjL2ZlbGhvbS1zc2hkIGV4aXN0cyDigJQgdGhlIGluc3RhbGxlcidzIC0tbm8tb29iIGxlYXZlcyBub25lKS4KIyBPcmRlciBtYXR0ZXJzOiB0aGUgc3Vkb2VycyBmaWxlcyBjb21lIExBU1QsIHNvIGEgcmVmZXJlbmNlZCB3cmFwcGVyIGlzIGluIHBsYWNlIGJlZm9yZSB0aGUgbGluZSB0aGF0IGFsbG93cyBpdC4KQlVORExFX0ZPUk1BVCA9IDEKQlVORExFX09QID0gImFnZW50X2NvbmZpZ191cGRhdGUiCkJVTkRMRV9SRUNPUkQgPSAiL2V0Yy9mZWxob20vY29uZmlnLWJ1bmRsZS5qc29uIiAgICAgIyB3aGF0IHRoZSBib3ggcnVucyAoMDY0NCByb290OyB0aGUgbm9uLXJvb3QgYWdlbnQgcmVwb3J0cyBpdCkKQlVORExFX1BSRVZfRElSID0gIi92YXIvbGliL2ZlbGhvbS1vcy1hcHBseS9idW5kbGUtcHJldiIgICMgdGhlIHByZXZpb3VzIGNvcGllcyBvZiBldmVyeSBmaWxlIGEgYnVuZGxlIHJlcGxhY2VkCkJVTkRMRV9LRUVQID0gMwpCVU5ETEVfTUFYX0JZVEVTID0gNCAqIDEwMjQgKiAxMDI0CkJVTkRMRV9SRSA9IHJlLmNvbXBpbGUociJeYnVuZGxlLVswLTldK1wuWzAtOV0rXC5bMC05XSsoLVswLTlBLVphLXouXSspP1wuanNvbiQiKQpPT0JfRElSID0gIi9ldGMvZmVsaG9tLXNzaGQiCkJVTkRMRV9GSUxFUyA9IFsKICAgICgiL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1ta2ZzLWd1YXJkZWQiLCAiZmVsaG9tLW1rZnMtZ3VhcmRlZC5zaCIsIDBvNzU1LCAiYmFzaCIsICJyZXBsYWNlIiksCiAgICAoIi91c3IvbG9jYWwvc2Jpbi9mZWxob20tc2VsZnVwZGF0ZS1ndWFyZGVkIiwgImZlbGhvbS1zZWxmdXBkYXRlLWd1YXJkZWQiLCAwbzc1NSwgInNoIiwgInJlcGxhY2UiKSwKICAgICgiL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1wYnMtYXBwbHkiLCAiZmVsaG9tLXBicy1hcHBseSIsIDBvNzU1LCAiYmFzaCIsICJyZXBsYWNlIiksCiAgICAoIi91c3IvbG9jYWwvc2Jpbi9mZWxob20tYmFja3VwLXRhcmdldC1hcHBseSIsICJmZWxob20tYmFja3VwLXRhcmdldC1hcHBseSIsIDBvNzU1LCAiYmFzaCIsICJyZXBsYWNlIiksCiAgICAoIi91c3IvbG9jYWwvc2Jpbi9mZWxob20tb3MtYXBwbHkiLCAiZmVsaG9tLW9zLWFwcGx5IiwgMG83NTUsICJweXRob24iLCAicmVwbGFjZSIpLAogICAgKCIvdXNyL2xvY2FsL3NiaW4vZmVsaG9tLWNyYXNoLWd1YXJkIiwgImZlbGhvbS1jcmFzaC1ndWFyZCIsIDBvNzU1LCAicHl0aG9uIiwgInJlcGxhY2UiKSwKICAgICgiL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mZWxob20tY3Jhc2gtZ3VhcmQuc2VydmljZSIsICJmZWxob20tY3Jhc2gtZ3VhcmQuc2VydmljZSIsIDBvNjQ0LCAidW5pdCIsICJyZXBsYWNlIiksCiAgICAoIi9ldGMvc3lzdGVtZC9zeXN0ZW0vZmVsaG9tLWNyYXNoLWd1YXJkLWNoZWNrLnNlcnZpY2UiLCAiZmVsaG9tLWNyYXNoLWd1YXJkLWNoZWNrLnNlcnZpY2UiLCAwbzY0NCwgInVuaXQiLCAicmVwbGFjZSIpLAogICAgKCIvZXRjL3N5c3RlbWQvc3lzdGVtL2ZlbGhvbS1jcmFzaC1ndWFyZC1jaGVjay50aW1lciIsICJmZWxob20tY3Jhc2gtZ3VhcmQtY2hlY2sudGltZXIiLCAwbzY0NCwgInVuaXQiLCAicmVwbGFjZSIpLAogICAgKCIvZXRjL2ZlbGhvbS9jcmFzaC1ndWFyZC5jb25mIiwgImNyYXNoLWd1YXJkLmNvbmYiLCAwbzY0NCwgInBsYWluIiwgImlmLWFic2VudCIpLAogICAgKCIvZXRjL3N5c3RlbWQvc3lzdGVtL2ZlbGhvbS1hZ2VudC5zZXJ2aWNlIiwgImZlbGhvbS1hZ2VudC5zZXJ2aWNlIiwgMG82NDQsICJhZ2VudC11bml0IiwgInJlcGxhY2UiKSwKICAgICgiL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mZWxob20tYWdlbnQtcm9sbGJhY2suc2VydmljZSIsICJmZWxob20tYWdlbnQtcm9sbGJhY2suc2VydmljZSIsIDBvNjQ0LCAidW5pdCIsICJyZXBsYWNlIiksCiAgICAoIi9ldGMvc3lzdGVtZC9zeXN0ZW0vZmVsaG9tLWFnZW50LnNlcnZpY2UuZC9mZWxob20tYWdlbnQtbGltaXRzLmNvbmYiLCAiZmVsaG9tLWFnZW50LWxpbWl0cy5jb25mIiwgMG82NDQsICJkcm9waW4iLCAicmVwbGFjZSIpLAogICAgKCIvdXNyL2xvY2FsL3NiaW4vZmVsaG9tLW1nbXQtd2F0Y2hkb2ciLCAiZmVsaG9tLW1nbXQtd2F0Y2hkb2cuc2giLCAwbzc1NSwgInNoIiwgInJlcGxhY2UiKSwKICAgICgiL2V0Yy90bXBmaWxlcy5kL2ZlbGhvbS1wcml2c2VwLmNvbmYiLCAiZmVsaG9tLXByaXZzZXAudG1wZmlsZXMiLCAwbzY0NCwgInBsYWluIiwgInJlcGxhY2UiKSwKICAgICgiL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mZWxob20tbWdtdC13YXRjaGRvZy5zZXJ2aWNlIiwgImZlbGhvbS1tZ210LXdhdGNoZG9nLnNlcnZpY2UiLCAwbzY0NCwgInVuaXQtbm9ydCIsICJyZXBsYWNlIiksCiAgICAoIi9ldGMvc3lzdGVtZC9zeXN0ZW0vZmVsaG9tLW1nbXQtd2F0Y2hkb2cudGltZXIiLCAiZmVsaG9tLW1nbXQtd2F0Y2hkb2cudGltZXIiLCAwbzY0NCwgInVuaXQtbm9ydCIsICJyZXBsYWNlIiksCiAgICAoIi9ldGMvc3lzdGVtZC9zeXN0ZW0vZmVsaG9tLXNzaGQuc2VydmljZSIsICJmZWxob20tc3NoZC5zZXJ2aWNlIiwgMG82NDQsICJ1bml0LW5vcnQiLCAib29iIiksCiAgICAoIi9ldGMvZmVsaG9tLW9vYi5uZnQiLCAiZmVsaG9tLW9vYi5uZnQiLCAwbzY0NCwgIm5mdCIsICJvb2IiKSwKICAgICgiL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mZWxob20tb29iLW5mdC5zZXJ2aWNlIiwgImZlbGhvbS1vb2ItbmZ0LnNlcnZpY2UiLCAwbzY0NCwgInVuaXQiLCAib29iIiksCiAgICAoIi9ldGMvc3Vkb2Vycy5kL2ZlbGhvbS1vcCIsICJmZWxob20tb3Auc3Vkb2VycyIsIDBvNDQwLCAic3Vkb2VycyIsICJvb2IiKSwKICAgICgiL2V0Yy9zdWRvZXJzLmQvZmVsaG9tLWFnZW50IiwgImZlbGhvbS1hZ2VudC5zdWRvZXJzIiwgMG80NDAsICJzdWRvZXJzIiwgInJlcGxhY2UiKSwKXQpCVU5ETEVfREVTVFMgPSB7ZVswXTogZSBmb3IgZSBpbiBCVU5ETEVfRklMRVN9CiMgVGhlIHRydXN0IHJvb3QgaXMgbmV2ZXIgYSBidW5kbGUncyB0byBjaGFuZ2UgKFIxNyk6IHdobyBtYXkgc2lnbiBpcyBkZWNpZGVkIGJ5IHRoZXNlIGZpbGVzLCBzbyBubyBidW5kbGUgbWF5IGNhcnJ5IHRoZW0uClRSVVNUX1BBVEhTID0gKFRSVVNUX0ZJTEUsIFRSVVNUX1NJR05FUlMsIEJVTkRMRV9SRUNPUkQpCiMgV2hlbiAvZXRjL2ZlbGhvbS9vcGVyYXRvci1zaWduZXJzIGlzIE1JU1NJTkcgKGEgYm94IGluc3RhbGxlZCBiZWZvcmUgaW5zdGFsbGVyIDEuMzAuMCksIHRoZSBqb2IgaXMgdmVyaWZpZWQgYWdhaW5zdCDigJQKIyBhbmQgdGhlIGZpbGUgaXMgY3JlYXRlZCB3aXRoIOKAlCBleGFjdGx5IHRoaXMga2V5OiB0aGUgb3BlcmF0aW9uYWwga2V5IGZlbGhvbS1ob3N0LWluc3RhbGwuc2ggcGlucwojIChPUEVSQVRPUl9LRVlfT1BFUkFUSU9OQUxfKikuIE5ldmVyIGFueSBvdGhlci4gUGlubmVkIGVxdWFsIHRvIHRoZSBpbnN0YWxsZXIgYnkKIyB0ZXN0X3Bpbm5lZF9vcGVyYXRvcl9rZXlfZXF1YWxzX3RoZV9pbnN0YWxsZXJzLiBTaWduZXIgcm90YXRpb24gaXMgYSBzZXBhcmF0ZSwgbGF0ZXIgYWN0IChgMDRgIMKnMykuClBJTk5FRF9PUEVSQVRPUl9LRVlfSUQgPSAiZmVsaG9tLW9wLTEiClBJTk5FRF9PUEVSQVRPUl9LRVlfTElORSA9ICgic3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUw4ejBxQ05nQTN4Mnh4QUIwUWo1cm84d2FGakdaOFRhL3NXQjYzdGxMdysgZmVsaG9tLW9wLTEiKQojIFRoZSBzZWxmLWNoZWNrIChhZnRlciBpbnN0YWxsLCBiZWZvcmUgdGhlIHJlY29yZCk6IHRoZSByb3V0ZSBpdHNlbGYgbXVzdCBzdXJ2aXZlIOKAlCBhIGJ1bmRsZSB3aG9zZSBzdWRvZXJzIG5vIGxvbmdlcgojIGxldHMgdGhlIGFnZW50IGNhbGwgdGhpcyB3cmFwcGVyIHdvdWxkIGN1dCB0aGUgYm94IG9mZiBmcm9tIGV2ZXJ5IGxhdGVyIGJ1bmRsZS4KU0VMRl9DSEVDS19TVURPX0xJTkUgPSAiL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1vcy1hcHBseSAtLXBsYW4gL3Zhci9saWIvZmVsaG9tLWFnZW50L29zL3BsYW4tKi5qc29uIgpQSU5ORURfU0lHTkVSUyA9ICI8cGlubmVkIG9wZXJhdG9yIGtleT4iICAgIyB2ZXJpZnlfc2lnOiBjaGVjayBhZ2FpbnN0IHRoZSBwaW5uZWQga2V5LCBub3QgYSBmaWxlIG9uIHRoZSBib3gKCgpkZWYgcGlubmVkX3NpZ25lcnNfbGluZSgpOgogICAgIiIiVGhlIHNzaCBhbGxvd2VkX3NpZ25lcnMgbGluZSB0aGUgaW5zdGFsbGVyIHdyaXRlcyAoZmVsaG9tLWhvc3QtaW5zdGFsbC5zaCBfd3JpdGVfc2xvd19sYW5lX3RydXN0KSwgYnl0ZSBmb3IgYnl0ZS4iIiIKICAgIHJldHVybiBmJ3tQSU5ORURfT1BFUkFUT1JfS0VZX0lEfSBuYW1lc3BhY2VzPSJ7U0lHX05BTUVTUEFDRX0iIHtQSU5ORURfT1BFUkFUT1JfS0VZX0xJTkV9XG4nCgoKZGVmIHNoYTI1Nl9oZXgoZGF0YSk6CiAgICBpbXBvcnQgaGFzaGxpYgogICAgcmV0dXJuIGhhc2hsaWIuc2hhMjU2KGRhdGEpLmhleGRpZ2VzdCgpCgoKY2xhc3MgUmVmdXNlZChFeGNlcHRpb24pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGUsIHJlYXNvbik6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhmIntjb2RlfSB7cmVhc29ufSIpCiAgICAgICAgc2VsZi5jb2RlLCBzZWxmLnJlYXNvbiA9IGNvZGUsIHJlYXNvbgoKCmNsYXNzIFJ1bm5lcjoKICAgICIiIlJ1bnMgY29tbWFuZHMgZm9yIHJlYWwuIFRlc3RzIHJlcGxhY2UgaXQgd2l0aCBhIGZha2UuIGBndWVzdGAgcnVucyBpbnNpZGUgdGhlIGNvbnRhaW5lciB2aWEgcGN0IGV4ZWMuIiIiCgogICAgZGVmIGhvc3Qoc2VsZiwgYXJndiwgdGltZW91dD02MDAsIHN0ZGluPU5vbmUpOgogICAgICAgIHAgPSBzdWJwcm9jZXNzLnJ1bihhcmd2LCBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUsIHRpbWVvdXQ9dGltZW91dCwgaW5wdXQ9c3RkaW4pCiAgICAgICAgcmV0dXJuIHAucmV0dXJuY29kZSwgcC5zdGRvdXQsIHAuc3RkZXJyCgogICAgZGVmIGd1ZXN0KHNlbGYsIHZtaWQsIGFyZ3YsIHRpbWVvdXQ9MTgwMCk6CiAgICAgICAgcmV0dXJuIHNlbGYuaG9zdChbIi91c3Ivc2Jpbi9wY3QiLCAiZXhlYyIsIHN0cih2bWlkKSwgIi0tIl0gKyBhcmd2LCB0aW1lb3V0KQoKICAgIGRlZiByZWFkX2ZpbGUoc2VsZiwgcGF0aCk6CiAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CiAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQoKICAgIGRlZiBzdGF0KHNlbGYsIHBhdGgpOgogICAgICAgIHJldHVybiBvcy5sc3RhdChwYXRoKQoKICAgIGRlZiBhZ2VudF91aWQoc2VsZik6CiAgICAgICAgaW1wb3J0IHB3ZAogICAgICAgIHJldHVybiBwd2QuZ2V0cHduYW0oQUdFTlRfVVNFUikucHdfdWlkCgogICAgZGVmIHdyaXRlX2ZpbGUoc2VsZiwgbGF5ZXIsIHZtaWQsIHBhdGgsIGJvZHkpOgogICAgICAgICIiIldyaXRlIGEgc21hbGwgdGV4dCBmaWxlIGluIHRoZSB0YXJnZXQgbGF5ZXIg4oCUIG5ldmVyIHZpYSBhIHNoZWxsIHN0cmluZy4iIiIKICAgICAgICBpZiBsYXllciA9PSAiaG9zdCI6CiAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICBmLndyaXRlKGJvZHkpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIHJjLCBfLCBfID0gc2VsZi5ob3N0KFsiL3Vzci9zYmluL3BjdCIsICJleGVjIiwgc3RyKHZtaWQpLCAiLS0iLCAidGVlIiwgcGF0aF0sIDYwLCBzdGRpbj1ib2R5KQogICAgICAgIGlmIHJjICE9IDA6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlI3IiwgZiJjb3VsZCBub3Qgd3JpdGUge3BhdGh9IGluIHRoZSBndWVzdCIpCgogICAgZGVmIHNhdmVfcmVwb3J0KHNlbGYsIHBsYW5fcGF0aCwgcmVwb3J0KToKICAgICAgICAiIiJSLTg2ODoga2VlcCBhbiBhcHBseSBwYXNzJ3MgcmVwb3J0IG9uIGRpc2sgdW50aWwgdGhlIGFnZW50IGhhcyBzZW50IGl0ICh0aGUgYWdlbnQgZGVsZXRlcyBpdCkuIFdyaXR0ZW4KICAgICAgICBJTlRPIHRoZSBhZ2VudCdzIG93biBwbGFuIGRpciBhcyByb290LCBzbzogdGhlIGRpciBpcyBvcGVuZWQgd2l0aCBPX05PRk9MTE9XIGFuZCBtdXN0IGJlIGEgcmVhbCBkaXJlY3RvcnkKICAgICAgICBvd25lZCBieSB0aGUgYWdlbnQgKGEgc3ltbGluayBzd2FwcGVkIGluIGZvciBpdCBpcyByZWZ1c2VkKTsgdGhlIGZpbGUgaXMgY3JlYXRlZCBPX0VYQ0x8T19OT0ZPTExPVyBhZnRlcgogICAgICAgIHJlbW92aW5nIGFuIG9sZCBvbmUsIHRoZW4gaGFuZGVkIHRvIHRoZSBhZ2VudCAoMDYwMCkuIEFueSBmYWlsdXJlIG9ubHkgbG9zZXMgdGhlIGNvcHkg4oCUIG5ldmVyIHRoZSBydW4uIiIiCiAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUocGxhbl9wYXRoKQogICAgICAgIG5hbWUgPSAicmVwb3J0LSIgKyBiYXNlW2xlbigicGxhbi0iKTpdCiAgICAgICAgZGZkID0gb3Mub3BlbihQTEFOX0RJUiwgb3MuT19SRE9OTFkgfCBvcy5PX0RJUkVDVE9SWSB8IG9zLk9fTk9GT0xMT1cpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzdCA9IG9zLmZzdGF0KGRmZCkKICAgICAgICAgICAgaWYgbm90IHN0YXQuU19JU0RJUihzdC5zdF9tb2RlKSBvciBzdC5zdF91aWQgIT0gc2VsZi5hZ2VudF91aWQoKToKICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZiJ7UExBTl9ESVJ9IGlzIG5vdCB0aGUgYWdlbnQncyBvd24gZGlyZWN0b3J5IikKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgb3MudW5saW5rKG5hbWUsIGRpcl9mZD1kZmQpCiAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgZmQgPSBvcy5vcGVuKG5hbWUsIG9zLk9fV1JPTkxZIHwgb3MuT19DUkVBVCB8IG9zLk9fRVhDTCB8IG9zLk9fTk9GT0xMT1csIDBvNjAwLCBkaXJfZmQ9ZGZkKQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvcy53cml0ZShmZCwgKGpzb24uZHVtcHMocmVwb3J0LCBzb3J0X2tleXM9VHJ1ZSkgKyAiXG4iKS5lbmNvZGUoKSkKICAgICAgICAgICAgICAgIG9zLmZjaG93bihmZCwgc2VsZi5hZ2VudF91aWQoKSwgLTEpCiAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICBvcy5jbG9zZShkZmQpCiAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihQTEFOX0RJUiwgbmFtZSkKCiAgICBkZWYgbm93KHNlbGYpOgogICAgICAgIHJldHVybiB0aW1lLnRpbWUoKQoKICAgIGRlZiBzbGVlcChzZWxmLCBzKToKICAgICAgICB0aW1lLnNsZWVwKHMpCgogICAgZGVmIHZlcmlmeV9zaWcoc2VsZiwgc2lnbmVycywga2V5X2lkLCBuYW1lc3BhY2UsIGJsb2IsIHNpZyk6CiAgICAgICAgIiIiYHNzaC1rZXlnZW4gLVkgdmVyaWZ5YCBvdmVyIHRoZSBFWEFDVCBzaWduZWQgYnl0ZXMuIEZpbGVzIGluIGEgcm9vdC1vbmx5IHRlbXAgZGlyOyBub3RoaW5nIHZpYSBhIHNoZWxsLiIiIgogICAgICAgIGltcG9ydCB0ZW1wZmlsZQogICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0iZmVsaG9tLW9zLWFwcGx5LSIpIGFzIGQ6CiAgICAgICAgICAgIHNwID0gb3MucGF0aC5qb2luKGQsICJzaWciKQogICAgICAgICAgICB3aXRoIG9wZW4oc3AsICJ3IikgYXMgZjoKICAgICAgICAgICAgICAgIGYud3JpdGUoc2lnKQogICAgICAgICAgICBpZiBzaWduZXJzID09IFBJTk5FRF9TSUdORVJTOgogICAgICAgICAgICAgICAgc2lnbmVycyA9IG9zLnBhdGguam9pbihkLCAiYWxsb3dlZF9zaWduZXJzIikKICAgICAgICAgICAgICAgIHdpdGggb3BlbihzaWduZXJzLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgZi53cml0ZShwaW5uZWRfc2lnbmVyc19saW5lKCkpCiAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLnJ1bihbInNzaC1rZXlnZW4iLCAiLVkiLCAidmVyaWZ5IiwgIi1mIiwgc2lnbmVycywgIi1JIiwga2V5X2lkLCAiLW4iLCBuYW1lc3BhY2UsICItcyIsIHNwXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0PWJsb2IsIGNhcHR1cmVfb3V0cHV0PVRydWUsIHRpbWVvdXQ9MzApCiAgICAgICAgICAgIHJldHVybiBwLnJldHVybmNvZGUKCiAgICBkZWYgcmVhZF9ub25jZXMoc2VsZik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICB3aXRoIG9wZW4oTk9OQ0VfRklMRSkgYXMgZjoKICAgICAgICAgICAgICAgIGQgPSBqc29uLmxvYWQoZikKICAgICAgICAgICAgcmV0dXJuIGQgaWYgaXNpbnN0YW5jZShkLCBkaWN0KSBlbHNlIHt9CiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgcmV0dXJuIHt9CgogICAgZGVmIHdyaXRlX25vbmNlcyhzZWxmLCBkKToKICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmRpcm5hbWUoTk9OQ0VfRklMRSksIG1vZGU9MG83MDAsIGV4aXN0X29rPVRydWUpCiAgICAgICAgdG1wID0gTk9OQ0VfRklMRSArICIudG1wIgogICAgICAgIHdpdGggb3Blbih0bXAsICJ3IikgYXMgZjoKICAgICAgICAgICAganNvbi5kdW1wKGQsIGYpCiAgICAgICAgb3MucmVwbGFjZSh0bXAsIE5PTkNFX0ZJTEUpCgogICAgZGVmIGxvZyhzZWxmLCBsaW5lKToKICAgICAgICAjIFItODY4ICh2MC4xNDQuMSk6IHRoZSBhZ2VudCB0aGF0IHJlYWRzIHN0ZGVyciBtYXkgYmUgR09ORSAoa2lsbGVkIG1pZC1wYXNzLCBtZWFzdXJlZCBsaXZlIG9uIGRlbW8taHAKICAgICAgICAjIDIwMjYtMTAtMDUpOiB0aGUgd3JpdGUgdGhlbiByYWlzZXMgQnJva2VuUGlwZUVycm9yLCBhbmQgdjAuMTQ0LjAgZGllZCByaWdodCB0aGVyZSDigJQgYWZ0ZXIgYXB0IGhhZCBpbnN0YWxsZWQKICAgICAgICAjIGV2ZXJ5dGhpbmcsIGJlZm9yZSB0aGUgcmVwb3J0IGNvcHkgd2FzIHNhdmVkLiBBIGRlYWQgcmVhZGVyIG11c3QgbmV2ZXIgc3RvcCB0aGUgcGFzczsgdGhlIGpvdXJuYWwgc3RpbGwKICAgICAgICAjIGdldHMgZXZlcnkgbGluZS4gUGlubmVkIGJ5IEFnZW50RGllc01pZFBhc3MuCiAgICAgICAgdHJ5OgogICAgICAgICAgICBwcmludChsaW5lLCBmaWxlPXN5cy5zdGRlcnIsIGZsdXNoPVRydWUpCiAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgIHBhc3MKICAgICAgICB0cnk6CiAgICAgICAgICAgIHN1YnByb2Nlc3MucnVuKFsibG9nZ2VyIiwgIi10IiwgImZlbGhvbS1vcy1hcHBseSIsIGxpbmVdLCB0aW1lb3V0PTEwKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIHBhc3MKCiAgICAjIC0tLS0tLS0tLS0gaG9zdCBmaWxlcywgZm9yIHRoZSBjb25maWcgYnVuZGxlIChSLTg0MCkuIFRlc3RzIHJlcGxhY2UgdGhlc2Ugd2l0aCBhbiBpbi1tZW1vcnkgdHJlZS4gLS0tLS0tLS0tLQogICAgZGVmIHJlYWRfYnl0ZXMoc2VsZiwgcGF0aCk6CiAgICAgICAgd2l0aCBvcGVuKHBhdGgsICJyYiIpIGFzIGY6CiAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQoKICAgIGRlZiBsZXhpc3RzKHNlbGYsIHBhdGgpOgogICAgICAgIHJldHVybiBvcy5wYXRoLmxleGlzdHMocGF0aCkKCiAgICBkZWYgaXNkaXIoc2VsZiwgcGF0aCk6CiAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNkaXIocGF0aCkKCiAgICBkZWYgcHV0X2ZpbGUoc2VsZiwgcGF0aCwgZGF0YSwgbW9kZSk6CiAgICAgICAgIiIiQXRvbWljOiBhIHJvb3Qtb3duZWQgdGVtcCBmaWxlIGJlc2lkZSB0aGUgdGFyZ2V0IChzYW1lIGZpbGVzeXN0ZW0pLCBmc3luYywgdGhlbiByZW5hbWUgb3ZlciBpdC4iIiIKICAgICAgICBkID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCiAgICAgICAgb3MubWFrZWRpcnMoZCwgbW9kZT0wbzc1NSwgZXhpc3Rfb2s9VHJ1ZSkKICAgICAgICB0bXAgPSBvcy5wYXRoLmpvaW4oZCwgZiIue29zLnBhdGguYmFzZW5hbWUocGF0aCl9LmZlbGhvbS1uZXcue29zLmdldHBpZCgpfSIpCiAgICAgICAgZmQgPSBvcy5vcGVuKHRtcCwgb3MuT19XUk9OTFkgfCBvcy5PX0NSRUFUIHwgb3MuT19FWENMLCAwbzYwMCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHdpdGggb3MuZmRvcGVuKGZkLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQogICAgICAgICAgICAgICAgZi5mbHVzaCgpCiAgICAgICAgICAgICAgICBvcy5mY2hvd24oZi5maWxlbm8oKSwgMCwgMCkKICAgICAgICAgICAgICAgIG9zLmZjaG1vZChmLmZpbGVubygpLCBtb2RlKQogICAgICAgICAgICAgICAgb3MuZnN5bmMoZi5maWxlbm8oKSkKICAgICAgICAgICAgb3MucmVwbGFjZSh0bXAsIHBhdGgpCiAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0bXApCiAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICByYWlzZQoKICAgIGRlZiByZW1vdmUoc2VsZiwgcGF0aCk6CiAgICAgICAgb3MucmVtb3ZlKHBhdGgpCgogICAgZGVmIGxpc3RfZGlyKHNlbGYsIHBhdGgpOgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIHNvcnRlZChvcy5saXN0ZGlyKHBhdGgpKQogICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICByZXR1cm4gW10KCiAgICBkZWYgcm10cmVlKHNlbGYsIHBhdGgpOgogICAgICAgIGltcG9ydCBzaHV0aWwKICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKCiAgICBkZWYgY2hlY2tfY29udGVudChzZWxmLCBraW5kLCBkYXRhKToKICAgICAgICAiIiJSdW4gYW4gZXh0ZXJuYWwgc3ludGF4IGNoZWNrIG9uIGEgcm9vdC1vbmx5IHRlbXAgY29weS4gUmV0dXJucyAocmMsIG1lc3NhZ2UpLiIiIgogICAgICAgIGltcG9ydCB0ZW1wZmlsZQogICAgICAgIGNtZCA9IHsic3Vkb2VycyI6IFsidmlzdWRvIiwgIi1jZiJdLCAic2giOiBbInNoIiwgIi1uIl0sICJiYXNoIjogWyJiYXNoIiwgIi1uIl0sICJuZnQiOiBbIm5mdCIsICItYyIsICItZiJdfVtraW5kXQogICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0iZmVsaG9tLWJ1bmRsZS0iKSBhcyBkOgogICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKGQsICJmIikKICAgICAgICAgICAgd2l0aCBvcGVuKHAsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCiAgICAgICAgICAgIHIgPSBzdWJwcm9jZXNzLnJ1bihjbWQgKyBbcF0sIGNhcHR1cmVfb3V0cHV0PVRydWUsIHRleHQ9VHJ1ZSwgdGltZW91dD02MCkKICAgICAgICAgICAgcmV0dXJuIHIucmV0dXJuY29kZSwgKHIuc3Rkb3V0ICsgci5zdGRlcnIpLnN0cmlwKClbLTMwMDpdCgoKY2xhc3MgQXBwbHk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcnVubmVyLCBwbGFuX3BhdGgpOgogICAgICAgIHNlbGYuciA9IHJ1bm5lcgogICAgICAgIHNlbGYucGxhbl9wYXRoID0gcGxhbl9wYXRoCiAgICAgICAgc2VsZi5yZXBvcnQgPSB7InJlZnVzZWQiOiBOb25lLCAibW9kZSI6IE5vbmV9CgogICAgIyAtLS0tLS0tLS0tIGNoZWNrcyAtLS0tLS0tLS0tCiAgICBkZWYgbG9hZF9wbGFuKHNlbGYpOgogICAgICAgIHAgPSBzZWxmLnBsYW5fcGF0aAogICAgICAgIGQsIGJhc2UgPSBvcy5wYXRoLmRpcm5hbWUocCksIG9zLnBhdGguYmFzZW5hbWUocCkKICAgICAgICBpZiBkICE9IFBMQU5fRElSIG9yIG5vdCBQTEFOX1JFLm1hdGNoKGJhc2UpIG9yICIuLiIgaW4gcDoKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjEiLCBmInRoZSBwbGFuIG11c3QgYmUge1BMQU5fRElSfS9wbGFuLTxpZD4uanNvbiwgZ290IHtwIXJ9IikKICAgICAgICB0cnk6CiAgICAgICAgICAgIHN0ID0gc2VsZi5yLnN0YXQocCkKICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMSIsIGYiY2Fubm90IHN0YXQgdGhlIHBsYW46IHtlfSIpCiAgICAgICAgaWYgbm90IHN0YXQuU19JU1JFRyhzdC5zdF9tb2RlKToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjEiLCAidGhlIHBsYW4gaXMgbm90IGEgcmVndWxhciBmaWxlIChhIHN5bWxpbmsgb3IgYSBkZXZpY2UgaXMgcmVmdXNlZCkiKQogICAgICAgIGlmIHN0LnN0X3VpZCAhPSBzZWxmLnIuYWdlbnRfdWlkKCk6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxIiwgZiJ0aGUgcGxhbiBpcyBub3Qgb3duZWQgYnkge0FHRU5UX1VTRVJ9IikKICAgICAgICBpZiBzdC5zdF9zaXplID4gMiAqIDEwMjQgKiAxMDI0OgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMSIsICJ0aGUgcGxhbiBpcyBsYXJnZXIgdGhhbiAyIE1CIikKICAgICAgICB0cnk6CiAgICAgICAgICAgIHBsYW4gPSBqc29uLmxvYWRzKHNlbGYuci5yZWFkX2ZpbGUocCkpCiAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKSBhcyBlOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMSIsIGYidGhlIHBsYW4gaXMgbm90IHZhbGlkIEpTT046IHtlfSIpCiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocGxhbiwgZGljdCk6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxIiwgInRoZSBwbGFuIGlzIG5vdCBhIEpTT04gb2JqZWN0IikKICAgICAgICByZXR1cm4gcGxhbgoKICAgIGRlZiBjaGVja19wbGFuKHNlbGYsIHBsYW4pOgogICAgICAgIG1vZGUgPSBwbGFuLmdldCgibW9kZSIsICJhcHBseSIpCiAgICAgICAgaWYgbW9kZSBub3QgaW4gKCJhcHBseSIsICJpbnZlbnRvcnkiLCAiaGVhbHRoIiwgImZhY3RzIiwgImxpdmUtcmVzdG9yZS1vbiIsICJidW5kbGUiKToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjExIiwgZiJ1bmtub3duIG1vZGUge21vZGUhcn0iKQogICAgICAgIGlmIG1vZGUgPT0gImJ1bmRsZSI6CiAgICAgICAgICAgIGlmIHBsYW4uZ2V0KCJsYXllciIpICE9ICJob3N0IjoKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxMSIsICJidW5kbGUgaXMgYSBob3N0LWxheWVyIG1vZGUiKQogICAgICAgICAgICByZXR1cm4gbW9kZSwgImhvc3QiLCAwLCAiYnVuZGxlIgogICAgICAgIGxheWVyID0gcGxhbi5nZXQoImxheWVyIikKICAgICAgICBpZiBsYXllciBub3QgaW4gKCJndWVzdCIsICJob3N0IiwgImRvY2tlciIpOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTIiLCBmImxheWVyIHtsYXllciFyfSBpcyBub3QgZ3Vlc3QsIGhvc3Qgb3IgZG9ja2VyIikKICAgICAgICBsYW5lID0gcGxhbi5nZXQoImxhbmUiLCAiZmFzdCIpCiAgICAgICAgaWYgbGF5ZXIgPT0gImRvY2tlciIgYW5kIGxhbmUgIT0gInNsb3ciOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsICJ0aGUgRG9ja2VyIGVuZ2luZSBpcyB0aGUgc2xvdyBsYW5lIChgMTFgIMKnNS44KTsgYSBmYXN0LWxhbmUgRG9ja2VyIHBsYW4gaXMgcmVmdXNlZCIpCiAgICAgICAgaWYgbGF5ZXIgIT0gImRvY2tlciIgYW5kIGxhbmUgIT0gImZhc3QiOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsIGYidGhlIHtsYXllcn0gbGF5ZXIgaGFzIG5vIHNsb3cgbGFuZSBpbiB0aGlzIHJlbGVhc2UgKGtlcm5lbCwgUHJveG1veDogYDExYCDCpzggc3RlcCA2KSIpCiAgICAgICAgaWYgbW9kZSA9PSAiZmFjdHMiIGFuZCBsYXllciAhPSAiaG9zdCI6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxMSIsICJmYWN0cyBpcyBhIGhvc3QtbGF5ZXIgbW9kZSAoaXQgcmVhZHMgdGhlIGhvc3QgYW5kIHRoZSBndWVzdCkiKQogICAgICAgIGlmIG1vZGUgPT0gImxpdmUtcmVzdG9yZS1vbiIgYW5kIGxheWVyICE9ICJndWVzdCI6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxMSIsICJsaXZlLXJlc3RvcmUtb24gaXMgYSBndWVzdC1sYXllciBtb2RlIikKICAgICAgICBpZiBwbGFuLmdldCgidW5kbyIpIGFuZCBsYXllciAhPSAiZG9ja2VyIjoKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjUiLCAiYW4gdW5kbyAoZG93bmdyYWRlKSBleGlzdHMgb25seSBmb3IgdGhlIERvY2tlciBsYXllciwgaW5zaWRlIGEgc2lnbmVkIGpvYiIpCiAgICAgICAgdm1pZCA9IHBsYW4uZ2V0KCJ2bWlkIikKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2bWlkLCBpbnQpIG9yIGlzaW5zdGFuY2Uodm1pZCwgYm9vbCkgb3Igdm1pZCA8PSAwOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTEiLCBmInZtaWQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdvdCB7dm1pZCFyfSIpCiAgICAgICAgcmlkID0gcGxhbi5nZXQoInJlbGVhc2VfaWQiLCAiIikKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyaWQsIHN0cikgb3Igbm90IHJlLm1hdGNoKHIiXltBLVphLXowLTkuXzotXXsxLDgwfSQiLCByaWQpOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTEiLCBmInJlbGVhc2VfaWQge3JpZCFyfSBpcyBub3QgYSBwbGFpbiBpZCIpCiAgICAgICAgaWYgcGxhbi5nZXQoImFsbG93X25ldyIpOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSNiIsICJhbGxvd19uZXcgaXMgYSBzbG93LWxhbmUgZmllbGQ7IHRoZSBmYXN0IGxhbmUgbmV2ZXIgYWRkcyBhIHBhY2thZ2UiKQogICAgICAgIHNlbGVjdCA9IHBsYW4uZ2V0KCJzZWxlY3QiLCAibGlzdGVkIikKICAgICAgICBpZiBzZWxlY3Qgbm90IGluICgibGlzdGVkIiwgInBlbmRpbmctZmFzdCIsICJwZW5kaW5nLWRvY2tlciIpOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTEiLCBmInVua25vd24gc2VsZWN0IHtzZWxlY3Qhcn0iKQogICAgICAgIGlmIChzZWxlY3QgPT0gInBlbmRpbmctZG9ja2VyIikgIT0gKGxheWVyID09ICJkb2NrZXIiIGFuZCBzZWxlY3QgIT0gImxpc3RlZCIpOgogICAgICAgICAgICBpZiBzZWxlY3QgPT0gInBlbmRpbmctZG9ja2VyIiBvciBsYXllciA9PSAiZG9ja2VyIjoKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxMSIsIGYic2VsZWN0IHtzZWxlY3Qhcn0gZG9lcyBub3QgZml0IGxheWVyIHtsYXllciFyfSIpCiAgICAgICAgcGsgPSBwbGFuLmdldCgicGFja2FnZXMiLCBbXSkKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwaywgbGlzdCk6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxMSIsICJwYWNrYWdlcyBtdXN0IGJlIGEgbGlzdCIpCiAgICAgICAgaWYgbW9kZSA9PSAiYXBwbHkiIGFuZCBzZWxlY3QgPT0gImxpc3RlZCIgYW5kIG5vdCBwazoKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjExIiwgInBhY2thZ2VzIG11c3QgYmUgYSBub24tZW1wdHkgbGlzdCBpbiBhcHBseSBtb2RlIChzZWxlY3QgbGlzdGVkKSIpCiAgICAgICAgaWYgc2VsZWN0IGluICgicGVuZGluZy1mYXN0IiwgInBlbmRpbmctZG9ja2VyIikgYW5kIHBrOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTEiLCBmInNlbGVjdCB7c2VsZWN0fSB0YWtlcyBubyBwYWNrYWdlIGxpc3QiKQogICAgICAgIHNlZW4gPSBzZXQoKQogICAgICAgIGZvciBlIGluIHBrOgogICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBkaWN0KToKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxMSIsICJldmVyeSBwYWNrYWdlIGVudHJ5IG11c3QgYmUgYW4gb2JqZWN0IikKICAgICAgICAgICAgbiwgdiwgbyA9IGUuZ2V0KCJuYW1lIiksIGUuZ2V0KCJ2ZXJzaW9uIiksIGUuZ2V0KCJvcmlnaW4iKQogICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShuLCBzdHIpIG9yIG5vdCBOQU1FX1JFLm1hdGNoKG4pOgogICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjExIiwgZiJwYWNrYWdlIG5hbWUge24hcn0gaXMgbm90IGEgRGViaWFuIHBhY2thZ2UgbmFtZSIpCiAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHYsIHN0cikgb3Igbm90IFZFUlNJT05fUkUubWF0Y2godik6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTEiLCBmInZlcnNpb24ge3Yhcn0gb2Yge259IGlzIG5vdCBhIERlYmlhbiB2ZXJzaW9uIHN0cmluZyIpCiAgICAgICAgICAgIGlmIG4gaW4gc2VlbjoKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxMSIsIGYicGFja2FnZSB7bn0gaXMgbmFtZWQgdHdpY2UiKQogICAgICAgICAgICBzZWVuLmFkZChuKQogICAgICAgICAgICBpZiBsYXllciA9PSAiZG9ja2VyIjoKICAgICAgICAgICAgICAgIGlmIG4gbm90IGluIERPQ0tFUl9OQU1FUyBvciBvICE9IERPQ0tFUl9PUklHSU46CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjIiLCBmIntufSAoe28hcn0pIGlzIG5vdCBvbmUgb2YgdGhlIHNpeCBEb2NrZXIgcGFja2FnZXMgZnJvbSB7RE9DS0VSX09SSUdJTiFyfSIpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBpZiBuIGluIERPQ0tFUl9OQU1FUzoKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIyIiwgZiJ7bn0gaXMgYSBEb2NrZXIgcGFja2FnZSDigJQgdGhlIHNsb3cgbGFuZSAoYDExYCDCpzUuOCksIG5ldmVyIGluIGEge2xheWVyfSBwbGFuIikKICAgICAgICAgICAgaWYgbyBub3QgaW4gRkFTVF9PUklHSU5TOgogICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjIiLCBmIntufTogb3JpZ2luIHtvIXJ9IGlzIG5vdCBEZWJpYW4gLyBEZWJpYW4tU2VjdXJpdHkgKHRoZSBmYXN0IGxhbmUsIGAxMWAgQzMpIikKICAgICAgICAgICAgaWYgbGF5ZXIgPT0gImhvc3QiIGFuZCBIT1NUX1NMT1dfUkUubWF0Y2gobik6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTQiLCBmIntufSBpcyBhIGtlcm5lbCAvIGJvb3QgLyBmaXJtd2FyZSBwYWNrYWdlIOKAlCB0aGUgaG9zdCdzIHNsb3cgbGFuZSIpCiAgICAgICAgc25hcCA9IHBsYW4uZ2V0KCJzbmFwc2hvdCIsICIiKQogICAgICAgIGlmIHNuYXAgYW5kIG5vdCBTTkFQX1JFLm1hdGNoKHNuYXApOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTEiLCBmInNuYXBzaG90IHtzbmFwIXJ9IGlzIG5vdCBZWVlZTU1ERFRISE1NU1NaIikKICAgICAgICByZXR1cm4gbW9kZSwgbGF5ZXIsIHZtaWQsIHNlbGVjdAoKICAgIGRlZiBjaGVja19hcHBsaWFuY2Uoc2VsZik6CiAgICAgICAgIiIiUjEyOiB0aGUgaG9zdCBsYXllciBvbmx5IG9uIGEgYm94IHdob3NlIFJPT1QtT1dORUQgaW5zdGFsbCByZWNvcmQgc2F5cyBhcHBsaWFuY2UgKGAxMWAgwqcxOiBuZXZlciBCWU8pLiIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgc3QgPSBzZWxmLnIuc3RhdChJTlNUQUxMX1NUQVRFKQogICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTIiLCBmIm5vIGluc3RhbGwgcmVjb3JkICh7SU5TVEFMTF9TVEFURX0pIOKAlCB0aGlzIGJveCBjYW5ub3QgcHJvdmUgaXQgaXMgYW4gYXBwbGlhbmNlIikKICAgICAgICBpZiBzdC5zdF91aWQgIT0gMCBvciAoc3Quc3RfbW9kZSAmIDBvMDIyKToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjEyIiwgZiJ7SU5TVEFMTF9TVEFURX0gaXMgbm90IHJvb3Qtb3duZWQgYW5kIHJvb3Qtb25seS13cml0YWJsZSDigJQgaXQgcHJvdmVzIG5vdGhpbmciKQogICAgICAgIHRyeToKICAgICAgICAgICAgbW9kZSA9IGpzb24ubG9hZHMoc2VsZi5yLnJlYWRfZmlsZShJTlNUQUxMX1NUQVRFKSkuZ2V0KCJtb2RlIikKICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjEyIiwgZiJ7SU5TVEFMTF9TVEFURX0gaXMgdW5yZWFkYWJsZSDigJQgdGhpcyBib3ggY2Fubm90IHByb3ZlIGl0IGlzIGFuIGFwcGxpYW5jZSIpCiAgICAgICAgaWYgbW9kZSAhPSAiYXBwbGlhbmNlIjoKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjEyIiwgZiJ0aGlzIGJveCB3YXMgaW5zdGFsbGVkIGFzIHttb2RlIXJ9LCBub3QgYXBwbGlhbmNlIOKAlCBpdHMgaG9zdCBiZWxvbmdzIHRvIGl0cyBvd25lciIpCgogICAgZGVmIGxvYWRfdHJ1c3Qoc2VsZik6CiAgICAgICAgIiIiVGhlIFJPT1QtT1dORUQgdHJ1c3QgcmVjb3JkLiBBYnNlbnQgb3IgYWdlbnQtd3JpdGFibGUg4oaSIG5vIHNsb3ctbGFuZSBhdXRob3JpdHkgYXQgYWxsIChSMykuIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzdCA9IHNlbGYuci5zdGF0KFRSVVNUX0ZJTEUpCiAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIzIiwgZiJubyB7VFJVU1RfRklMRX0g4oCUIHRoaXMgYm94IGhhcyBubyBzbG93LWxhbmUgdHJ1c3QgYW5jaG9yIikKICAgICAgICBpZiBzdC5zdF91aWQgIT0gMCBvciAoc3Quc3RfbW9kZSAmIDBvMDIyKToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjMiLCBmIntUUlVTVF9GSUxFfSBpcyBub3Qgcm9vdC1vd25lZCBhbmQgcm9vdC1vbmx5LXdyaXRhYmxlIOKAlCBpdCBwcm92ZXMgbm90aGluZyIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICB0ID0ganNvbi5sb2FkcyhzZWxmLnIucmVhZF9maWxlKFRSVVNUX0ZJTEUpKQogICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIzIiwgZiJ7VFJVU1RfRklMRX0gaXMgdW5yZWFkYWJsZSIpCiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodCwgZGljdCkgb3Igbm90IGlzaW5zdGFuY2UodC5nZXQoImhvc3RfaWQiKSwgc3RyKSBvciBub3QgdFsiaG9zdF9pZCJdOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsIGYie1RSVVNUX0ZJTEV9IG5hbWVzIG5vIGhvc3RfaWQiKQogICAgICAgIHJldHVybiB0CgogICAgZGVmIHZlcmlmeV9zaWduZWQoc2VsZiwgc2lnbmVkLCB0cnVzdCwgb3BfbmFtZT1TSUdORURfT1AsIHNpZ25lcnM9Tm9uZSwgYnVybj1UcnVlKToKICAgICAgICAiIiJSMzogYW4gb3BlcmF0b3Itc2lnbmVkIGpvYiwgY2hlY2tlZCBIRVJFIChub3QgYnkgdGhlIGFnZW50KTogc2lnbmF0dXJlIGFnYWluc3QgdGhlIHJvb3Qtb3duZWQgc2lnbmVycyBmaWxlIChvciwKICAgICAgICBmb3IgYSBidW5kbGUgb24gYSBib3ggdGhhdCBoYXMgbm9uZSwgdGhlIFBJTk5FRCBrZXkg4oCUIGBzaWduZXJzYCBuYW1lcyB0aGF0IHRlbXAgZmlsZSksIG9wLCBob3N0IGJpbmRpbmcsIHRpbWUKICAgICAgICB3aW5kb3csIGFuZCBhIHJvb3Qtb3duZWQgbm9uY2UgcmVjb3JkIChubyByZXBsYXkpLiBidXJuPUZhbHNlIGxlYXZlcyB0aGUgbm9uY2UgZm9yIHRoZSBjYWxsZXIgdG8gYnVybiBhZnRlciBpdHMKICAgICAgICBvd24gY2hlY2tzIChhIGJ1bmRsZSByZWZ1c2VkIGZvciBhIHdyb25nIHNoYSBrZWVwcyBpdHMgam9iIHVzYWJsZSDigJQgdGhlIG9wZXJhdG9yIGZpeGVzIHRoZSBzaGEsIG5vdCB0aGUga2V5KS4KICAgICAgICBSZXR1cm5zIHRoZSBwYXJhbXM7IHdpdGggYnVybj1GYWxzZSwgKHBhcmFtcywgbm9uY2UsIGV4cGlyeSkuIiIiCiAgICAgICAgaW1wb3J0IGJhc2U2NAogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNpZ25lZCwgZGljdCkgb3Igbm90IGlzaW5zdGFuY2Uoc2lnbmVkLmdldCgiYmxvYl9iNjQiKSwgc3RyKSBvciBub3QgaXNpbnN0YW5jZShzaWduZWQuZ2V0KCJzaWciKSwgc3RyKToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjMiLCAidGhlIHNpZ25lZCBqb2IgaXMgbWFsZm9ybWVkIikKICAgICAgICB0cnk6CiAgICAgICAgICAgIGJsb2IgPSBiYXNlNjQuYjY0ZGVjb2RlKHNpZ25lZFsiYmxvYl9iNjQiXSwgdmFsaWRhdGU9VHJ1ZSkKICAgICAgICAgICAgb3AgPSBqc29uLmxvYWRzKGJsb2IpCiAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsICJ0aGUgc2lnbmVkIGJsb2IgaXMgbm90IGJhc2U2NCBKU09OIikKICAgICAgICBrZXlfaWQgPSBvcC5nZXQoImtleV9pZCIsICIiKQogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleV9pZCwgc3RyKSBvciBub3QgcmUubWF0Y2gociJeW0EtWmEtejAtOS5fLV17MSw2NH0kIiwga2V5X2lkKToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjMiLCAidGhlIHNpZ25lZCBibG9iIG5hbWVzIG5vIHBsYWluIGtleV9pZCIpCiAgICAgICAgaWYgc2lnbmVycyBpcyBOb25lOgogICAgICAgICAgICBzaWduZXJzID0gVFJVU1RfU0lHTkVSUwogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzdCA9IHNlbGYuci5zdGF0KFRSVVNUX1NJR05FUlMpCiAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjMiLCBmIm5vIHtUUlVTVF9TSUdORVJTfSDigJQgbm8gb3BlcmF0b3Iga2V5IHRvIGNoZWNrIGEgc2lnbmVkIGpvYiBhZ2FpbnN0IikKICAgICAgICAgICAgaWYgc3Quc3RfdWlkICE9IDAgb3IgKHN0LnN0X21vZGUgJiAwbzAyMik6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsIGYie1RSVVNUX1NJR05FUlN9IGlzIG5vdCByb290LW93bmVkIGFuZCByb290LW9ubHktd3JpdGFibGUiKQogICAgICAgIHJjID0gc2VsZi5yLnZlcmlmeV9zaWcoc2lnbmVycywga2V5X2lkLCBTSUdfTkFNRVNQQUNFLCBibG9iLCBzaWduZWRbInNpZyJdKQogICAgICAgIGlmIHJjICE9IDA6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIzIiwgZiJ0aGUgb3BlcmF0b3Igc2lnbmF0dXJlIGRvZXMgbm90IHZlcmlmeSAoc3NoLWtleWdlbiByYz17cmN9KSIpCiAgICAgICAgaWYgb3AuZ2V0KCJvcCIpICE9IG9wX25hbWU6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIzIiwgZiJ0aGUgc2lnbmVkIG9wIGlzIHtvcC5nZXQoJ29wJykhcn0sIG5vdCB7b3BfbmFtZX0iKQogICAgICAgIGlmIChvcC5nZXQoInRhcmdldCIpIG9yIHt9KS5nZXQoImhvc3RfaWQiKSAhPSB0cnVzdFsiaG9zdF9pZCJdOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsICJ0aGUgc2lnbmVkIGpvYiBpcyBmb3IgYW5vdGhlciBob3N0IikKICAgICAgICBub3cgPSBzZWxmLnIubm93KCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGV4cCA9IGNhbGVuZGFyLnRpbWVnbSh0aW1lLnN0cnB0aW1lKG9wWyJleHBpcmVzX2F0Il0sICIlWS0lbS0lZFQlSDolTTolU1oiKSkKICAgICAgICAgICAgaXNzID0gY2FsZW5kYXIudGltZWdtKHRpbWUuc3RycHRpbWUob3BbImlzc3VlZF9hdCJdLCAiJVktJW0tJWRUJUg6JU06JVNaIikpCiAgICAgICAgZXhjZXB0IChLZXlFcnJvciwgVmFsdWVFcnJvciwgVHlwZUVycm9yKToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjMiLCAidGhlIHNpZ25lZCBqb2IgaGFzIG5vIHJlYWRhYmxlIHRpbWUgd2luZG93IikKICAgICAgICBpZiBub3cgPiBleHAgb3Igbm93IDwgaXNzIC0gMTIwOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsICJ0aGUgc2lnbmVkIGpvYiBpcyBleHBpcmVkIG9yIG5vdCB5ZXQgdmFsaWQiKQogICAgICAgIG5vbmNlID0gb3AuZ2V0KCJub25jZSIpCiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9uY2UsIHN0cikgb3Igbm90IG5vbmNlOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsICJ0aGUgc2lnbmVkIGpvYiBoYXMgbm8gbm9uY2UiKQogICAgICAgIGlmIG5vbmNlIGluIHNlbGYuci5yZWFkX25vbmNlcygpOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsICJ0aGUgc2lnbmVkIGpvYiB3YXMgYWxyZWFkeSB1c2VkIChyZXBsYXkpIikKICAgICAgICBpZiBub3QgYnVybjoKICAgICAgICAgICAgcmV0dXJuIG9wLmdldCgicGFyYW1zIikgb3Ige30sIG5vbmNlLCBleHAKICAgICAgICBzZWxmLmJ1cm5fbm9uY2Uobm9uY2UsIGV4cCkKICAgICAgICByZXR1cm4gb3AuZ2V0KCJwYXJhbXMiKSBvciB7fQoKICAgIGRlZiBidXJuX25vbmNlKHNlbGYsIG5vbmNlLCBleHApOgogICAgICAgIHNlZW4gPSBzZWxmLnIucmVhZF9ub25jZXMoKQogICAgICAgIGlmIG5vbmNlIGluIHNlZW46CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIzIiwgInRoZSBzaWduZWQgam9iIHdhcyBhbHJlYWR5IHVzZWQgKHJlcGxheSkiKQogICAgICAgIHNlZW5bbm9uY2VdID0gZXhwCiAgICAgICAgbm93ID0gc2VsZi5yLm5vdygpCiAgICAgICAgc2VsZi5yLndyaXRlX25vbmNlcyh7azogdiBmb3IgaywgdiBpbiBzZWVuLml0ZW1zKCkgaWYgdiA+IG5vd30pCgogICAgZGVmIGRvY2tlcl9hdXRob3JpdHkoc2VsZiwgcGxhbik6CiAgICAgICAgIiIiUjMgZm9yIHRoZSBkb2NrZXIgbGF5ZXI6IHJldHVybnMgKHdobywgdW5kbykuIEEgc2lnbmVkIGpvYiBiaW5kcyB0aGUgRVhBQ1QgcGFja2FnZSBsaXN0IGFuZCB0aGUgdW5kbyBmbGFnLiIiIgogICAgICAgIHRydXN0ID0gc2VsZi5sb2FkX3RydXN0KCkKICAgICAgICBzaWduZWQgPSBwbGFuLmdldCgic2lnbmVkIikKICAgICAgICBpZiBzaWduZWQ6CiAgICAgICAgICAgIHBhcmFtcyA9IHNlbGYudmVyaWZ5X3NpZ25lZChzaWduZWQsIHRydXN0KQogICAgICAgICAgICB3YW50ID0gc29ydGVkKGYie2UuZ2V0KCduYW1lJyl9PXtlLmdldCgndmVyc2lvbicpfSIgZm9yIGUgaW4gcGFyYW1zLmdldCgicGFja2FnZXMiKSBvciBbXSkKICAgICAgICAgICAgZ290ID0gc29ydGVkKGYie2VbJ25hbWUnXX09e2VbJ3ZlcnNpb24nXX0iIGZvciBlIGluIHBsYW4uZ2V0KCJwYWNrYWdlcyIsIFtdKSkKICAgICAgICAgICAgaWYgbm90IHdhbnQgb3Igd2FudCAhPSBnb3Q6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsICJ0aGUgcGxhbidzIHBhY2thZ2VzIGFyZSBub3QgZXhhY3RseSB0aGUgc2lnbmVkIGpvYidzIHBhY2thZ2VzIikKICAgICAgICAgICAgaWYgYm9vbChwYXJhbXMuZ2V0KCJ1bmRvIikpICE9IGJvb2wocGxhbi5nZXQoInVuZG8iKSk6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsICJ0aGUgcGxhbidzIHVuZG8gZmxhZyBpcyBub3QgdGhlIHNpZ25lZCBqb2IncyIpCiAgICAgICAgICAgIGlmIHBhcmFtcy5nZXQoInZtaWQiKSBub3QgaW4gKE5vbmUsIHNlbGYudm1pZCk6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsICJ0aGUgc2lnbmVkIGpvYiBuYW1lcyBhbm90aGVyIGd1ZXN0IikKICAgICAgICAgICAgcmV0dXJuICJzaWduZWQiLCBib29sKHBsYW4uZ2V0KCJ1bmRvIikpCiAgICAgICAgaWYgcGxhbi5nZXQoInVuZG8iKToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjMiLCAiYW4gdW5kbyAoZG93bmdyYWRlKSBuZWVkcyBhIHNpZ25lZCBvcGVyYXRvciBqb2IiKQogICAgICAgIGlmIHRydXN0LmdldCgicmluZzBfc2xvd19sYW5lIikgaXMgVHJ1ZToKICAgICAgICAgICAgcmV0dXJuICJyaW5nMCIsIEZhbHNlCiAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjMiLCAiYSBEb2NrZXIgc3RlcCBuZWVkcyBhIHNpZ25lZCBvcGVyYXRvciBqb2IgKHJpbmcgMSkgb3IgdGhpcyBib3gncyByb290LW93bmVkIHJpbmctMCBtYXJrIikKCiAgICBkZWYgbGl2ZV9yZXN0b3JlKHNlbGYpOgogICAgICAgIHJjLCBvdXQsIF8gPSBzZWxmLmcoWyJkb2NrZXIiLCAiaW5mbyIsICItLWZvcm1hdCIsICJ7ey5MaXZlUmVzdG9yZUVuYWJsZWR9fSJdLCB0aW1lb3V0PTYwKQogICAgICAgIHJldHVybiBvdXQuc3RyaXAoKSBpZiByYyA9PSAwIGFuZCBvdXQuc3RyaXAoKSBpbiAoInRydWUiLCAiZmFsc2UiKSBlbHNlICJ1bmtub3duIgoKICAgIGRlZiBjb250YWluZXJfaWRzKHNlbGYpOgogICAgICAgIHJjLCBvdXQsIF8gPSBzZWxmLmcoWyJkb2NrZXIiLCAicHMiLCAiLXEiLCAiLS1uby10cnVuYyJdLCB0aW1lb3V0PTYwKQogICAgICAgIHJldHVybiBzb3J0ZWQob3V0LnNwbGl0KCkpIGlmIHJjID09IDAgZWxzZSBOb25lCgogICAgZGVmIGxpdmVfcmVzdG9yZV9vbihzZWxmKToKICAgICAgICAiIiJgMDlgIGRlY2lzaW9uIDg3OiBtZXJnZSBsaXZlLXJlc3RvcmUgaW50byBkYWVtb24uanNvbiBhbmQgUkVMT0FEIChDNTogYSByZWxvYWQgdHVybnMgaXQgb24sIG5vIHJlc3RhcnQpLiIiIgogICAgICAgIGxvZyA9IHNlbGYuci5sb2cKICAgICAgICBpZiBzZWxmLmxpdmVfcmVzdG9yZSgpID09ICJ0cnVlIjoKICAgICAgICAgICAgc2VsZi5yZXBvcnRbImxpdmVfcmVzdG9yZSJdID0geyJyZXN1bHQiOiAiYWxyZWFkeSBvbiJ9CiAgICAgICAgICAgIGxvZygib3MtYXBwbHk6IExJVkUtUkVTVE9SRSBhbHJlYWR5IG9uIikKICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICByYywgY3VyLCBfID0gc2VsZi5nKFsiY2F0IiwgREFFTU9OX0pTT05dLCB0aW1lb3V0PTMwKQogICAgICAgIHRyeToKICAgICAgICAgICAgY29uZiA9IGpzb24ubG9hZHMoY3VyKSBpZiByYyA9PSAwIGFuZCBjdXIuc3RyaXAoKSBlbHNlIHt9CiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxNiIsIGYie0RBRU1PTl9KU09OfSBpbiB0aGUgZ3Vlc3QgaXMgbm90IHZhbGlkIEpTT04g4oCUIG5vdCB0b3VjaGVkIikKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjb25mLCBkaWN0KToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjE2IiwgZiJ7REFFTU9OX0pTT059IGlzIG5vdCBhIEpTT04gb2JqZWN0IOKAlCBub3QgdG91Y2hlZCIpCiAgICAgICAgYmVmb3JlID0gc2VsZi5jb250YWluZXJfaWRzKCkKICAgICAgICBjb25mWyJsaXZlLXJlc3RvcmUiXSA9IFRydWUKICAgICAgICBzZWxmLnIud3JpdGVfZmlsZSgiZ3Vlc3QiLCBzZWxmLnZtaWQsIERBRU1PTl9KU09OLCBqc29uLmR1bXBzKGNvbmYsIGluZGVudD0yLCBzb3J0X2tleXM9VHJ1ZSkgKyAiXG4iKQogICAgICAgIHJyYywgXywgcmVyciA9IHNlbGYuZyhbInN5c3RlbWN0bCIsICJyZWxvYWQiLCAiZG9ja2VyIl0sIHRpbWVvdXQ9MTIwKQogICAgICAgIHN0YXRlID0gInVua25vd24iCiAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgogICAgICAgICAgICBzdGF0ZSA9IHNlbGYubGl2ZV9yZXN0b3JlKCkKICAgICAgICAgICAgaWYgc3RhdGUgPT0gInRydWUiOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgc2VsZi5yLnNsZWVwKDEpCiAgICAgICAgYWZ0ZXIgPSBzZWxmLmNvbnRhaW5lcl9pZHMoKQogICAgICAgIHNhbWUgPSBiZWZvcmUgaXMgbm90IE5vbmUgYW5kIGJlZm9yZSA9PSBhZnRlcgogICAgICAgIHNlbGYucmVwb3J0WyJsaXZlX3Jlc3RvcmUiXSA9IHsicmVzdWx0IjogIm9uIiBpZiBzdGF0ZSA9PSAidHJ1ZSIgZWxzZSAiZmFpbGVkIiwgInJlbG9hZF9yYyI6IHJyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRhaW5lcnNfYmVmb3JlIjogbGVuKGJlZm9yZSBvciBbXSksICJzYW1lX2lkcyI6IHNhbWV9CiAgICAgICAgbG9nKGYib3MtYXBwbHk6IExJVkUtUkVTVE9SRSByZWxvYWRfcmM9e3JyY30gc3RhdGU9e3N0YXRlfSBjb250YWluZXJzPXtsZW4oYmVmb3JlIG9yIFtdKX0gc2FtZS1pZHM9eyd5ZXMnIGlmIHNhbWUgZWxzZSAnTk8nfSIpCiAgICAgICAgaWYgc3RhdGUgIT0gInRydWUiOgogICAgICAgICAgICAjIHB1dCB0aGUgb2xkIGZpbGUgYmFjayAoYW5kIHJlbG9hZCBhZ2Fpbikg4oCUIHN0aWxsIG5ldmVyIGEgcmVzdGFydAogICAgICAgICAgICBzZWxmLnIud3JpdGVfZmlsZSgiZ3Vlc3QiLCBzZWxmLnZtaWQsIERBRU1PTl9KU09OLCBjdXIgaWYgcmMgPT0gMCBlbHNlICJ7fVxuIikKICAgICAgICAgICAgc2VsZi5nKFsic3lzdGVtY3RsIiwgInJlbG9hZCIsICJkb2NrZXIiXSwgdGltZW91dD0xMjApCiAgICAgICAgICAgIHNlbGYucmVwb3J0WyJmYWlsZWQiXSA9IHsicmMiOiAzLCAic3RlcCI6ICJsaXZlLXJlc3RvcmUiLCAicmVhc29uIjogKHJlcnIgb3IgIiIpLnN0cmlwKClbLTIwMDpdfQogICAgICAgICAgICByZXR1cm4gMwogICAgICAgIHJldHVybiAwCgogICAgZGVmIGtlcm5lbF9uZXh0X2Jvb3Qoc2VsZik6CiAgICAgICAgIiIiV2hpY2gga2VybmVsIEdSVUIgYm9vdHMgbmV4dCwgcmVhZCB3aXRob3V0IHJvb3Qtb25seSBmaWxlcyAoZ3J1YmVudiArIC9ldGMvZGVmYXVsdC9ncnViICsgL2Jvb3QpLiIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgZGZsdCA9IHJlLnNlYXJjaChyJ15HUlVCX0RFRkFVTFQ9WyJcJ10/KFteIlwnXG5dKiknLCBzZWxmLnIucmVhZF9maWxlKCIvZXRjL2RlZmF1bHQvZ3J1YiIpLCByZS5NKQogICAgICAgICAgICBkZmx0ID0gZGZsdC5ncm91cCgxKSBpZiBkZmx0IGVsc2UgIjAiCiAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgIGRmbHQgPSAiMCIKICAgICAgICBlbnYgPSB7fQogICAgICAgIHRyeToKICAgICAgICAgICAgZm9yIGwgaW4gc2VsZi5yLnJlYWRfZmlsZSgiL2Jvb3QvZ3J1Yi9ncnViZW52Iikuc3BsaXRsaW5lcygpOgogICAgICAgICAgICAgICAgaWYgIj0iIGluIGwgYW5kIG5vdCBsLnN0YXJ0c3dpdGgoIiMiKToKICAgICAgICAgICAgICAgICAgICBrLCB2ID0gbC5zcGxpdCgiPSIsIDEpCiAgICAgICAgICAgICAgICAgICAgZW52W2tdID0gdgogICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICBwYXNzCgogICAgICAgIGRlZiB2ZXIoZW50cnkpOgogICAgICAgICAgICBtID0gcmUuc2VhcmNoKHIiZ251bGludXgtKFswLTldW14+XHNdKj8tcHZlKS0oPzphZHZhbmNlZHxyZWNvdmVyeSkiLCBlbnRyeSkKICAgICAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMSkgaWYgbSBlbHNlICJ1bmtub3duIgogICAgICAgIGlmIGVudi5nZXQoIm5leHRfZW50cnkiKToKICAgICAgICAgICAgcmV0dXJuIHZlcihlbnZbIm5leHRfZW50cnkiXSksICJuZXh0X2VudHJ5IChhIG9uZS1zaG90IEdSVUIgY2Fubm90IGNsZWFyIG9uIExWTSAvYm9vdCkiCiAgICAgICAgaWYgZGZsdCA9PSAic2F2ZWQiOgogICAgICAgICAgICByZXR1cm4gKHZlcihlbnZbInNhdmVkX2VudHJ5Il0pLCAic2F2ZWQgZGVmYXVsdCIpIGlmIGVudi5nZXQoInNhdmVkX2VudHJ5IikgZWxzZSAoInVua25vd24iLCAic2F2ZWQgZGVmYXVsdCB1bnNldCIpCiAgICAgICAgaWYgZGZsdCA9PSAiMCI6CiAgICAgICAgICAgIHJjLCBvdXQsIF8gPSBzZWxmLnIuaG9zdChbInNoIiwgIi1jIiwgImxzIC9ib290L3ZtbGludXotKiAyPi9kZXYvbnVsbCJdLCAzMCkKICAgICAgICAgICAgdmVycyA9IFtsLnNwbGl0KCJ2bWxpbnV6LSIsIDEpWzFdIGZvciBsIGluIG91dC5zcGxpdCgpIGlmICJ2bWxpbnV6LSIgaW4gbF0KICAgICAgICAgICAgYmVzdCA9IE5vbmUKICAgICAgICAgICAgZm9yIHYgaW4gdmVyczoKICAgICAgICAgICAgICAgIGlmIGJlc3QgaXMgTm9uZSBvciBzZWxmLmRwa2dfY21wKHYsICJndCIsIGJlc3QpOgogICAgICAgICAgICAgICAgICAgIGJlc3QgPSB2CiAgICAgICAgICAgIHJldHVybiAoYmVzdCBvciAidW5rbm93biIpLCAiR1JVQl9ERUZBVUxUPTAgKHRoZSBuZXdlc3QgaW5zdGFsbGVkKSIKICAgICAgICByZXR1cm4gInVua25vd24iLCBmIkdSVUJfREVGQVVMVD17ZGZsdH0iCgogICAgZGVmIGZhY3RzKHNlbGYpOgogICAgICAgICIiIlJlYWQtb25seSB2ZXJzaW9ucyBmb3IgdGhlIGh1YidzIFN5c3RlbSBwYWdlIChSLTg1MikuIEEgdmFsdWUgdGhhdCBjYW5ub3QgYmUgcmVhZCBpcyAidW5rbm93biIuIiIiCiAgICAgICAgZGVmIGZpcnN0KGNtZCwgdGltZW91dD0zMCk6CiAgICAgICAgICAgIHJjLCBvdXQsIF8gPSBzZWxmLnIuaG9zdChjbWQsIHRpbWVvdXQpCiAgICAgICAgICAgIHYgPSBvdXQuc3RyaXAoKS5zcGxpdGxpbmVzKClbMF0uc3RyaXAoKSBpZiByYyA9PSAwIGFuZCBvdXQuc3RyaXAoKSBlbHNlICIiCiAgICAgICAgICAgIHJldHVybiB2IG9yICJ1bmtub3duIgogICAgICAgIGggPSB7ImRlYmlhbiI6IGZpcnN0KFsiY2F0IiwgIi9ldGMvZGViaWFuX3ZlcnNpb24iXSksICJrZXJuZWxfcnVubmluZyI6IGZpcnN0KFsidW5hbWUiLCAiLXIiXSl9CiAgICAgICAgaFsia2VybmVsX25leHRfYm9vdCJdLCBoWyJrZXJuZWxfbmV4dF9ib290X3NvdXJjZSJdID0gc2VsZi5rZXJuZWxfbmV4dF9ib290KCkKICAgICAgICByYywgb3V0LCBfID0gc2VsZi5yLmhvc3QoWyJhcHQtbWFyayIsICJzaG93aG9sZCJdLCA2MCkKICAgICAgICBoWyJoZWxkIl0gPSBzb3J0ZWQob3V0LnNwbGl0KCkpIGlmIHJjID09IDAgZWxzZSBOb25lCiAgICAgICAgdHJ5OgogICAgICAgICAgICB0ID0gaW50KHNlbGYuci5yZWFkX2ZpbGUoIi9wcm9jL3N5cy9rZXJuZWwvdGFpbnRlZCIpLnN0cmlwKCkpCiAgICAgICAgICAgIGhbInRhaW50ZWQiXSwgaFsib29wc190aGlzX2Jvb3QiXSwgaFsid2Fybl90aGlzX2Jvb3QiXSA9IHQsIGJvb2wodCAmIDEyOCksIGJvb2wodCAmIDUxMikKICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICBoWyJ0YWludGVkIl0sIGhbIm9vcHNfdGhpc19ib290Il0sIGhbIndhcm5fdGhpc19ib290Il0gPSBOb25lLCBOb25lLCBOb25lCiAgICAgICAgdHJ5OgogICAgICAgICAgICBoWyJrZXJuZWxfcGFuaWMiXSA9IGludChzZWxmLnIucmVhZF9maWxlKCIvcHJvYy9zeXMva2VybmVsL3BhbmljIikuc3RyaXAoKSkKICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICBoWyJrZXJuZWxfcGFuaWMiXSA9IE5vbmUKICAgICAgICB0cnk6CiAgICAgICAgICAgIGhbImNyYXNoX2d1YXJkIl0gPSBqc29uLmxvYWRzKHNlbGYuci5yZWFkX2ZpbGUoQ1JBU0hfR1VBUkRfU1RBVEUpKQogICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgIGhbImNyYXNoX2d1YXJkIl0gPSBOb25lCiAgICAgICAgZyA9IHsiZGViaWFuIjogInVua25vd24iLCAiZG9ja2VyX2VuZ2luZSI6ICJ1bmtub3duIiwgImNvbnRhaW5lcmQiOiAidW5rbm93biIsICJsaXZlX3Jlc3RvcmUiOiAidW5rbm93biJ9CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLmNoZWNrX2d1ZXN0KHNlbGYudm1pZCkKICAgICAgICAgICAgcnVubmluZyA9IFRydWUKICAgICAgICBleGNlcHQgUmVmdXNlZCBhcyBlOgogICAgICAgICAgICBydW5uaW5nLCBnWyJ1bmtub3duX3JlYXNvbiJdID0gRmFsc2UsIGYie2UuY29kZX0ge2UucmVhc29ufSIKICAgICAgICBpZiBydW5uaW5nOgogICAgICAgICAgICBzY3JpcHQgPSAoJ2VjaG8gImRlYmlhbj0kKGNhdCAvZXRjL2RlYmlhbl92ZXJzaW9uIDI+L2Rldi9udWxsKSI7ICcKICAgICAgICAgICAgICAgICAgICAgICdlY2hvICJlbmdpbmU9JChkb2NrZXIgdmVyc2lvbiAtLWZvcm1hdCBcJ3t7LlNlcnZlci5WZXJzaW9ufX1cJyAyPi9kZXYvbnVsbCkiOyAnCiAgICAgICAgICAgICAgICAgICAgICAnZWNobyAiY29udGFpbmVyZD0kKGRwa2ctcXVlcnkgLVcgLWYgXCcke1ZlcnNpb259XCcgY29udGFpbmVyZC5pbyAyPi9kZXYvbnVsbCkiOyAnCiAgICAgICAgICAgICAgICAgICAgICAnZWNobyAibGl2ZT0kKGRvY2tlciBpbmZvIC0tZm9ybWF0IFwne3suTGl2ZVJlc3RvcmVFbmFibGVkfX1cJyAyPi9kZXYvbnVsbCkiJykKICAgICAgICAgICAgcmMsIG91dCwgXyA9IHNlbGYuZyhbInNoIiwgIi1jIiwgc2NyaXB0XSwgdGltZW91dD02MCkKICAgICAgICAgICAga3YgPSBkaWN0KGwuc3BsaXQoIj0iLCAxKSBmb3IgbCBpbiBvdXQuc3BsaXRsaW5lcygpIGlmICI9IiBpbiBsKQogICAgICAgICAgICBmb3Igaywgc3JjIGluICgoImRlYmlhbiIsICJkZWJpYW4iKSwgKCJkb2NrZXJfZW5naW5lIiwgImVuZ2luZSIpLCAoImNvbnRhaW5lcmQiLCAiY29udGFpbmVyZCIpKToKICAgICAgICAgICAgICAgIGdba10gPSBrdi5nZXQoc3JjLCAiIikuc3RyaXAoKSBvciAidW5rbm93biIKICAgICAgICAgICAgZ1sibGl2ZV9yZXN0b3JlIl0gPSB7InRydWUiOiAib24iLCAiZmFsc2UiOiAib2ZmIn0uZ2V0KGt2LmdldCgibGl2ZSIsICIiKS5zdHJpcCgpLCAidW5rbm93biIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBoWyJjb25maWdfYnVuZGxlIl0gPSBCdW5kbGUoc2VsZikuc3RhdGUoKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgYSByZWFkIHByb2JsZW0gbXVzdCBuZXZlciBjb3N0IHRoZSBTeXN0ZW0gcGFnZSBpdHMgb3RoZXIgZmFjdHMKICAgICAgICAgICAgaFsiY29uZmlnX2J1bmRsZSJdID0geyJ2ZXJzaW9uIjogInVua25vd24iLCAiZXJyb3IiOiBzdHIoZSlbOjIwMF19CiAgICAgICAgc2VsZi5yZXBvcnRbImZhY3RzIl0gPSB7Imhvc3QiOiBoLCAiZ3Vlc3QiOiBnfQogICAgICAgIHJldHVybiAwCgogICAgZGVmIGNoZWNrX2d1ZXN0KHNlbGYsIHZtaWQpOgogICAgICAgIGlmIHZtaWQgaW4gUkVTRVJWRURfVk1JRFM6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxMCIsIGYidm1pZCB7dm1pZH0gaXMgYSByZXNlcnZlZCBzY3JhdGNoIHZtaWQiKQogICAgICAgIHRyeToKICAgICAgICAgICAgY29uZiA9IHNlbGYuci5yZWFkX2ZpbGUoZiIvZXRjL3B2ZS9seGMve3ZtaWR9LmNvbmYiKQogICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTAiLCBmInZtaWQge3ZtaWR9IGlzIG5vdCBhIGNvbnRhaW5lciBvbiB0aGlzIGhvc3QiKQogICAgICAgIGN1ciA9IGNvbmYuc3BsaXQoIlxuWyIsIDEpWzBdICAjIHRoZSBjdXJyZW50IGNvbmZpZywgbm90IGEgc25hcHNob3Qgc2VjdGlvbgogICAgICAgIGJpbmRzID0gW2wgZm9yIGwgaW4gY3VyLnNwbGl0bGluZXMoKSBpZiByZS5tYXRjaChyIl5tcFswLTldKzogIiArIHJlLmVzY2FwZShEUklWRVNfUEFSRU5UKSArIHIiLCIsIGwpXQogICAgICAgIGlmIG5vdCBiaW5kczoKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjEwIiwgZiJ2bWlkIHt2bWlkfSBkb2VzIG5vdCBiaW5kIHtEUklWRVNfUEFSRU5UfSDigJQgaXQgaXMgbm90IHRoaXMgYm94J3MgY3VzdG9tZXIgZ3Vlc3QiKQogICAgICAgIGxvY2sgPSBbbCBmb3IgbCBpbiBjdXIuc3BsaXRsaW5lcygpIGlmIGwuc3RhcnRzd2l0aCgibG9jazoiKV0KICAgICAgICBpZiBsb2NrOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSOSIsIGYidm1pZCB7dm1pZH0gaXMgbG9ja2VkICh7bG9ja1swXS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCl9KSDigJQgYSBiYWNrdXAgb3IgcmVzdG9yZSBpcyBydW5uaW5nIikKICAgICAgICByYywgb3V0LCBfID0gc2VsZi5yLmhvc3QoWyIvdXNyL3NiaW4vcGN0IiwgInN0YXR1cyIsIHN0cih2bWlkKV0pCiAgICAgICAgaWYgcmMgIT0gMCBvciAicnVubmluZyIgbm90IGluIG91dDoKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjEwIiwgZiJ2bWlkIHt2bWlkfSBpcyBub3QgcnVubmluZyIpCgogICAgIyAtLS0tLS0tLS0tIHRhcmdldCBoZWxwZXJzIC0tLS0tLS0tLS0KICAgIGRlZiB4KHNlbGYsIGFyZ3YsIHRpbWVvdXQ9MTgwMCk6CiAgICAgICAgIiIiUnVuIGluIHRoZSBUQVJHRVQgbGF5ZXI6IHRoZSBndWVzdCB2aWEgcGN0IGV4ZWMsIG9yIHRoZSBob3N0IGRpcmVjdGx5LiIiIgogICAgICAgIGlmIHNlbGYubGF5ZXIgPT0gImhvc3QiOgogICAgICAgICAgICByZXR1cm4gc2VsZi5yLmhvc3QoYXJndiwgdGltZW91dCkKICAgICAgICByZXR1cm4gc2VsZi5yLmd1ZXN0KHNlbGYudm1pZCwgYXJndiwgdGltZW91dCkgICMgZ3Vlc3QgYW5kIGRvY2tlciBib3RoIGxpdmUgaW4gdGhlIGN1c3RvbWVyIGd1ZXN0CgogICAgZGVmIGcoc2VsZiwgYXJndiwgdGltZW91dD0xODAwKToKICAgICAgICAiIiJSdW4gaW4gdGhlIGN1c3RvbWVyIEdVRVNUIHdoYXRldmVyIHRoZSBsYXllciAoaXRzIGhlYWx0aCkuIiIiCiAgICAgICAgcmV0dXJuIHNlbGYuci5ndWVzdChzZWxmLnZtaWQsIGFyZ3YsIHRpbWVvdXQpCgogICAgZGVmIGRwa2dfY21wKHNlbGYsIGEsIG9wLCBiKToKICAgICAgICAjIFRoZSBIT1NUJ3MgZHBrZzogdGhlIHNhbWUgRGViaWFuIHZlcnNpb24gYWxnb3JpdGhtLCBhbmQgbm8gYHBjdCBleGVjYCAoMC45IHMpIHBlciBjb21wYXJpc29uIChSLTg0NSkuCiAgICAgICAgcmMsIF8sIF8gPSBzZWxmLnIuaG9zdChbImRwa2ciLCAiLS1jb21wYXJlLXZlcnNpb25zIiwgYSwgb3AsIGJdLCAzMCkKICAgICAgICByZXR1cm4gcmMgPT0gMAoKICAgIGRlZiBpbnN0YWxsZWQoc2VsZik6CiAgICAgICAgcmMsIG91dCwgXyA9IHNlbGYueChbImRwa2ctcXVlcnkiLCAiLVciLCAiLWYiLCAiJHtQYWNrYWdlfVx0JHtWZXJzaW9ufVx0JHtkYjpTdGF0dXMtQWJicmV2fVxuIl0pCiAgICAgICAgcmVzID0ge30KICAgICAgICBmb3IgbCBpbiBvdXQuc3BsaXRsaW5lcygpOgogICAgICAgICAgICBwYXJ0cyA9IGwuc3BsaXQoIlx0IikKICAgICAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAzIGFuZCBwYXJ0c1syXS5zdGFydHN3aXRoKCJpaSIpOgogICAgICAgICAgICAgICAgcmVzW3BhcnRzWzBdXSA9IHBhcnRzWzFdCiAgICAgICAgcmV0dXJuIHJlcwoKICAgIGRlZiBtYWRpc29uX2FsbChzZWxmLCBuYW1lcyk6CiAgICAgICAgIiIibmFtZSAtPiBzZXQgb2YgZG93bmxvYWRhYmxlIHZlcnNpb25zLCBPTkUgY2FsbCBmb3IgYWxsIG5hbWVzLiIiIgogICAgICAgIHJlcyA9IHtuOiBzZXQoKSBmb3IgbiBpbiBuYW1lc30KICAgICAgICBpZiBub3QgbmFtZXM6CiAgICAgICAgICAgIHJldHVybiByZXMKICAgICAgICByYywgb3V0LCBfID0gc2VsZi54KFsiYXB0LWNhY2hlIiwgIm1hZGlzb24iXSArIHNvcnRlZChuYW1lcykpCiAgICAgICAgZm9yIGwgaW4gb3V0LnNwbGl0bGluZXMoKToKICAgICAgICAgICAgZiA9IFt4LnN0cmlwKCkgZm9yIHggaW4gbC5zcGxpdCgifCIpXQogICAgICAgICAgICBpZiBsZW4oZikgPj0gMyBhbmQgZlswXSBpbiByZXM6CiAgICAgICAgICAgICAgICByZXNbZlswXV0uYWRkKGZbMV0pCiAgICAgICAgcmV0dXJuIHJlcwoKICAgIGRlZiBzaW11bGF0ZShzZWxmLCBhcmdzKToKICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLngoQVBUX0VOViArIFsiYXB0LWdldCIsICItcyIsICItcSJdICsgYXJncykKICAgICAgICBpbnN0LCByZW12ID0gW10sIFtdCiAgICAgICAgZm9yIGwgaW4gb3V0LnNwbGl0bGluZXMoKToKICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHIiXkluc3QgKFxTKykgKD86XFsoW15dXSopXF0gKT9cKChcUyspICguKj8pIFxbW2EtejAtOV0rXF1cKSIsIGwpCiAgICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAgICBpbnN0LmFwcGVuZCh7Im5hbWUiOiBtLmdyb3VwKDEpLCAiZnJvbSI6IG0uZ3JvdXAoMiksICJ0byI6IG0uZ3JvdXAoMyksICJvcmlnaW4iOiBtLmdyb3VwKDQpfSkKICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHIiXlJlbXYgKFxTKykiLCBsKQogICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAgICAgcmVtdi5hcHBlbmQobS5ncm91cCgxKSkKICAgICAgICByZXR1cm4gcmMsIGluc3QsIHJlbXYsIG91dCArIGVycgoKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBvcmlnaW5fbmFtZShvcmlnaW4pOgogICAgICAgICMgIkRlYmlhbjoxMy43L3N0YWJsZSwgRGViaWFuLVNlY3VyaXR5OjEzL3N0YWJsZS1zZWN1cml0eSIgLT4geyJEZWJpYW4iLCAiRGViaWFuLVNlY3VyaXR5In0KICAgICAgICByZXR1cm4ge28uc3RyaXAoKS5zcGxpdCgiOiIpWzBdIGZvciBvIGluIG9yaWdpbi5zcGxpdCgiLCIpIGlmIG8uc3RyaXAoKX0KCiAgICBkZWYgZnJlZV9ieXRlcyhzZWxmKToKICAgICAgICByYywgb3V0LCBfID0gc2VsZi54KFsiZGYiLCAiLUIxIiwgIi0tb3V0cHV0PWF2YWlsIiwgIi8iXSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJldHVybiBpbnQob3V0LnN0cmlwKCkuc3BsaXRsaW5lcygpWy0xXSkKICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IpOgogICAgICAgICAgICByZXR1cm4gLTEKCiAgICBkZWYgYXB0X2xvY2tfaGVsZChzZWxmKToKICAgICAgICByYywgb3V0LCBfID0gc2VsZi54KFsiZnVzZXIiLCAiL3Zhci9saWIvZHBrZy9sb2NrLWZyb250ZW5kIiwgIi92YXIvbGliL2Rwa2cvbG9jayJdKQogICAgICAgIHJldHVybiByYyA9PSAwIGFuZCBvdXQuc3RyaXAoKSAhPSAiIgoKICAgIGRlZiBndWVzdF9oZWFsdGgoc2VsZik6CiAgICAgICAgIiIiVGhlIGd1ZXN0J3Mgc2lnbmFsczogZXZlcnkgY29udGFpbmVyJ3Mgc3RhdGUgKyBoZWFsdGgsIHRoZSBjb250cm9sbGVyJ3Mgb3duIGhlYWx0aCwgdGhlIG5ldHdvcmsuIiIiCiAgICAgICAgcmMsIG91dCwgXyA9IHNlbGYuZyhbImRvY2tlciIsICJwcyIsICItYSIsICItLW5vLXRydW5jIiwgIi0tZm9ybWF0IiwgInt7Lk5hbWVzfX1cdHt7LlN0YXRlfX1cdHt7LlN0YXR1c319XHR7ey5JRH19Il0sIHRpbWVvdXQ9NjApCiAgICAgICAgY29udCA9IHt9CiAgICAgICAgZm9yIGwgaW4gb3V0LnNwbGl0bGluZXMoKToKICAgICAgICAgICAgcCA9IGwuc3BsaXQoIlx0IikKICAgICAgICAgICAgaWYgbGVuKHApID49IDM6CiAgICAgICAgICAgICAgICBoID0gImhlYWx0aHkiIGlmICIoaGVhbHRoeSkiIGluIHBbMl0gZWxzZSAidW5oZWFsdGh5IiBpZiAiKHVuaGVhbHRoeSkiIGluIHBbMl0gZWxzZSBcCiAgICAgICAgICAgICAgICAgICAgInN0YXJ0aW5nIiBpZiAiKGhlYWx0aDogc3RhcnRpbmcpIiBpbiBwWzJdIGVsc2UgIm5vbmUiCiAgICAgICAgICAgICAgICBjb250W3BbMF1dID0geyJzdGF0ZSI6IHBbMV0sICJoZWFsdGgiOiBofQogICAgICAgICAgICAgICAgaWYgbGVuKHApID49IDQgYW5kIHBbM106CiAgICAgICAgICAgICAgICAgICAgY29udFtwWzBdXVsiaWQiXSA9IHBbM10KICAgICAgICBucmMsIF8sIF8gPSBzZWxmLmcoWyJnZXRlbnQiLCAiaG9zdHMiLCAiZGViLmRlYmlhbi5vcmciXSwgdGltZW91dD0zMCkKICAgICAgICAjIFItODU4OiB0aGUgY29udHJvbGxlcidzIG93biBoZWFsdGggY2hlY2sgc3RheWVkICJoZWFsdGh5IiB3aGlsZSBpdCBjb3VsZCBub3QgcmVhY2ggRG9ja2VyIGF0IGFsbCDigJQgc28gYXNrCiAgICAgICAgIyB0aGUgY29uc2VxdWVuY2UgZGlyZWN0bHk6IGNhbiB0aGUgY29udHJvbGxlciB0YWxrIHRvIHRoZSBlbmdpbmUgZnJvbSBpbnNpZGUgaXRzIGNvbnRhaW5lcj8KICAgICAgICBjcmMsIF8sIF8gPSBzZWxmLmcoWyJkb2NrZXIiLCAiZXhlYyIsICJmZWxob20tY29udHJvbGxlciIsICJkb2NrZXIiLCAidmVyc2lvbiIsICItLWZvcm1hdCIsICJ7ey5TZXJ2ZXIuVmVyc2lvbn19Il0sIHRpbWVvdXQ9NjApCiAgICAgICAgcmV0dXJuIHsiZG9ja2VyX29rIjogcmMgPT0gMCwgImNvbnRhaW5lcnMiOiBjb250LCAiY29udHJvbGxlcl9kb2NrZXJfb2siOiBjcmMgPT0gMCwKICAgICAgICAgICAgICAgICJjb250cm9sbGVyIjogY29udC5nZXQoImZlbGhvbS1jb250cm9sbGVyIiwge30pLmdldCgiaGVhbHRoIiwgImFic2VudCIpLAogICAgICAgICAgICAgICAgIm5ldHdvcmtfb2siOiBucmMgPT0gMH0KCiAgICBkZWYgaGVhbHRoKHNlbGYpOgogICAgICAgIGlmIHNlbGYubGF5ZXIgaW4gKCJndWVzdCIsICJkb2NrZXIiKToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ3Vlc3RfaGVhbHRoKCkKICAgICAgICByYywgb3V0LCBfID0gc2VsZi5yLmhvc3QoWyJzeXN0ZW1jdGwiLCAiaXMtYWN0aXZlIl0gKyBIT1NUX1NFUlZJQ0VTLCAzMCkKICAgICAgICBzdGF0ZXMgPSBvdXQuc3BsaXQoKQogICAgICAgIHN2YyA9IHtzOiAoc3RhdGVzW2ldIGlmIGkgPCBsZW4oc3RhdGVzKSBlbHNlICJ1bmtub3duIikgZm9yIGksIHMgaW4gZW51bWVyYXRlKEhPU1RfU0VSVklDRVMpfQogICAgICAgIHNyYywgc291dCwgXyA9IHNlbGYuci5ob3N0KFsiL3Vzci9zYmluL3BjdCIsICJzdGF0dXMiLCBzdHIoc2VsZi52bWlkKV0sIDMwKQogICAgICAgIHJ1bm5pbmcgPSBzcmMgPT0gMCBhbmQgInJ1bm5pbmciIGluIHNvdXQKICAgICAgICByZXR1cm4geyJob3N0X3NlcnZpY2VzIjogc3ZjLCAiZ3Vlc3RfcnVubmluZyI6IHJ1bm5pbmcsICJndWVzdCI6IHNlbGYuZ3Vlc3RfaGVhbHRoKCkgaWYgcnVubmluZyBlbHNlIE5vbmV9CgogICAgZGVmIHJlc3RhcnRfbmVlZGVkKHNlbGYpOgogICAgICAgICIiIlByb2Nlc3NlcyBzdGlsbCBtYXBwaW5nIGRlbGV0ZWQgZmlsZXMsIE9VVFNJREUgY29udGFpbmVycyAoQzExKS4gR3Vlc3Q6IG91dHNpZGUgZG9ja2VyOyBob3N0OiBvdXRzaWRlIHRoZQogICAgICAgIExYQyBndWVzdHMgKHRoZSBob3N0J3MgL3Byb2Mgc2hvd3MgZ3Vlc3QgcHJvY2Vzc2VzIHRvbykuIiIiCiAgICAgICAgc2tpcCA9IFJFU1RBUlRfU0tJUF9DR1JPVVBbImhvc3QiIGlmIHNlbGYubGF5ZXIgPT0gImhvc3QiIGVsc2UgImd1ZXN0Il0KICAgICAgICBzY3JpcHQgPSAoJ2ZvciBwIGluIC9wcm9jL1swLTldKjsgZG8gZ3JlcCAtcSAiKGRlbGV0ZWQpIiAkcC9tYXBzIDI+L2Rldi9udWxsIHx8IGNvbnRpbnVlOyAnCiAgICAgICAgICAgICAgICAgICdncmVwIC1xICIlcyIgJHAvY2dyb3VwIDI+L2Rldi9udWxsICYmIGNvbnRpbnVlOyBlY2hvICIke3AjL3Byb2MvfSAkKGNhdCAkcC9jb21tIDI+L2Rldi9udWxsKSI7IGRvbmUnICUgc2tpcCkKICAgICAgICByYywgb3V0LCBfID0gc2VsZi54KFsic2giLCAiLWMiLCBzY3JpcHRdLCB0aW1lb3V0PTEyMCkKICAgICAgICBsaW5lcyA9IFtsIGZvciBsIGluIG91dC5zcGxpdGxpbmVzKCkgaWYgIiAiIGluIGxdCiAgICAgICAgcHJvY3MgPSBzb3J0ZWQoe2wuc3BsaXQoIiAiLCAxKVsxXSBmb3IgbCBpbiBsaW5lc30pCiAgICAgICAgcGlkMSA9IGFueShsLnNwbGl0KCIgIiwgMSlbMF0gPT0gIjEiIGZvciBsIGluIGxpbmVzKQogICAgICAgIHJldHVybiBwcm9jcywgcGlkMSBvciAibHhjLXN0YXJ0IiBpbiBwcm9jcwoKICAgIGRlZiBpbnZlbnRvcnkoc2VsZiwgaW5zdD1Ob25lKToKICAgICAgICBpbnN0ID0gaW5zdCBpZiBpbnN0IGlzIG5vdCBOb25lIGVsc2Ugc2VsZi5pbnN0YWxsZWQoKQogICAgICAgIG5hbWVzID0gc29ydGVkKGluc3QpCiAgICAgICAgb3JpZ2lucyA9IHt9CiAgICAgICAgaWYgbmFtZXM6CiAgICAgICAgICAgIHJjLCBvdXQsIF8gPSBzZWxmLngoWyJhcHQtY2FjaGUiLCAicG9saWN5Il0gKyBuYW1lcykgICMgT05FIGNhbGwgKFItODQ1KQogICAgICAgICAgICBjdXIsIHN0YXIgPSBOb25lLCBGYWxzZQogICAgICAgICAgICBmb3IgbCBpbiBvdXQuc3BsaXRsaW5lcygpOgogICAgICAgICAgICAgICAgaWYgbm90IGwuc3RhcnRzd2l0aCgiICIpOgogICAgICAgICAgICAgICAgICAgIGN1ciwgc3RhciA9IGwucnN0cmlwKCI6IiksIEZhbHNlCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIHMgPSBsLnN0cmlwKCkKICAgICAgICAgICAgICAgIGlmIHMuc3RhcnRzd2l0aCgiKioqICIpOgogICAgICAgICAgICAgICAgICAgIHN0YXIgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGlmIHN0YXIgYW5kIGN1ciBhbmQgcmUubWF0Y2gociJeWzAtOS1dKyAiLCBzKToKICAgICAgICAgICAgICAgICAgICBpZiAiL3Zhci9saWIvZHBrZy9zdGF0dXMiIGluIHM6CiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbnMuc2V0ZGVmYXVsdChjdXIsICJsb2NhbCIpCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luc1tjdXJdID0gcwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBpZiBzdGFyIGFuZCBub3QgcmUubWF0Y2gociJeWzAtOS1dKyAiLCBzKToKICAgICAgICAgICAgICAgICAgICBzdGFyID0gRmFsc2UKCiAgICAgICAgZGVmIG9uYW1lKHNyYyk6CiAgICAgICAgICAgIGlmIHNyYyBpbiAoTm9uZSwgImxvY2FsIik6CiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24iCiAgICAgICAgICAgIGlmICJwcm94bW94IiBpbiBzcmM6CiAgICAgICAgICAgICAgICByZXR1cm4gIlByb3htb3giCiAgICAgICAgICAgIGlmICJzZWN1cml0eSIgaW4gc3JjIGFuZCAiZGViaWFuIiBpbiBzcmM6CiAgICAgICAgICAgICAgICByZXR1cm4gIkRlYmlhbi1TZWN1cml0eSIKICAgICAgICAgICAgaWYgImRvY2tlci5jb20iIGluIHNyYzoKICAgICAgICAgICAgICAgIHJldHVybiAiRG9ja2VyIgogICAgICAgICAgICBpZiAiZGViaWFuIiBpbiBzcmM6CiAgICAgICAgICAgICAgICByZXR1cm4gIkRlYmlhbiIKICAgICAgICAgICAgcmV0dXJuICJvdGhlciIKICAgICAgICByYywgcGVuZCwgcmVtdiwgXyA9IHNlbGYuc2ltdWxhdGUoWyJkaXN0LXVwZ3JhZGUiXSkKICAgICAgICBzZWxmLl9wZW5kaW5nID0gcGVuZAogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICJpbnN0YWxsZWQiOiBbeyJuYW1lIjogbiwgInZlcnNpb24iOiBpbnN0W25dLCAib3JpZ2luIjogb25hbWUob3JpZ2lucy5nZXQobikpfSBmb3IgbiBpbiBuYW1lc10sCiAgICAgICAgICAgICJwZW5kaW5nIjogW3sibmFtZSI6IHBbIm5hbWUiXSwgImZyb20iOiBwWyJmcm9tIl0sICJ0byI6IHBbInRvIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAib3JpZ2luIjogc29ydGVkKHNlbGYub3JpZ2luX25hbWUocFsib3JpZ2luIl0pKX0gZm9yIHAgaW4gcGVuZF0sCiAgICAgICAgfQoKICAgICMgLS0tLS0tLS0tLSB0aGUgcnVuIC0tLS0tLS0tLS0KICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgcGxhbiA9IHNlbGYubG9hZF9wbGFuKCkKICAgICAgICBzZWxmLm1vZGUsIHNlbGYubGF5ZXIsIHNlbGYudm1pZCwgc2VsZi5zZWxlY3QgPSBzZWxmLmNoZWNrX3BsYW4ocGxhbikKICAgICAgICBzZWxmLnJlcG9ydC51cGRhdGUobW9kZT1zZWxmLm1vZGUsIGxheWVyPXNlbGYubGF5ZXIsIHJlbGVhc2VfaWQ9cGxhbi5nZXQoInJlbGVhc2VfaWQiKSwgdm1pZD1zZWxmLnZtaWQpCiAgICAgICAgIyBSLTg2OCAodjAuMTQ0LjApOiB0aGUgYWdlbnQncyBydW4gaWQsIHRyaWdnZXIgYW5kIHJpbmcgdHJhdmVsIGluIHRoZSByZXBvcnQsIHNvIGEgcmVwb3J0IHRoZSBhZ2VudCBuZXZlcgogICAgICAgICMgcmVjZWl2ZWQgKGl0IHdhcyBraWxsZWQgbWlkLXBhc3MpIGNhbiBiZSBzZW50IGxhdGVyIGZyb20gdGhlIHNhdmVkIGNvcHkuIFBsYWluIGlkcyBvbmx5OyBhbnl0aGluZyBlbHNlCiAgICAgICAgIyBpcyBkcm9wcGVkLCBuZXZlciByZWZ1c2VkICh0aGUgcGxhbidzIG90aGVyIGNoZWNrcyBkZWNpZGUpLgogICAgICAgIHJpZCwgdHJpZywgcmluZyA9IHBsYW4uZ2V0KCJydW5faWQiKSwgcGxhbi5nZXQoInRyaWdnZXIiKSwgcGxhbi5nZXQoInJpbmciKQogICAgICAgIGlmIGlzaW5zdGFuY2UocmlkLCBzdHIpIGFuZCByZS5tYXRjaChyIl5bQS1aYS16MC05Ll8tXXsxLDgwfSQiLCByaWQpOgogICAgICAgICAgICBzZWxmLnJlcG9ydFsicnVuX2lkIl0gPSByaWQKICAgICAgICBpZiBpc2luc3RhbmNlKHRyaWcsIHN0cikgYW5kIHJlLm1hdGNoKHIiXlthLXowLTlfLV17MSwyMH0kIiwgdHJpZyk6CiAgICAgICAgICAgIHNlbGYucmVwb3J0WyJ0cmlnZ2VyIl0gPSB0cmlnCiAgICAgICAgaWYgcmluZyBpbiAoMCwgMSkgYW5kIG5vdCBpc2luc3RhbmNlKHJpbmcsIGJvb2wpOgogICAgICAgICAgICBzZWxmLnJlcG9ydFsicmluZyJdID0gcmluZwogICAgICAgIGlmIHNlbGYubW9kZSA9PSAiZmFjdHMiOgogICAgICAgICAgICByZXR1cm4gc2VsZi5mYWN0cygpCiAgICAgICAgaWYgc2VsZi5tb2RlID09ICJidW5kbGUiOgogICAgICAgICAgICByZXR1cm4gQnVuZGxlKHNlbGYpLmZyb21fcGxhbihwbGFuKQogICAgICAgIGlmIHNlbGYubGF5ZXIgPT0gImhvc3QiOgogICAgICAgICAgICBzZWxmLmNoZWNrX2FwcGxpYW5jZSgpCiAgICAgICAgc2VsZi5jaGVja19ndWVzdChzZWxmLnZtaWQpCiAgICAgICAgbG9nID0gc2VsZi5yLmxvZwogICAgICAgIGlmIHNlbGYubW9kZSA9PSAibGl2ZS1yZXN0b3JlLW9uIjoKICAgICAgICAgICAgcmV0dXJuIHNlbGYubGl2ZV9yZXN0b3JlX29uKCkKICAgICAgICBzZWxmLndobywgc2VsZi5hbGxvd19kb3duZ3JhZGUgPSAoImZhc3QiLCBGYWxzZSkKICAgICAgICBpZiBzZWxmLmxheWVyID09ICJkb2NrZXIiIGFuZCBzZWxmLm1vZGUgPT0gImFwcGx5IjoKICAgICAgICAgICAgc2VsZi53aG8sIHNlbGYuYWxsb3dfZG93bmdyYWRlID0gc2VsZi5kb2NrZXJfYXV0aG9yaXR5KHBsYW4pCiAgICAgICAgICAgIGlmIHNlbGYubGl2ZV9yZXN0b3JlKCkgIT0gInRydWUiOgogICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjE1IiwgImxpdmUtcmVzdG9yZSBpcyBub3QgT04gaW4gdGhlIGd1ZXN0IOKAlCBhIERvY2tlciBzdGVwIHdvdWxkIHJlc3RhcnQgZXZlcnkgY29udGFpbmVyIikKICAgICAgICAgICAgc2VsZi5yZXBvcnRbImF1dGhvcml0eSJdID0gc2VsZi53aG8KICAgICAgICAgICAgc2VsZi5yZXBvcnRbInVuZG8iXSA9IHNlbGYuYWxsb3dfZG93bmdyYWRlCiAgICAgICAgaWYgc2VsZi5tb2RlID09ICJoZWFsdGgiOgogICAgICAgICAgICBzZWxmLnJlcG9ydFsiaGVhbHRoIl0gPSBzZWxmLmhlYWx0aCgpCiAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgbG9nKGYib3MtYXBwbHk6IFNUQVJUIHJlbGVhc2U9e3BsYW4uZ2V0KCdyZWxlYXNlX2lkJyl9IGxheWVyPXtzZWxmLmxheWVyfSIgKwogICAgICAgICAgICAoZiI6e3NlbGYudm1pZH0iIGlmIHNlbGYubGF5ZXIgIT0gImhvc3QiIGVsc2UgIiIpICsKICAgICAgICAgICAgZiIgbGFuZT17cGxhbi5nZXQoJ2xhbmUnLCAnZmFzdCcpfSBtb2RlPXtzZWxmLm1vZGV9IHNlbGVjdD17c2VsZi5zZWxlY3R9IHBhY2thZ2VzPXtsZW4ocGxhbi5nZXQoJ3BhY2thZ2VzJywgW10pKX0iICsKICAgICAgICAgICAgKGYiIGF1dGhvcml0eT17c2VsZi53aG99eycgVU5ETycgaWYgc2VsZi5hbGxvd19kb3duZ3JhZGUgZWxzZSAnJ30iIGlmIHNlbGYubGF5ZXIgPT0gImRvY2tlciIgZWxzZSAiIikpCiAgICAgICAgaWYgc2VsZi5hcHRfbG9ja19oZWxkKCk6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlI5IiwgZiJhbm90aGVyIGFwdC9kcGtnIGhvbGRzIHRoZSBsb2NrIG9uIHRoZSB7c2VsZi5sYXllcn0iKQogICAgICAgIHNlbGYucmVwb3J0WyJoZWFsdGhfYmVmb3JlIl0gPSBzZWxmLmhlYWx0aCgpCiAgICAgICAgaWYgc2VsZi5tb2RlID09ICJhcHBseSI6CiAgICAgICAgICAgIHNlbGYucmVwYWlyKCkKICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLngoQVBUX0VOViArIFsiYXB0LWdldCIsICItcSIsICJ1cGRhdGUiXSwgdGltZW91dD02MDApCiAgICAgICAgaWYgcmMgIT0gMDoKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjciLCBmImFwdC1nZXQgdXBkYXRlIGZhaWxlZCBvbiB0aGUge3NlbGYubGF5ZXJ9OiB7KG91dCArIGVycikuc3RyaXAoKS5zcGxpdGxpbmVzKClbLTE6XX0iKQogICAgICAgIGluc3RhbGxlZF9hZnRlciA9IE5vbmUKICAgICAgICBpZiBzZWxmLm1vZGUgPT0gImFwcGx5IjoKICAgICAgICAgICAgcmMsIGluc3RhbGxlZF9hZnRlciA9IHNlbGYuYXBwbHkocGxhbikKICAgICAgICAgICAgaWYgcmM6CiAgICAgICAgICAgICAgICByZXR1cm4gcmMKICAgICAgICBzZWxmLnJlcG9ydC51cGRhdGUoc2VsZi5pbnZlbnRvcnkoaW5zdGFsbGVkX2FmdGVyKSkKICAgICAgICBpZiAicmVib290X25lZWRlZCIgbm90IGluIHNlbGYucmVwb3J0OgogICAgICAgICAgICAjIEVWRVJZIGxheWVyIGlzIHNjYW5uZWQgb24gRVZFUlkgcGFzczogYSByZWJvb3QgKGhvc3QpIG9yIGEgcmVzdGFydCAoZ3Vlc3QpIG11c3QgQ0xFQVIgInJlc3RhcnQgbmVlZGVkIiwKICAgICAgICAgICAgIyBvciB0aGUgZmxlZXQgdmlldyBrZWVwcyBhIHN0YWxlIGRhdGUgKFItODQ5LCB2MC4xNDIuMDsgdGhlIGhvc3Qgc2luY2UgdjAuMTQxLjEpLiBPbmUgcGN0IGV4ZWMsIH4xIHMuCiAgICAgICAgICAgICMgUGlubmVkIGJ5IHRlc3RfZXZlcnlfbGF5ZXJfc2NhbnNfZXZlcnlfcGFzcy4KICAgICAgICAgICAgc2VsZi5yZXBvcnRbInJlc3RhcnRfbmVlZGVkIl0sIHNlbGYucmVwb3J0WyJyZWJvb3RfbmVlZGVkIl0gPSBzZWxmLnJlc3RhcnRfbmVlZGVkKCkKICAgICAgICAgICAgc2VsZi5yZXBvcnRbImRvY2tlcl9yZXN0YXJ0X25lZWRlZCJdID0gYW55KHAgaW4gKCJkb2NrZXJkIiwgImNvbnRhaW5lcmQiKSBmb3IgcCBpbiBzZWxmLnJlcG9ydFsicmVzdGFydF9uZWVkZWQiXSkKICAgICAgICBpZiBzZWxmLmxheWVyID09ICJkb2NrZXIiOgogICAgICAgICAgICByY192LCBvdXRfdiwgXyA9IHNlbGYuZyhbImRvY2tlciIsICJ2ZXJzaW9uIiwgIi0tZm9ybWF0IiwgInt7LlNlcnZlci5WZXJzaW9ufX0iXSwgdGltZW91dD02MCkKICAgICAgICAgICAgc2VsZi5yZXBvcnRbImRvY2tlcl9lbmdpbmUiXSA9IG91dF92LnN0cmlwKCkgaWYgcmNfdiA9PSAwIGFuZCBvdXRfdi5zdHJpcCgpIGVsc2UgInVua25vd24iCiAgICAgICAgc2VsZi5yZXBvcnRbInJlYm9vdF9zY2FubmVkIl0gPSAicmVib290X25lZWRlZCIgaW4gc2VsZi5yZXBvcnQKICAgICAgICBzZWxmLnJlcG9ydFsiaGVhbHRoX2FmdGVyIl0gPSBzZWxmLmhlYWx0aCgpCiAgICAgICAgcmV0dXJuIDAKCiAgICBkZWYgZHBrZ19zdGF0ZShzZWxmKToKICAgICAgICAiIiJgZHBrZyAtLWF1ZGl0YCBBTkQgZHBrZydzIHVwZGF0ZSBqb3VybmFsLCBpbiBPTkUgY2FsbCAoUi04NzYsIGFnZW50IHYwLjE0NS4wKS4gQSBjcmFzaCBpbiB0aGUgbWlkZGxlIG9mIGFuCiAgICAgICAgaW5zdGFsbCBjYW4gbGVhdmUgYC92YXIvbGliL2Rwa2cvdXBkYXRlcy9gIG5vbi1lbXB0eSB3aGlsZSBgLS1hdWRpdGAgcmVhZHMgY2xlYW4g4oCUIG1lYXN1cmVkIG9uIGRlbW8taHAKICAgICAgICAyMDI2LTEwLTA1IOKAlCBhbmQgdGhhdCBqb3VybmFsIGlzIGV4YWN0bHkgd2hhdCBhcHQgcmVmdXNlcyBvbiAoImRwa2cgd2FzIGludGVycnVwdGVkIikuIE9uZSBgc2ggLWNgIHdpdGggYQogICAgICAgIGNvbnN0YW50IHNjcmlwdCBrZWVwcyBSLTg0NSdzIHNwZWVkOiBhIGNsZWFuIHBhc3Mgc3RpbGwgY29zdHMgb25lIGNhbGwgaGVyZSwgYXMgYmVmb3JlLiIiIgogICAgICAgIHJjLCBvdXQsIF8gPSBzZWxmLngoWyJzaCIsICItYyIsIERQS0dfU1RBVEVfU0NSSVBUXSkKICAgICAgICBhdWRpdCwgXywgam91cm5hbCA9IG91dC5wYXJ0aXRpb24oSk9VUk5BTF9NQVJLICsgIlxuIikKICAgICAgICByZXR1cm4gYXVkaXQsIFtsIGZvciBsIGluIGpvdXJuYWwuc3BsaXQoKSBpZiBsXQoKICAgIGRlZiByZXBhaXIoc2VsZiwgZm9yY2U9RmFsc2UpOgogICAgICAgIGJlZm9yZSwgam91cm5hbCA9IHNlbGYuZHBrZ19zdGF0ZSgpCiAgICAgICAgY29uZmlndXJlZCA9IGxlbihbbCBmb3IgbCBpbiBiZWZvcmUuc3BsaXRsaW5lcygpIGlmIGwuc3RhcnRzd2l0aCgiICIpXSkKICAgICAgICBmaXhlZCA9IDAKICAgICAgICBhZnRlciwgam91cm5hbF9hZnRlciA9ICIiLCBbXQogICAgICAgICMgbm90aGluZyBoYWxmLWRvbmUgYW5kIG5vIHVwZGF0ZSBqb3VybmFsIOKGkiBub3RoaW5nIHRvIHJ1biAoUi04NDU6IHR3byBjYWxscyBzYXZlZCBvbiBldmVyeSBjbGVhbiBwYXNzKS4KICAgICAgICAjIFItODc2OiB0aGUgSk9VUk5BTCBjb3VudHMgdG9vLCBhbmQgYGZvcmNlYCAoYXB0IHNhaWQgImRwa2cgd2FzIGludGVycnVwdGVkIikgYWx3YXlzIHJlcGFpcnMuCiAgICAgICAgaWYgYmVmb3JlLnN0cmlwKCkgb3Igam91cm5hbCBvciBmb3JjZToKICAgICAgICAgICAgc2VsZi54KEFQVF9FTlYgKyBbImRwa2ciLCAiLS1jb25maWd1cmUiLCAiLWEiLCAiLS1mb3JjZS1jb25mb2xkIl0pCiAgICAgICAgICAgIHJjMiwgb3V0LCBlcnIgPSBzZWxmLngoQVBUX0VOViArIFsiYXB0LWdldCIsICItZiIsICJpbnN0YWxsIiwgIi15IiwgIi1xIl0gKyBEUEtHX09QVFMpCiAgICAgICAgICAgIGFmdGVyLCBqb3VybmFsX2FmdGVyID0gc2VsZi5kcGtnX3N0YXRlKCkKICAgICAgICAgICAgZml4ZWQgPSBsZW4ocmUuZmluZGFsbChyIl5TZXR0aW5nIHVwICIsIG91dCwgcmUuTSkpCiAgICAgICAgc2VsZi5yZXBvcnRbInJlcGFpciJdID0geyJoYWxmX2NvbmZpZ3VyZWRfYmVmb3JlIjogY29uZmlndXJlZCwgImpvdXJuYWxfYmVmb3JlIjogbGVuKGpvdXJuYWwpLCAiZml4ZWQiOiBmaXhlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsZWFuX2FmdGVyIjogYWZ0ZXIuc3RyaXAoKSA9PSAiIiBhbmQgbm90IGpvdXJuYWxfYWZ0ZXJ9CiAgICAgICAgc2VsZi5yLmxvZyhmIm9zLWFwcGx5OiBSRVBBSVIgY29uZmlndXJlZD17Y29uZmlndXJlZH0gam91cm5hbD17bGVuKGpvdXJuYWwpfSBmaXhlZD17Zml4ZWR9IiArICgiIGZvcmNlZCIgaWYgZm9yY2UgZWxzZSAiIikpCiAgICAgICAgaWYgYWZ0ZXIuc3RyaXAoKToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjEzIiwgImRwa2cgaXMgc3RpbGwgYnJva2VuIGFmdGVyIHRoZSByZXBhaXI6ICIgKyBhZnRlci5zdHJpcCgpLnNwbGl0bGluZXMoKVswXSkKICAgICAgICBpZiBqb3VybmFsX2FmdGVyOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTMiLCBmImRwa2cncyB1cGRhdGUgam91cm5hbCBpcyBzdGlsbCBub3QgZW1wdHkgYWZ0ZXIgdGhlIHJlcGFpciAoe2xlbihqb3VybmFsX2FmdGVyKX0gZmlsZShzKSkiKQoKICAgIGRlZiBwZW5kaW5nX2Zhc3Qoc2VsZik6CiAgICAgICAgIiIiUmluZyAwIChzZWxlY3QgcGVuZGluZy1mYXN0KTogZXZlcnkgcGVuZGluZyB1cGdyYWRlIG9mIGFuIElOU1RBTExFRCBwYWNrYWdlIHdob3NlIGV2ZXJ5IG9yaWdpbiBpcyBEZWJpYW4gLwogICAgICAgIERlYmlhbi1TZWN1cml0eSDigJQgYW5kLCBvbiB0aGUgaG9zdCwgbm90IGEga2VybmVsIC8gYm9vdCAvIGZpcm13YXJlIHBhY2thZ2UuIiIiCiAgICAgICAgcmMsIHBlbmQsIHJlbXYsIF8gPSBzZWxmLnNpbXVsYXRlKFsiZGlzdC11cGdyYWRlIl0pCiAgICAgICAgb3V0ID0gW10KICAgICAgICBmb3IgcCBpbiBwZW5kOgogICAgICAgICAgICBvID0gc2VsZi5vcmlnaW5fbmFtZShwWyJvcmlnaW4iXSkKICAgICAgICAgICAgaWYgcFsiZnJvbSJdIGlzIE5vbmUgb3Igbm90IG8gb3Igbm90IG8gPD0gc2V0KEZBU1RfT1JJR0lOUyk6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBpZiBzZWxmLmxheWVyID09ICJob3N0IiBhbmQgSE9TVF9TTE9XX1JFLm1hdGNoKHBbIm5hbWUiXSk6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBvdXQuYXBwZW5kKHsibmFtZSI6IHBbIm5hbWUiXSwgInZlcnNpb24iOiBwWyJ0byJdLCAib3JpZ2luIjogIkRlYmlhbi1TZWN1cml0eSIgaWYgIkRlYmlhbi1TZWN1cml0eSIgaW4gbyBlbHNlICJEZWJpYW4ifSkKICAgICAgICByZXR1cm4gb3V0CgogICAgZGVmIHJlc3RhcnRfc29ja2V0X3VzZXJzKHNlbGYpOgogICAgICAgICIiIlItODU4OiByZXN0YXJ0IE9OTFkgdGhlIGNvbnRhaW5lcnMgdGhhdCBiaW5kLW1vdW50IHRoZSBEb2NrZXIgc29ja2V0LCBzbyB0aGV5IGF0dGFjaCB0byB0aGUgbmV3IG9uZS4iIiIKICAgICAgICByYywgb3V0LCBfID0gc2VsZi5nKFsiZG9ja2VyIiwgInBzIiwgIi1xIiwgIi0tbm8tdHJ1bmMiXSwgdGltZW91dD02MCkKICAgICAgICB1c2VycyA9IFtdCiAgICAgICAgZm9yIGNpZCBpbiBvdXQuc3BsaXQoKToKICAgICAgICAgICAgaXJjLCBpb3V0LCBfID0gc2VsZi5nKFsiZG9ja2VyIiwgImluc3BlY3QiLCAiLWYiLCAie3suTmFtZX19fHt7cmFuZ2UgLk1vdW50c319e3suRGVzdGluYXRpb259fTt7e2VuZH19IiwgY2lkXSwgdGltZW91dD02MCkKICAgICAgICAgICAgaWYgaXJjICE9IDAgb3IgInwiIG5vdCBpbiBpb3V0OgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgbmFtZSwgbW91bnRzID0gaW91dC5zdHJpcCgpLnNwbGl0KCJ8IiwgMSkKICAgICAgICAgICAgaWYgYW55KG0gaW4gRE9DS0VSX1NPQ0tFVFMgZm9yIG0gaW4gbW91bnRzLnNwbGl0KCI7IikpOgogICAgICAgICAgICAgICAgdXNlcnMuYXBwZW5kKG5hbWUubHN0cmlwKCIvIikpCiAgICAgICAgdXNlcnMuc29ydCgpCiAgICAgICAgaWYgdXNlcnM6CiAgICAgICAgICAgIHJyYywgXywgcmVyciA9IHNlbGYuZyhbImRvY2tlciIsICJyZXN0YXJ0Il0gKyB1c2VycywgdGltZW91dD0zMDApCiAgICAgICAgICAgIHNlbGYuci5sb2coZiJvcy1hcHBseTogU09DS0VULVVTRVJTIHJlc3RhcnRlZD17JywnLmpvaW4odXNlcnMpfSByYz17cnJjfSAoUi04NTg6IHRoZXkgaGVsZCB0aGUgb2xkIGRvY2tlciBzb2NrZXQpIikKICAgICAgICByZXR1cm4gdXNlcnMKCiAgICBkZWYgcGVuZGluZ19kb2NrZXIoc2VsZik6CiAgICAgICAgIiIiUmluZyAwIChzZWxlY3QgcGVuZGluZy1kb2NrZXIpOiB0aGUgbmV3ZXN0IHBlbmRpbmcgdmVyc2lvbiBvZiBlYWNoIElOU1RBTExFRCBEb2NrZXIgcGFja2FnZSwgRG9ja2VyIG9yaWdpbi4iIiIKICAgICAgICByYywgcGVuZCwgcmVtdiwgXyA9IHNlbGYuc2ltdWxhdGUoWyJkaXN0LXVwZ3JhZGUiXSkKICAgICAgICByZXR1cm4gW3sibmFtZSI6IHBbIm5hbWUiXSwgInZlcnNpb24iOiBwWyJ0byJdLCAib3JpZ2luIjogRE9DS0VSX09SSUdJTn0gZm9yIHAgaW4gcGVuZAogICAgICAgICAgICAgICAgaWYgcFsiZnJvbSJdIGlzIG5vdCBOb25lIGFuZCBwWyJuYW1lIl0gaW4gRE9DS0VSX05BTUVTIGFuZCBzZWxmLm9yaWdpbl9uYW1lKHBbIm9yaWdpbiJdKSA9PSB7RE9DS0VSX09SSUdJTn1dCgogICAgZGVmIG9yaWdpbl9vayhzZWxmLCBvcmlnaW4pOgogICAgICAgIG8gPSBzZWxmLm9yaWdpbl9uYW1lKG9yaWdpbikKICAgICAgICBpZiBzZWxmLmxheWVyID09ICJkb2NrZXIiOgogICAgICAgICAgICByZXR1cm4gbyA9PSB7RE9DS0VSX09SSUdJTn0KICAgICAgICByZXR1cm4gYm9vbChvICYgc2V0KEZBU1RfT1JJR0lOUykpCgogICAgZGVmIGFwcGx5KHNlbGYsIHBsYW4pOgogICAgICAgIGxvZyA9IHNlbGYuci5sb2cKICAgICAgICBpZiBzZWxmLnNlbGVjdCA9PSAibGlzdGVkIjoKICAgICAgICAgICAgcGFja2FnZXMgPSBwbGFuWyJwYWNrYWdlcyJdCiAgICAgICAgZWxpZiBzZWxmLnNlbGVjdCA9PSAicGVuZGluZy1kb2NrZXIiOgogICAgICAgICAgICBwYWNrYWdlcyA9IHNlbGYucGVuZGluZ19kb2NrZXIoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHBhY2thZ2VzID0gc2VsZi5wZW5kaW5nX2Zhc3QoKQogICAgICAgIGNtcF9vcCA9ICJuZSIgaWYgc2VsZi5hbGxvd19kb3duZ3JhZGUgZWxzZSAiZ3QiCiAgICAgICAgaW5zdCA9IHNlbGYuaW5zdGFsbGVkKCkKICAgICAgICB1cGdyYWRlLCBhbHJlYWR5LCBub3RpbnN0ID0gW10sIDAsIDAKICAgICAgICBmb3IgZSBpbiBwYWNrYWdlczoKICAgICAgICAgICAgbiwgdiA9IGVbIm5hbWUiXSwgZVsidmVyc2lvbiJdCiAgICAgICAgICAgIGlmIG4gbm90IGluIGluc3Q6CiAgICAgICAgICAgICAgICBub3RpbnN0ICs9IDEKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRwa2dfY21wKHYsIGNtcF9vcCwgaW5zdFtuXSk6CiAgICAgICAgICAgICAgICBhbHJlYWR5ICs9IDEKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIHVwZ3JhZGUuYXBwZW5kKChuLCB2KSkKICAgICAgICBmcm9tX3NuYXAgPSAwCiAgICAgICAgaWYgdXBncmFkZToKICAgICAgICAgICAgYXZhaWwgPSBzZWxmLm1hZGlzb25fYWxsKFtuIGZvciBuLCBfIGluIHVwZ3JhZGVdKQogICAgICAgICAgICBtaXNzaW5nID0gWyhuLCB2KSBmb3IgbiwgdiBpbiB1cGdyYWRlIGlmIHYgbm90IGluIGF2YWlsW25dXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1pc3NpbmcgPSBbXQogICAgICAgIGlmIG1pc3Npbmc6CiAgICAgICAgICAgIHNuYXAgPSBwbGFuLmdldCgic25hcHNob3QiLCAiIikKICAgICAgICAgICAgaWYgbm90IHNuYXA6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSNyIsIGYie21pc3NpbmdbMF1bMF19PXttaXNzaW5nWzBdWzFdfSBpcyBub3QgZG93bmxvYWRhYmxlIGFuZCB0aGUgcGxhbiBuYW1lcyBubyBzbmFwc2hvdCIpCiAgICAgICAgICAgIHNlbGYuYWRkX3NuYXBzaG90X3NvdXJjZXMoc25hcCkKICAgICAgICAgICAgYXZhaWwgPSBzZWxmLm1hZGlzb25fYWxsKFtuIGZvciBuLCBfIGluIG1pc3NpbmddKQogICAgICAgICAgICBzdGlsbCA9IFsobiwgdikgZm9yIG4sIHYgaW4gbWlzc2luZyBpZiB2IG5vdCBpbiBhdmFpbFtuXV0KICAgICAgICAgICAgaWYgc3RpbGw6CiAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9zbmFwc2hvdF9zb3VyY2VzKCkKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlI3IiwgZiJ7c3RpbGxbMF1bMF19PXtzdGlsbFswXVsxXX0gaXMgbm90IGRvd25sb2FkYWJsZSwgbm90IGV2ZW4gZnJvbSBzbmFwc2hvdCB7c25hcH0iKQogICAgICAgICAgICBmcm9tX3NuYXAgPSBsZW4obWlzc2luZykKICAgICAgICB0cnk6CiAgICAgICAgICAgIGxvZyhmIm9zLWFwcGx5OiBQTEFOIHVwZ3JhZGU9e2xlbih1cGdyYWRlKX0gYWxyZWFkeT17YWxyZWFkeX0gbm90LWluc3RhbGxlZD17bm90aW5zdH0gZnJvbS1zbmFwc2hvdD17ZnJvbV9zbmFwfSIpCiAgICAgICAgICAgIHNlbGYucmVwb3J0WyJwbGFuIl0gPSB7InVwZ3JhZGUiOiBsZW4odXBncmFkZSksICJhbHJlYWR5IjogYWxyZWFkeSwgIm5vdF9pbnN0YWxsZWQiOiBub3RpbnN0LCAiZnJvbV9zbmFwc2hvdCI6IGZyb21fc25hcH0KICAgICAgICAgICAgaWYgbm90IHVwZ3JhZGU6CiAgICAgICAgICAgICAgICBzZWxmLnJlcG9ydFsidXBncmFkZWQiXSA9IFtdCiAgICAgICAgICAgICAgICBsb2coIm9zLWFwcGx5OiBET05FIHJjPTAgc2Vjb25kcz0wIHVwZ3JhZGVkPTAgKG5vdGhpbmcgdG8gZG8pIikKICAgICAgICAgICAgICAgIHJldHVybiAwLCBpbnN0CiAgICAgICAgICAgIGFyZ3MgPSBbImluc3RhbGwiLCAiLS1vbmx5LXVwZ3JhZGUiLCAiLS1uby1pbnN0YWxsLXJlY29tbWVuZHMiXSArIFwKICAgICAgICAgICAgICAgIChbIi0tYWxsb3ctZG93bmdyYWRlcyJdIGlmIHNlbGYuYWxsb3dfZG93bmdyYWRlIGVsc2UgW10pICsgW2Yie259PXt2fSIgZm9yIG4sIHYgaW4gdXBncmFkZV0KICAgICAgICAgICAgcmMsIHNpbSwgcmVtdiwgdGV4dCA9IHNlbGYuc2ltdWxhdGUoYXJncykKICAgICAgICAgICAgaWYgcmMgIT0gMDoKICAgICAgICAgICAgICAgIHRhaWwgPSB0ZXh0LnN0cmlwKCkuc3BsaXRsaW5lcygpWy0xXSBpZiB0ZXh0LnN0cmlwKCkgZWxzZSAiIgogICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjciLCAidGhlIHNpbXVsYXRpb24gZmFpbGVkOiAiICsgdGFpbCkKICAgICAgICAgICAgaWYgcmVtdjoKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlI0IiwgZiJ0aGUgcGxhbiB3b3VsZCByZW1vdmUgeycsICcuam9pbihyZW12Wzo1XSl9IikKICAgICAgICAgICAgd2FudCA9IGRpY3QodXBncmFkZSkKICAgICAgICAgICAgZm9yIHAgaW4gc2ltOgogICAgICAgICAgICAgICAgaWYgcFsiZnJvbSJdIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjYiLCBmInRoZSBwbGFuIHdvdWxkIGFkZCBhIHBhY2thZ2UgdGhhdCBpcyBub3QgaW5zdGFsbGVkOiB7cFsnbmFtZSddfSIpCiAgICAgICAgICAgICAgICBpZiBwWyJuYW1lIl0gbm90IGluIHdhbnQ6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjYiLCBmInRoZSBwbGFuIHdvdWxkIHRvdWNoIHtwWyduYW1lJ119LCB3aGljaCBpcyBub3QgaW4gdGhlIHBsYW4iKQogICAgICAgICAgICAgICAgaWYgcFsidG8iXSAhPSB3YW50W3BbIm5hbWUiXV06CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjYiLCBmIntwWyduYW1lJ119IHdvdWxkIGdvIHRvIHtwWyd0byddfSwgbm90IHRoZSBhcHByb3ZlZCB7d2FudFtwWyduYW1lJ11dfSIpCiAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5hbGxvd19kb3duZ3JhZGUgYW5kIG5vdCBzZWxmLmRwa2dfY21wKHBbInRvIl0sICJndCIsIHBbImZyb20iXSk6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjUiLCBmIntwWyduYW1lJ119IHdvdWxkIGJlIGRvd25ncmFkZWQge3BbJ2Zyb20nXX0gLT4ge3BbJ3RvJ119IikKICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLm9yaWdpbl9vayhwWyJvcmlnaW4iXSk6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjIiLCBmIntwWyduYW1lJ119IHdvdWxkIGNvbWUgZnJvbSB7cFsnb3JpZ2luJ119LCBub3QgdGhlIHtzZWxmLmxheWVyfSBsYXllcidzIG9yaWdpbiIpCiAgICAgICAgICAgICAgICBpZiBzZWxmLmxheWVyID09ICJob3N0IiBhbmQgSE9TVF9TTE9XX1JFLm1hdGNoKHBbIm5hbWUiXSk6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjE0IiwgZiJ7cFsnbmFtZSddfSBpcyBhIGtlcm5lbCAvIGJvb3QgLyBmaXJtd2FyZSBwYWNrYWdlIOKAlCB0aGUgaG9zdCdzIHNsb3cgbGFuZSIpCiAgICAgICAgICAgIG5lZWQgPSBzZWxmLmRvd25sb2FkX2J5dGVzKGFyZ3MpCiAgICAgICAgICAgIGZyZWUgPSBzZWxmLmZyZWVfYnl0ZXMoKQogICAgICAgICAgICBpZiBmcmVlID49IDAgYW5kIGZyZWUgPCBtYXgoTUlOX0ZSRUUsIDMgKiBuZWVkKToKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlI4IiwgZiJmcmVlIHNwYWNlIHtmcmVlfSBCIGlzIGJlbG93IG1heCg1MDAgTUIsIDMgeCBkb3dubG9hZCB7bmVlZH0gQikiKQogICAgICAgICAgICB0MCA9IHRpbWUudGltZSgpCiAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYueChBUFRfRU5WICsgWyJhcHQtZ2V0IiwgIi15IiwgIi1xIl0gKyBEUEtHX09QVFMgKyBhcmdzKQogICAgICAgICAgICBpZiByYyAhPSAwIGFuZCAiZHBrZyB3YXMgaW50ZXJydXB0ZWQiIGluIChvdXQgKyBlcnIpOgogICAgICAgICAgICAgICAgIyBSLTg3NiAoYmVsdCk6IGFwdCBzYXlzIGRwa2cgd2FzIGludGVycnVwdGVkIGFsdGhvdWdoIHRoZSByZXBhaXIgZm91bmQgbm90aGluZyDigJQgcmVwYWlyIGFuZAogICAgICAgICAgICAgICAgIyByZXRyeSBPTkNFLiBOZXZlciBhIGxvb3AuCiAgICAgICAgICAgICAgICBzZWxmLnIubG9nKCJvcy1hcHBseTogSU5URVJSVVBURUQgYXB0IHNheXMgZHBrZyB3YXMgaW50ZXJydXB0ZWQg4oCUIHJlcGFpcmluZyBhbmQgcmV0cnlpbmcgb25jZSIpCiAgICAgICAgICAgICAgICBzZWxmLnJlcGFpcihmb3JjZT1UcnVlKQogICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi54KEFQVF9FTlYgKyBbImFwdC1nZXQiLCAiLXkiLCAiLXEiXSArIERQS0dfT1BUUyArIGFyZ3MpCiAgICAgICAgICAgIHNlY3MgPSB0aW1lLnRpbWUoKSAtIHQwCiAgICAgICAgICAgICMgZHBrZyBzYXlzICJJbnN0YWxsaW5nIG5ldyB2ZXJzaW9uIG9mIGNvbmZpZyBmaWxlIFgiIHdoZW4gWCB3YXMgTk9UIGNoYW5nZWQgbG9jYWxseSAodGhlIHBhY2thZ2UncyBuZXcKICAgICAgICAgICAgIyB2ZXJzaW9uIGlzIHRha2VuKSwgYW5kICJDb25maWd1cmF0aW9uIGZpbGUgJ1gnIiArICJLZWVwaW5nIG9sZCBjb25maWcgZmlsZSIgd2hlbiBpdCB3YXMgKC0tZm9yY2UtY29uZm9sZAogICAgICAgICAgICAjIGtlZXBzIHRoZSBsb2NhbCBvbmU7IHRoZSBwYWNrYWdlJ3MgdmVyc2lvbiBsYW5kcyBhcyBYLmRwa2ctZGlzdCkuIE1lYXN1cmVkIGxpdmUgMjAyNi0xMC0wNCAoZGViaWFuX3ZlcnNpb24pLgogICAgICAgICAgICBjb25mbGljdCA9IE5vbmUKICAgICAgICAgICAgZm9yIGwgaW4gKG91dCArIGVycikuc3BsaXRsaW5lcygpOgogICAgICAgICAgICAgICAgbSA9IHJlLnNlYXJjaChyIkluc3RhbGxpbmcgbmV3IHZlcnNpb24gb2YgY29uZmlnIGZpbGUgKFxTKz8pXHMqXC5cLlwuIiwgbCkKICAgICAgICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAgICAgICAgbG9nKGYib3MtYXBwbHk6IENPTkZGSUxFIHVwZGF0ZWQge20uZ3JvdXAoMSl9IChpdCB3YXMgbm90IGNoYW5nZWQgbG9jYWxseSkiKQogICAgICAgICAgICAgICAgbSA9IHJlLnNlYXJjaChyIkNvbmZpZ3VyYXRpb24gZmlsZSAnKFteJ10rKSciLCBsKQogICAgICAgICAgICAgICAgaWYgbToKICAgICAgICAgICAgICAgICAgICBjb25mbGljdCA9IG0uZ3JvdXAoMSkKICAgICAgICAgICAgICAgIGlmIGNvbmZsaWN0IGFuZCAiS2VlcGluZyBvbGQgY29uZmlnIGZpbGUiIGluIGw6CiAgICAgICAgICAgICAgICAgICAgbG9nKGYib3MtYXBwbHk6IENPTkZGSUxFIGtlcHQge2NvbmZsaWN0fSAoY2hhbmdlZCBsb2NhbGx5OyB0aGUgcGFja2FnZSdzIHZlcnNpb24gaXMge2NvbmZsaWN0fS5kcGtnLWRpc3QpIikKICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9ydC5zZXRkZWZhdWx0KCJjb25mZmlsZXNfa2VwdCIsIFtdKS5hcHBlbmQoY29uZmxpY3QpCiAgICAgICAgICAgICAgICAgICAgY29uZmxpY3QgPSBOb25lCiAgICAgICAgICAgIHNlbGYueChbImFwdC1nZXQiLCAiY2xlYW4iXSkKICAgICAgICAgICAgaWYgcmMgIT0gMDoKICAgICAgICAgICAgICAgIF8sIGF1ZCwgXyA9IHNlbGYueChbImRwa2ciLCAiLS1hdWRpdCJdKQogICAgICAgICAgICAgICAgZmlyc3QgPSBhdWQuc3RyaXAoKS5zcGxpdGxpbmVzKClbMF0gaWYgYXVkLnN0cmlwKCkgZWxzZSAiY2xlYW4iCiAgICAgICAgICAgICAgICBsb2coZiJvcy1hcHBseTogRkFJTEVEIHJjPXtyY30gc3RlcD1pbnN0YWxsIOKAlCBkcGtnIHN0YXRlOiB7Zmlyc3R9IikKICAgICAgICAgICAgICAgIHNlbGYucmVwb3J0WyJmYWlsZWQiXSA9IHsicmMiOiByYywgImRwa2dfYXVkaXQiOiBmaXJzdCwgInRhaWwiOiAob3V0ICsgZXJyKS5zdHJpcCgpLnNwbGl0bGluZXMoKVstMzpdfQogICAgICAgICAgICAgICAgcmV0dXJuIDMsIE5vbmUKICAgICAgICAgICAgc2VsZi5yZXBvcnRbInVwZ3JhZGVkIl0gPSBbeyJuYW1lIjogbiwgInZlcnNpb24iOiB2fSBmb3IgbiwgdiBpbiB1cGdyYWRlXQogICAgICAgICAgICBzZWxmLnJlcG9ydFsic2Vjb25kcyJdID0gcm91bmQoc2VjcywgMSkKICAgICAgICAgICAgaWYgc2VsZi5sYXllciA9PSAiZG9ja2VyIjoKICAgICAgICAgICAgICAgIHNlbGYucmVwb3J0WyJzb2NrZXRfcmVzdGFydGVkIl0gPSBzZWxmLnJlc3RhcnRfc29ja2V0X3VzZXJzKCkKICAgICAgICAgICAgcHJvY3MsIHJlYm9vdCA9IHNlbGYucmVzdGFydF9uZWVkZWQoKQogICAgICAgICAgICBzZWxmLnJlcG9ydFsicmVzdGFydF9uZWVkZWQiXSA9IHByb2NzCiAgICAgICAgICAgIHNlbGYucmVwb3J0WyJkb2NrZXJfcmVzdGFydF9uZWVkZWQiXSA9IGFueShwIGluICgiZG9ja2VyZCIsICJjb250YWluZXJkIikgZm9yIHAgaW4gcHJvY3MpCiAgICAgICAgICAgIHNlbGYucmVwb3J0WyJyZWJvb3RfbmVlZGVkIl0gPSByZWJvb3QKICAgICAgICAgICAgbG9nKGYib3MtYXBwbHk6IERPTkUgcmM9MCBzZWNvbmRzPXtzZWNzOi4xZn0gdXBncmFkZWQ9e2xlbih1cGdyYWRlKX0gcmVzdGFydC1uZWVkZWQ9eycsJy5qb2luKHByb2NzKSBvciAnLSd9IHJlYm9vdC1uZWVkZWQ9eyd5ZXMnIGlmIHJlYm9vdCBlbHNlICdubyd9IikKICAgICAgICAgICAgcmV0dXJuIDAsIE5vbmUKICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICBpZiBmcm9tX3NuYXA6CiAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9zbmFwc2hvdF9zb3VyY2VzKCkKCiAgICBkZWYgZG93bmxvYWRfYnl0ZXMoc2VsZiwgYXJncyk6CiAgICAgICAgIyBSLTg2NSAodjAuMTQ0LjApOiBOTyBgLXNgLiBXaXRoIGAtc2AgYXB0IHByaW50cyB0aGUgc2ltdWxhdGlvbiAoIkluc3Qg4oCmIikgYW5kIG5vIFVSSSBsaXN0LCBzbyB0aGlzIHN1bW1lZAogICAgICAgICMgMCBCIGFuZCBSOCBvbmx5IGV2ZXIgYXBwbGllZCBpdHMgNTAwIE1CIGZsb29yIChtZWFzdXJlZCAyMDI2LTEwLTA0OiAwIFVSSXMgd2l0aCAtcywgMyBVUklzIHdpdGhvdXQpLgogICAgICAgICMgYC0tcHJpbnQtdXJpc2AgYWxvbmUgZG93bmxvYWRzIG5vdGhpbmcg4oCUIG1lYXN1cmVkIG9uIDkyMDIgMjAyNi0xMC0wNTogdGhlIGFyY2hpdmUgY2FjaGUgYW5kIHRoZSB2ZXJzaW9ucwogICAgICAgICMgdW5jaGFuZ2VkLiBQaW5uZWQgYnkgdGVzdF9SOF9jb3VudHNfdGhlX3JlYWxfZG93bmxvYWQgLyB0ZXN0X2Rvd25sb2FkX2J5dGVzX25ldmVyX3NpbXVsYXRlcy4KICAgICAgICByYywgb3V0LCBfID0gc2VsZi54KEFQVF9FTlYgKyBbImFwdC1nZXQiLCAiLW8iLCAiRGVidWc6Ok5vTG9ja2luZz0xIiwgIi0tcHJpbnQtdXJpcyIsICItcSJdICsgYXJncykKICAgICAgICB0b3RhbCA9IDAKICAgICAgICBmb3IgbCBpbiBvdXQuc3BsaXRsaW5lcygpOgogICAgICAgICAgICBtID0gcmUubWF0Y2gociJeJ1teJ10rJyBcUysgKFswLTldKykgIiwgbCkKICAgICAgICAgICAgaWYgbToKICAgICAgICAgICAgICAgIHRvdGFsICs9IGludChtLmdyb3VwKDEpKQogICAgICAgIHJldHVybiB0b3RhbAoKICAgIGRlZiBhZGRfc25hcHNob3Rfc291cmNlcyhzZWxmLCBzbmFwKToKICAgICAgICByYywgb3V0LCBfID0gc2VsZi54KFsic2giLCAiLWMiLCAiLiAvZXRjL29zLXJlbGVhc2UgJiYgZWNobyAkVkVSU0lPTl9DT0RFTkFNRSJdKQogICAgICAgIGNvZGUgPSBvdXQuc3RyaXAoKQogICAgICAgIGlmIG5vdCByZS5tYXRjaChyIl5bYS16XSskIiwgY29kZSk6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlI3IiwgZiJjYW5ub3QgcmVhZCB0aGUge3NlbGYubGF5ZXJ9J3MgRGViaWFuIGNvZGVuYW1lICh7Y29kZSFyfSkiKQogICAgICAgIGJvZHkgPSAoZiJkZWIgW2NoZWNrLXZhbGlkLXVudGlsPW5vXSBodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi97c25hcH0ge2NvZGV9IG1haW5cbiIKICAgICAgICAgICAgICAgIGYiZGViIFtjaGVjay12YWxpZC11bnRpbD1ub10gaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4tc2VjdXJpdHkve3NuYXB9IHtjb2RlfS1zZWN1cml0eSBtYWluXG4iKQogICAgICAgIHNlbGYuci53cml0ZV9maWxlKHNlbGYubGF5ZXIsIHNlbGYudm1pZCwgU05BUFNIT1RfTElTVCwgYm9keSkKICAgICAgICBzZWxmLnIubG9nKGYib3MtYXBwbHk6IFNOQVBTSE9UIHVzaW5nIHNuYXBzaG90LmRlYmlhbi5vcmcve3NuYXB9IGZvciB2ZXJzaW9ucyBubyBsb25nZXIgcHVibGlzaGVkIChkZWNpc2lvbiA3OSkiKQogICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYueChBUFRfRU5WICsgWyJhcHQtZ2V0IiwgIi1xIiwgInVwZGF0ZSJdLCB0aW1lb3V0PTYwMCkKICAgICAgICBpZiByYyAhPSAwOgogICAgICAgICAgICBzZWxmLnJlbW92ZV9zbmFwc2hvdF9zb3VyY2VzKCkKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjciLCAiYXB0LWdldCB1cGRhdGUgYWdhaW5zdCBzbmFwc2hvdC5kZWJpYW4ub3JnIGZhaWxlZCIpCgogICAgZGVmIHJlbW92ZV9zbmFwc2hvdF9zb3VyY2VzKHNlbGYpOgogICAgICAgIHNlbGYueChbInJtIiwgIi1mIiwgU05BUFNIT1RfTElTVF0pCiAgICAgICAgc2VsZi54KEFQVF9FTlYgKyBbImFwdC1nZXQiLCAiLXEiLCAidXBkYXRlIl0sIHRpbWVvdXQ9NjAwKQoKCmNsYXNzIEJ1bmRsZToKICAgICIiIlRoZSBjb25maWcgYnVuZGxlIChSLTg0MCwgYDExYCDCpzUuNC4yKTogZXZlcnkgcm9vdC1vd25lZCBmaWxlIHRoZSBpbnN0YWxsZXIncyBzdGVwIDUgd3JpdGVzLCBpbnN0YWxsZWQgYXMgT05FCiAgICBzaWduZWQgdW5pdC4gRXZlcnkgY2hlY2sgcnVucyBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlOyBhIGZhaWxlZCB3cml0ZSBvciBhIGZhaWxlZCBzZWxmLWNoZWNrIHB1dHMgZXZlcnkgcHJldmlvdXMKICAgIGNvcHkgYmFjay4gUmVmdXNhbCBjb2RlczogUjEgKHRoZSBidW5kbGUgZmlsZSksIFIzIChhdXRob3JpdHkpLCBSMTYgKGEgcGF0aCBvdXRzaWRlIEJVTkRMRV9GSUxFUyksIFIxNyAoYSB0cnVzdAogICAgZmlsZSksIFIxOCAoYSBjb250ZW50IGNoZWNrIG9yIGEgd3Jvbmcgc2hhKS4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgYXBwbHkpOgogICAgICAgIHNlbGYuYSwgc2VsZi5yID0gYXBwbHksIGFwcGx5LnIKICAgICAgICBzZWxmLnJlcG9ydCA9IGFwcGx5LnJlcG9ydAoKICAgICMgLS0tLS0tLS0tLSByZWFkaW5nIGFuZCBjaGVja2luZyAtLS0tLS0tLS0tCiAgICBkZWYgbG9hZF9maWxlKHNlbGYsIHBhdGgpOgogICAgICAgIGQsIGJhc2UgPSBvcy5wYXRoLmRpcm5hbWUocGF0aCBvciAiIiksIG9zLnBhdGguYmFzZW5hbWUocGF0aCBvciAiIikKICAgICAgICBpZiBkICE9IFBMQU5fRElSIG9yIG5vdCBCVU5ETEVfUkUubWF0Y2goYmFzZSkgb3IgIi4uIiBpbiBwYXRoOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMSIsIGYidGhlIGJ1bmRsZSBtdXN0IGJlIHtQTEFOX0RJUn0vYnVuZGxlLTx2ZXJzaW9uPi5qc29uLCBnb3Qge3BhdGghcn0iKQogICAgICAgIHRyeToKICAgICAgICAgICAgc3QgPSBzZWxmLnIuc3RhdChwYXRoKQogICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxIiwgZiJjYW5ub3Qgc3RhdCB0aGUgYnVuZGxlOiB7ZX0iKQogICAgICAgIGlmIG5vdCBzdGF0LlNfSVNSRUcoc3Quc3RfbW9kZSk6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxIiwgInRoZSBidW5kbGUgaXMgbm90IGEgcmVndWxhciBmaWxlIikKICAgICAgICBpZiBzdC5zdF91aWQgIT0gc2VsZi5yLmFnZW50X3VpZCgpOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMSIsIGYidGhlIGJ1bmRsZSBpcyBub3Qgb3duZWQgYnkge0FHRU5UX1VTRVJ9IikKICAgICAgICBpZiBzdC5zdF9zaXplID4gQlVORExFX01BWF9CWVRFUzoKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjEiLCAidGhlIGJ1bmRsZSBpcyBsYXJnZXIgdGhhbiA0IE1CIikKICAgICAgICByZXR1cm4gc2VsZi5yLnJlYWRfYnl0ZXMocGF0aCkKCiAgICBkZWYgcGFyc2Uoc2VsZiwgZGF0YSwgd2FudF9zaGEsIHdhbnRfdmVyc2lvbj1Ob25lKToKICAgICAgICAiIiJUaGUgYnVuZGxlIGJ5dGVzIOKGkiBbKGRlc3QsIGNvbnRlbnQsIG1vZGUsIGNoZWNrLCBwb2xpY3kpXSwgZXZlcnkgY29udGVudCBjaGVjayBwYXNzZWQuIE5vdGhpbmcgaXMgd3JpdHRlbi4iIiIKICAgICAgICBpbXBvcnQgYmFzZTY0CiAgICAgICAgZ290ID0gc2hhMjU2X2hleChkYXRhKQogICAgICAgIGlmIGdvdCAhPSB3YW50X3NoYToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjE4IiwgZiJ0aGUgYnVuZGxlJ3Mgc2hhMjU2IGlzIHtnb3R9LCBub3QgdGhlIHBpbm5lZCB7d2FudF9zaGF9IikKICAgICAgICB0cnk6CiAgICAgICAgICAgIGIgPSBqc29uLmxvYWRzKGRhdGEpCiAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjE4IiwgZiJ0aGUgYnVuZGxlIGlzIG5vdCBKU09OOiB7ZX0iKQogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGIsIGRpY3QpIG9yIGIuZ2V0KCJmb3JtYXQiKSAhPSBCVU5ETEVfRk9STUFUOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTgiLCBmInRoZSBidW5kbGUgZm9ybWF0IGlzIG5vdCB7QlVORExFX0ZPUk1BVH0iKQogICAgICAgIHZlciA9IGIuZ2V0KCJhZ2VudF92ZXJzaW9uIikKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2ZXIsIHN0cikgb3Igbm90IHJlLm1hdGNoKHIiXlswLTldK1wuWzAtOV0rXC5bMC05XSsoLVswLTlBLVphLXouXSspPyQiLCB2ZXIpOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTgiLCBmInRoZSBidW5kbGUgbmFtZXMgbm8gYWdlbnQgdmVyc2lvbiAoe3ZlciFyfSkiKQogICAgICAgIGlmIHdhbnRfdmVyc2lvbiBpcyBub3QgTm9uZSBhbmQgdmVyICE9IHdhbnRfdmVyc2lvbjoKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjE4IiwgZiJ0aGUgYnVuZGxlIGlzIGZvciBhZ2VudCB7dmVyfSwgdGhlIHNpZ25lZCBqb2IgcGlucyB7d2FudF92ZXJzaW9ufSIpCiAgICAgICAgZmlsZXMgPSBiLmdldCgiZmlsZXMiKQogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpbGVzLCBsaXN0KSBvciBub3QgZmlsZXM6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxOCIsICJ0aGUgYnVuZGxlIGxpc3RzIG5vIGZpbGVzIikKICAgICAgICBvdXQsIHNlZW4gPSBbXSwgc2V0KCkKICAgICAgICBmb3IgZSBpbiBmaWxlczoKICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgZGljdCkgb3Igbm90IGlzaW5zdGFuY2UoZS5nZXQoInBhdGgiKSwgc3RyKToKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxOCIsICJhIGJ1bmRsZSBlbnRyeSBoYXMgbm8gcGF0aCIpCiAgICAgICAgICAgIGRlc3QgPSBlWyJwYXRoIl0KICAgICAgICAgICAgaWYgZGVzdCBpbiBUUlVTVF9QQVRIUzoKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxNyIsIGYie2Rlc3R9IGlzIHRoZSB0cnVzdCByb290IOKAlCBubyBidW5kbGUgbWF5IGFkZCwgcmVtb3ZlIG9yIGNoYW5nZSBhIHNpZ25lciIpCiAgICAgICAgICAgIGlmIGRlc3Qgbm90IGluIEJVTkRMRV9ERVNUUzoKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxNiIsIGYie2Rlc3R9IGlzIG5vdCBhIHBhdGggYSBidW5kbGUgbWF5IHdyaXRlIikKICAgICAgICAgICAgaWYgZGVzdCBpbiBzZWVuOgogICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjE4IiwgZiJ7ZGVzdH0gaXMgbmFtZWQgdHdpY2UiKQogICAgICAgICAgICBzZWVuLmFkZChkZXN0KQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBjb250ZW50ID0gYmFzZTY0LmI2NGRlY29kZShlLmdldCgiY29udGVudF9iNjQiLCAiIiksIHZhbGlkYXRlPVRydWUpCiAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgVHlwZUVycm9yKToKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxOCIsIGYie2Rlc3R9OiB0aGUgY29udGVudCBpcyBub3QgYmFzZTY0IikKICAgICAgICAgICAgaWYgc2hhMjU2X2hleChjb250ZW50KSAhPSBlLmdldCgic2hhMjU2Iik6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTgiLCBmIntkZXN0fTogdGhlIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggaXRzIHNoYTI1NiIpCiAgICAgICAgICAgIF8sIF8sIG1vZGUsIGNoZWNrLCBwb2xpY3kgPSBCVU5ETEVfREVTVFNbZGVzdF0KICAgICAgICAgICAgc2VsZi5jaGVja19jb250ZW50KGRlc3QsIGNoZWNrLCBjb250ZW50KQogICAgICAgICAgICBvdXQuYXBwZW5kKChkZXN0LCBjb250ZW50LCBtb2RlLCBjaGVjaywgcG9saWN5KSkKICAgICAgICBvcmRlciA9IFt4WzBdIGZvciB4IGluIEJVTkRMRV9GSUxFU10KICAgICAgICBvdXQuc29ydChrZXk9bGFtYmRhIHg6IG9yZGVyLmluZGV4KHhbMF0pKSAgIyB0aGUgdGFibGUncyBvcmRlcjogdGhlIHN1ZG9lcnMgZmlsZXMgbGFzdAogICAgICAgIHJldHVybiB2ZXIsIG91dAoKICAgIGRlZiBjaGVja19jb250ZW50KHNlbGYsIGRlc3QsIGNoZWNrLCBjb250ZW50KToKICAgICAgICB0cnk6CiAgICAgICAgICAgIHRleHQgPSBjb250ZW50LmRlY29kZSgidXRmLTgiKQogICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxOCIsIGYie2Rlc3R9IGlzIG5vdCBVVEYtOCB0ZXh0IikKICAgICAgICBpZiBjaGVjayBpbiAoInN1ZG9lcnMiLCAic2giLCAiYmFzaCIsICJuZnQiKToKICAgICAgICAgICAgcmMsIG1zZyA9IHNlbGYuci5jaGVja19jb250ZW50KGNoZWNrLCBjb250ZW50KQogICAgICAgICAgICBpZiByYyAhPSAwOgogICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjE4IiwgZiJ7ZGVzdH0gZmFpbHMgaXRzIHtjaGVja30gY2hlY2s6IHttc2d9IikKICAgICAgICBlbGlmIGNoZWNrID09ICJweXRob24iOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBjb21waWxlKHRleHQsIGRlc3QsICJleGVjIikKICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTgiLCBmIntkZXN0fSBpcyBub3QgdmFsaWQgUHl0aG9uOiB7ZX0iKQogICAgICAgIGVsaWYgY2hlY2sgaW4gKCJ1bml0IiwgInVuaXQtbm9ydCIsICJhZ2VudC11bml0IiwgImRyb3BpbiIpOgogICAgICAgICAgICBpZiBub3QgcmUuc2VhcmNoKHIiXlxbKFVuaXR8U2VydmljZXxUaW1lcilcXVxzKiQiLCB0ZXh0LCByZS5NKToKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxOCIsIGYie2Rlc3R9IGhhcyBubyBbVW5pdF0vW1NlcnZpY2VdL1tUaW1lcl0gc2VjdGlvbiIpCiAgICAgICAgICAgIGlmIGNoZWNrID09ICJ1bml0LW5vcnQiIGFuZCByZS5zZWFyY2gociJeXHMqUnVudGltZURpcmVjdG9yeVxzKj0iLCB0ZXh0LCByZS5NIHwgcmUuSSk6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTgiLCBmIntkZXN0fSBkZWNsYXJlcyBSdW50aW1lRGlyZWN0b3J5PSDigJQgdGhlIEcxIGluY2lkZW50OyByZWZ1c2VkIikKICAgICAgICAgICAgaWYgY2hlY2sgPT0gImFnZW50LXVuaXQiIGFuZCBub3QgcmUuc2VhcmNoKHIiXlVzZXI9IiArIEFHRU5UX1VTRVIgKyByIlxzKiQiLCB0ZXh0LCByZS5NKToKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxOCIsIGYie2Rlc3R9IGRvZXMgbm90IHJ1biB0aGUgYWdlbnQgYXMge0FHRU5UX1VTRVJ9IikKICAgICAgICAgICAgaWYgY2hlY2sgPT0gImRyb3BpbiIgYW5kIG5vdCByZS5zZWFyY2gociJeXFtVbml0XF1ccyokIiwgdGV4dCwgcmUuTSk6CiAgICAgICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTgiLCBmIntkZXN0fSBtdXN0IGtlZXAgaXRzIHN0YXJ0IGxpbWl0cyBpbiBbVW5pdF0gKFNGLTMpIikKICAgICAgICAjIFRoZSByb3V0ZSBtdXN0IHN1cnZpdmUgdGhlIGJ1bmRsZTogYSBzdWRvZXJzIHdpdGhvdXQgdGhpcyB3cmFwcGVyJ3MgbGluZSwgb3IgYSB3cmFwcGVyIHdpdGhvdXQgdGhlIGJ1bmRsZQogICAgICAgICMgbW9kZSwgd291bGQgY3V0IHRoZSBib3ggb2ZmIGZyb20gZXZlcnkgbGF0ZXIgYnVuZGxlLgogICAgICAgIGlmIGRlc3QgPT0gIi9ldGMvc3Vkb2Vycy5kL2ZlbGhvbS1hZ2VudCIgYW5kIFNFTEZfQ0hFQ0tfU1VET19MSU5FIG5vdCBpbiB0ZXh0OgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTgiLCAidGhlIG5ldyBzdWRvZXJzIG5vIGxvbmdlciBsZXRzIHRoZSBhZ2VudCBjYWxsIGZlbGhvbS1vcy1hcHBseSDigJQgdGhlIGJ1bmRsZSByb3V0ZSB3b3VsZCBlbmQiKQogICAgICAgIGlmIGRlc3QgPT0gIi91c3IvbG9jYWwvc2Jpbi9mZWxob20tb3MtYXBwbHkiIGFuZCBmJ0JVTkRMRV9PUCA9ICJ7QlVORExFX09QfSInIG5vdCBpbiB0ZXh0OgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTgiLCAidGhlIG5ldyBmZWxob20tb3MtYXBwbHkgaGFzIG5vIGJ1bmRsZSBtb2RlIOKAlCB0aGUgYnVuZGxlIHJvdXRlIHdvdWxkIGVuZCIpCgogICAgZGVmIGxpdmUoc2VsZiwgZGVzdCk6CiAgICAgICAgIiIiKGJ5dGVzIG9yIE5vbmUsIG1vZGUgb3IgTm9uZSwgdWlkIG9yIE5vbmUpIG9mIHdoYXQgdGhlIGJveCBoYXMgbm93LiIiIgogICAgICAgIGlmIG5vdCBzZWxmLnIubGV4aXN0cyhkZXN0KToKICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUsIE5vbmUKICAgICAgICBzdCA9IHNlbGYuci5zdGF0KGRlc3QpCiAgICAgICAgaWYgbm90IHN0YXQuU19JU1JFRyhzdC5zdF9tb2RlKToKICAgICAgICAgICAgcmV0dXJuIGIiIiwgTm9uZSwgTm9uZSAgIyBhIHN5bWxpbmsgb3IgYSBkaXJlY3Rvcnk6IGFsd2F5cyByZXBsYWNlZCBieSB0aGUgcmVhbCBmaWxlCiAgICAgICAgcmV0dXJuIHNlbGYuci5yZWFkX2J5dGVzKGRlc3QpLCBzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIHN0LnN0X3VpZAoKICAgIGRlZiBwbGFuX3dyaXRlcyhzZWxmLCBmaWxlcyk6CiAgICAgICAgIiIiRGVjaWRlIHBlciBmaWxlOiB3cml0ZSAvIHNhbWUgLyBrZXB0IChpZi1hYnNlbnQgYW5kIHByZXNlbnQpIC8gc2tpcHBlZCAob29iIG9uIGEgYm94IHdpdGhvdXQgdGhlIGJlbHQpLiIiIgogICAgICAgIG9vYiA9IHNlbGYuci5pc2RpcihPT0JfRElSKQogICAgICAgIHBsYW4gPSBbXQogICAgICAgIGZvciBkZXN0LCBjb250ZW50LCBtb2RlLCBjaGVjaywgcG9saWN5IGluIGZpbGVzOgogICAgICAgICAgICBpZiBwb2xpY3kgPT0gIm9vYiIgYW5kIG5vdCBvb2I6CiAgICAgICAgICAgICAgICBwbGFuLmFwcGVuZCgoZGVzdCwgY29udGVudCwgbW9kZSwgInNraXBwZWQiLCBOb25lLCBOb25lKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIG9sZCwgb2xkX21vZGUsIG9sZF91aWQgPSBzZWxmLmxpdmUoZGVzdCkKICAgICAgICAgICAgaWYgcG9saWN5ID09ICJpZi1hYnNlbnQiIGFuZCBvbGQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICBwbGFuLmFwcGVuZCgoZGVzdCwgY29udGVudCwgbW9kZSwgImtlcHQiLCBvbGQsIG9sZF9tb2RlKSkKICAgICAgICAgICAgZWxpZiBvbGQgPT0gY29udGVudCBhbmQgb2xkX21vZGUgPT0gbW9kZSBhbmQgb2xkX3VpZCA9PSAwOgogICAgICAgICAgICAgICAgcGxhbi5hcHBlbmQoKGRlc3QsIGNvbnRlbnQsIG1vZGUsICJzYW1lIiwgb2xkLCBvbGRfbW9kZSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwbGFuLmFwcGVuZCgoZGVzdCwgY29udGVudCwgbW9kZSwgIndyaXRlIiwgb2xkLCBvbGRfbW9kZSkpCiAgICAgICAgcmV0dXJuIHBsYW4KCiAgICAjIC0tLS0tLS0tLS0gdGhlIHR3byBlbnRyaWVzIC0tLS0tLS0tLS0KICAgIGRlZiBmcm9tX3BsYW4oc2VsZiwgcGxhbik6CiAgICAgICAgIiIiQSBzaWduZWQgYWdlbnRfY29uZmlnX3VwZGF0ZSwgZnJvbSB0aGUgYWdlbnQgKHN1ZG8sIHRoZSAtLXBsYW4gbGluZSkuIiIiCiAgICAgICAgZGF0YSA9IHNlbGYubG9hZF9maWxlKHBsYW4uZ2V0KCJidW5kbGUiKSkKICAgICAgICB0cnVzdCA9IHNlbGYuYS5sb2FkX3RydXN0KCkKICAgICAgICBzaWduZXJzLCBib290c3RyYXAgPSBUUlVTVF9TSUdORVJTLCBGYWxzZQogICAgICAgIGlmIG5vdCBzZWxmLnIubGV4aXN0cyhUUlVTVF9TSUdORVJTKToKICAgICAgICAgICAgc2lnbmVycywgYm9vdHN0cmFwID0gUElOTkVEX1NJR05FUlMsIFRydWUKICAgICAgICAgICAgc2VsZi5yLmxvZyhmIm9zLWFwcGx5OiBCVU5ETEUge1RSVVNUX1NJR05FUlN9IGlzIG1pc3Npbmcg4oCUIHZlcmlmeWluZyBhZ2FpbnN0IHRoZSBpbnN0YWxsZXIncyBwaW5uZWQga2V5ICIKICAgICAgICAgICAgICAgICAgICAgICBmIntQSU5ORURfT1BFUkFUT1JfS0VZX0lEfSBvbmx5IikKICAgICAgICBwYXJhbXMsIG5vbmNlLCBleHAgPSBzZWxmLmEudmVyaWZ5X3NpZ25lZChwbGFuLmdldCgic2lnbmVkIiksIHRydXN0LCBvcF9uYW1lPUJVTkRMRV9PUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZXJzPU5vbmUgaWYgbm90IGJvb3RzdHJhcCBlbHNlIHNpZ25lcnMsIGJ1cm49RmFsc2UpCiAgICAgICAgc2hhLCB2ZXIgPSBwYXJhbXMuZ2V0KCJidW5kbGVfc2hhMjU2IiksIHBhcmFtcy5nZXQoImFnZW50X3ZlcnNpb24iKQogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNoYSwgc3RyKSBvciBub3QgcmUubWF0Y2gociJeWzAtOWEtZl17NjR9JCIsIHNoYSkgb3Igbm90IGlzaW5zdGFuY2UodmVyLCBzdHIpOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMyIsICJ0aGUgc2lnbmVkIGpvYiBkb2VzIG5vdCBwaW4gYWdlbnRfdmVyc2lvbiBhbmQgYnVuZGxlX3NoYTI1NiIpCiAgICAgICAgdmVyLCBmaWxlcyA9IHNlbGYucGFyc2UoZGF0YSwgc2hhLCB2ZXIpCiAgICAgICAgc2VsZi5hLmJ1cm5fbm9uY2Uobm9uY2UsIGV4cCkKICAgICAgICByZXR1cm4gc2VsZi5pbnN0YWxsKHZlciwgc2hhLCBmaWxlcywgInNpZ25lZCIsIGJvb3RzdHJhcCkKCiAgICBkZWYgZnJvbV9pbnN0YWxsZXIoc2VsZiwgcGF0aCwgc2hhKToKICAgICAgICAiIiJUaGUgaW5zdGFsbGVyIChyb290LCBuZXZlciB0aHJvdWdoIHN1ZG8pOiB0aGUgaHViIG1hbmlmZXN0IHBpbm5lZCB0aGUgc2hhOyBubyBzaWduYXR1cmUuIiIiCiAgICAgICAgdHJ5OgogICAgICAgICAgICBkYXRhID0gc2VsZi5yLnJlYWRfYnl0ZXMocGF0aCkKICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMSIsIGYiY2Fubm90IHJlYWQgdGhlIGJ1bmRsZToge2V9IikKICAgICAgICB2ZXIsIGZpbGVzID0gc2VsZi5wYXJzZShkYXRhLCBzaGEpCiAgICAgICAgcmV0dXJuIHNlbGYuaW5zdGFsbCh2ZXIsIHNoYSwgZmlsZXMsICJpbnN0YWxsZXIiLCBGYWxzZSkKCiAgICAjIC0tLS0tLS0tLS0gaW5zdGFsbCwgc2VsZi1jaGVjaywgdW5kbyAtLS0tLS0tLS0tCiAgICBkZWYgaW5zdGFsbChzZWxmLCB2ZXIsIHNoYSwgZmlsZXMsIGF1dGhvcml0eSwgYm9vdHN0cmFwKToKICAgICAgICBsb2cgPSBzZWxmLnIubG9nCiAgICAgICAgcGxhbiA9IHNlbGYucGxhbl93cml0ZXMoZmlsZXMpCiAgICAgICAgY291bnRzID0ge2s6IHN1bSgxIGZvciBwIGluIHBsYW4gaWYgcFszXSA9PSBrKSBmb3IgayBpbiAoIndyaXRlIiwgInNhbWUiLCAia2VwdCIsICJza2lwcGVkIil9CiAgICAgICAgbG9nKGYib3MtYXBwbHk6IEJVTkRMRSBTVEFSVCBhZ2VudD17dmVyfSBzaGE9e3NoYVs6MTZdfSBhdXRob3JpdHk9e2F1dGhvcml0eX0gZmlsZXM9e2xlbihwbGFuKX0gIgogICAgICAgICAgICBmIndyaXRlPXtjb3VudHNbJ3dyaXRlJ119IHNhbWU9e2NvdW50c1snc2FtZSddfSBrZXB0PXtjb3VudHNbJ2tlcHQnXX0gc2tpcHBlZD17Y291bnRzWydza2lwcGVkJ119IikKICAgICAgICBzdGFtcCA9IHRpbWUuc3RyZnRpbWUoIiVZJW0lZFQlSCVNJVNaIiwgdGltZS5nbXRpbWUoc2VsZi5yLm5vdygpKSkKICAgICAgICBwcmV2ID0gb3MucGF0aC5qb2luKEJVTkRMRV9QUkVWX0RJUiwgZiJ7c3RhbXB9LWJlZm9yZS17dmVyfSIpCiAgICAgICAgZG9uZSA9IFtdICAjIChkZXN0LCBvbGQgYnl0ZXMgb3IgTm9uZSwgb2xkIG1vZGUpCiAgICAgICAgcmVwID0geyJhZ2VudF92ZXJzaW9uIjogdmVyLCAic2hhMjU2Ijogc2hhLCAiYXV0aG9yaXR5IjogYXV0aG9yaXR5LCAicHJldl9kaXIiOiBwcmV2LAogICAgICAgICAgICAgICAid3JpdHRlbiI6IFtwWzBdIGZvciBwIGluIHBsYW4gaWYgcFszXSA9PSAid3JpdGUiXSwgImtlcHQiOiBbcFswXSBmb3IgcCBpbiBwbGFuIGlmIHBbM10gPT0gImtlcHQiXSwKICAgICAgICAgICAgICAgInNraXBwZWQiOiBbcFswXSBmb3IgcCBpbiBwbGFuIGlmIHBbM10gPT0gInNraXBwZWQiXSwgInNhbWUiOiBjb3VudHNbInNhbWUiXX0KICAgICAgICBzZWxmLnJlcG9ydFsiYnVuZGxlIl0gPSByZXAKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZvciBkZXN0LCBjb250ZW50LCBtb2RlLCBhY3Rpb24sIG9sZCwgb2xkX21vZGUgaW4gcGxhbjoKICAgICAgICAgICAgICAgIGlmIGFjdGlvbiAhPSAid3JpdGUiOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBpZiBvbGQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yLnB1dF9maWxlKHByZXYgKyBkZXN0LCBvbGQsIDBvNjAwKQogICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoKGRlc3QsIG9sZCwgb2xkX21vZGUpKQogICAgICAgICAgICAgICAgc2VsZi5yLnB1dF9maWxlKGRlc3QsIGNvbnRlbnQsIG1vZGUpCiAgICAgICAgICAgICAgICBsb2coZiJvcy1hcHBseTogQlVORExFIFdST1RFIHtkZXN0fSAoeydyZXBsYWNlZCcgaWYgb2xkIGlzIG5vdCBOb25lIGVsc2UgJ25ldyd9KSIpCiAgICAgICAgICAgIHNlbGYuYWZ0ZXJfaW5zdGFsbChwbGFuKQogICAgICAgICAgICByZXBbInNlbGZfY2hlY2siXSA9IHNlbGYuc2VsZl9jaGVjayhwbGFuKQogICAgICAgIGV4Y2VwdCAoUmVmdXNlZCwgT1NFcnJvciwgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IpIGFzIGU6CiAgICAgICAgICAgIHJlYXNvbiA9IGUucmVhc29uIGlmIGlzaW5zdGFuY2UoZSwgUmVmdXNlZCkgZWxzZSBzdHIoZSkKICAgICAgICAgICAgbG9nKGYib3MtYXBwbHk6IEJVTkRMRSBGQUlMRUQg4oCUIHtyZWFzb259OyBwdXR0aW5nIHtsZW4oZG9uZSl9IHByZXZpb3VzIGZpbGUocykgYmFjayIpCiAgICAgICAgICAgIHJlcFsicm9sbGVkX2JhY2siXSA9IHNlbGYudW5kbyhkb25lKQogICAgICAgICAgICByZXBbImZhaWxlZCJdID0gcmVhc29uWzozMDBdCiAgICAgICAgICAgIHNlbGYucmVwb3J0WyJmYWlsZWQiXSA9IHsicmMiOiAzLCAic3RlcCI6ICJidW5kbGUiLCAicmVhc29uIjogcmVhc29uWzozMDBdfQogICAgICAgICAgICByZXR1cm4gMwogICAgICAgIHJlcFsic2lnbmVyc19jcmVhdGVkIl0gPSBGYWxzZQogICAgICAgIGlmIGJvb3RzdHJhcCBhbmQgbm90IHNlbGYuci5sZXhpc3RzKFRSVVNUX1NJR05FUlMpOgogICAgICAgICAgICBzZWxmLnIucHV0X2ZpbGUoVFJVU1RfU0lHTkVSUywgcGlubmVkX3NpZ25lcnNfbGluZSgpLmVuY29kZSgpLCAwbzY0NCkKICAgICAgICAgICAgcmVwWyJzaWduZXJzX2NyZWF0ZWQiXSA9IFRydWUKICAgICAgICAgICAgbG9nKGYib3MtYXBwbHk6IEJVTkRMRSBjcmVhdGVkIHtUUlVTVF9TSUdORVJTfSB3aXRoIGV4YWN0bHkgdGhlIHBpbm5lZCBrZXkge1BJTk5FRF9PUEVSQVRPUl9LRVlfSUR9IikKICAgICAgICByZWNvcmQgPSB7ImZvcm1hdCI6IEJVTkRMRV9GT1JNQVQsICJhZ2VudF92ZXJzaW9uIjogdmVyLCAiYnVuZGxlX3NoYTI1NiI6IHNoYSwgImF1dGhvcml0eSI6IGF1dGhvcml0eSwKICAgICAgICAgICAgICAgICAgImluc3RhbGxlZF9hdCI6IHRpbWUuc3RyZnRpbWUoIiVZLSVtLSVkVCVIOiVNOiVTWiIsIHRpbWUuZ210aW1lKHNlbGYuci5ub3coKSkpLAogICAgICAgICAgICAgICAgICAiZmlsZXMiOiB7cFswXTogKHNoYTI1Nl9oZXgocFsxXSkgaWYgcFszXSBpbiAoIndyaXRlIiwgInNhbWUiKSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNoYTI1Nl9oZXgocFs0XSkgaWYgcFszXSA9PSAia2VwdCIgZWxzZSAic2tpcHBlZCIpKSBmb3IgcCBpbiBwbGFufX0KICAgICAgICBzZWxmLnIucHV0X2ZpbGUoQlVORExFX1JFQ09SRCwgKGpzb24uZHVtcHMocmVjb3JkLCBpbmRlbnQ9Miwgc29ydF9rZXlzPVRydWUpICsgIlxuIikuZW5jb2RlKCksIDBvNjQ0KQogICAgICAgIHNlbGYucHJ1bmUoKQogICAgICAgIGxvZyhmIm9zLWFwcGx5OiBCVU5ETEUgRE9ORSBhZ2VudD17dmVyfSB3cml0dGVuPXtjb3VudHNbJ3dyaXRlJ119IHNhbWU9e2NvdW50c1snc2FtZSddfSAiCiAgICAgICAgICAgIGYic2VsZi1jaGVjaz1vayBzaWduZXJzLWNyZWF0ZWQ9e3JlcFsnc2lnbmVyc19jcmVhdGVkJ119IikKICAgICAgICByZXR1cm4gMAoKICAgIGRlZiBhZnRlcl9pbnN0YWxsKHNlbGYsIHBsYW4pOgogICAgICAgIHdyaXR0ZW4gPSB7cFswXSBmb3IgcCBpbiBwbGFuIGlmIHBbM10gPT0gIndyaXRlIn0KICAgICAgICBkZXN0cyA9IHtwWzBdIGZvciBwIGluIHBsYW4gaWYgcFszXSAhPSAic2tpcHBlZCJ9CiAgICAgICAgaWYgYW55KGQuc3RhcnRzd2l0aCgiL2V0Yy9zeXN0ZW1kL3N5c3RlbS8iKSBmb3IgZCBpbiB3cml0dGVuKToKICAgICAgICAgICAgc2VsZi5tdXN0KFsic3lzdGVtY3RsIiwgImRhZW1vbi1yZWxvYWQiXSwgInN5c3RlbWN0bCBkYWVtb24tcmVsb2FkIikKICAgICAgICBpZiAiL2V0Yy90bXBmaWxlcy5kL2ZlbGhvbS1wcml2c2VwLmNvbmYiIGluIHdyaXR0ZW46CiAgICAgICAgICAgIHNlbGYubXVzdChbInN5c3RlbWQtdG1wZmlsZXMiLCAiLS1jcmVhdGUiLCAiL2V0Yy90bXBmaWxlcy5kL2ZlbGhvbS1wcml2c2VwLmNvbmYiXSwgInN5c3RlbWQtdG1wZmlsZXMiKQogICAgICAgICMgYGVuYWJsZSAtLW5vd2Agc3RhcnRzIGEgdW5pdCB0aGF0IGlzIG5vdCBydW5uaW5nIGFuZCBsZWF2ZXMgYSBydW5uaW5nIG9uZSBhbG9uZSAobm8gcmVzdGFydCkuIEZvciB0aGUgY3Jhc2gKICAgICAgICAjIGd1YXJkIHRoYXQgcnVucyBpdHMgYm9vdCBzdGVwIG9uY2Ugb24gYSBib3ggdGhhdCBuZXZlciBoYWQgaXQ6IGtlcm5lbC5wYW5pYyBmb3IgVEhJUyBib290LCBhcyB0aGUgYm9vdCB1bml0CiAgICAgICAgIyB3b3VsZCBzZXQgaXQgKGAxMWAgwqc1LjkpOyB3aXRoIG5vIGVhcmxpZXIgc3RhdGUgaXQgaXMgdGhlICJmaXJzdCIgYm9vdCwgbmV2ZXIgY291bnRlZCBhcyBhbiB1bmNsZWFuIG9uZS4KICAgICAgICBpZiAiL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mZWxob20tY3Jhc2gtZ3VhcmQuc2VydmljZSIgaW4gZGVzdHM6CiAgICAgICAgICAgIHNlbGYubXVzdChbInN5c3RlbWN0bCIsICJlbmFibGUiLCAiLS1ub3ciLCAiZmVsaG9tLWNyYXNoLWd1YXJkLnNlcnZpY2UiLCAiZmVsaG9tLWNyYXNoLWd1YXJkLWNoZWNrLnRpbWVyIl0sCiAgICAgICAgICAgICAgICAgICAgICAiZW5hYmxlIHRoZSBjcmFzaCBndWFyZCIpCiAgICAgICAgaWYgIi9ldGMvc3lzdGVtZC9zeXN0ZW0vZmVsaG9tLW1nbXQtd2F0Y2hkb2cudGltZXIiIGluIGRlc3RzOgogICAgICAgICAgICBzZWxmLm11c3QoWyJzeXN0ZW1jdGwiLCAiZW5hYmxlIiwgIi0tbm93IiwgImZlbGhvbS1tZ210LXdhdGNoZG9nLnRpbWVyIl0sICJlbmFibGUgdGhlIG1nbXQgd2F0Y2hkb2cgdGltZXIiKQoKICAgIGRlZiBtdXN0KHNlbGYsIGFyZ3YsIHdoYXQpOgogICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuci5ob3N0KGFyZ3YsIDEyMCkKICAgICAgICBpZiByYyAhPSAwOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTgiLCBmInt3aGF0fSBmYWlsZWQgKHJjPXtyY30pOiB7KG91dCArIGVycikuc3RyaXAoKVstMjAwOl19IikKCiAgICBkZWYgc2VsZl9jaGVjayhzZWxmLCBwbGFuKToKICAgICAgICAiIiJBZnRlciB0aGUgaW5zdGFsbCwgYmVmb3JlIHRoZSByZWNvcmQ6IHRoZSBib3ggc3RpbGwgaGFzIGEgd29ya2luZyByb3V0ZSBhbmQgd29ya2luZyB3cmFwcGVycy4iIiIKICAgICAgICBzYyA9IHt9CiAgICAgICAgc2VsZi5tdXN0KFsidmlzdWRvIiwgIi1jIl0sICJ2aXN1ZG8gLWMgKHRoZSB3aG9sZSBzdWRvZXJzKSIpCiAgICAgICAgc2NbInZpc3VkbyJdID0gIm9rIgogICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuci5ob3N0KFsic3VkbyIsICItbiIsICItbCIsICItVSIsIEFHRU5UX1VTRVJdLCA2MCkKICAgICAgICBpZiByYyAhPSAwIG9yICIvdXNyL2xvY2FsL3NiaW4vZmVsaG9tLW9zLWFwcGx5IC0tcGxhbiIgbm90IGluIG91dDoKICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjE4IiwgZiJzdWRvIC1sIGZvciB7QUdFTlRfVVNFUn0gbm8gbG9uZ2VyIGxpc3RzIGZlbGhvbS1vcy1hcHBseSAocmM9e3JjfSkiKQogICAgICAgIHNjWyJzdWRvX2wiXSA9ICJmZWxob20tb3MtYXBwbHkgbGlzdGVkIgogICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuci5ob3N0KFsiL3Vzci9iaW4vcHl0aG9uMyIsICIvdXNyL2xvY2FsL3NiaW4vZmVsaG9tLW9zLWFwcGx5IiwgIi0tc2VsZi1jaGVjayJdLCA2MCkKICAgICAgICBpZiByYyAhPSAwIG9yIGYiYnVuZGxlLWZvcm1hdD17QlVORExFX0ZPUk1BVH0iIG5vdCBpbiBvdXQ6CiAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxOCIsIGYidGhlIGluc3RhbGxlZCBmZWxob20tb3MtYXBwbHkgZG9lcyBub3QgYW5zd2VyIGl0cyBzZWxmLWNoZWNrIChyYz17cmN9KSIpCiAgICAgICAgc2NbIm9zX2FwcGx5Il0gPSBvdXQuc3RyaXAoKVs6MTIwXQogICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuci5ob3N0KFsiL2Jpbi9zaCIsICIvdXNyL2xvY2FsL3NiaW4vZmVsaG9tLXNlbGZ1cGRhdGUtZ3VhcmRlZCJdLCA2MCkKICAgICAgICBpZiByYyAhPSAyIG9yICJ1c2FnZSIgbm90IGluIChvdXQgKyBlcnIpOgogICAgICAgICAgICByYWlzZSBSZWZ1c2VkKCJSMTgiLCBmInRoZSBpbnN0YWxsZWQgZmVsaG9tLXNlbGZ1cGRhdGUtZ3VhcmRlZCBkb2VzIG5vdCBhbnN3ZXIgd2l0aCBpdHMgdXNhZ2UgKHJjPXtyY30pIikKICAgICAgICBzY1sic2VsZnVwZGF0ZSJdID0gInVzYWdlIG9rIgogICAgICAgIGRlc3RzID0ge3BbMF0gZm9yIHAgaW4gcGxhbiBpZiBwWzNdICE9ICJza2lwcGVkIn0KICAgICAgICBpZiAiL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1jcmFzaC1ndWFyZCIgaW4gZGVzdHM6CiAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuci5ob3N0KFsiL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1jcmFzaC1ndWFyZCIsICJzdGF0dXMiXSwgNjApCiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHN0ID0ganNvbi5sb2FkcyhvdXQpCiAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgc3QgPSBOb25lCiAgICAgICAgICAgIGlmIHJjICE9IDAgb3Igbm90IGlzaW5zdGFuY2Uoc3QsIGRpY3QpOgogICAgICAgICAgICAgICAgcmFpc2UgUmVmdXNlZCgiUjE4IiwgZiJ0aGUgY3Jhc2ggZ3VhcmQgZG9lcyBub3QgYW5zd2VyIGl0cyBzdGF0dXMgKHJjPXtyY30pIikKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgcGFuaWMgPSBpbnQoc2VsZi5yLnJlYWRfZmlsZSgiL3Byb2Mvc3lzL2tlcm5lbC9wYW5pYyIpLnN0cmlwKCkpCiAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICBwYW5pYyA9IE5vbmUKICAgICAgICAgICAgaWYgcGFuaWMgIT0gc3QuZ2V0KCJrZXJuZWxfcGFuaWMiKToKICAgICAgICAgICAgICAgIHJhaXNlIFJlZnVzZWQoIlIxOCIsIGYia2VybmVsLnBhbmljIGlzIHtwYW5pY30sIHRoZSBjcmFzaCBndWFyZCBzZXQge3N0LmdldCgna2VybmVsX3BhbmljJyl9IikKICAgICAgICAgICAgc2NbImNyYXNoX2d1YXJkIl0gPSB7ImFybWVkIjogc3QuZ2V0KCJhcm1lZCIpLCAia2VybmVsX3BhbmljIjogcGFuaWN9CiAgICAgICAgcmV0dXJuIHNjCgogICAgZGVmIHVuZG8oc2VsZiwgZG9uZSk6CiAgICAgICAgIiIiUHV0IGV2ZXJ5IHByZXZpb3VzIGNvcHkgYmFjayAobmV3ZXN0IHdyaXRlIGZpcnN0KTsgcmVtb3ZlIGZpbGVzIHRoZSBidW5kbGUgY3JlYXRlZC4iIiIKICAgICAgICBiYWNrID0gW10KICAgICAgICBmb3IgZGVzdCwgb2xkLCBvbGRfbW9kZSBpbiByZXZlcnNlZChkb25lKToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgaWYgb2xkIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5yLnJlbW92ZShkZXN0KQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBzZWxmLnIucHV0X2ZpbGUoZGVzdCwgb2xkLCBvbGRfbW9kZSBpZiBvbGRfbW9kZSBpcyBub3QgTm9uZSBlbHNlIDBvNjQ0KQogICAgICAgICAgICAgICAgYmFjay5hcHBlbmQoZGVzdCkKICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgIHNlbGYuci5sb2coZiJvcy1hcHBseTogQlVORExFIFVORE8gY291bGQgbm90IHJlc3RvcmUge2Rlc3R9OiB7ZX0iKQogICAgICAgIGlmIGFueShkLnN0YXJ0c3dpdGgoIi9ldGMvc3lzdGVtZC9zeXN0ZW0vIikgZm9yIGQgaW4gYmFjayk6CiAgICAgICAgICAgIHNlbGYuci5ob3N0KFsic3lzdGVtY3RsIiwgImRhZW1vbi1yZWxvYWQiXSwgMTIwKQogICAgICAgIHJjLCBfLCBfID0gc2VsZi5yLmhvc3QoWyJ2aXN1ZG8iLCAiLWMiXSwgNjApCiAgICAgICAgc2VsZi5yLmxvZyhmIm9zLWFwcGx5OiBCVU5ETEUgVU5ETyByZXN0b3JlZD17bGVuKGJhY2spfSB2aXN1ZG8tYWZ0ZXI9eydvaycgaWYgcmMgPT0gMCBlbHNlICdGQUlMRUQnfSIpCiAgICAgICAgcmV0dXJuIGJhY2sKCiAgICBkZWYgcHJ1bmUoc2VsZik6CiAgICAgICAgbmFtZXMgPSBbbiBmb3IgbiBpbiBzZWxmLnIubGlzdF9kaXIoQlVORExFX1BSRVZfRElSKV0KICAgICAgICBmb3IgbiBpbiBuYW1lc1s6LUJVTkRMRV9LRUVQXToKICAgICAgICAgICAgc2VsZi5yLnJtdHJlZShvcy5wYXRoLmpvaW4oQlVORExFX1BSRVZfRElSLCBuKSkKCiAgICAjIC0tLS0tLS0tLS0gdGhlIGZhY3RzIG1vZGUncyB2aWV3IC0tLS0tLS0tLS0KICAgIGRlZiBzdGF0ZShzZWxmKToKICAgICAgICAiIiJXaGF0IHRoZSBib3ggcnVuczogdGhlIHJlY29yZCwgYW5kIGV2ZXJ5IGJ1bmRsZSBwYXRoJ3MgbGl2ZSBzaGEyNTYgYWdhaW5zdCBpdCAoZHJpZnQgPSBjaGFuZ2VkIGJ5IGhhbmQpLiIiIgogICAgICAgIHJlYyA9IE5vbmUKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlYyA9IGpzb24ubG9hZHMoc2VsZi5yLnJlYWRfZmlsZShCVU5ETEVfUkVDT1JEKSkKICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICByZWMgPSBOb25lCiAgICAgICAgbGl2ZSA9IHt9CiAgICAgICAgZm9yIGRlc3QsICpfIGluIEJVTkRMRV9GSUxFUzoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgZGF0YSwgXywgXyA9IHNlbGYubGl2ZShkZXN0KQogICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAgICAgICAgICAgIGxpdmVbZGVzdF0gPSBzaGEyNTZfaGV4KGRhdGEpIGlmIGRhdGEgaXMgbm90IE5vbmUgZWxzZSAiYWJzZW50IgogICAgICAgIG91dCA9IHsidmVyc2lvbiI6IChyZWMgb3Ige30pLmdldCgiYWdlbnRfdmVyc2lvbiIsICJub25lIiksICJsaXZlIjogbGl2ZX0KICAgICAgICBpZiByZWM6CiAgICAgICAgICAgIG91dFsiaW5zdGFsbGVkX2F0Il0gPSByZWMuZ2V0KCJpbnN0YWxsZWRfYXQiKQogICAgICAgICAgICBvdXRbImJ1bmRsZV9zaGEyNTYiXSA9IHJlYy5nZXQoImJ1bmRsZV9zaGEyNTYiKQogICAgICAgICAgICB3YW50ID0gcmVjLmdldCgiZmlsZXMiKSBvciB7fQogICAgICAgICAgICBvdXRbImRyaWZ0Il0gPSBzb3J0ZWQoZCBmb3IgZCwgaCBpbiB3YW50Lml0ZW1zKCkgaWYgaCAhPSAic2tpcHBlZCIgYW5kIGxpdmUuZ2V0KGQpICE9IGgpCiAgICAgICAgb3V0WyJzaWduZXJzX3ByZXNlbnQiXSA9IHNlbGYuci5sZXhpc3RzKFRSVVNUX1NJR05FUlMpCiAgICAgICAgcmV0dXJuIG91dAoKCmRlZiBtYWluKGFyZ3YsIHJ1bm5lcj1Ob25lLCBlbnZpcm9uPU5vbmUpOgogICAgciA9IHJ1bm5lciBvciBSdW5uZXIoKQogICAgZW52ID0gb3MuZW52aXJvbiBpZiBlbnZpcm9uIGlzIE5vbmUgZWxzZSBlbnZpcm9uCiAgICBpZiBhcmd2WzE6XSA9PSBbIi0tc2VsZi1jaGVjayJdOgogICAgICAgICMgVGhlIGJ1bmRsZSdzIHNlbGYtY2hlY2sgcnVucyB0aGUgTkVXIHdyYXBwZXIgdGhpcyB3YXk6IGl0IHBhcnNlcyBhbmQgc3RhcnRzLiBSZWFkcyBub3RoaW5nLCBjaGFuZ2VzIG5vdGhpbmcuCiAgICAgICAgcHJpbnQoZiJmZWxob20tb3MtYXBwbHkgb2sgYnVuZGxlLWZvcm1hdD17QlVORExFX0ZPUk1BVH0gZmlsZXM9e2xlbihCVU5ETEVfRklMRVMpfSIpCiAgICAgICAgcmV0dXJuIDAKICAgIGlmIGxlbihhcmd2KSA9PSA1IGFuZCBhcmd2WzFdID09ICItLWluc3RhbGwtYnVuZGxlIiBhbmQgYXJndlszXSA9PSAiLS1zaGEyNTYiOgogICAgICAgICMgVGhlIElOU1RBTExFUidzIGVudHJ5IChyb290LCBhIGZyZXNoIGJveCkuIFVucmVhY2hhYmxlIHRocm91Z2ggc3VkbzogdGhlIHN1ZG9lcnMgbGluZSBwaW5zIGFyZ3ZbMV0gdG8gLS1wbGFuLAogICAgICAgICMgYW5kIGEgc3VkbyBjYWxsZXIgaXMgcmVmdXNlZCBoZXJlIGFzIHdlbGwgKHN1ZG8gYWx3YXlzIHNldHMgU1VET19VSUQpLgogICAgICAgIGEgPSBBcHBseShyLCAiIikKICAgICAgICBpZiAiU1VET19VSUQiIGluIGVudjoKICAgICAgICAgICAgci5sb2coIm9zLWFwcGx5OiBSRUZVU0VEOiBSMSAtLWluc3RhbGwtYnVuZGxlIGlzIHRoZSBpbnN0YWxsZXIncyBlbnRyeSwgbmV2ZXIgdGhyb3VnaCBzdWRvIikKICAgICAgICAgICAgcHJpbnQoIk9TQVBQTFktUkVQT1JUICIgKyBqc29uLmR1bXBzKHsicmVmdXNlZCI6IHsiY29kZSI6ICJSMSIsICJyZWFzb24iOiAiaW5zdGFsbC1idW5kbGUgdmlhIHN1ZG8ifX0pKQogICAgICAgICAgICByZXR1cm4gMgogICAgICAgIHNoYSA9IGFyZ3ZbNF0KICAgICAgICBpZiBub3QgcmUubWF0Y2gociJeWzAtOWEtZl17NjR9JCIsIHNoYSk6CiAgICAgICAgICAgIHByaW50KCJPU0FQUExZLVJFUE9SVCAiICsganNvbi5kdW1wcyh7InJlZnVzZWQiOiB7ImNvZGUiOiAiUjE4IiwgInJlYXNvbiI6ICJzaGEyNTYgaXMgbm90IDY0IGxvd2VyY2FzZSBoZXgifX0pKQogICAgICAgICAgICByZXR1cm4gMgogICAgICAgIGEucmVwb3J0WyJtb2RlIl0gPSAiYnVuZGxlIgogICAgICAgIHRyeToKICAgICAgICAgICAgcmMgPSBCdW5kbGUoYSkuZnJvbV9pbnN0YWxsZXIoYXJndlsyXSwgc2hhKQogICAgICAgIGV4Y2VwdCBSZWZ1c2VkIGFzIGU6CiAgICAgICAgICAgIHIubG9nKGYib3MtYXBwbHk6IFJFRlVTRUQ6IHtlLmNvZGV9IHtlLnJlYXNvbn0iKQogICAgICAgICAgICBhLnJlcG9ydFsicmVmdXNlZCJdID0geyJjb2RlIjogZS5jb2RlLCAicmVhc29uIjogZS5yZWFzb259CiAgICAgICAgICAgIHJjID0gMgogICAgICAgIHByaW50KCJPU0FQUExZLVJFUE9SVCAiICsganNvbi5kdW1wcyhhLnJlcG9ydCwgc29ydF9rZXlzPVRydWUpKQogICAgICAgIHJldHVybiByYwogICAgaWYgbGVuKGFyZ3YpICE9IDMgb3IgYXJndlsxXSAhPSAiLS1wbGFuIjoKICAgICAgICByLmxvZygib3MtYXBwbHk6IFJFRlVTRUQ6IFIxIHVzYWdlOiBmZWxob20tb3MtYXBwbHkgLS1wbGFuIC92YXIvbGliL2ZlbGhvbS1hZ2VudC9vcy9wbGFuLTxpZD4uanNvbiIpCiAgICAgICAgcHJpbnQoIk9TQVBQTFktUkVQT1JUICIgKyBqc29uLmR1bXBzKHsicmVmdXNlZCI6IHsiY29kZSI6ICJSMSIsICJyZWFzb24iOiAidXNhZ2UifX0pKQogICAgICAgIHJldHVybiAyCiAgICBhID0gQXBwbHkociwgYXJndlsyXSkKICAgIHQwID0gdGltZS50aW1lKCkKICAgIHRyeToKICAgICAgICByYyA9IGEucnVuKCkKICAgIGV4Y2VwdCBSZWZ1c2VkIGFzIGU6CiAgICAgICAgci5sb2coZiJvcy1hcHBseTogUkVGVVNFRDoge2UuY29kZX0ge2UucmVhc29ufSIpCiAgICAgICAgYS5yZXBvcnRbInJlZnVzZWQiXSA9IHsiY29kZSI6IGUuY29kZSwgInJlYXNvbiI6IGUucmVhc29ufQogICAgICAgIHJjID0gMgogICAgZXhjZXB0IHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQgYXMgZToKICAgICAgICByLmxvZyhmIm9zLWFwcGx5OiBGQUlMRUQgcmM9MTI0IHN0ZXA9dGltZW91dCDigJQge2UuY21kfSIpCiAgICAgICAgYS5yZXBvcnRbImZhaWxlZCJdID0geyJyYyI6IDEyNCwgInRpbWVvdXQiOiBzdHIoZS5jbWQpWzoyMDBdfQogICAgICAgIHJjID0gMwogICAgYS5yZXBvcnRbInBhc3Nfc2Vjb25kcyJdID0gcm91bmQodGltZS50aW1lKCkgLSB0MCwgMSkKICAgIGlmIGEucmVwb3J0LmdldCgibW9kZSIpID09ICJhcHBseSI6CiAgICAgICAgIyBSLTg2ODogQkVGT1JFIHRoZSBzdGRvdXQgbGluZSDigJQgYSBraWxsZWQgYWdlbnQgbmV2ZXIgcmVhZHMgc3Rkb3V0LCBhbmQgdGhpcyBjb3B5IGlzIGhvdyBpdHMgcmVwb3J0IHN0aWxsCiAgICAgICAgIyByZWFjaGVzIHRoZSBodWIgKHRoZSBhZ2VudCBzZW5kcyBhbiB1bnNlbnQgY29weSB3aGVuIGl0IHN0YXJ0cywgYW5kIGRlbGV0ZXMgaXQgb25jZSBzZW50KS4KICAgICAgICB0cnk6CiAgICAgICAgICAgIHIuc2F2ZV9yZXBvcnQoYXJndlsyXSwgYS5yZXBvcnQpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICByLmxvZyhmIm9zLWFwcGx5OiB0aGUgcmVwb3J0IGNvcHkgY291bGQgbm90IGJlIHNhdmVkICh0aGUgcnVuIGlzIHVuYWZmZWN0ZWQpOiB7ZX0iKQogICAgdHJ5OgogICAgICAgIHByaW50KCJPU0FQUExZLVJFUE9SVCAiICsganNvbi5kdW1wcyhhLnJlcG9ydCwgc29ydF9rZXlzPVRydWUpLCBmbHVzaD1UcnVlKQogICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIyBSLTg2ODogbm9ib2R5IHJlYWRzIHN0ZG91dCBhbnkgbW9yZSAodGhlIGFnZW50IHdhcyBraWxsZWQpOyB0aGUgY29weSBhYm92ZSBjYXJyaWVzIHRoZSByZXBvcnQuCiAgICAgICAgc3lzLnN0ZG91dCA9IG9wZW4ob3MuZGV2bnVsbCwgInciKQogICAgcmV0dXJuIHJjCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGlmIG9zLmdldGV1aWQoKSAhPSAwOgogICAgICAgIHByaW50KCJmZWxob20tb3MtYXBwbHk6IG11c3QgcnVuIGFzIHJvb3QgKHZpYSBzdWRvKSIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICBzeXMuZXhpdCgyKQogICAgc3lzLmV4aXQobWFpbihzeXMuYXJndikpCg==",
   "mode": "0o755",
   "path": "/usr/local/sbin/felhom-os-apply",
   "policy": "replace",
   "sha256": "be9435407e88585e4ce6bd0d96cf1d805de53fbf618728bf9744506ac076dd98",
   "source": "configs/felhom-os-apply"
  },
  {
   "check": "python",
   "content_b64": "IyEvdXNyL2Jpbi9weXRob24zCiMgZmVsaG9tLWNyYXNoLWd1YXJkIOKAlCBhIGNyYXNoZWQgaG9zdCByZXN0YXJ0cyBieSBpdHNlbGYsIGJ1dCBub3QgZm9yZXZlciAoYDA5YCBkZWNpc2lvbiA4OCwgUi04NTEsIGAxMWAgwqc1LjkpLgojCiMgSW5zdGFsbCBhcyAvdXNyL2xvY2FsL3NiaW4vZmVsaG9tLWNyYXNoLWd1YXJkICgwNzU1IHJvb3Q6cm9vdCksIHdpdGggZmVsaG9tLWNyYXNoLWd1YXJkLnNlcnZpY2UgKGJvb3QgLyBjbGVhbi1zdG9wKQojIGFuZCBmZWxob20tY3Jhc2gtZ3VhcmQtY2hlY2sudGltZXIgKGhvdXJseSByZS1hcm0gY2hlY2spLiBQeXRob24gMywgc3RhbmRhcmQgbGlicmFyeSBvbmx5LgojIFRlc3RzOiBjb25maWdzL3Rlc3RfZmVsaG9tX2NyYXNoX2d1YXJkLnB5ICh0ZW1wIGRpcnM7IG5vdGhpbmcgcmVhbCBpcyB0b3VjaGVkKS4KIwojIFdIQVQgSVQgRE9FUwojICAgYm9vdCAgICAgICAgZWFybHkgYXQgZXZlcnkgYm9vdC4gV2FzIHRoZSBwcmV2aW91cyBib290IGVuZGVkIENMRUFOTFk/ICh0aGUgY2xlYW4tc3RvcCBtYXJrZXIgZXhpc3RzKS4gSWYgbm90LCB0aGlzCiMgICAgICAgICAgICAgICBib290IGZvbGxvd3MgYW4gVU5DTEVBTiBzdG9wIOKAlCBhIGtlcm5lbCBjcmFzaCwgYSBwb3dlciBjdXQgb3IgYSBoYXJkIHJlc2V0ICh0aGV5IGNhbm5vdCBiZSB0b2xkIGFwYXJ0CiMgICAgICAgICAgICAgICBvbiB0aGVzZSBib3hlczogbWVhc3VyZWQgMjAyNi0xMC0wNCBvbiBkZW1vLWhwLCBlZmlfcHN0b3JlIGlzIG9uIHlldCBzYXZlZCBOT1RISU5HIGZvciBhIHJlYWwgcGFuaWM7CiMgICAgICAgICAgICAgICB0aGUgam91cm5hbCBhbmQgYGxhc3RgIHNob3cgb25seSAibm8gc2h1dGRvd24iKS4gSXQgcmVjb3JkcyB0aGUgdW5jbGVhbiBib290LCBjb3VudHMgdGhvc2UgaW4gdGhlIGxhc3QKIyAgICAgICAgICAgICAgIFdJTkRPV19NSU5VVEVTLCBhbmQgc2V0cyBrZXJuZWwucGFuaWM6CiMgICAgICAgICAgICAgICAgIC0gZmV3ZXIgdGhhbiBMSU1JVC0xIHJlY2VudCB1bmNsZWFuIGJvb3RzIOKGkiBrZXJuZWwucGFuaWMgPSBQQU5JQ19TRUNPTkRTIChhIGNyYXNoIHJlc3RhcnRzIHRoZSBib3gpOwojICAgICAgICAgICAgICAgICAtIExJTUlULTEgb3IgbW9yZSDihpIgdGhlIGd1YXJkIFRSSVBTOiBrZXJuZWwucGFuaWMgPSAwLCBzbyB0aGUgTElNSVQtdGggY3Jhc2ggd2l0aGluIHRoZSB3aW5kb3cKIyAgICAgICAgICAgICAgICAgICBsZWF2ZXMgdGhlIGJveCBPRkYgKG9wZXJhdG9yJ3Mgb3duIHdvcmRzOiAiaWYgaXQgY3Jhc2hlcyAzIHRpbWVzIHdpdGhpbiBvbmUgaG91ciwgaXQgc3RheXMgb2ZmIikuCiMgICAgICAgICAgICAgICBBIHRyaXBwZWQgZ3VhcmQgc3RheXMgdHJpcHBlZCBhY3Jvc3MgZnVydGhlciBib290cyB1bnRpbCBpdCByZS1hcm1zLgojICAgY2xlYW4tc3RvcCAgRXhlY1N0b3Agb2YgdGhlIHNlcnZpY2U6IHdyaXRlcyB0aGUgY2xlYW4tc3RvcCBtYXJrZXIgZHVyaW5nIGFuIG9yZGVybHkgc2h1dGRvd24gb3IgcmVib290LgojICAgY2hlY2sgICAgICAgaG91cmx5OiBhIHRyaXBwZWQgZ3VhcmQgcmUtYXJtcyBhZnRlciBSRUFSTV9IT1VSUyBvZiBub3JtYWwgcnVubmluZyAoc2luY2UgdGhlIHRyaXAgQU5EIHNpbmNlIGJvb3QpLgojICAgcmVhcm0gICAgICAgdGhlIG9wZXJhdG9yIHJlLWFybXMgYnkgaGFuZCAoYGZlbGhvbS1jcmFzaC1ndWFyZCByZWFybWApLgojICAgc3RhdHVzICAgICAgcHJpbnRzIHRoZSBzdGF0ZS4KIyBUaGUgc3RhdGUgaXMgL3Zhci9saWIvZmVsaG9tLWNyYXNoLWd1YXJkL3N0YXRlLmpzb24gKDA2NDQ6IHRoZSBub24tcm9vdCBhZ2VudCByZWFkcyBpdCBpbnRvIGl0cyBob3N0IHJlcG9ydCkuCiMgQmVmb3JlIHRoZSBzZXJ2aWNlIHJ1bnMgKHZlcnkgZWFybHkgYm9vdCkgdGhlIGtlcm5lbCBkZWZhdWx0IGtlcm5lbC5wYW5pYyA9IDAgYXBwbGllcywgc28gYSBjcmFzaCBUSEFUIGVhcmx5IGxlYXZlcwojIHRoZSBib3ggb2ZmIOKAlCB0aGUgc2FmZSBzaWRlOiBhIGJveCB0aGF0IGNhbm5vdCByZWFjaCB1c2Vyc3BhY2UgbXVzdCBub3QgbG9vcC4KaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHRpbWUKCkNPTkYgPSAiL2V0Yy9mZWxob20vY3Jhc2gtZ3VhcmQuY29uZiIKU1RBVEVfRElSID0gIi92YXIvbGliL2ZlbGhvbS1jcmFzaC1ndWFyZCIKREVGQVVMVFMgPSB7IkxJTUlUIjogMywgIldJTkRPV19NSU5VVEVTIjogNjAsICJQQU5JQ19TRUNPTkRTIjogMTAsICJSRUFSTV9IT1VSUyI6IDI0fQoKCmNsYXNzIEVudjoKICAgICIiIlBhdGhzIGFuZCBjbG9jazsgdGVzdHMgcmVwbGFjZSB0aGVtLiIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25mPUNPTkYsIHN0YXRlX2Rpcj1TVEFURV9ESVIsIHBhbmljX3BhdGg9Ii9wcm9jL3N5cy9rZXJuZWwvcGFuaWMiLAogICAgICAgICAgICAgICAgIHVwdGltZV9wYXRoPSIvcHJvYy91cHRpbWUiLCBib290X2lkX3BhdGg9Ii9wcm9jL3N5cy9rZXJuZWwvcmFuZG9tL2Jvb3RfaWQiKToKICAgICAgICBzZWxmLmNvbmYsIHNlbGYuc3RhdGVfZGlyID0gY29uZiwgc3RhdGVfZGlyCiAgICAgICAgc2VsZi5wYW5pY19wYXRoLCBzZWxmLnVwdGltZV9wYXRoLCBzZWxmLmJvb3RfaWRfcGF0aCA9IHBhbmljX3BhdGgsIHVwdGltZV9wYXRoLCBib290X2lkX3BhdGgKCiAgICBkZWYgbm93KHNlbGYpOgogICAgICAgIHJldHVybiB0aW1lLnRpbWUoKQoKICAgIGRlZiBsb2coc2VsZiwgbGluZSk6CiAgICAgICAgcHJpbnQobGluZSwgZmlsZT1zeXMuc3RkZXJyLCBmbHVzaD1UcnVlKQogICAgICAgIHRyeToKICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgICAgc3VicHJvY2Vzcy5ydW4oWyJsb2dnZXIiLCAiLXQiLCAiZmVsaG9tLWNyYXNoLWd1YXJkIiwgbGluZV0sIHRpbWVvdXQ9MTApCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgcGFzcwoKCmRlZiBpc28odCk6CiAgICByZXR1cm4gdGltZS5zdHJmdGltZSgiJVktJW0tJWRUJUg6JU06JVNaIiwgdGltZS5nbXRpbWUodCkpCgoKZGVmIHBhcnNlX2lzbyhzKToKICAgIGltcG9ydCBjYWxlbmRhcgogICAgcmV0dXJuIGNhbGVuZGFyLnRpbWVnbSh0aW1lLnN0cnB0aW1lKHMsICIlWS0lbS0lZFQlSDolTTolU1oiKSkKCgpkZWYgbG9hZF9jb25mKGVudik6CiAgICBjID0gZGljdChERUZBVUxUUykKICAgIHRyeToKICAgICAgICBmb3IgbGluZSBpbiBvcGVuKGVudi5jb25mKToKICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICBpZiBub3QgbGluZSBvciBsaW5lLnN0YXJ0c3dpdGgoIiMiKSBvciAiPSIgbm90IGluIGxpbmU6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBrLCB2ID0gKHguc3RyaXAoKSBmb3IgeCBpbiBsaW5lLnNwbGl0KCI9IiwgMSkpCiAgICAgICAgICAgIGlmIGsgaW4gYyBhbmQgdi5pc2RpZ2l0KCkgYW5kIGludCh2KSA+PSAoMSBpZiBrICE9ICJQQU5JQ19TRUNPTkRTIiBlbHNlIDEpOgogICAgICAgICAgICAgICAgY1trXSA9IGludCh2KQogICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgcGFzcwogICAgcmV0dXJuIGMKCgpkZWYgc3RhdGVfcGF0aChlbnYpOgogICAgcmV0dXJuIG9zLnBhdGguam9pbihlbnYuc3RhdGVfZGlyLCAic3RhdGUuanNvbiIpCgoKZGVmIG1hcmtlcl9wYXRoKGVudik6CiAgICByZXR1cm4gb3MucGF0aC5qb2luKGVudi5zdGF0ZV9kaXIsICJjbGVhbi1zdG9wIikKCgpkZWYgbG9hZF9zdGF0ZShlbnYpOgogICAgdHJ5OgogICAgICAgIHdpdGggb3BlbihzdGF0ZV9wYXRoKGVudikpIGFzIGY6CiAgICAgICAgICAgIHMgPSBqc29uLmxvYWQoZikKICAgICAgICByZXR1cm4gcyBpZiBpc2luc3RhbmNlKHMsIGRpY3QpIGVsc2UgTm9uZQogICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICByZXR1cm4gTm9uZQoKCmRlZiBzYXZlX3N0YXRlKGVudiwgcyk6CiAgICBvcy5tYWtlZGlycyhlbnYuc3RhdGVfZGlyLCBtb2RlPTBvNzU1LCBleGlzdF9vaz1UcnVlKQogICAgdG1wID0gc3RhdGVfcGF0aChlbnYpICsgIi50bXAiCiAgICB3aXRoIG9wZW4odG1wLCAidyIpIGFzIGY6CiAgICAgICAganNvbi5kdW1wKHMsIGYsIGluZGVudD0yLCBzb3J0X2tleXM9VHJ1ZSkKICAgICAgICBmLndyaXRlKCJcbiIpCiAgICBvcy5jaG1vZCh0bXAsIDBvNjQ0KQogICAgb3MucmVwbGFjZSh0bXAsIHN0YXRlX3BhdGgoZW52KSkKCgpkZWYgc2V0X3BhbmljKGVudiwgc2Vjb25kcyk6CiAgICB3aXRoIG9wZW4oZW52LnBhbmljX3BhdGgsICJ3IikgYXMgZjoKICAgICAgICBmLndyaXRlKGYie3NlY29uZHN9XG4iKQoKCmRlZiByZWFkKHBhdGgsIGRlZmF1bHQ9IiIpOgogICAgdHJ5OgogICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBmOgogICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkuc3RyaXAoKQogICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgcmV0dXJuIGRlZmF1bHQKCgpkZWYgc3VtbWFyaXplKHMsIGMsIG5vdyk6CiAgICB3aW5kb3cgPSBjWyJXSU5ET1dfTUlOVVRFUyJdICogNjAKICAgIHRpbWVzID0gW3BhcnNlX2lzbyh0KSBmb3IgdCBpbiBzLmdldCgidW5jbGVhbl9ib290cyIsIFtdKV0KICAgIGFmdGVyID0gcGFyc2VfaXNvKHNbInJlYXJtZWRfYXQiXSkgaWYgcy5nZXQoInJlYXJtZWRfYXQiKSBlbHNlIDAKICAgICMgYSByZS1hcm0gc3RhcnRzIGEgZnJlc2ggd2luZG93IChvciB0aGUgbmV4dCB1bmNsZWFuIGJvb3Qgd291bGQgdHJpcCBhZ2FpbiBhdCBvbmNlKTsgdGhlIGhpc3Rvcnkgc3RheXMKICAgIHNbInVuY2xlYW5fYm9vdHNfaW5fd2luZG93Il0gPSBzdW0oMSBmb3IgdCBpbiB0aW1lcyBpZiBub3cgLSB0IDw9IHdpbmRvdyBhbmQgdCA+IGFmdGVyKQogICAgc1sidW5jbGVhbl9ib290c18yNGgiXSA9IHN1bSgxIGZvciB0IGluIHRpbWVzIGlmIG5vdyAtIHQgPD0gODY0MDApCiAgICBzWyJjb25maWciXSA9IGMKICAgIHNbInVwZGF0ZWRfYXQiXSA9IGlzbyhub3cpCgoKZGVmIGJvb3QoZW52KToKICAgIGMgPSBsb2FkX2NvbmYoZW52KQogICAgbm93ID0gZW52Lm5vdygpCiAgICB0cnk6CiAgICAgICAgdXAgPSBmbG9hdChyZWFkKGVudi51cHRpbWVfcGF0aCwgIjAiKS5zcGxpdCgpWzBdKQogICAgZXhjZXB0IChWYWx1ZUVycm9yLCBJbmRleEVycm9yKToKICAgICAgICB1cCA9IDAuMAogICAgYm9vdF9hdCA9IG5vdyAtIHVwCiAgICBwcmV2ID0gbG9hZF9zdGF0ZShlbnYpCiAgICBmaXJzdCA9IHByZXYgaXMgTm9uZQogICAgcyA9IHByZXYgb3IgeyJ2ZXJzaW9uIjogMSwgInVuY2xlYW5fYm9vdHMiOiBbXSwgInRyaXBwZWQiOiBGYWxzZX0KICAgIGNsZWFuID0gb3MucGF0aC5leGlzdHMobWFya2VyX3BhdGgoZW52KSkKICAgIHVuY2xlYW4gPSAobm90IGZpcnN0KSBhbmQgKG5vdCBjbGVhbikKICAgIHRyeToKICAgICAgICBvcy5yZW1vdmUobWFya2VyX3BhdGgoZW52KSkKICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgIHBhc3MKICAgICMga2VlcCA3IGRheXMgb2YgaGlzdG9yeSAodGhlIDI0IGggZmlndXJlIGFuZCB0aGUgb3BlcmF0b3IncyB2aWV3KSwgZHJvcCBvbGRlcgogICAgc1sidW5jbGVhbl9ib290cyJdID0gW3QgZm9yIHQgaW4gcy5nZXQoInVuY2xlYW5fYm9vdHMiLCBbXSkgaWYgbm93IC0gcGFyc2VfaXNvKHQpIDw9IDcgKiA4NjQwMF0KICAgIGlmIHVuY2xlYW46CiAgICAgICAgc1sidW5jbGVhbl9ib290cyJdLmFwcGVuZChpc28oYm9vdF9hdCkpCiAgICBzWyJsYXN0X2Jvb3RfYXQiXSA9IGlzbyhib290X2F0KQogICAgc1sibGFzdF9ib290X3VuY2xlYW4iXSA9IHVuY2xlYW4KICAgIHNbImJvb3RfaWQiXSA9IHJlYWQoZW52LmJvb3RfaWRfcGF0aCwgInVua25vd24iKQogICAgc3VtbWFyaXplKHMsIGMsIG5vdykKICAgIGlmIG5vdCBzLmdldCgidHJpcHBlZCIpIGFuZCBzWyJ1bmNsZWFuX2Jvb3RzX2luX3dpbmRvdyJdID49IGNbIkxJTUlUIl0gLSAxOgogICAgICAgIHNbInRyaXBwZWQiXSwgc1sidHJpcHBlZF9hdCJdID0gVHJ1ZSwgaXNvKG5vdykKICAgICAgICBzWyJ0cmlwcGVkX3JlYXNvbiJdID0gKGYie3NbJ3VuY2xlYW5fYm9vdHNfaW5fd2luZG93J119IHVuY2xlYW4gYm9vdHMgd2l0aGluIHtjWydXSU5ET1dfTUlOVVRFUyddfSBtaW51dGVzIOKAlCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmInRoZSBuZXh0IGNyYXNoIGxlYXZlcyB0aGUgYm94IG9mZiAobGltaXQge2NbJ0xJTUlUJ119KSIpCiAgICAgICAgZW52LmxvZyhmImNyYXNoLWd1YXJkOiBUUklQUEVEOiB7c1sndHJpcHBlZF9yZWFzb24nXX0iKQogICAgcGFuaWMgPSAwIGlmIHMuZ2V0KCJ0cmlwcGVkIikgZWxzZSBjWyJQQU5JQ19TRUNPTkRTIl0KICAgIHNldF9wYW5pYyhlbnYsIHBhbmljKQogICAgc1sia2VybmVsX3BhbmljIl0gPSBwYW5pYwogICAgc1siYXJtZWQiXSA9IG5vdCBzLmdldCgidHJpcHBlZCIpCiAgICBzYXZlX3N0YXRlKGVudiwgcykKICAgIGVudi5sb2coZiJjcmFzaC1ndWFyZDogYm9vdCBmaXJzdD17Zmlyc3R9IHVuY2xlYW49e3VuY2xlYW59IGluLXdpbmRvdz17c1sndW5jbGVhbl9ib290c19pbl93aW5kb3cnXX0gIgogICAgICAgICAgICBmInRyaXBwZWQ9e3MuZ2V0KCd0cmlwcGVkJyl9IGtlcm5lbC5wYW5pYz17cGFuaWN9IikKICAgIHJldHVybiAwCgoKZGVmIGNsZWFuX3N0b3AoZW52KToKICAgIG9zLm1ha2VkaXJzKGVudi5zdGF0ZV9kaXIsIG1vZGU9MG83NTUsIGV4aXN0X29rPVRydWUpCiAgICB3aXRoIG9wZW4obWFya2VyX3BhdGgoZW52KSwgInciKSBhcyBmOgogICAgICAgIGYud3JpdGUoaXNvKGVudi5ub3coKSkgKyAiXG4iKQogICAgZW52LmxvZygiY3Jhc2gtZ3VhcmQ6IGNsZWFuIHN0b3AgcmVjb3JkZWQiKQogICAgcmV0dXJuIDAKCgpkZWYgcmVhcm0oZW52LCBieSk6CiAgICBjID0gbG9hZF9jb25mKGVudikKICAgIG5vdyA9IGVudi5ub3coKQogICAgcyA9IGxvYWRfc3RhdGUoZW52KSBvciB7InZlcnNpb24iOiAxLCAidW5jbGVhbl9ib290cyI6IFtdfQogICAgd2FzID0gYm9vbChzLmdldCgidHJpcHBlZCIpKQogICAgc1sidHJpcHBlZCJdID0gRmFsc2UKICAgIHNbImFybWVkIl0gPSBUcnVlCiAgICBzWyJyZWFybWVkX2F0Il0sIHNbInJlYXJtZWRfYnkiXSA9IGlzbyhub3cpLCBieQogICAgaWYgd2FzOgogICAgICAgIHNbImxhc3RfdHJpcCJdID0geyJhdCI6IHMuZ2V0KCJ0cmlwcGVkX2F0IiksICJyZWFzb24iOiBzLmdldCgidHJpcHBlZF9yZWFzb24iKX0KICAgIHMucG9wKCJ0cmlwcGVkX2F0IiwgTm9uZSkKICAgIHMucG9wKCJ0cmlwcGVkX3JlYXNvbiIsIE5vbmUpCiAgICBzdW1tYXJpemUocywgYywgbm93KQogICAgc2V0X3BhbmljKGVudiwgY1siUEFOSUNfU0VDT05EUyJdKQogICAgc1sia2VybmVsX3BhbmljIl0gPSBjWyJQQU5JQ19TRUNPTkRTIl0KICAgIHNhdmVfc3RhdGUoZW52LCBzKQogICAgZW52LmxvZyhmImNyYXNoLWd1YXJkOiBSRS1BUk1FRCBieSB7Ynl9ICh3YXMgdHJpcHBlZDoge3dhc30pOyBrZXJuZWwucGFuaWM9e2NbJ1BBTklDX1NFQ09ORFMnXX0iKQogICAgcmV0dXJuIDAKCgpkZWYgY2hlY2soZW52KToKICAgIGMgPSBsb2FkX2NvbmYoZW52KQogICAgbm93ID0gZW52Lm5vdygpCiAgICBzID0gbG9hZF9zdGF0ZShlbnYpCiAgICBpZiBub3QgczoKICAgICAgICByZXR1cm4gMAogICAgaWYgcy5nZXQoInRyaXBwZWQiKToKICAgICAgICBzaW5jZSA9IG1heChwYXJzZV9pc28oc1sidHJpcHBlZF9hdCJdKSwgcGFyc2VfaXNvKHMuZ2V0KCJsYXN0X2Jvb3RfYXQiLCBzWyJ0cmlwcGVkX2F0Il0pKSkKICAgICAgICBpZiBub3cgLSBzaW5jZSA+PSBjWyJSRUFSTV9IT1VSUyJdICogMzYwMDoKICAgICAgICAgICAgcmV0dXJuIHJlYXJtKGVudiwgZiJ0aW1lciAoe2NbJ1JFQVJNX0hPVVJTJ119IGggb2Ygbm9ybWFsIHJ1bm5pbmcpIikKICAgIHN1bW1hcml6ZShzLCBjLCBub3cpCiAgICBzYXZlX3N0YXRlKGVudiwgcykKICAgIHJldHVybiAwCgoKZGVmIG1haW4oYXJndiwgZW52PU5vbmUpOgogICAgZW52ID0gZW52IG9yIEVudigpCiAgICBjbWQgPSBhcmd2WzFdIGlmIGxlbihhcmd2KSA9PSAyIGVsc2UgIiIKICAgIGlmIGNtZCA9PSAiYm9vdCI6CiAgICAgICAgcmV0dXJuIGJvb3QoZW52KQogICAgaWYgY21kID09ICJjbGVhbi1zdG9wIjoKICAgICAgICByZXR1cm4gY2xlYW5fc3RvcChlbnYpCiAgICBpZiBjbWQgPT0gImNoZWNrIjoKICAgICAgICByZXR1cm4gY2hlY2soZW52KQogICAgaWYgY21kID09ICJyZWFybSI6CiAgICAgICAgcmV0dXJuIHJlYXJtKGVudiwgIm9wZXJhdG9yIikKICAgIGlmIGNtZCA9PSAic3RhdHVzIjoKICAgICAgICBwcmludChqc29uLmR1bXBzKGxvYWRfc3RhdGUoZW52KSwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlKSkKICAgICAgICByZXR1cm4gMAogICAgcHJpbnQoInVzYWdlOiBmZWxob20tY3Jhc2gtZ3VhcmQgYm9vdHxjbGVhbi1zdG9wfGNoZWNrfHJlYXJtfHN0YXR1cyIsIGZpbGU9c3lzLnN0ZGVycikKICAgIHJldHVybiAyCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIGlmIG9zLmdldGV1aWQoKSAhPSAwOgogICAgICAgIHByaW50KCJmZWxob20tY3Jhc2gtZ3VhcmQ6IG11c3QgcnVuIGFzIHJvb3QiLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgc3lzLmV4aXQoMikKICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQo=",
   "mode": "0o755",
   "path": "/usr/local/sbin/felhom-crash-guard",
   "policy": "replace",
   "sha256": "f45b99817fe8ff50ca3e1e3d9f9c250002348ddeede7e05847b1b1c04e88c638",
   "source": "configs/felhom-crash-guard"
  },
  {
   "check": "unit",
   "content_b64": "IyBmZWxob20tY3Jhc2gtZ3VhcmQg4oCUIGEgY3Jhc2hlZCBob3N0IHJlc3RhcnRzIGJ5IGl0c2VsZiwgd2l0aCBhIGxpbWl0IChgMDlgIGRlY2lzaW9uIDg4LCBSLTg1MSwgYDExYCDCpzUuOSkuCiMgU3RhcnRzIGVhcmx5IGF0IGJvb3QgKHNldHMga2VybmVsLnBhbmljIGZvciBUSElTIGJvb3QpOyBpdHMgRXhlY1N0b3Agd3JpdGVzIHRoZSBjbGVhbi1zdG9wIG1hcmtlciBkdXJpbmcgYW4gb3JkZXJseQojIHNodXRkb3duIG9yIHJlYm9vdC4gQSBib290IHRoYXQgZmluZHMgbm8gbWFya2VyIGZvbGxvd2VkIGEgY3Jhc2gsIGEgcG93ZXIgY3V0IG9yIGEgaGFyZCByZXNldC4KW1VuaXRdCkRlc2NyaXB0aW9uPUZlbGhvbSBjcmFzaCBndWFyZCAocmVzdGFydCBhZnRlciBhIGtlcm5lbCBjcmFzaCwgd2l0aCBhIGxpbWl0KQpEZWZhdWx0RGVwZW5kZW5jaWVzPW5vCkFmdGVyPWxvY2FsLWZzLnRhcmdldApCZWZvcmU9c3lzaW5pdC50YXJnZXQgc2h1dGRvd24udGFyZ2V0CkNvbmZsaWN0cz1zaHV0ZG93bi50YXJnZXQKUmVxdWlyZXNNb3VudHNGb3I9L3Zhci9saWIKCltTZXJ2aWNlXQpUeXBlPW9uZXNob3QKUmVtYWluQWZ0ZXJFeGl0PXllcwpFeGVjU3RhcnQ9L3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1jcmFzaC1ndWFyZCBib290CkV4ZWNTdG9wPS91c3IvbG9jYWwvc2Jpbi9mZWxob20tY3Jhc2gtZ3VhcmQgY2xlYW4tc3RvcAoKW0luc3RhbGxdCldhbnRlZEJ5PXN5c2luaXQudGFyZ2V0Cg==",
   "mode": "0o644",
   "path": "/etc/systemd/system/felhom-crash-guard.service",
   "policy": "replace",
   "sha256": "5580ad6cdd51990be2fadc5dd476aa4a77c1988c5fd63e5b8b423e4cb5975c06",
   "source": "configs/felhom-crash-guard.service"
  },
  {
   "check": "unit",
   "content_b64": "IyBIb3VybHk6IGEgdHJpcHBlZCBjcmFzaCBndWFyZCByZS1hcm1zIGFmdGVyIFJFQVJNX0hPVVJTIG9mIG5vcm1hbCBydW5uaW5nIChmZWxob20tY3Jhc2gtZ3VhcmQgY2hlY2spLgpbVW5pdF0KRGVzY3JpcHRpb249RmVsaG9tIGNyYXNoIGd1YXJkIHJlLWFybSBjaGVjawoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApFeGVjU3RhcnQ9L3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1jcmFzaC1ndWFyZCBjaGVjawo=",
   "mode": "0o644",
   "path": "/etc/systemd/system/felhom-crash-guard-check.service",
   "policy": "replace",
   "sha256": "93d2c4749fe63ab12425b5344a0f04151a8ad2b1b01d4d23c93fbc644310926e",
   "source": "configs/felhom-crash-guard-check.service"
  },
  {
   "check": "unit",
   "content_b64": "W1VuaXRdCkRlc2NyaXB0aW9uPUZlbGhvbSBjcmFzaCBndWFyZCByZS1hcm0gY2hlY2sgKGhvdXJseSkKCltUaW1lcl0KT25Cb290U2VjPTE1bWluCk9uVW5pdEFjdGl2ZVNlYz0xaAoKW0luc3RhbGxdCldhbnRlZEJ5PXRpbWVycy50YXJnZXQK",
   "mode": "0o644",
   "path": "/etc/systemd/system/felhom-crash-guard-check.timer",
   "policy": "replace",
   "sha256": "b214e79e483c339f92ddc9571b6db0fd096c4de6cfe683281121134d451f7c5e",
   "source": "configs/felhom-crash-guard-check.timer"
  },
  {
   "check": "plain",
   "content_b64": "IyAvZXRjL2ZlbGhvbS9jcmFzaC1ndWFyZC5jb25mIOKAlCByZWFkIGJ5IC91c3IvbG9jYWwvc2Jpbi9mZWxob20tY3Jhc2gtZ3VhcmQgKGAxMWAgwqc1LjkpLgojIFRoZSBMSU1JVC10aCB1bmNsZWFuIHN0b3Agd2l0aGluIFdJTkRPV19NSU5VVEVTIGxlYXZlcyB0aGUgYm94IG9mZi4gRGVjaWRlZCBieSBDQyB1bmF0dGVuZGVkIOKAlCBvcGVyYXRvciBtYXkgcmV2ZXJzZS4KTElNSVQ9MwpXSU5ET1dfTUlOVVRFUz02MAojIGtlcm5lbC5wYW5pYyB3aGlsZSBhcm1lZDogc2Vjb25kcyBhZnRlciBhIGNyYXNoIGJlZm9yZSB0aGUga2VybmVsIHJlc3RhcnRzIHRoZSBib3guClBBTklDX1NFQ09ORFM9MTAKIyBBIHRyaXBwZWQgZ3VhcmQgcmUtYXJtcyBhZnRlciB0aGlzIG1hbnkgaG91cnMgb2Ygbm9ybWFsIHJ1bm5pbmcgKG9yIGBmZWxob20tY3Jhc2gtZ3VhcmQgcmVhcm1gKS4KUkVBUk1fSE9VUlM9MjQK",
   "mode": "0o644",
   "path": "/etc/felhom/crash-guard.conf",
   "policy": "if-absent",
   "sha256": "9b9d305b421f81d223f2ccc4594e67d41618239779d983a2f72c191a8b3b65f7",
   "source": "configs/crash-guard.conf"
  },
  {
   "check": "agent-unit",
   "content_b64": "IyBmZWxob20tYWdlbnQuc2VydmljZSDigJQgY2Fub25pY2FsIHN5c3RlbWQgdW5pdCBmb3IgdGhlIEZlbGhvbSBob3N0IGFnZW50LgojCiMgSW5zdGFsbCBhcyAvZXRjL3N5c3RlbWQvc3lzdGVtL2ZlbGhvbS1hZ2VudC5zZXJ2aWNlICh0aGUgaG9zdC1ib290c3RyYXAgc2NyaXB0IGluc3RhbGxzIHRoaXMgZnJvbQojIHRoZSBHaXRlYS1wdWJsaXNoZWQgYmluYXJ5OyBwcmV2aW91c2x5IHRoaXMgdW5pdCB3YXMgaGFuZC1tYWRlIG9uIGVhY2ggaG9zdCkuIFRoZSBhZ2VudCBydW5zIGFzIHRoZQojIE5PTi1yb290IGBmZWxob20tYWdlbnRgIHNlcnZpY2UgdXNlciAodGhlIGRvY3VtZW50ZWQgcHJvZHVjdGlvbiBtb2RlbCDigJQgUkVBRE1FICJQcm9jZXNzIG1vZGVsIjsKIyBgcHJpdmlsZWdlZC5tb2RlOiAic3VkbyJgKSBhbmQgc2hlbGxzIHRoZSBmZXcgaG9zdC1yb290IG9wcyBvdXQgdmlhIGBzdWRvIC1uYCBhZ2FpbnN0IHRoZSBmaXhlZC1hcmcKIyBhbGxvd2xpc3QgaW4gL2V0Yy9zdWRvZXJzLmQvZmVsaG9tLWFnZW50IChjb25maWdzL2ZlbGhvbS1hZ2VudC5zdWRvZXJzKS4gVGhlIFVzZXI9IGhlcmUgYW5kIHRoZQojIHN1ZG9lcnMgYGZlbGhvbS1hZ2VudCBBTEw9KHJvb3QpIE5PUEFTU1dEOiDigKZgIE1VU1QgbmFtZSB0aGUgU0FNRSB1c2VyLgojCiMgUGF0aHMgTVVTVCBtYXRjaCB3aGF0IHRoZSBzdWRvZXJzIC8gaG9zdC1pbnN0YWxsIHNjcmlwdCBleHBlY3Q6CiMgICBiaW5hcnkgIC91c3IvbG9jYWwvYmluL2ZlbGhvbS1hZ2VudAojICAgY29uZmlnICAvZXRjL2ZlbGhvbS1hZ2VudC9hZ2VudC5qc29uICAgKDA2MDAgZmVsaG9tLWFnZW50OmZlbGhvbS1hZ2VudCDigJQgc2VjcmV0cyBsaXZlIGhlcmUpCiMgICBzdGF0ZSAgIC92YXIvbGliL2ZlbGhvbS1hZ2VudCAgICAgICAgICAobm9uY2VzLCBsb2NhbC1hcGkgY2VydC9rZXkvdG9rZW5zLCBzdGFnZWQgdW5pdHMsIGd1ZXN0cykKIwojID09PSBERUxJQkVSQVRFTFkgTk8gU0FOREJPWElORyDigJQgcmVhZCBiZWZvcmUgYWRkaW5nIGFueSBoYXJkZW5pbmcgZGlyZWN0aXZlID09PQojCiMgMS4gTm9OZXdQcml2aWxlZ2VzIGlzIE5PVCBzZXQuIEl0IGlzIElOQ09NUEFUSUJMRSB3aXRoIHRoZSBhZ2VudCdzIHByaXZpbGVnZSBtb2RlbDogaXQgYmxvY2tzIHRoZQojICAgIHNldHVpZCBgc3Vkb2AgdGhlIGFnZW50IHJlbGllcyBvbiBmb3IgRVZFUlkgaG9zdC1yb290IG9wIChtb3VudCwgZm9ybWF0LCBwY3QsIGRuc21hc3Eg4oCmKSwgc28gdGhlCiMgICAgYWdlbnQgd291bGQgc2lsZW50bHkgbG9zZSBhbGwgcHJpdmlsZWdlZCBjYXBhYmlsaXR5LiBUaGUgbmFycm93IHN1cmZhY2UgY29tZXMgZnJvbSB0aGUgc3Vkb2VycwojICAgIGZpeGVkLWFyZyBhbGxvd2xpc3QgKyB0aGUgYWdlbnQncyBpbi1wcm9jZXNzIGZpbmUgdmFsaWRhdGlvbiAoaW50ZXJuYWwvc3RvcmFnZS92YWxpZGF0ZS5nbyksIE5PVAojICAgIGZyb20gTm9OZXdQcml2aWxlZ2VzLiBEbyBub3QgYWRkIGl0LgojCiMgMi4gTk8gbW91bnQtbmFtZXNwYWNpbmcgaGFyZGVuaW5nIChQcm90ZWN0SG9tZSwgUHJvdGVjdFN5c3RlbSwgUHJpdmF0ZVRtcCwgUmVhZE9ubHlQYXRocywKIyAgICBQcm90ZWN0Q29udHJvbEdyb3Vwcywg4oCmKS4gQW55IG9mIHRoZXNlIGdpdmUgdGhlIHVuaXQgYSBQUklWQVRFIG1vdW50IG5hbWVzcGFjZSDigJQgYW5kIHRoZSBhZ2VudCdzCiMgICAgaW50ZXJtZWRpYXJ5LW1vdW50IGRyaXZlIG1vZGVsIGRvZXMgYG1vdW50IC0tbWFrZS1zaGFyZWQgL21udC9mZWxob20tZHJpdmVzYCArIGBtb3VudCAtLWJpbmRgIGFuZAojICAgIHJlbGllcyBvbiB0aG9zZSBwcm9wYWdhdGluZyBpbnRvIHRoZSBSVU5OSU5HIGN1c3RvbWVyIGd1ZXN0LiBJbiBhIHByaXZhdGUgbmFtZXNwYWNlIHRoZSBiaW5kcwojICAgIHdvdWxkIGJlIGludmlzaWJsZSB0byB0aGUgaG9zdC9ndWVzdCBhbmQgZXZlcnkgZXh0ZXJuYWwtZHJpdmUgZW5yb2xsbWVudCB3b3VsZCBzaWxlbnRseSBicmVhay4KIyAgICBUaGUgYWdlbnQgTVVTVCBzaGFyZSB0aGUgaG9zdCBtb3VudCBuYW1lc3BhY2UuIFRoZSBzZWN1cml0eSBib3VuZGFyeSBpcyB0aGUgc3Vkb2VycyBhbGxvd2xpc3QuCgpbVW5pdF0KRGVzY3JpcHRpb249RmVsaG9tIGhvc3QgYWdlbnQgKFByb3htb3ggaG9zdCB0aWVyOyBodWIgY29udHJvbCBsb29wICsgUEJTIHZlcmlmeSArIHN0b3JhZ2Ugd2F0Y2hkb2cpCkRvY3VtZW50YXRpb249aHR0cHM6Ly9naXRlYS5kb29wbGV4Lmh1L2FkbWluL2ZlbGhvbS1hZ2VudApBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQgcHZlLWNsdXN0ZXIuc2VydmljZSBwdmVwcm94eS5zZXJ2aWNlCldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdClR5cGU9c2ltcGxlClVzZXI9ZmVsaG9tLWFnZW50Ckdyb3VwPWZlbGhvbS1hZ2VudApFeGVjU3RhcnQ9L3Vzci9sb2NhbC9iaW4vZmVsaG9tLWFnZW50IC0tY29uZmlnIC9ldGMvZmVsaG9tLWFnZW50L2FnZW50Lmpzb24KUmVzdGFydD1vbi1mYWlsdXJlClJlc3RhcnRTZWM9NXMKCiMgU3RhdGUgZGlyOiBjcmVhdGVkIDA3NTAgZmVsaG9tLWFnZW50OmZlbGhvbS1hZ2VudCBvbiBzdGFydCBpZiBhYnNlbnQgKGxvY2FsLWFwaSBjZXJ0L2tleS90b2tlbnMsCiMgbm9uY2VzLCBzdGFnZWQgLm1vdW50IHVuaXRzLCBwZXItZ3Vlc3QgYm9vdHN0cmFwIGRpcnMgYWxsIGxpdmUgaGVyZSkuClN0YXRlRGlyZWN0b3J5PWZlbGhvbS1hZ2VudApTdGF0ZURpcmVjdG9yeU1vZGU9MDc1MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Cg==",
   "mode": "0o644",
   "path": "/etc/systemd/system/felhom-agent.service",
   "policy": "replace",
   "sha256": "bf74aa0acf75e645f51f3d28b7c8760c96fd44bf72435f6c4246c7bb3f8f82c4",
   "source": "configs/felhom-agent.service"
  },
  {
   "check": "unit",
   "content_b64": "IyBmZWxob20tYWdlbnQtcm9sbGJhY2suc2VydmljZSDigJQgdGhlIE9uRmFpbHVyZT0gdGFyZ2V0IHRoYXQgYXV0by1yZXZlcnRzIGEgY3Jhc2gtbG9vcGluZyBhZ2VudAojIHNlbGYtdXBkYXRlIChUQVNLIEQxOyBTUElLRS1hZ2VudC1zZWxmdXBkYXRlLTIwMjYtMDctMDUpLgojCiMgSW5zdGFsbCBhcyAvZXRjL3N5c3RlbWQvc3lzdGVtL2ZlbGhvbS1hZ2VudC1yb2xsYmFjay5zZXJ2aWNlLiBJdCBpcyByZWZlcmVuY2VkIGJ5IHRoZQojIGZlbGhvbS1hZ2VudC1saW1pdHMuY29uZiBkcm9wLWluJ3MgT25GYWlsdXJlPSBsaW5lLgojCiMgVEhFIFBFUi1DUkFTSC1GSVJJTkcgUkVBTElUWSBbU0YtMV06IG9uIHN5c3RlbWQgMjU3LCBPbkZhaWx1cmU9IGZpcmVzIG9uIEVWRVJZIGNyYXNoIG9mIHRoZSBtYWluCiMgdW5pdCDigJQgZXZlbiB3aGlsZSBpdCBpcyBtZXJlbHkgYGFjdGl2YXRpbmcgKGF1dG8tcmVzdGFydClgLCBsb25nIGJlZm9yZSAoYW5kIHJlZ2FyZGxlc3Mgb2YpIHRoZQojIHRlcm1pbmFsIHN0YXJ0LWxpbWl0IGBmYWlsZWRgIHN0YXRlLiBEdXJpbmcgb25lIGNyYXNoIGluY2lkZW50IHRoaXMgdW5pdCB0aGVyZWZvcmUgcnVucyBNQU5ZCiMgdGltZXMuIFRoYXQgaXMgc2FmZSBCWSBERVNJR046IHRoZSB3cmFwcGVyJ3Mgcm9sbGJhY2sgdmVyYiBpcyBwZW5kaW5nLW1hcmtlci1ndWFyZGVkIOKAlCB0aGUgZmlyc3QKIyBmaXJlIGFmdGVyIGEgYmFkIHVwZGF0ZSByZXZlcnRzIHRoZSBiaW5hcnkgYW5kIGNsZWFycyB0aGUgbWFya2VyOyBldmVyeSBsYXRlciBmaXJlIChhbmQgYW55IGZpcmUKIyB3aXRoIG5vIHVwZGF0ZSBpbiBmbGlnaHQgYXQgYWxsKSBpcyBhIGxvZ2dlZCBuby1vcCB0aGF0IHRvdWNoZXMgbm90aGluZy4gQ29uc2VxdWVuY2U6IGEgYmFkCiMgdXBkYXRlIGlzIHJvbGxlZCBiYWNrIGF0IHRoZSBGSVJTVCBjcmFzaCAofnNlY29uZHMpLCBub3QgYWZ0ZXIgdGhlIHN0YXJ0LWxpbWl0IGJ1cnN0IOKAlCB0aGUgdHVuZWQKIyBzdGFydC1saW1pdCBpbiB0aGUgZHJvcC1pbiBpcyB0aGUgdGVybWluYWwgQkFDS1NUT1AgKGUuZy4gYW4gZW52aXJvbm1lbnRhbCBjcmFzaCBsb29wIG9mIHRoZQojIGtub3duLWdvb2QgYmluYXJ5KSwgbm90IHRoZSByb2xsYmFjayB0cmlnZ2VyLgpbVW5pdF0KRGVzY3JpcHRpb249RmVsaG9tIGFnZW50IHNlbGYtdXBkYXRlIGF1dG8tcm9sbGJhY2sgKHBlbmRpbmctZ3VhcmRlZDsgZmlyZXMgcGVyIGNyYXNoLCBuby1vcHMgd2l0aG91dCBhIHBlbmRpbmcgdXBkYXRlKQoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApFeGVjU3RhcnQ9L3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1zZWxmdXBkYXRlLWd1YXJkZWQgcm9sbGJhY2sK",
   "mode": "0o644",
   "path": "/etc/systemd/system/felhom-agent-rollback.service",
   "policy": "replace",
   "sha256": "4d143099c0a305c2603b78dc7bf88d24b12d048a11a9209e5aaf252e7952c5ca",
   "source": "configs/felhom-agent-rollback.service"
  },
  {
   "check": "dropin",
   "content_b64": "IyBmZWxob20tYWdlbnQtbGltaXRzLmNvbmYg4oCUIHN0YXJ0LWxpbWl0ICsgcm9sbGJhY2stdHJpZ2dlciBkcm9wLWluIGZvciBmZWxob20tYWdlbnQuc2VydmljZQojIChUQVNLIEQxKS4gSW5zdGFsbCBhcyAvZXRjL3N5c3RlbWQvc3lzdGVtL2ZlbGhvbS1hZ2VudC5zZXJ2aWNlLmQvZmVsaG9tLWFnZW50LWxpbWl0cy5jb25mCiMgYW5kIGBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZGAuCiMKIyBWYWx1ZXMgYXJlIHRoZSBTUElLRS1hZ2VudC1zZWxmdXBkYXRlLTIwMjYtMDctMDUgdHVuZWQgc2V0LCB2ZXJiYXRpbSBbU0YtMl06IHdpdGggdGhlIHVuaXQncwojIFJlc3RhcnQ9b24tZmFpbHVyZSArIFJlc3RhcnRTZWM9NXMgYW5kIHN5c3RlbWQgMjU3J3MgY29tcGlsZWQgZGVmYXVsdHMgKDEwcy81KSwgYSBjcmFzaC1sb29waW5nCiMgYmluYXJ5IE5FVkVSIHRyaXBzIHRoZSBzdGFydCBsaW1pdCBhbmQgbG9vcHMgZm9yZXZlciAoMzUgc3RhcnRzLzE4MHMgbWVhc3VyZWQpLiAxMjBzLzQgZ2l2ZXMgYQojIHRlcm1pbmFsIGBmYWlsZWRgIOKJiDIwcyBhZnRlciB0aGUgZmlyc3QgY3Jhc2guCiMKIyBQTEFDRU1FTlQgVFJBUCBbU0YtM106IHRoZXNlIGtleXMgTVVTVCBiZSBpbiBbVW5pdF0uIE9uIHN5c3RlbWQgMjU3IGEgW1NlcnZpY2VdIHBsYWNlbWVudCBpcwojIEhBTEYtQVBQTElFRCDigJQgU3RhcnRMaW1pdEJ1cnN0IGlzIGFjY2VwdGVkIHdoaWxlIFN0YXJ0TGltaXRJbnRlcnZhbFNlYyBpcyBzaWxlbnRseSBpZ25vcmVkCiMgKGpvdXJuYWwgd2FybmluZyBvbmx5KS4gTmV2ZXIgc3BsaXQgdGhlbTsgbmV2ZXIgcHV0IHRoZW0gaW4gW1NlcnZpY2VdLgojCiMgT25GYWlsdXJlIGZpcmVzIG9uIEVWRVJZIGNyYXNoIG9uIHN5c3RlbWQgMjU3IFtTRi0xXSDigJQgc2VlIHRoZSBjb21tZW50IGJsb2NrIGluCiMgZmVsaG9tLWFnZW50LXJvbGxiYWNrLnNlcnZpY2UgZm9yIHdoeSB0aGF0IGlzIHNhZmUgKHBlbmRpbmctbWFya2VyIGd1YXJkKS4KW1VuaXRdClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0xMjAKU3RhcnRMaW1pdEJ1cnN0PTQKT25GYWlsdXJlPWZlbGhvbS1hZ2VudC1yb2xsYmFjay5zZXJ2aWNlCg==",
   "mode": "0o644",
   "path": "/etc/systemd/system/felhom-agent.service.d/felhom-agent-limits.conf",
   "policy": "replace",
   "sha256": "4f1560893b80f0f35a12d415dfa9f8338b7cd9ac66240f8303aea04a61554610",
   "source": "configs/felhom-agent-limits.conf"
  },
  {
   "check": "sh",
   "content_b64": "IyEvYmluL3NoCiMgZmVsaG9tLW1nbXQtd2F0Y2hkb2cg4oCUIHRoZSBEVU1CLCBhZ2VudC1JTkRFUEVOREVOVCBtYW5hZ2VtZW50LXBsYW5lIGhlYWxlciAoVEFTSyBHMSkuCiMKIyBXSFkgVEhJUyBFWElTVFM6IC9ydW4vc3NoZCBpcyBPcGVuU1NIJ3MgY29tcGlsZWQtaW4gcHJpdmlsZWdlLXNlcGFyYXRpb24gZGlyZWN0b3J5LCBTSEFSRUQgYnkKIyBldmVyeSBzc2hkIG9uIHRoZSBob3N0LiBJZiBpdCBnb2VzIG1pc3NpbmcsIHNzaGQncyBsaXN0ZW5lciBzdGF5cyB1cCBidXQgZXZlcnkgbmV3IHNlc3Npb24gUkVTRVRTCiMgcmlnaHQgYWZ0ZXIgU1NIMl9NU0dfS0VYSU5JVCDigJQgYSBtYW5hZ2VtZW50LXBsYW5lIGxvY2tvdXQgb24gYW4gb3RoZXJ3aXNlLWhlYWx0aHkgYm94CiMgKFNQSUtFLWZlbGhvbS1zc2hkLTIwMjYtMDctMDUgwqc4LCBjYXVzZWQgbGl2ZSBieSBhIHNlY29uZCB1bml0J3MgYFJ1bnRpbWVEaXJlY3Rvcnk9c3NoZGAgY2xlYW51cCkuCiMgVGhlIHRtcGZpbGVzLmQgZW50cnkgKGZlbGhvbS1wcml2c2VwLnRtcGZpbGVzKSBQUkVWRU5UUyB0aGUga25vd24gY2F1c2U7IHRoaXMgc2NyaXB0IEFVVE8tSEVBTFMgYW55CiMgbm92ZWwgY2F1c2Ugd2l0aCBaRVJPIGxvZ2luIGFuZCBaRVJPIGRlcGVuZGVuY3kgb24gdGhlIGZlbGhvbS1hZ2VudCBiaW5hcnkgKHNvIGl0IHNlbGYtY29ycmVjdHMgZXZlbgojIHdoZW4gdGhlIGFnZW50IGlzIGRvd24g4oCUIHRoZSB3aG9sZSBwb2ludCkuIEl0IGlzIHJ1biBieSBmZWxob20tbWdtdC13YXRjaGRvZy50aW1lciBldmVyeSB+NjBzLgojCiMgQ09OVFJBQ1QgKGFsbCBmb3VyIGFyZSBsb2FkLWJlYXJpbmcpOgojICAgMS4gU1RBVC1GSVJTVCAvIElERU1QT1RFTlQg4oCUIGEgSEVBTFRIWSAvcnVuL3NzaGQgaXMgTkVWRVIgdG91Y2hlZCAobm8gbWtkaXIvY2htb2QvY2hvd24gY2FsbCksIHNvCiMgICAgICBzdGVhZHkgc3RhdGUgaXMgemVybyBtdXRhdGlvbiBhbmQgdGhlIGRpcidzIG10aW1lIGlzIHByZXNlcnZlZC4gT25seSBhIE1JU1NJTkcgb3IKIyAgICAgIHdyb25nLW1vZGUvb3duZXIgZGlyIGlzIGNvcnJlY3RlZC4KIyAgIDIuIHJlc2V0LWZhaWxlZCB0aGUgU1RPQ0sgc3NoZCBPTkxZIHdoZW4gaXQgaXMgaW4gdGhlIGBmYWlsZWRgIHN0YXRlIChhIHN0YXJ0LWxpbWl0IGxvY2tvdXQpIOKAlAojICAgICAgbmV2ZXIgb3RoZXJ3aXNlLCBhbmQgTkVWRVIgYHJlc3RhcnRgIGl0IChta2RpciBhbG9uZSByZXN0b3JlcyBpdDsgUElEIHN0YXlzLCBzcGlrZS1wcm92ZW4pLgojICAgMy4gSEVBTCBNQVJLRVIg4oCUIHdyaXRlcyBhbiBSRkMzMzM5IFVUQyB0aW1lc3RhbXAgdG8gJE1BUktFUiBvbmx5IG9uIGEgcmVhbCBoZWFsLCBzbyB0aGUgYWdlbnQgY2FuCiMgICAgICBSRVBPUlQgdGhlIGNvbmRpdGlvbiB0byB0aGUgaHViIChhIHJlY3VycmluZyBjbG9iYmVyIG11c3Qgc3VyZmFjZSBCRUZPUkUgaXQgYmVjb21lcyBhIGxvY2tvdXQpLgojICAgNC4gTk8gYFJ1bnRpbWVEaXJlY3Rvcnk9YCBhbnl3aGVyZSBpbiB0aGlzIGZlYXR1cmUgKHRoYXQgSVMgdGhlIGluY2lkZW50IGNhdXNlKSDigJQgdGhlIHVuaXQgdGhhdAojICAgICAgcnVucyB0aGlzIHNjcmlwdCBtdXN0IG5vdCBkZWNsYXJlIG9uZSBlaXRoZXIuCiMKIyBUb3VjaGVzIGhvc3QgL3J1biArIHRoZSBzdG9jayBzc2hkIHVuaXQgT05MWSDigJQgbm8gZ3Vlc3RzIChwb29sLXNjb3BpbmcgaXMgbW9vdCBoZXJlKS4gRmFpbC1zYWZlOgojIGFueSBzaW5nbGUgc3RlcCBmYWlsaW5nIGlzIGxvZ2dlZCBhbmQgZG9lcyBub3QgYWJvcnQgdGhlIG90aGVycyAoYHx8IHRydWVgKTsgdGhlIG5leHQgdGljayByZXRyaWVzLgoKc2V0IC11CgpQUklWU0VQPS9ydW4vc3NoZApNQVJLRVI9L3J1bi9mZWxob20tbWdtdC13YXRjaGRvZy5oZWFsZWQKU1NIRF9VTklUPXNzaC5zZXJ2aWNlICAgIyBEZWJpYW4vUFZFIHN0b2NrIHNzaGQgdW5pdCBuYW1lIChzc2hkLnNlcnZpY2UgaXMgYW4gYWxpYXMpCmhlYWxlZD0wCgpsb2coKSB7IGxvZ2dlciAtdCBmZWxob20tbWdtdC13YXRjaGRvZyAiJCoiIDI+L2Rldi9udWxsIHx8IHRydWU7IH0KCiMgMS4gUHJpdnNlcCBkaXIg4oCUIHN0YXQtZmlyc3Q6IGNyZWF0ZSBvbmx5IHdoZW4gbWlzc2luZzsgY29ycmVjdCBtb2RlL293bmVyIG9ubHkgd2hlbiB3cm9uZy4KaWYgWyAhIC1kICIkUFJJVlNFUCIgXTsgdGhlbgoJaWYgbWtkaXIgLXAgIiRQUklWU0VQIiAmJiBjaG93biByb290OnJvb3QgIiRQUklWU0VQIiAmJiBjaG1vZCAwNzU1ICIkUFJJVlNFUCI7IHRoZW4KCQloZWFsZWQ9MQoJCWxvZyAicmVjcmVhdGVkIG1pc3NpbmcgcHJpdnNlcCBkaXIgJFBSSVZTRVAgKDA3NTUgcm9vdDpyb290KSIKCWVsc2UKCQlsb2cgIkVSUk9SOiBmYWlsZWQgdG8gcmVjcmVhdGUgJFBSSVZTRVAiCglmaQplbHNlCgltb2RlPSQoc3RhdCAtYyAlYSAiJFBSSVZTRVAiIDI+L2Rldi9udWxsIHx8IGVjaG8gIiIpCglvd25lcj0kKHN0YXQgLWMgJVU6JUcgIiRQUklWU0VQIiAyPi9kZXYvbnVsbCB8fCBlY2hvICIiKQoJaWYgWyAiJG1vZGUiICE9ICI3NTUiIF07IHRoZW4KCQljaG1vZCAwNzU1ICIkUFJJVlNFUCIgJiYgaGVhbGVkPTEgJiYgbG9nICJjb3JyZWN0ZWQgJFBSSVZTRVAgbW9kZSAoJG1vZGUgLT4gNzU1KSIKCWZpCglpZiBbICIkb3duZXIiICE9ICJyb290OnJvb3QiIF07IHRoZW4KCQljaG93biByb290OnJvb3QgIiRQUklWU0VQIiAmJiBoZWFsZWQ9MSAmJiBsb2cgImNvcnJlY3RlZCAkUFJJVlNFUCBvd25lciAoJG93bmVyIC0+IHJvb3Q6cm9vdCkiCglmaQpmaQoKIyAyLiBTdG9jayBzc2hkIOKAlCBjbGVhciBhIHN0YXJ0LWxpbWl0IGxvY2tvdXQgT05MWSB3aGVuIHRoZSB1bml0IGlzIGdlbnVpbmVseSBgZmFpbGVkYC4gTmV2ZXIgcmVzdGFydAojICAgIGl0ICh1bm5lY2Vzc2FyeSDigJQgYSByZWNyZWF0ZWQgcHJpdnNlcCBkaXIgaXMgcGlja2VkIHVwIGJ5IHRoZSBuZXh0IGZvcms7IHRoZSBsaXN0ZW5lciBuZXZlciBkaWVkKS4KaWYgc3lzdGVtY3RsIGlzLWZhaWxlZCAtLXF1aWV0ICIkU1NIRF9VTklUIiAyPi9kZXYvbnVsbDsgdGhlbgoJaWYgc3lzdGVtY3RsIHJlc2V0LWZhaWxlZCAiJFNTSERfVU5JVCIgMj4vZGV2L251bGw7IHRoZW4KCQloZWFsZWQ9MQoJCWxvZyAicmVzZXQtZmFpbGVkICRTU0hEX1VOSVQgKHdhcyBpbiB0aGUgZmFpbGVkIHN0YXRlKSIKCWZpCmZpCgojIDMuIEhlYWwgbWFya2VyIOKAlCBvbmx5IG9uIGEgcmVhbCBoZWFsLCBzbyB0aGUgYWdlbnQgcmVwb3J0cyB0aGUgY29uZGl0aW9uIChodWIgcmFpc2VzIGEgd2FybmluZykuCmlmIFsgIiRoZWFsZWQiID0gIjEiIF07IHRoZW4KCWRhdGUgLXUgKyVZLSVtLSVkVCVIOiVNOiVTWiA+ICIkTUFSS0VSIiAyPi9kZXYvbnVsbCB8fCB0cnVlCmZpCgpleGl0IDAK",
   "mode": "0o755",
   "path": "/usr/local/sbin/felhom-mgmt-watchdog",
   "policy": "replace",
   "sha256": "efeeb56b74d7c1874fe2dff54004d521e70e83ddb234ab1360f4cf4a1b0fa082",
   "source": "configs/felhom-mgmt-watchdog.sh"
  },
  {
   "check": "plain",
   "content_b64": "IyBmZWxob20gcHJpdnNlcC1kaXIgcGVyc2lzdGVuY2UgKFRBU0sgRzEpIOKAlCBpbnN0YWxsIGFzIC9ldGMvdG1wZmlsZXMuZC9mZWxob20tcHJpdnNlcC5jb25mLgojCiMgTEFZRVIgMSAocHJldmVudCk6IG1ha2UgT3BlblNTSCdzIHNoYXJlZCBwcml2aWxlZ2Utc2VwYXJhdGlvbiBkaXJlY3RvcnkgL3J1bi9zc2hkIGJvb3QtcGVyc2lzdGVudAojIGFuZCBvd25lZCBieSBOTyBzeXN0ZW1kIHVuaXQncyBsaWZlY3ljbGUuIFRoaXMgY2xvc2VzIHRoZSBleGFjdCBpbmNpZGVudCBjYXVzZSBmcm9tCiMgU1BJS0UtZmVsaG9tLXNzaGQtMjAyNi0wNy0wNSDCpzg6IGEgc2Vjb25kIHNzaGQgdW5pdCBkZWNsYXJpbmcgYFJ1bnRpbWVEaXJlY3Rvcnk9c3NoZGAgaGFkIHN5c3RlbWQKIyBSRU1PVkUgdGhlIHNoYXJlZCAvcnVuL3NzaGQgb24gdGhhdCB1bml0J3Mgc3RvcC9mYWlsdXJlLCB0YWtpbmcgdGhlIHN0b2NrIHNzaGQgb24gOjIyIGRvd24gd2l0aCBpdAojIChzZXNzaW9ucyByZXNldCByaWdodCBhZnRlciBTU0gyX01TR19LRVhJTklUKS4gQSB0bXBmaWxlcy5kIGVudHJ5IHJlY3JlYXRlcyB0aGUgZGlyIGF0IGV2ZXJ5IGJvb3QKIyBpbmRlcGVuZGVudGx5IG9mIGFueSB1bml0LCBzbyBubyB1bml0J3MgUnVudGltZURpcmVjdG9yeSBjbGVhbnVwIGNhbiBiZSB0aGUgc29sZSBvd25lci4KIwojIHN5c3RlbWQtdG1wZmlsZXMgaXMgaWRlbXBvdGVudDogYHN5c3RlbWQtdG1wZmlsZXMgLS1jcmVhdGVgIHJlLXJ1biBpcyBhIG5vLW9wIG9uIGFuIGV4aXN0aW5nLAojIGNvcnJlY3QgZGlyIChpdCBvbmx5IGNyZWF0ZXMvZml4ZXMsIG5ldmVyIGNodXJucykuIENvbXBsZW1lbnRlZCBhdCBydW50aW1lIGJ5IHRoZQojIGZlbGhvbS1tZ210LXdhdGNoZG9nIHRpbWVyIChsYXllciAyKSwgd2hpY2ggcmUtaGVhbHMgYSBkaXIgcmVtb3ZlZCBBRlRFUiBib290LgojCiMgVHlwZSBkID0gY3JlYXRlIHRoZSBkaXJlY3RvcnkgaWYgYWJzZW50IChsZWF2ZXMgYW4gZXhpc3Rpbmcgb25lLCBvbmx5IGZpeGluZyBtb2RlL293bmVyKS4KZCAvcnVuL3NzaGQgMDc1NSByb290IHJvb3QgLQo=",
   "mode": "0o644",
   "path": "/etc/tmpfiles.d/felhom-privsep.conf",
   "policy": "replace",
   "sha256": "9161a36662b06ba8cb0f8e1a68e6be0d3a1dd74403be7836be6178e8d664639d",
   "source": "configs/felhom-privsep.tmpfiles"
  },
  {
   "check": "unit-nort",
   "content_b64": "IyBmZWxob20tbWdtdC13YXRjaGRvZy5zZXJ2aWNlIChUQVNLIEcxKSDigJQgaW5zdGFsbCBhcyAvZXRjL3N5c3RlbWQvc3lzdGVtL2ZlbGhvbS1tZ210LXdhdGNoZG9nLnNlcnZpY2UuCiMKIyBMQVlFUiAyIChhdXRvLWhlYWwgd2l0aG91dCBsb2dpbik6IGEgRFVNQiBvbmVzaG90IHRoYXQgcnVucyAvdXNyL2xvY2FsL3NiaW4vZmVsaG9tLW1nbXQtd2F0Y2hkb2csCiMgdHJpZ2dlcmVkIGV2ZXJ5IH42MHMgYnkgZmVsaG9tLW1nbXQtd2F0Y2hkb2cudGltZXIuIEl0IHJlY3JlYXRlcyBhIG1pc3NpbmcgL3J1bi9zc2hkIGFuZCBjbGVhcnMgYQojIHN0YXJ0LWxpbWl0ZWQgc3RvY2sgc3NoZCDigJQgc28gYSBtYW5hZ2VtZW50LXBsYW5lIGxvY2tvdXQgc2VsZi1jb3JyZWN0cyBpbiDiiaQxIHRpY2sgd2l0aCBOT0JPRFkgbG9nZ2VkCiMgaW4gYW5kIFdJVEhPVVQgdGhlIGZlbGhvbS1hZ2VudCBiaW5hcnkgcnVubmluZyAodGhlIGFnZW50IG9ubHkgT0JTRVJWRVMvcmVwb3J0czsgdGhlIGhlYWwgbXVzdCBub3QKIyBkZXBlbmQgb24gaXQg4oCUIFNQSUtFLWZlbGhvbS1zc2hkLTIwMjYtMDctMDUgZmluZGluZyAjOSAvIFRBU0sgRzEgdHJhcCAxKS4KIwojIENSSVRJQ0FMOiB0aGlzIHVuaXQgTVVTVCBOT1QgZGVjbGFyZSBgUnVudGltZURpcmVjdG9yeT1gIOKAlCB0aGF0IGRpcmVjdGl2ZSAod2l0aCB2YWx1ZSBgc3NoZGApIGlzIHRoZQojIGluY2lkZW50IGl0IGV4aXN0cyB0byBmaXguIEl0IHdyaXRlcyBvbmx5IHRvIC9ydW4gKGRpciArIGhlYWwgbWFya2VyKSBhcyByb290OyBubyBzdGF0ZSBkaXIgbmVlZGVkLgpbVW5pdF0KRGVzY3JpcHRpb249RmVsaG9tIG1hbmFnZW1lbnQtcGxhbmUgd2F0Y2hkb2cgKHByaXZzZXAtZGlyIGF1dG8taGVhbDsgYWdlbnQtaW5kZXBlbmRlbnQpCiMgT3JkZXJpbmcgb25seSDigJQgdGhlIHRpbWVyIGRyaXZlcyBjYWRlbmNlOyBubyBoYXJkIGRlcGVuZGVuY3kgc28gaXQgcnVucyBldmVuIGluIGRlZ3JhZGVkIGJvb3RzLgpBZnRlcj1zeXN0ZW1kLXRtcGZpbGVzLXNldHVwLnNlcnZpY2UKCltTZXJ2aWNlXQpUeXBlPW9uZXNob3QKRXhlY1N0YXJ0PS91c3IvbG9jYWwvc2Jpbi9mZWxob20tbWdtdC13YXRjaGRvZwojIERlbGliZXJhdGVseSBOTyBSdW50aW1lRGlyZWN0b3J5PSwgTk8gUHJpdmF0ZVRtcCwgTk8gc2FuZGJveGluZyB0aGF0IHdvdWxkIGhpZGUgL3J1bi9zc2hkIGZyb20gaXQuCg==",
   "mode": "0o644",
   "path": "/etc/systemd/system/felhom-mgmt-watchdog.service",
   "policy": "replace",
   "sha256": "7a2ada10d9b2ff3db317fa7a9a797460df84e238b4abec79430b399e8a30d5d3",
   "source": "configs/felhom-mgmt-watchdog.service"
  },
  {
   "check": "unit-nort",
   "content_b64": "IyBmZWxob20tbWdtdC13YXRjaGRvZy50aW1lciAoVEFTSyBHMSkg4oCUIGluc3RhbGwgYXMgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mZWxob20tbWdtdC13YXRjaGRvZy50aW1lci4KIwojIERyaXZlcyBmZWxob20tbWdtdC13YXRjaGRvZy5zZXJ2aWNlIG9uIGEgfjYwcyBjYWRlbmNlICh0aGUgYXV0by1oZWFsIHRpY2spLiBPbkJvb3RTZWMgZmlyZXMgc2hvcnRseQojIGFmdGVyIGJvb3QgKGJlbHQtYW5kLXN1c3BlbmRlcnMgd2l0aCB0aGUgdG1wZmlsZXMgbGF5ZXIpOyBPblVuaXRBY3RpdmVTZWM9NjBzIGdpdmVzIHRoZSDiiaQxLXRpY2sKIyBoZWFsIGJ1ZGdldCB0aGUgRzEgYWNjZXB0YW5jZSBkcmlsbCBtZWFzdXJlcy4gUGVyc2lzdGVudD10cnVlIHJ1bnMgYSBtaXNzZWQgdGljayBpbW1lZGlhdGVseSBhZnRlciBhCiMgcmVzdW1lL2xhdGUgYm9vdC4gVGhlIG9uZXNob3QgaXMgaWRlbXBvdGVudCwgc28gYSBmYXN0IGNhZGVuY2UgbmV2ZXIgY2h1cm5zIGEgaGVhbHRoeSBob3N0LgpbVW5pdF0KRGVzY3JpcHRpb249RmVsaG9tIG1hbmFnZW1lbnQtcGxhbmUgd2F0Y2hkb2cgdGltZXIgKH42MHMgcHJpdnNlcC1kaXIgYXV0by1oZWFsIHRpY2spCgpbVGltZXJdCk9uQm9vdFNlYz0zMHMKT25Vbml0QWN0aXZlU2VjPTYwcwpBY2N1cmFjeVNlYz01cwpQZXJzaXN0ZW50PXRydWUKVW5pdD1mZWxob20tbWdtdC13YXRjaGRvZy5zZXJ2aWNlCgpbSW5zdGFsbF0KV2FudGVkQnk9dGltZXJzLnRhcmdldAo=",
   "mode": "0o644",
   "path": "/etc/systemd/system/felhom-mgmt-watchdog.timer",
   "policy": "replace",
   "sha256": "876e4f8b04a9d58f981216fedcd4c746959856c05f4f6fa8b4de99013a65a9ca",
   "source": "configs/felhom-mgmt-watchdog.timer"
  },
  {
   "check": "unit-nort",
   "content_b64": "IyBmZWxob20tc3NoZC5zZXJ2aWNlIChUQVNLIEgxKSDigJQgaW5zdGFsbCBhcyAvZXRjL3N5c3RlbWQvc3lzdGVtL2ZlbGhvbS1zc2hkLnNlcnZpY2UuCiMKIyBUaGUgZGVkaWNhdGVkIE9PQiBzc2hkIGluc3RhbmNlOiBhIFNFQ09ORCBzc2hkIG9uIGEgY2xhaW1lZCBub24tMjIgcG9ydCwgQ09FWElTVElORyB3aXRoIHRoZQojIGN1c3RvbWVyJ3Mvc3RvY2sgc3NoZCBvbiA6MjIgKG5ldmVyIHRvdWNoZWQpLiBDb25maWcgaXMgQUdFTlQtUkVOREVSRUQgYXQgL2V0Yy9mZWxob20tc3NoZC9zc2hkX2NvbmZpZwojIChQb3J0IGZyb20gdGhlIGFnZW50J3MgY2xhaW0pOyB0aGUgYWdlbnQgcmVsb2FkcyBvbiBjaGFuZ2UgKG5ldmVyIHJlc3RhcnQtb24tY2hhbmdlIFtTRi0yXSkuCiMKIyBDUklUSUNBTCBbU0YtMV06IHRoaXMgdW5pdCBNVVNUIE5PVCBkZWNsYXJlIGBSdW50aW1lRGlyZWN0b3J5PWAg4oCUIHRoYXQgZGlyZWN0aXZlICh2YWx1ZSBgc3NoZGApCiMgcmVtb3ZlZCB0aGUgU0hBUkVEIC9ydW4vc3NoZCBhbmQgYnJva2UgdGhlIHN0b2NrIHNzaGQgbGl2ZSAoU1BJS0UtZmVsaG9tLXNzaGQgwqc4KS4gL3J1bi9zc2hkIGlzCiMgZ3VhcmFudGVlZCBieSBHMSAodG1wZmlsZXMgKyB3YXRjaGRvZyk7IHRoZSBFeGVjU3RhcnRQcmUgbWtkaXIgaXMgYSBoYXJtbGVzcyBleHRyYSBndWFyYW50ZWUuIFRoZQojIGhvc3QtaW5zdGFsbCBSdW50aW1lRGlyZWN0b3J5IGd1YXJkIHdpbGwgUkVKRUNUIHRoaXMgdW5pdCBpZiB0aGUgZGlyZWN0aXZlIGlzIGV2ZXIgYWRkZWQuCltVbml0XQpEZXNjcmlwdGlvbj1GZWxob20gT09CIHNzaGQgKGRlZGljYXRlZCBpbnN0YW5jZSwgYWdlbnQtbWFuYWdlZDsgSDEpCkFmdGVyPW5ldHdvcmsudGFyZ2V0CgpbU2VydmljZV0KVHlwZT1ub3RpZnkKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9ta2RpciAtcCAvcnVuL3NzaGQKRXhlY1N0YXJ0UHJlPS91c3Ivc2Jpbi9zc2hkIC10IC1mIC9ldGMvZmVsaG9tLXNzaGQvc3NoZF9jb25maWcKRXhlY1N0YXJ0PS91c3Ivc2Jpbi9zc2hkIC1EIC1mIC9ldGMvZmVsaG9tLXNzaGQvc3NoZF9jb25maWcKIyBDb25maWctY2hhbmdlIHBhdGg6IHZhbGlkYXRlIHRoZW4gSFVQIOKAlCBhIGJhZCByZWxvYWQgaXMgUkVGVVNFRCBhbmQgdGhlIHJ1bm5pbmcgZGFlbW9uIFNVUlZJVkVTCiMgW1NGLTJdLiBUaGUgYWdlbnQgYWx3YXlzIHdyaXRlc+KGknNzaGQgLXTihpJyZWxvYWQ7IGl0IG5ldmVyIGByZXN0YXJ0YHMgb24gYSBjb25maWcgY2hhbmdlLgpFeGVjUmVsb2FkPS91c3Ivc2Jpbi9zc2hkIC10IC1mIC9ldGMvZmVsaG9tLXNzaGQvc3NoZF9jb25maWcKRXhlY1JlbG9hZD0vYmluL2tpbGwgLUhVUCAkTUFJTlBJRApLaWxsTW9kZT1wcm9jZXNzClJlc3RhcnQ9b24tZmFpbHVyZQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Cg==",
   "mode": "0o644",
   "path": "/etc/systemd/system/felhom-sshd.service",
   "policy": "oob",
   "sha256": "7d9177f356338532a93e7fc0ef8e5fdca64802cd3128ef8545e57420bc032fb8",
   "source": "configs/felhom-sshd.service"
  },
  {
   "check": "nft",
   "content_b64": "IyEvdXNyL3NiaW4vbmZ0IC1mCiMgZmVsaG9tIE9PQiBiZWx0IOKAlCBTVEFUSUMgdGFibGUgKFRBU0sgSDEpLiBJbnN0YWxsZWQgYnkgaG9zdC1pbnN0YWxsOyBsb2FkZWQgb24gYm9vdCBieQojIGZlbGhvbS1vb2ItbmZ0LnNlcnZpY2UuIFRoZSBhZ2VudCBtdXRhdGVzIE9OTFkgdGhlIHR3byBTRVRTIChAb3BlcmF0b3JfaXBzLCBAc3NoX3BvcnQpIHZpYSB0aGUKIyBuYXJyb3cgRkVMSE9NX09PQiBzdWRvZXJzIOKAlCBpdCBORVZFUiB0b3VjaGVzIHRoZSBydWxlcyBbdHJhcCA0XSwgc28gdGhlIGVuZm9yY2VtZW50IHNlbWFudGljcyBhcmUKIyBmaXhlZCBoZXJlIGFuZCBjYW5ub3QgYmUgY2hhbmdlZCBieSB0aGUgYWdlbnQuCiMKIyBFbmZvcmNlbWVudCAoc2NvcGVkIHRvIGlpZm5hbWUgIndnLWZlbGhvbSIg4oCUIHRoZSBvZmZzaXRlIHR1bm5lbCDigJQgc28gOjIyIGFuZCBldmVyeSBvdGhlciBpbnRlcmZhY2UKIyBhcmUgVU5UT1VDSEVEIFtTRi0zL09GLTVdKToKIyAgIC0gRVNUQUJMSVNIRUQsUkVMQVRFRCByZXBsaWVzIGFsd2F5cyBwYXNzIChjb3ZlcnMgdGhlIFBCUyBwYXRoICsgcmVwbHkgdHJhZmZpYzsgUE1UVS1zYWZlKS4KIyAgIC0gZmVsaG9tLXNzaGQncyBwb3J0IGlzIHJlYWNoYWJsZSBmcm9tIHRoZSBvcGVyYXRvciAvMzIgKGluIEBvcGVyYXRvcl9pcHMpIG92ZXIgdGhlIHR1bm5lbCBPTkxZLgojICAgLSBhbnkgb3RoZXIgdHVubmVsIHNvdXJjZSB0byB0aGF0IHBvcnQgaXMgRFJPUFBFRCBhdCB0aGUgaG9zdCAoZGVmZW5zZS1pbi1kZXB0aCB2cyB0aGUgZW5kcG9pbnQpLgojICAgLSB0aGUgcG9ydCBpcyB1bnJlYWNoYWJsZSBPRkYgdGhlIHR1bm5lbCBlbnRpcmVseS4KIyBFbXB0eSBzZXRzIChiZWZvcmUgdGhlIGFnZW50J3MgZmlyc3Qgc3luYykgPSB0aGUgcG9ydCBydWxlcyBtYXRjaCBub3RoaW5nID0gbm8gZW5mb3JjZW1lbnQgeWV0CiMgKGZlbGhvbS1zc2hkIGlzIG5vdCBzdGFydGVkIHVudGlsIHRoZSBhZ2VudCByZW5kZXJzIGl0cyBjb25maWcgZWl0aGVyKS4gcHJpb3JpdHkgLTUgc2l0cyBqdXN0IGFib3ZlCiMgdGhlIGRlZmF1bHQ7IHBvbGljeSBhY2NlcHQgc28gdGhpcyB0YWJsZSBvbmx5IGV2ZXIgQUREUyBkcm9wcyBmb3IgdGhlIGZlbGhvbS1zc2hkIHBvcnQuCiMKIyBJZGVtcG90ZW50IGxvYWQ6IGNyZWF0ZS10aGVuLWRlbGV0ZS10aGVuLWRlZmluZSAoYSByZS1ydW4vYm9vdCB5aWVsZHMgYSBjbGVhbiB0YWJsZSB3aXRoIEVNUFRZIHNldHM7CiMgdGhlIGFnZW50IHJlZmlsbHMgdGhlbSB3aXRoaW4gb25lIHRpY2spLgoKdGFibGUgaW5ldCBmZWxob21fb29iCmRlbGV0ZSB0YWJsZSBpbmV0IGZlbGhvbV9vb2IKCnRhYmxlIGluZXQgZmVsaG9tX29vYiB7CglzZXQgb3BlcmF0b3JfaXBzIHsKCQl0eXBlIGlwdjRfYWRkcgoJfQoJc2V0IHNzaF9wb3J0IHsKCQl0eXBlIGluZXRfc2VydmljZQoJfQoJY2hhaW4gaW5wdXQgewoJCXR5cGUgZmlsdGVyIGhvb2sgaW5wdXQgcHJpb3JpdHkgLTU7IHBvbGljeSBhY2NlcHQ7CgkJY3Qgc3RhdGUgZXN0YWJsaXNoZWQscmVsYXRlZCBhY2NlcHQKCQlpaWZuYW1lICJ3Zy1mZWxob20iIHRjcCBkcG9ydCBAc3NoX3BvcnQgaXAgc2FkZHIgQG9wZXJhdG9yX2lwcyBhY2NlcHQKCQlpaWZuYW1lICJ3Zy1mZWxob20iIHRjcCBkcG9ydCBAc3NoX3BvcnQgZHJvcAoJCXRjcCBkcG9ydCBAc3NoX3BvcnQgaWlmbmFtZSAhPSAid2ctZmVsaG9tIiBkcm9wCgl9Cn0K",
   "mode": "0o644",
   "path": "/etc/felhom-oob.nft",
   "policy": "oob",
   "sha256": "2c2b9cca89a439ac44efd353f4ea1936b3609ca43491b4c1853483e8321f238f",
   "source": "configs/felhom-oob.nft"
  },
  {
   "check": "unit",
   "content_b64": "IyBmZWxob20tb29iLW5mdC5zZXJ2aWNlIChUQVNLIEgxKSDigJQgaW5zdGFsbCBhcyAvZXRjL3N5c3RlbWQvc3lzdGVtL2ZlbGhvbS1vb2ItbmZ0LnNlcnZpY2UuCiMKIyBMb2FkcyB0aGUgU1RBVElDIGZlbGhvbV9vb2IgYmVsdCB0YWJsZSBvbiBib290ICh0aGUgYWdlbnQgdGhlbiBmaWxscyBpdHMgc2V0cyBlYWNoIHRpY2spLiBPbmVzaG90ICsKIyBSZW1haW5BZnRlckV4aXQgc28gYHN5c3RlbWN0bCBzdGF0dXNgIHJlZmxlY3RzICJsb2FkZWQiLiBJbmRlcGVuZGVudCBvZiBwdmUtZmlyZXdhbGwvbmZ0YWJsZXMuc2VydmljZQojICh0aGUgdGFibGUgaXMgYSBzZWxmLWNvbnRhaW5lZCBgaW5ldCBmZWxob21fb29iYCwgYWRkaXRpdmUg4oCUIGl0IG5ldmVyIGZsdXNoZXMgdGhlIHJ1bGVzZXQpLgpbVW5pdF0KRGVzY3JpcHRpb249RmVsaG9tIE9PQiBiZWx0IOKAlCBsb2FkIHRoZSBzdGF0aWMgZmVsaG9tX29vYiBuZnQgdGFibGUgKEgxKQpBZnRlcj1uZXR3b3JrLXByZS50YXJnZXQKQmVmb3JlPW5ldHdvcmsudGFyZ2V0IGZlbGhvbS1hZ2VudC5zZXJ2aWNlCgpbU2VydmljZV0KVHlwZT1vbmVzaG90ClJlbWFpbkFmdGVyRXhpdD15ZXMKRXhlY1N0YXJ0PS91c3Ivc2Jpbi9uZnQgLWYgL2V0Yy9mZWxob20tb29iLm5mdAojIE9uIHN0b3AsIHJlbW92ZSB0aGUgdGFibGUgKGJlc3QtZWZmb3J0KSBzbyBhbiB1bmluc3RhbGwvZGlzYWJsZSBsZWF2ZXMgbmZ0IGNsZWFuLgpFeGVjU3RvcD0tL3Vzci9zYmluL25mdCBkZWxldGUgdGFibGUgaW5ldCBmZWxob21fb29iCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQK",
   "mode": "0o644",
   "path": "/etc/systemd/system/felhom-oob-nft.service",
   "policy": "oob",
   "sha256": "01583efa67a88740389de58f885726929b34aac470e61678f75b8078b1089441",
   "source": "configs/felhom-oob-nft.service"
  },
  {
   "check": "sudoers",
   "content_b64": "IyBmZWxob20tb3Agb3BlcmF0b3Igc3Vkb2VycyAoVEFTSyBIMSkg4oCUIGluc3RhbGwgYXMgL2V0Yy9zdWRvZXJzLmQvZmVsaG9tLW9wICgwNDQwIHJvb3Q6cm9vdCkuCiMKIyBUaGUgREVGQVVMVCBvcGVyYXRvciBpZGVudGl0eSAobG9naW4gdmlhIGZlbGhvbS1zc2hkIG9ubHk7IGtleSBpbiAvZXRjL2ZlbGhvbS1zc2hkL2F1dGhvcml6ZWRfa2V5cy8KIyBmZWxob20tb3AsIG91dHNpZGUgfi8uc3NoLCBzbyB0aGUgY3VzdG9tZXIncyBzc2hkIG5ldmVyIGhvbm91cnMgaXQgW1NGLTNdKS4gZmVsaG9tLW9wIGlzIGEgbm9ybWFsCiMgbG9naW4gdXNlciB3aXRoIE5PIGFtYmllbnQgcHJpdmlsZWdlIOKAlCBpdCBlc2NhbGF0ZXMgT05MWSB0aHJvdWdoIHRoZXNlIGV4cGxpY2l0IHJlcGFpciB2ZXJicywgc28gYQojIGxlYWtlZCBvcGVyYXRvciBrZXkncyBibGFzdCByYWRpdXMgaXMgdGhpcyB2ZXJiIHNldCwgbm90IHRoZSBib3ggKGxvY2tlZCBkZWNpc2lvbiDCpzYpLiBEZWVwIHJlcGFpcnMKIyB0aGF0IGdlbnVpbmVseSBuZWVkIHJvb3QgKHBjdCwgZGVlcGVyIHN5c3RlbWN0bCkgcmVtYWluIGF2YWlsYWJsZSB2aWEgYHJvb3RgIGFzIGEgdHVubmVsLWdhdGVkCiMgYnJlYWstZ2xhc3MgYWNjb3VudCAoUGVybWl0Um9vdExvZ2luIHByb2hpYml0LXBhc3N3b3JkIG9uIGZlbGhvbS1zc2hkKSwgYnV0IHRoZSBkYXktdG8tZGF5IGlkZW50aXR5CiMgaXMgZmVsaG9tLW9wLgpDbW5kX0FsaWFzIEZFTEhPTV9PUF9SRVBBSVIgPSBcCiAgL3Vzci9iaW4vbWtkaXIgLXAgL3J1bi9zc2hkLCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIHJlc2V0LWZhaWxlZCB3Zy1xdWlja0B3Zy1mZWxob20sIFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgcmVzdGFydCB3Zy1xdWlja0B3Zy1mZWxob20sIFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgc3RhcnQgZmVsaG9tLWFnZW50LCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIHJlc3RhcnQgZmVsaG9tLWFnZW50LCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIHJlc2V0LWZhaWxlZCBmZWxob20tc3NoZCwgXAogIC91c3IvYmluL3N5c3RlbWN0bCByZXN0YXJ0IGZlbGhvbS1zc2hkLCBcCiAgL3Vzci9zYmluL3BjdCBsaXN0LCBcCiAgL3Vzci9zYmluL3BjdCBzdGFydCBbMC05XSosIFwKICAvdXNyL3NiaW4vcGN0IHN0b3AgWzAtOV0qLCBcCiAgL3Vzci9zYmluL3BjdCB1bmxvY2sgWzAtOV0qCgpmZWxob20tb3AgQUxMPShyb290KSBOT1BBU1NXRDogRkVMSE9NX09QX1JFUEFJUgo=",
   "mode": "0o440",
   "path": "/etc/sudoers.d/felhom-op",
   "policy": "oob",
   "sha256": "e9aa3ef1ef63a10589a50f7978869e8d12dafcfe862b3b38a9319fef02ee24d0",
   "source": "configs/felhom-op.sudoers"
  },
  {
   "check": "sudoers",
   "content_b64": "IyBmZWxob20tYWdlbnQgc3Vkb2VycyBhbGxvd2xpc3Qg4oCUIHRoZSBOQVJST1cgaG9zdC1yb290IHN1cmZhY2UgKHNsaWNlIDUgUGhhc2UgQiwgZG9jIDAzIMKnMy/CpzcpLgojCiMgSW5zdGFsbCBhcyBhIGRyb3AtaW46IC9ldGMvc3Vkb2Vycy5kL2ZlbGhvbS1hZ2VudCAobW9kZSAwNDQwLCByb290OnJvb3QpLCB2YWxpZGF0ZWQgd2l0aAojIGB2aXN1ZG8gLWNmYC4gVGhlIGFnZW50IHJ1bnMgYXMgdGhlIG5vbi1yb290IGBmZWxob20tYWdlbnRgIHNlcnZpY2UgdXNlciBhbmQgc2hlbGxzIG91dCB2aWEKIyBgc3VkbyAtbmAgd2l0aCBGSVhFRCBhcmd1bWVudCB2ZWN0b3JzIChubyBzaGVsbCkuIFRoZSBmaW5lLWdyYWluZWQgdmFsaWRhdGlvbiBpcyBkb25lIElOCiMgdGhlIGFnZW50IEJFRk9SRSBleGVjIChpbnRlcm5hbC9zdG9yYWdlL3ZhbGlkYXRlLmdvKTogVVVJRHMgYWdhaW5zdCBhIHN0cmljdCBoZXggcmVnZXgsCiMgbW91bnQgcGF0aHMgY29uZmluZWQrdHJhdmVyc2FsLWNoZWNrZWQsIFNNQVJUIGRldmljZXMgd2hpdGVsaXN0ZWQgdG8gcmF3IGRpc2tzLCBMVk0gbmFtZXMKIyBjaGFyc2V0LWNoZWNrZWQuIFRoZXNlIHN1ZG9lcnMgd2lsZGNhcmRzIGFyZSB0aGUgQ09BUlNFIGFsbG93bGlzdDsgdGhlIGFnZW50IGlzIHRoZSBmaW5lCiMgZ2F0ZSwgc28gYSB3aWxkY2FyZCBjYW4gbmV2ZXIgYmUgYWJ1c2VkIGJ5IGEgdmFsdWUgdGhlIGFnZW50IGRpZG4ndCBhbHJlYWR5IHZhbGlkYXRlLgojCiMgQmluYXJ5IHBhdGhzIE1VU1QgbWF0Y2ggdGhlIGFnZW50IGNvbmZpZyAocHJpdmlsZWdlZC5zeXN0ZW1jdGwvaW5zdGFsbC9zbWFydGN0bC9sdnMpLiBBZGp1c3QKIyBmb3IgeW91ciBkaXN0cm8gKERlYmlhbi9QVkUgc2hvd24pLiBBIG1pc3NpbmcvZGVjbGluZWQgZW50cnkgZGVncmFkZXMgdGhlIGFnZW50IHdpdGggYQojIHdhcm5pbmcgKFNNQVJU4oaSVU5LTk9XTiwgbW91bnTihpJsb2dnZWQgZXJyb3IpLCBpdCBkb2VzIG5vdCBjcmFzaC4KCkNtbmRfQWxpYXMgRkVMSE9NX01PVU5UID0gXAogIC91c3IvYmluL2luc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgLS0gL3Zhci9saWIvZmVsaG9tLWFnZW50L3VuaXRzLyogL2V0Yy9zeXN0ZW1kL3N5c3RlbS8qLm1vdW50LCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQsIFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgZW5hYmxlIC0tbm93IC0tICoubW91bnQsIFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgZGlzYWJsZSAtLSAqLm1vdW50LCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIHN0b3AgLS0gKi5tb3VudAoKQ21uZF9BbGlhcyBGRUxIT01fRElTSyA9IFwKICAvdXNyL3NiaW4vc21hcnRjdGwgLWEgLWogL2Rldi9zZFthLXpdKiwgXAogIC91c3Ivc2Jpbi9zbWFydGN0bCAtYSAtaiAvZGV2L252bWVbMC05XSpuWzAtOV0qLCBcCiAgL3Vzci9zYmluL3NtYXJ0Y3RsIC1hIC1qIC9kZXYvdmRbYS16XSosIFwKICAvdXNyL3NiaW4vc21hcnRjdGwgLWEgLWogL2Rldi9oZFthLXpdKiwgXAogIC91c3Ivc2Jpbi9sdnMgLS1yZXBvcnRmb3JtYXQganNvbiAtLXVuaXRzIGIgLW8gbHZfbmFtZVwsZGF0YV9wZXJjZW50XCxtZXRhZGF0YV9wZXJjZW50IC0tICosIFwKICAvdXNyL3NiaW4vcHZzIC0tcmVwb3J0Zm9ybWF0IGpzb24gLS1ub2hlYWRpbmdzIC1vIHB2X25hbWUsIFwKICAvdXNyL3NiaW4venBvb2wgc3RhdHVzIC1QCgojIFByb3Zpc2lvbmluZyBiYWNrLWhhbGYgKHNsaWNlIDhBLCBkb2MgMDMgwqc2KTogcG9wdWxhdGUgYSBndWVzdCdzIGJvb3RzdHJhcCBjb25maWcgbW91bnQKIyBob3N0LXNpZGUgKGludGVybmFsL3Byb3Zpc2lvbikuIFRoZXNlIGFyZSBob3N0LXJvb3Qgb3BzIHRoZSBBUEkgdG9rZW4gY2Fubm90IGRvIOKAlCBhIGJpbmQgbW91bnQKIyBpcyByb290QHBhbS1vbmx5LCBhbmQgdGhlIGNob3duIG1hcHMgdGhlIDA2MDAgYm9vdHN0cmFwLmpzb24gdG8gdGhlIHVucHJpdmlsZWdlZC1MWEMgZ3Vlc3Qtcm9vdAojICh1aWQvZ2lkIDEwMDAwMCwgc3Bpa2UgZ290Y2hhIDEpLiBUaGUgaG9zdCBkaXIgaXMgQUdFTlQtT1dORUQgc3RhdGUgdW5kZXIgL3Zhci9saWIvZmVsaG9tLWFnZW50LwojICh0aGUgd2lsZGNhcmQgb25seSBldmVyIG5hbWVzIGEgcGF0aCB0aGUgYWdlbnQgaXRzZWxmIGNyZWF0ZWQpLCBhbmQgdGhlIGJvb3RzdHJhcCBmaWxlIHRoZSBhZ2VudAojIHdyaXRlcyB0aGVyZSBpcyB0aGUgb25seSB0aGluZyB0aGVzZSB0b3VjaC4gJzonIGlzIGVzY2FwZWQgcGVyIHN1ZG9lcnMgZ3JhbW1hci4KQ21uZF9BbGlhcyBGRUxIT01fUFJPVklTSU9OID0gXAogIC91c3IvYmluL2Nob3duIC1SIDEwMDAwMFw6MTAwMDAwIC92YXIvbGliL2ZlbGhvbS1hZ2VudC9ndWVzdHMvKiwgXAogIC91c3Ivc2Jpbi9wY3Qgc2V0IFswLTldKiAtbXBbMC05XSogL3Zhci9saWIvZmVsaG9tLWFnZW50L2d1ZXN0cy8qLCBcCiAgL3Vzci9zYmluL3BjdCBzZXQgWzAtOV0qIC1vbmJvb3QgMQoKIyBEaXNrIGluc3BlY3Rpb24gKyBmb3JtYXQgKHNsaWNlIDhDICsgSW1wbC0xKS4gYmxraWQvbHNibGsgcmVhZCB0aGUgZGV2aWNlJ3MgZGF0YS1iZWFyaW5nIGV2aWRlbmNlCiMgKHRoZSBhZ2VudCBkZWNpZGVzIGRhdGEtYmVhcmluZy1uZXNzIGZyb20gVEhJUywgbmV2ZXIgdGhlIGNhbGxlcidzIGNsYWltKS4gRm9ybWF0IGdvZXMgT05MWSB0aHJvdWdoCiMgZmVsaG9tLW1rZnMtZ3VhcmRlZCAoSW1wbC0xIFBhcnQgQik6IHJhdyBta2ZzLiogaXMgTk8gTE9OR0VSIGFsbG93bGlzdGVkLCBzbyBldmVuIGEgYmFkIGFnZW50IGNhbm5vdAojIG1rZnMgdGhlIE9TIGRpc2sg4oCUIHRoZSB3cmFwcGVyIHJlLWNoZWNrcyB0aGUgY2F0YXN0cm9waGljIGNhc2VzIChzeXN0ZW0gZGlzayAvIExWTSBQViAvIGZvcmVpZ24gbW91bnQpCiMgYXMgcm9vdCBhbmQgcmVmdXNlcywgYW5kIHRoZSBhZ2VudCdzIHVuY2xhaW1lZC1kaXNrIGZpbHRlciAoY2xhaW0uZ28pIGlzIHRoZSBwcmltYXJ5IGd1YXJkIGFib3ZlIGl0LgpDbW5kX0FsaWFzIEZFTEhPTV9GT1JNQVQgPSBcCiAgL3Vzci9zYmluL2Jsa2lkIC1wIC1vIGV4cG9ydCAvZGV2LyosIFwKICAvdXNyL2Jpbi9sc2JsayAtSiAtbyBOQU1FXCxGU1RZUEVcLFBUVFlQRVwsTU9VTlRQT0lOVCAvZGV2LyosIFwKICAvdXNyL2xvY2FsL3NiaW4vZmVsaG9tLW1rZnMtZ3VhcmRlZCAvZGV2LyogKgoKIyBMQU4gc3BsaXQtaG9yaXpvbiByZXNvbHZlciAoaW50ZXJuYWwvbGFucmVzb2x2ZXIpOiB0aGUgYWdlbnQgbWFuYWdlcyBhIGhvc3Qtc2lkZSBkbnNtYXNxIHRoYXQKIyBhbnN3ZXJzICouPGN1c3RvbWVyLWRvbWFpbj4gd2l0aCBlYWNoIGd1ZXN0J3MgbGl2ZSBMQU4gSVAuIGluc3RhbGwgb25seSBldmVyIHdyaXRlcyBmZWxob20tKi5jb25mCiMgZHJvcC1pbnMgKGZyb20gYWdlbnQtd3JpdHRlbiAvdG1wIHRlbXAgZmlsZXMpOyB0aGUgdHdvIGBwY3QgZXhlY2AgcmVhZHMgYXJlIEZJWEVEIGNvbW1hbmQgdmVjdG9ycwojICh0aGUgZ3Vlc3QncyBldGgwIElQdjQgKyB0aGUgY29udHJvbGxlcidzIHB1bGxlZCBjb250cm9sbGVyLnlhbWwgZm9yIHRoZSBkb21haW4pIOKAlCBOT1QgYSBnZW5lcmFsCiMgYHBjdCBleGVjYC4gc3lzdGVtY3RsIGlzIHNjb3BlZCB0byB0aGUgZG5zbWFzcSB1bml0IG9ubHkuIFRoZSBhZ2VudCBuZXZlciBlZGl0cyAvZXRjL3Jlc29sdi5jb25mLgpDbW5kX0FsaWFzIEZFTEhPTV9ETlNNQVNRID0gXAogIC91c3IvYmluL2FwdC1nZXQgaW5zdGFsbCAteSAtcSBkbnNtYXNxLCBcCiAgL3Vzci9iaW4vaW5zdGFsbCAtbSAwNjQ0IC90bXAvZmVsaG9tLXJlc29sdmVyLSouY29uZiAvZXRjL2Ruc21hc3EuZC9mZWxob20tKi5jb25mLCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyBkbnNtYXNxLCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIHJlbG9hZCBkbnNtYXNxLCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIHJlc3RhcnQgZG5zbWFzcSwgXAogIC91c3IvYmluL3JtIC1mIC9ldGMvZG5zbWFzcS5kL2ZlbGhvbS0qLmNvbmYsIFwKICAvdXNyL3NiaW4vcGN0IGV4ZWMgWzAtOV0qIC0tIGlwIC00IC1vIGFkZHIgc2hvdyBkZXYgZXRoMCwgXAogIC91c3Ivc2Jpbi9wY3QgZXhlYyBbMC05XSogLS0gZG9ja2VyIGV4ZWMgZmVsaG9tLWNvbnRyb2xsZXIgY2F0IC9vcHQvZG9ja2VyL2ZlbGhvbS1jb250cm9sbGVyL2NvbnRyb2xsZXIueWFtbAoKIyBHdWVzdCBtb3VudHBvaW50IGxpZmVjeWNsZSAoaW50ZXJtZWRpYXJ5LW1vdW50IHJlLWFyY2hpdGVjdHVyZSArIEMxIG5ldCkuIFRoZSBwcmUtc3RhcnQgc2VsZi1oZWFsIGhvb2sKIyB3cmFwcGVyIGlzIGluc3RhbGxlZCBvbmNlIGludG8gdGhlIFBWRSBzbmlwcGV0cyBkaXIgKGZyb20gYW4gYWdlbnQtd3JpdHRlbiAvdG1wIGZpbGUpIGFuZCByZWdpc3RlcmVkCiMgcGVyLWd1ZXN0OyBkZWNvbW1pc3Npb24vZWplY3QgREVMRVRFIHRoZSBkZWFkIG1vdW50cG9pbnQgc2xvdCBzbyBhIG1pc3NpbmcgYmluZCBzb3VyY2UgY2FuJ3QgYnJpY2sgdGhlCiMgZ3Vlc3QgYXQgbmV4dCBib290ICh0aGUgQjMgQzEgZml4KS4gVGhlIGFnZW50IGZpbmUtdmFsaWRhdGVzIHRoZSB2bWlkIChudW1lcmljKSArIHNsb3QgKG1wWzAtOV0rKSBhbmQKIyB0aGUgc25pcHBldCBwYXRoIGlzIGZpeGVkIOKAlCB0aGUgd2lsZGNhcmRzIGFyZSB0aGUgY29hcnNlIGFsbG93bGlzdC4gVGhlIGluc3RhbGwgU09VUkNFIGlzIGEKIyByYW5kb20tbmFtZWQgYWdlbnQgdGVtcCAob3MuQ3JlYXRlVGVtcCwgYXVkaXQgQjEg4oCUIGEgZml4ZWQgL3RtcCBuYW1lIHdhcyBhIGxvY2FsIFRPQ1RPVSksIGhlbmNlIHRoZQojIGdsb2I7IHRoZSBERVNUSU5BVElPTiBzdGF5cyBwaW5uZWQuIFRoZSBgbWtkaXIgLXBgIGNyZWF0ZXMgdGhlIHNuaXBwZXRzIGRpciBvbiBhIEZSRVNIIGJveCDigJQKIyBgaW5zdGFsbGAgd29uJ3QgY3JlYXRlIHBhcmVudHMsIHNvIHdpdGhvdXQgaXQgdGhlIGhvb2sgaW5zdGFsbCBmYWlsZWQgc2lsZW50bHkgb24gRGF5LTAgYm94ZXMKIyAoQjIsIERSSUxMLWRheTAtY2xlYW5yb29tLTIwMjYtMDctMDM7IGZpeGVkIGFnZW50IHYwLjYzLjApLgpDbW5kX0FsaWFzIEZFTEhPTV9HVUVTVEhPT0sgPSBcCiAgL3Vzci9iaW4vbWtkaXIgLXAgL3Zhci9saWIvdnovc25pcHBldHMsIFwKICAvdXNyL2Jpbi9pbnN0YWxsIC1tIDA3NTUgLS0gL3RtcC9mZWxob20tZ3Vlc3QtaG9vay0qLnNoIC92YXIvbGliL3Z6L3NuaXBwZXRzL2ZlbGhvbS1ndWVzdC1ob29rLnNoLCBcCiAgL3Vzci9zYmluL3BjdCBzZXQgWzAtOV0qIC0taG9va3NjcmlwdCBsb2NhbFw6c25pcHBldHMvZmVsaG9tLWd1ZXN0LWhvb2suc2gsIFwKICAvdXNyL3NiaW4vcGN0IHNldCBbMC05XSogLS1kZWxldGUgbXBbMC05XSosIFwKICAvdXNyL3NiaW4vcGN0IHJlYm9vdCBbMC05XSoKCiMgSW50ZXJtZWRpYXJ5IG1vdW50IG1vZGVsICh0aGUgZHJpdmUgaG90LXN3YXAgcmUtYXJjaGl0ZWN0dXJlKS4gVGhlIGFnZW50IGtlZXBzIGEgU0hBUkVEIGhvc3QgcGFyZW50CiMgL21udC9mZWxob20tZHJpdmVzIChzZWxmLWJpbmQgKyBtYWtlLXNoYXJlZCArIGEgYm9vdC1wZXJzaXN0ZW5jZSBzeXN0ZW1kIHVuaXQpIGFuZCBiaW5kcy91bmJpbmRzIGVhY2gKIyBkcml2ZSdzIGZlbGhvbS1kYXRhIG5hbWVzcGFjZSBVTkRFUk5FQVRIIGl0IHNvIHRoZSBjaGFuZ2UgcHJvcGFnYXRlcyBpbnRvIHRoZSBydW5uaW5nIGd1ZXN0IGxpdmUgKG5vCiMgcGN0LCBubyByZWJvb3QpLiBUaGUgYWdlbnQgZmluZS12YWxpZGF0ZXMgdGhlIGRyaXZlIG5hbWUgKyBjb25maW5lcyBwYXRocyBiZWZvcmUgYW55IGV4ZWM7IHRoZSB0cmFpbGluZwojIGAqYCAobWF0Y2hpbmcgdGhlIGNvbW1hLWxhZGVuIG1wIHNwZWMpIG1pcnJvcnMgdGhlIGV4aXN0aW5nIEZFTEhPTV9QUk9WSVNJT04gcGF0dGVybi4KIyBgbHhjLWluZm8gLW4gPHZtaWQ+IC1wIC1IYCByZXNvbHZlcyB0aGUgZ3Vlc3QgaW5pdCBQSUQgZm9yIHRoZSBHdWVzdFNlZXNNb3VudCAvIGJvdW5kX3VuZGVyX3BhcmVudCBjaGVjawojIChhIFJFQUQg4oCUIHRoZSBkcml2ZS1nYXRlJ3MgImlzIHRoZSBkcml2ZSBsaXZlIGluIHRoZSBndWVzdD8iIHNpZ25hbCk7IFdJVEhPVVQgaXQgdGhlIG5vbi1yb290IGFnZW50IGdldHMKIyBhbiBlbXB0eSBQSUQgYW5kIHJlcG9ydHMgZXZlcnkgZHJpdmUgYWJzZW50IChtdWx0aS1kcml2ZSBmbGFwcGluZywgYXVkaXQgMjAyNi0wNi0yOSkuIGBtYWtlLXByaXZhdGVgCiMgaXNvbGF0ZXMgdGhlIHBhcmVudCdzIHBlZXIgZ3JvdXAgb24gRklSU1Qgc2V0dXAgb25seSAoRW5zdXJlU2hhcmVkUGFyZW50IGd1YXJkcyBvbiBtb3VudHBvaW50LCBzbyBpdAojIG5ldmVyIHJlLWNodXJucyBhIGxpdmUgcGFyZW50KTsgd2l0aG91dCBpdCB0aGUgcGFyZW50IHN0YXlzIGluIHJvb3QncyBncm91cCBhbmQgc3VibW91bnRzIGRvdWJsZS4KQ21uZF9BbGlhcyBGRUxIT01fSU5URVJNRURJQVJZID0gXAogIC91c3IvYmluL21rZGlyIC1wIC9tbnQvZmVsaG9tLWRyaXZlcywgXAogIC91c3IvYmluL21rZGlyIC1wIC9tbnQvZmVsaG9tLWRyaXZlcy8qLCBcCiAgL3Vzci9iaW4vbWtkaXIgLXAgL21udC8qL2ZlbGhvbS1kYXRhLCBcCiAgL3Vzci9iaW4vY2hvd24gMTAwMDAwXDoxMDAwMDAgL21udC8qL2ZlbGhvbS1kYXRhLCBcCiAgL3Vzci9iaW4vbW91bnQgLS1iaW5kIC9tbnQvZmVsaG9tLWRyaXZlcyAvbW50L2ZlbGhvbS1kcml2ZXMsIFwKICAvdXNyL2Jpbi9tb3VudCAtLW1ha2Utc2hhcmVkIC9tbnQvZmVsaG9tLWRyaXZlcywgXAogIC91c3IvYmluL21vdW50IC0tbWFrZS1wcml2YXRlIC9tbnQvZmVsaG9tLWRyaXZlcywgXAogIC91c3IvYmluL21vdW50IC0tYmluZCAvbW50LyovZmVsaG9tLWRhdGEgL21udC9mZWxob20tZHJpdmVzLyosIFwKICAvdXNyL2Jpbi91bW91bnQgL21udC9mZWxob20tZHJpdmVzLyosIFwKICAvdXNyL2Jpbi9pbnN0YWxsIC1tIDA3NTUgLS0gL3RtcC9mZWxob20tc2hhcmVkLXBhcmVudC0qLnNoIC91c3IvbG9jYWwvc2Jpbi9mZWxob20tc2hhcmVkLXBhcmVudC5zaCwgXAogIC91c3IvYmluL2luc3RhbGwgLW0gMDY0NCAtLSAvdG1wL2ZlbGhvbS1zaGFyZWQtcGFyZW50LSouc2VydmljZSAvZXRjL3N5c3RlbWQvc3lzdGVtL2ZlbGhvbS1zaGFyZWQtcGFyZW50LnNlcnZpY2UsIFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgZW5hYmxlIGZlbGhvbS1zaGFyZWQtcGFyZW50LnNlcnZpY2UsIFwKICAvdXNyL2Jpbi9seGMtaW5mbyAtbiBbMC05XSogLXAgLUgsIFwKICAvdXNyL3NiaW4vcGN0IHNldCBbMC05XSogLW1wOCAvbW50L2ZlbGhvbS1kcml2ZXMqCgojIENvbnRyb2xsZXItc3dhcCAvIG1hbmFnZWQgYXV0by11cGRhdGUgKE9wdGlvbiBBLCBub24tcm9vdCkuIFRoZSBhZ2VudCBvd25zIHRoZSBpbi1ndWVzdCBjb250cm9sbGVyCiMgaW1hZ2UgU1dBUCAoaXQgc3Vydml2ZXMgdGhlIGNvbnRyb2xsZXIgYmVpbmcga2lsbGVkIG1pZC1zd2FwKTogcmVhZCB0aGUgYmFrZWQgaW1hZ2UgcmVmLCBjaGVjayB0aGUKIyBwcmUtcHVsbGVkIHRhcmdldCBpcyBwcmVzZW50LCByZXdyaXRlIC9ldGMvZmVsaG9tLWNvbnRyb2xsZXItaW1hZ2UsIHJlc3RhcnQgdGhlIGJvb3RzdHJhcCB1bml0LAojIGhlYWx0aC1jaGVjaywgcm9sbCBiYWNrIG9uIGZhaWx1cmUuIEVhY2ggZ3JhbnQgaXMgYm91bmRlZCDigJQgTk8gZ2VuZXJhbCBgcGN0IGV4ZWNgIGFuZCBOTyBgYmFzaCAtY2A6CiMgICBjYXQgPGZpeGVkIGZpbGU+ICAgICAgICAgICAg4oCUIHJlYWQgdGhlIGN1cnJlbnQgaW1hZ2UgcmVmIChyZWFkLW9ubHkpCiMgICBkb2NrZXIgaW1hZ2UgaW5zcGVjdCAqICAgICAg4oCUIGlzIHRoZSBwcmUtcHVsbGVkIHRhcmdldCBwcmVzZW50PyAocmVhZC1vbmx5KQojICAgZG9ja2VyIGluc3BlY3QgLWYgKiAgICAgICAgIOKAlCBjb250YWluZXIgcnVubmluZy9oZWFsdGgvaW1hZ2UgKHJlYWQtb25seTsgYCpgIHNwYW5zIHRoZSAtZiB0ZW1wbGF0ZQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250YWluZXIgYWNyb3NzIHNwYWNlcywgc3Bpa2UtY29uZmlybWVkKQojICAgc3lzdGVtY3RsIHJlc3RhcnQgPGZpeGVkIHVuaXQ+IOKAlCByZS1ydW4gdGhlIGdvbGRlbidzIGJvb3RzdHJhcCAodGhlIG9ubHkgc3RhdGUgY2hhbmdlKQojICAgdGVlIDxGSVhFRCBpbWFnZSBmaWxlPiAgICAgIOKAlCBXUklURSB0aGUgcmVmOyBjb250ZW50IGlzIGZlZCBvbiBTVERJTiAobm8gc2hlbGwsIG5vIGludGVycG9sYXRpb24pLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFnZW50IHN0cmljdC12YWxpZGF0ZXMgdGhlIHJlZiAoY29udHJvbGxlckltYWdlUmUpIGJlZm9yZSB0aGUgd3JpdGUuCiMgVmFsaWRhdGVkIEdPOiBmZWxob20uZXUvZG9jdW1lbnRhdGlvbi9hdWRpdHMvU1BJS0UtY29udHJvbGxlcnN3YXAtbmFycm93LWdyYW50cy0yMDI2LTA2LTI5Lm1kLgpDbW5kX0FsaWFzIEZFTEhPTV9DT05UUk9MTEVSU1dBUCA9IFwKICAvdXNyL3NiaW4vcGN0IGV4ZWMgWzAtOV0qIC0tIGNhdCAvZXRjL2ZlbGhvbS1jb250cm9sbGVyLWltYWdlLCBcCiAgL3Vzci9zYmluL3BjdCBleGVjIFswLTldKiAtLSBkb2NrZXIgaW1hZ2UgaW5zcGVjdCAqLCBcCiAgL3Vzci9zYmluL3BjdCBleGVjIFswLTldKiAtLSBkb2NrZXIgaW5zcGVjdCAtZiAqLCBcCiAgL3Vzci9zYmluL3BjdCBleGVjIFswLTldKiAtLSBzeXN0ZW1jdGwgcmVzdGFydCBmZWxob20tY29udHJvbGxlci1ib290c3RyYXAuc2VydmljZSwgXAogIC91c3Ivc2Jpbi9wY3QgZXhlYyBbMC05XSogLS0gdGVlIC9ldGMvZmVsaG9tLWNvbnRyb2xsZXItaW1hZ2UKCiMgU3RhbGUtbG9jayByZWNvdmVyeSAoRjItYiwgdjAuNDkuMCkuIEEgaG9zdCByZWJvb3QgRFVSSU5HIGEgdnpkdW1wIGJhY2t1cCBsZWF2ZXMgdGhlIGd1ZXN0IHdpdGggYQojIGBzbmFwc2hvdC1kZWxldGVgL2BiYWNrdXBgIGxvY2sgKyBgb25ib290OjFgIHRoZW4gY2FuJ3Qgc3RhcnQgaXQg4oaSIHRoZSBjdXN0b21lciBib3ggc3RheXMgRE9XTi4gVGhlCiMgYWdlbnQgY2xlYXJzIHRoZSBTVEFMRSBsb2NrIGF0IHN0YXJ0dXAgKG9ubHkgd2hlbiBubyB2emR1bXAgaXMgaW4tZmxpZ2h0KS4gYHBjdCB1bmxvY2tgIGlzIHRoZSBvbmUgb3AKIyB3aXRoIG5vIEFQSSBlcXVpdmFsZW50IChzbmFwc2hvdC1kZWxldGUgKyBzdGFydCBnbyB0aHJvdWdoIHRoZSBBUEkgdG9rZW4pOyB0aGUgYWdlbnQgZmluZS12YWxpZGF0ZXMgdGhlCiMgdm1pZCAobnVtZXJpYykgYmVmb3JlIGV4ZWMg4oCUIHRoZSBgWzAtOV0qYCBpcyB0aGUgY29hcnNlIGFsbG93bGlzdC4KQ21uZF9BbGlhcyBGRUxIT01fU1RBTEVMT0NLID0gXAogIC91c3Ivc2Jpbi9wY3QgdW5sb2NrIFswLTldKgoKIyBSZXN0b3JlLXRlc3Qgc2NyYXRjaCB0ZWFyZG93biAoRi1MRUFLLCBDYW1wYWlnbiA4LCB2MC4xMTAuMCkuIEEgcmVzdG9yZS10ZXN0IHdob3NlIHJlc3RvcmUgRkFJTFMKIyBsZWF2ZXMgYSBzY3JhdGNoIGd1ZXN0IHRoZSBBUEkgdG9rZW4gQ0FOTk9UIGRlc3Ryb3k6IGBGZWxob21BZ2VudEd1ZXN0YCBpcyBncmFudGVkIGF0IC9wb29sL2ZlbGhvbSBhbmQKIyBhIGd1ZXN0IGpvaW5zIHRoYXQgcG9vbCBvbmx5IHdoZW4gaXRzIHJlc3RvcmUgQ09NUExFVEVTLCBzbyBhIGZhaWxlZCByZXN0b3JlIGxlYXZlcyBhIHBvb2wtbGVzcyBndWVzdAojIG91dCBvZiByZWFjaCAoNDAzIFZNLkFsbG9jYXRlKSBob2xkaW5nIGl0cyBkaXNrcyB1bnRpbCBhIGh1bWFuIHJlbW92ZXMgaXQuCiMKIyBUV08gQVBJLVNJREUgRklYRVMgV0VSRSBUUklFRCBBTkQgQk9USCBSRUZVVEVEIExJVkUgb24gMjAyNi0wNy0yOCwgd2hpY2ggaXMgd2h5IHRoaXMgZ3JhbnQgZXhpc3RzOgojICAgMS4gQWRvcHQgdGhlIHN0cmFuZGVkIGd1ZXN0IGludG8gdGhlIHBvb2wsIHRoZW4gcmV0cnkuIGBQVVQgL3Bvb2xzL3twb29sfWAgQUxTTyByZXF1aXJlcwojICAgICAgVk0uQWxsb2NhdGUgb24gdGhlIFZNIGJlaW5nIGFkZGVkIOKAlCBwb29sIG1lbWJlcnNoaXAgY2Fubm90IGJvb3RzdHJhcCBpdHMgb3duIGF1dGhvcml0eS4KIyAgIDIuIEdyYW50IEZlbGhvbUFnZW50R3Vlc3QgcGVyLXBhdGggYXQgL3Ztcy85OTAwMDAuLjk5MDAwOS4gRHVyYWJsZSBmb3IgZXhhY3RseSBvbmUgdXNlIHBlciBzbG90OgojICAgICAgUFZFJ3Mgb3duIGRlc3Ryb3kgcGF0aCBjYWxscyBgQWNjZXNzQ29udHJvbDo6cmVtb3ZlX3ZtX2FjY2Vzcygkdm1pZClgIChMWEMucG06OTA2KSwgd2hpY2ggREVMRVRFUwojICAgICAgZXZlcnkgQUNMIGF0IC92bXMvPHZtaWQ+IChBY2Nlc3NDb250cm9sLnBtOjE4OTgpLiBUaGUgZ3JhbnQgaXMgY29uc3VtZWQgYnkgdGhlIG9wZXJhdGlvbiBpdAojICAgICAgYXV0aG9yaXNlcywgc28gYWZ0ZXIgdGVuIHRlYXJkb3ducyB0aGUgYmFuZCBpcyB1bmdyYW50ZWQgYW5kIHRoZSBkZWZlY3QgcmV0dXJucy4KIwojIFdIWSBUSElTIElTIFRIRSBUSUdIVEVTVCBBVkFJTEFCTEUgRkVOQ0UsIG5vdCBhIHdpZGVuaW5nOiBzdWRvIG1hdGNoZXMgdGhlIHZtaWQgTElURVJBTExZLCBzbwojIGA5OTAwMFswLTldYCBpcyBleGFjdGx5IHRoZSB0ZW4tc2xvdCBzY3JhdGNoIGJhbmQgdGhlIHJlc3RvcmUtdGVzdCBwaWNrcyBmcm9tIOKAlCBub3RoaW5nIGVsc2UuIFRoZXJlIGlzCiMgbm8gYFswLTldKmAgY29hcnNlIGFsbG93bGlzdCBoZXJlIG9uIHB1cnBvc2U6IHVubGlrZSBgcGN0IHVubG9ja2AsIHRoaXMgb3AgREVTVFJPWVMsIHNvIHRoZSBiYW5kIG11c3QKIyBiZSBpbiB0aGUgcG9saWN5IGFuZCBub3QgbWVyZWx5IHZhbGlkYXRlZCBpbiB0aGUgYWdlbnQuIEV2ZW4gYSBjb21wcm9taXNlZCBhZ2VudCBhc2tpbmcgZm9yCiMgYHBjdCBkZXN0cm95IDkyMDFgIGlzIHJlZnVzZWQgYnkgc3VkbyBpdHNlbGYuIFVubGlrZSBhbiBBQ0wsIGEgc3Vkb2VycyBydWxlIGlzIG5vdCBjb25zdW1lZCBieSB1c2UuCiMgVGhlIGFnZW50IHJlLWNoZWNrcyB0aGUgYmFuZCBpbiBjb2RlIGJlZm9yZSBleGVjIChkZWZlbmNlIGluIGRlcHRoKTsgdGhpcyBpcyB0aGUgb3V0ZXIgZmVuY2UuCkNtbmRfQWxpYXMgRkVMSE9NX1NDUkFUQ0hfVEVBUkRPV04gPSBcCiAgL3Vzci9zYmluL3BjdCBkZXN0cm95IDk5MDAwWzAtOV0gLS1wdXJnZQoKIyBOZXR3b3JrIHN0b3JhZ2UgLyBOQVMgKFBhcnQgQTEsIFNQSUtFLW5hcy1zdG9yYWdlLTIwMjYtMDYtMjkpLiBUaGUgYWdlbnQgbW91bnRzIGEgY3VzdG9tZXIgTkFTIHNoYXJlCiMgSE9TVC1TSURFIHVuZGVyIC9tbnQvZmVsaG9tLWRyaXZlcy88bmFtZT4gdmlhIGEgc3lzdGVtZCAuYXV0b21vdW50ICgrIC5tb3VudCkgcGFpciBzbyBpdCBwcm9wYWdhdGVzCiMgaW50byB0aGUgZ3Vlc3QgdGhyb3VnaCB0aGUgZXhpc3Rpbmcgc2hhcmVkIGJpbmQgKGFuIHVucHJpdmlsZWdlZCBMWEMgY2Fubm90IG1vdW50IE5GUy9DSUZTIGl0c2VsZikuCiMgQSBOQVMgaXMgTk9UIGEgZHJpdmUg4oCUIG5vIGR1cmFibGUtaWQsIG5vIFNNQVJULCBubyB3aXBlOyB0aGVzZSBncmFudHMgb25seSBpbnN0YWxsL2VuYWJsZS9yZW1vdmUgdGhlCiMgdW5pdCBwYWlyLiBUaGUgYWdlbnQgZmluZS12YWxpZGF0ZXMgZXZlcnkgdmFsdWUgKHNoYXJlIG5hbWUsIHNlcnZlciwgZXhwb3J0LCB1aWQvZ2lkLCBjcmVkcyBwYXRoKSBiZWZvcmUKIyBhbnkgdW5pdCBpcyByZW5kZXJlZCAoaW50ZXJuYWwvc3RvcmFnZS9uZXRtb3VudC5nbyBWYWxpZGF0ZU5ldHdvcmtNb3VudFNwZWMpOyB0aGUgdHJhaWxpbmcgZ2xvYnMgYXJlIHRoZQojIENPQVJTRSBhbGxvd2xpc3QuIFRoZSBgLm1vdW50YCBpbnN0YWxsL2VuYWJsZS9kaXNhYmxlL3N0b3AgcmV1c2UgRkVMSE9NX01PVU5UOyB0aGlzIGFsaWFzIGFkZHMgdGhlCiMgYC5hdXRvbW91bnRgIHZhcmlhbnRzICsgdGhlIHVuaXQtZmlsZSByZW1vdmFsLiBUaGUgdW5pdCBGSUxFIG5hbWUgaXMgdGhlIHN5c3RlbWQtZXNjYXBlZCBtb3VudHBvaW50LAojIHdoaWNoIGFsd2F5cyBiZWdpbnMgYG1udC1mZWxob21gICh0aGUgbW91bnRwb2ludCBpcyAvbW50L2ZlbGhvbS1kcml2ZXMvPG5hbWU+KSwgc28gdGhlIHJtIGdsb2IgaXMgc2NvcGVkCiMgdG8gZmVsaG9tIG1vdW50IHVuaXRzIG9ubHkuIG1rZGlyIG9mIHRoZSBtb3VudHBvaW50IHJldXNlcyBGRUxIT01fSU5URVJNRURJQVJZJ3MgL21udC9mZWxob20tZHJpdmVzLyouCiMgQ0FNUEFJR04tMyBhZGRpdGlvbnMgKGxvdWQsIHBlciB0aGUgbm8td2lkZW5pbmcgcnVsZSk6CiMgIC0gYHN5c3RlbWN0bCByZXNldC1mYWlsZWQgLS0gbW50LWZlbGhvbSpgOiBGMTAgKENSSVRJQ0FMKSDigJQgYSBOQVMgYXV0b21vdW50IHRoYXQgaGl0CiMgICAgbW91bnQtc3RhcnQtbGltaXQtaGl0IGR1cmluZyBhbiBvdXRhZ2Ugd2FzIHJlLWFybWFibGUgYnkgTk8gcGxhdGZvcm0gcGF0aDsgdGhlIHJlYXNzZXJ0IG5vdwojICAgIHJlc2V0LWZhaWxlZCdzIHRoZSBzdHVjayB1bml0IGJlZm9yZSBgZW5hYmxlIC0tbm93YCAod2hpY2ggdGhlIHN0YXJ0LWxpbWl0IG90aGVyd2lzZSByZWZ1c2VzKSwKIyAgICBhbmQgUmVtb3ZlTmV0d29ya01vdW50IGNsZWFycyBmYWlsZWQtc3RhdGUgcmVzaWR1ZSAoRjIpLiBTY29wZWQgdG8gZmVsaG9tIG1vdW50IHVuaXRzICh0aGUgdW5pdAojICAgIG5hbWUgaXMgdGhlIHN5c3RlbWQtZXNjYXBlZCBtb3VudHBvaW50LCBhbHdheXMgYmVnaW5uaW5nIGBtbnQtZmVsaG9tYCkuIHJlc2V0LWZhaWxlZCBvbmx5IGNsZWFycwojICAgIGEgdW5pdCdzIGZhaWxlZCBsYXRjaCDigJQgaXQgY2Fubm90IHN0YXJ0L3N0b3AvYWx0ZXIgYW55dGhpbmcuCiMgIC0gYHJtZGlyIC9tbnQvZmVsaG9tLWRyaXZlcy8qYDogRjEg4oCUIHJlbW92ZSB0aGUgbm93LWVtcHR5IG1vdW50cG9pbnQgZGlyIGEgcmVtb3ZlZCBzaGFyZSBsZWF2ZXMKIyAgICBiZWhpbmQgKHRoZSBjYW1wYWlnbiBhY2N1bXVsYXRlZCAxMCBzdHViLXNoYXBlZCBsZWZ0b3ZlcnMpLiBybWRpciBPTkxZIChuZXZlciBybSAtcmYpOiBpdCByZWZ1c2VzCiMgICAgYSBub24tZW1wdHkgZGlyLCBzbyB1bmV4cGVjdGVkIGRhdGEgaXMgcHJlc2VydmVkLCBub3QgZGVzdHJveWVkIOKAlCBhIGZhaWwtc2FmZSBncmFudC4KQ21uZF9BbGlhcyBGRUxIT01fTkVUTU9VTlQgPSBcCiAgL3Vzci9iaW4vaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDY0NCAtLSAvdmFyL2xpYi9mZWxob20tYWdlbnQvdW5pdHMvKiAvZXRjL3N5c3RlbWQvc3lzdGVtLyouYXV0b21vdW50LCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyAtLSAqLmF1dG9tb3VudCwgXAogIC91c3IvYmluL3N5c3RlbWN0bCBkaXNhYmxlIC0tICouYXV0b21vdW50LCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIHN0b3AgLS0gKi5hdXRvbW91bnQsIFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgcmVzZXQtZmFpbGVkIC0tIG1udC1mZWxob20qLCBcCiAgL3Vzci9iaW4vcm1kaXIgL21udC9mZWxob20tZHJpdmVzLyosIFwKICAvdXNyL2Jpbi9ybSAtZiAvZXRjL3N5c3RlbWQvc3lzdGVtL21udC1mZWxob20qCgojIE9mZnNpdGUgV0cgdHVubmVsIChTMywgZG9jIDA2IMKnMy4zKS4gVGhlIGFnZW50IG1hbmFnZXMgd2ctcXVpY2tAd2ctZmVsaG9tIGFzIGFuIGFnZW50LW1hbmFnZWQKIyBob3N0IHNlcnZpY2UgKHRoZSBkbnNtYXNxL2xhbnJlc29sdmVyIHNoYXBlKTogY29uZiBzdGFnZWQgaW4gdGhlIGFnZW50LW93bmVkIFN0YXRlRGlyIChuZXZlcgojIC90bXApLCBpbnN0YWxsZWQgMDYwMCB0byB0aGUgRklYRUQgZGVzdGluYXRpb24sIHVuaXQgZW5hYmxlL3Jlc3RhcnQvZGlzYWJsZS4gVGhlIE9OTFkgd2cgcmVhZAojIGlzIGBsYXRlc3QtaGFuZHNoYWtlc2Ag4oCUIGB3ZyBzaG93IDxpZj4gZHVtcGAgaXMgRk9SQklEREVOIGV2ZXJ5d2hlcmUgKGl0cyBpbnRlcmZhY2UgbGluZQojIGNhcnJpZXMgdGhlIFBSSVZBVEUgS0VZOyB0aGUgUzEgc2Vzc2lvbi1sb2cgaW5jaWRlbnQpLiBCb3RoIGluc3RhbGwgcGF0aHMgYXJlIEZJWEVEIChubyBnbG9iKToKIyB0aGUgYWdlbnQgaGFzIGV4YWN0bHkgb25lIHR1bm5lbCBjb25mIHRvIG1hbmFnZS4KQ21uZF9BbGlhcyBGRUxIT01fV0cgPSBcCiAgL3Vzci9iaW4vYXB0LWdldCBpbnN0YWxsIC15IC1xIHdpcmVndWFyZC10b29scywgXAogIC91c3IvYmluL2luc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2MDAgLS0gL3Zhci9saWIvZmVsaG9tLWFnZW50L3dnL3dnLWZlbGhvbS5jb25mIC9ldGMvd2lyZWd1YXJkL3dnLWZlbGhvbS5jb25mLCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyB3Zy1xdWlja0B3Zy1mZWxob20sIFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgcmVzdGFydCB3Zy1xdWlja0B3Zy1mZWxob20sIFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgZGlzYWJsZSAtLW5vdyB3Zy1xdWlja0B3Zy1mZWxob20sIFwKICAvdXNyL2Jpbi93ZyBzaG93IHdnLWZlbGhvbSBsYXRlc3QtaGFuZHNoYWtlcwoKIyBBZ2VudCBzZWxmLXVwZGF0ZSAoVEFTSyBEMSwgU1BJS0UtYWdlbnQtc2VsZnVwZGF0ZS0yMDI2LTA3LTA1KS4gVGhlIGFnZW50IGRvd25sb2FkcyB0aGUKIyBvcGVyYXRvci1TSUdORUQgYmluYXJ5IChzaGEyNTYgcGlubmVkIGluIHRoZSBzaWduZWQgb3Ag4oCUIG5laXRoZXIgaHViIG5vciBHaXRlYSBjb21wcm9taXNlIGNhbgojIHN1YnN0aXR1dGUgaXQpLCB2ZXJpZmllcyB0aGUgc2hhIGluLXByb2Nlc3MsIHRoZW4gaGFuZHMgb2ZmIHRvIHRoZSBndWFyZGVkIHdyYXBwZXIsIHdoaWNoCiMgUkUtdmVyaWZpZXMgdGhlIHNoYSBhcyByb290LCBjb25maW5lcyB0aGUgc3RhZ2VkIHBhdGggdG8gL3Zhci9saWIvZmVsaG9tLWFnZW50L3NlbGZ1cGRhdGUvLAojIHBlcmZvcm1zIHRoZSBBL0IgZmxpcCAoYXRvbWljIHNhbWUtZnMgcmVuYW1lLCAucHJldiByZXRhaW5lZCkgYW5kIHNjaGVkdWxlcyBhIGRldGFjaGVkIHJlc3RhcnQuCiMgVGhlIGFwcGx5IGFyZ3MgYXJlIGEgQ09BUlNFIGdsb2IgKHNwaWtlIFM0Yjogc3Vkb2VycyBmbm1hdGNoIG1ha2VzIGEgW2EtZjAtOV0qIHNoYSBwYXR0ZXJuCiMgZmlyc3QtY2hhci1vbmx5IGFueXdheSkg4oCUIHRoZSB3cmFwcGVyJ3Mgb3duIHNoYSByZS12ZXJpZnkgKyBwYXRoIGNvbmZpbmVtZW50IGlzIHRoZSByZWFsIGdhdGUuCiMgYHJvbGxiYWNrYCBpcyBub3JtYWxseSBydW4gYnkgZmVsaG9tLWFnZW50LXJvbGxiYWNrLnNlcnZpY2UgKHJvb3QsIE9uRmFpbHVyZT0pLCBub3QgdmlhIHN1ZG87CiMgZ3JhbnRpbmcgaXQgaGVyZSBrZWVwcyB0aGUgdmVyYiBwcm9iZS1hYmxlIChjYXBhYmlsaXR5IHNlbGYtY2hlY2spIGFuZCBvcGVyYXRvci1pbnZva2FibGUuCkNtbmRfQWxpYXMgRkVMSE9NX1NFTEZVUERBVEUgPSBcCiAgL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1zZWxmdXBkYXRlLWd1YXJkZWQgYXBwbHkgL3Zhci9saWIvZmVsaG9tLWFnZW50L3NlbGZ1cGRhdGUvKiAqLCBcCiAgL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1zZWxmdXBkYXRlLWd1YXJkZWQgY29tbWl0LCBcCiAgL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1zZWxmdXBkYXRlLWd1YXJkZWQgcm9sbGJhY2sKCiMgRGVkaWNhdGVkIE9PQiBzc2hkIChUQVNLIEgxKS4gVGhlIGFnZW50IG1hbmFnZXMgZmVsaG9tLXNzaGQgbGlrZSB3Zy1mZWxob20vZG5zbWFzcTogaXQgUkVOREVSUyB0aGUKIyBjb25maWcgKFBvcnQgZnJvbSBpdHMgY2xhaW0pICsgdGhlIG9wZXJhdG9yJ3MgYXV0aG9yaXplZF9rZXlzLCB2YWxpZGF0ZXMgd2l0aCBgc3NoZCAtdGAsIGFuZCByZWxvYWRzCiMgKG5ldmVyIHJlc3RhcnQtb24tY2hhbmdlIFtTRi0yXSkuIEJvdGggaW5zdGFsbCBTT1VSQ0VTIGFyZSB0aGUgYWdlbnQtb3duZWQgc3RhZ2VkIGZpbGVzIHVuZGVyCiMgU3RhdGVEaXI7IGJvdGggREVTVElOQVRJT05TIGFyZSBGSVhFRC4gYHNzaGQgLXQvLVRgIGFyZSB0aGUgdmFsaWRhdGUvZGlzY292ZXIgcmVhZHMuIFRoZQojIHN5c3RlbWN0bCB2ZXJicyBhcmUgU0NPUEVEIHRvIGZlbGhvbS1zc2hkIG9ubHkuIHJlc2V0LWZhaWxlZCBwcmVjZWRlcyBhIGRlbGliZXJhdGUgcmVzdGFydCBbU0YtNV0uCiMgTk9USElORyBoZXJlIGNhbiB0b3VjaCB0aGUgc3RvY2sgc3NoZCwgOjIyLCBvciAvZXRjL3NzaC4KQ21uZF9BbGlhcyBGRUxIT01fU1NIRCA9IFwKICAvdXNyL2Jpbi9pbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IC0tIC92YXIvbGliL2ZlbGhvbS1hZ2VudC9mZWxob20tc3NoZC9zc2hkX2NvbmZpZyAvZXRjL2ZlbGhvbS1zc2hkL3NzaGRfY29uZmlnLCBcCiAgL3Vzci9iaW4vaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gMDY0NCAtLSAvdmFyL2xpYi9mZWxob20tYWdlbnQvZmVsaG9tLXNzaGQvYXV0aG9yaXplZF9rZXlzLmZlbGhvbS1vcCAvZXRjL2ZlbGhvbS1zc2hkL2F1dGhvcml6ZWRfa2V5cy9mZWxob20tb3AsIFwKICAvdXNyL3NiaW4vc3NoZCAtdCAtZiAvdmFyL2xpYi9mZWxob20tYWdlbnQvZmVsaG9tLXNzaGQvc3NoZF9jb25maWcsIFwKICAvdXNyL3NiaW4vc3NoZCAtdCAtZiAvZXRjL2ZlbGhvbS1zc2hkL3NzaGRfY29uZmlnLCBcCiAgL3Vzci9zYmluL3NzaGQgLVQgLWYgL2V0Yy9mZWxob20tc3NoZC9zc2hkX2NvbmZpZywgXAogIC91c3IvYmluL3N5c3RlbWN0bCBlbmFibGUgLS1ub3cgZmVsaG9tLXNzaGQsIFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgcmVsb2FkIGZlbGhvbS1zc2hkLCBcCiAgL3Vzci9iaW4vc3lzdGVtY3RsIHJlc3RhcnQgZmVsaG9tLXNzaGQsIFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgcmVzZXQtZmFpbGVkIGZlbGhvbS1zc2hkLCBcCiAgL3Vzci9iaW4vd2cgc2hvdyB3Zy1mZWxob20gbGF0ZXN0LWhhbmRzaGFrZXMKCiMgUEJTIERSIHRpZXIgYXBwbHkgKHNsaWNlIDIsIFNQSUtFLXBicy10aWVyLXByb3Zpc2lvbmluZy0yMDI2LTA3LTEwIMKnMmIpLiBTdG9yYWdlLWVudHJ5CiMgbGlmZWN5Y2xlIGlzIC9zdG9yYWdlLVJPT1QtZ2F0ZWQgaW4gdGhlIFBWRSBBUEkgKHNwaWtlIFByb2JlIDE6IGNyZWF0ZS9tb2RpZnkvZGVsZXRlIGFsbCBjaGVjawojIERhdGFzdG9yZS5BbGxvY2F0ZSBvbiAvc3RvcmFnZSksIHNvIHRoZSBhZ2VudCB0b2tlbiBjYW5ub3QgZG8gaXQg4oCUIHRoaXMgd3JhcHBlciBpcyB0aGUgcGlubmVkCiMgdmVjdG9yLiBUSEUgU0VULU9OTFkgTEFXOiB0aGUgd3JhcHBlciBjb250YWlucyBOTyBkZWxldGlvbiBwYXRoIChlbnRyeSBkZWxldGlvbiBkZXN0cm95cyB0aGUKIyBjbGllbnQgZW5jcnlwdGlvbiBrZXkgPSB1bi1kZWNyeXB0YWJsZSBiYWNrdXBzKTsgdmVyYnMgYXJlIGNyZWF0ZS9yZWNvbmNpbGUvZ3JhbnQgb25seS4gVGhlCiMgdG9rZW4gc2VjcmV0IHJpZGVzIHRoZSB3cmFwcGVyJ3MgU1RESU4g4oCUIHN1ZG8gbG9ncyBhcmd2LCBzbyBpdCBtdXN0IG5ldmVyIGFwcGVhciBoZXJlLiBUaGUKIyBhZ2VudCBmaW5lLXZhbGlkYXRlcyBldmVyeSBmaWVsZCAoY2hhcnNldCArIGRlc2NyaXB0b3IgZXF1YWxpdHkpIGJlZm9yZSBleGVjOyB0aGVzZSBnbG9icyBhcmUKIyB0aGUgY29hcnNlIGFsbG93bGlzdC4KIwojIGByZWFkYCAoUi0zOSBsZWcgYiwgYWdlbnQgdjAuOTEuMCkgaXMgdGhlIE9ORSBhZGRlZCB2ZXJiLiBJdCBwcmludHMgYSB0b2tlbiBzZWNyZXQgdG8gc3Rkb3V0IGFuZAojIHBlcmZvcm1zIG5vIG11dGF0aW9uLiBJdCBleGlzdHMgYmVjYXVzZSB0aGUgYWdlbnQgd3JpdGVzIHRoYXQgZmlsZSB0aHJvdWdoIHRoaXMgd3JhcHBlciBidXQgY291bGQKIyBuZXZlciByZWFkIGl0IGJhY2sgKC9ldGMvcHZlL3ByaXYgaXMgMDcwMCByb290Ond3dy1kYXRhKSwgbGVhdmluZyBpdHMgUEJTIHZlcmlmeSBsb29wIHBlcm1hbmVudGx5CiMgYmxpbmQgdG8gYW4gYGFwcGxpZWRgLWJ1dC00MDEgdGllci4gSXQgaXMgTk9UIGEgZ2VuZXJhbCBmaWxlLXJlYWQ6IHRoZSB3cmFwcGVyIHBpbnMgdGhlIGRpcmVjdG9yeQojIGFuZCBwcmVmaXgtYXNzZXJ0cyB0aGUgcmVzb2x2ZWQgcGF0aCwgYW5kIHRoZSBpZCBncmFtbWFyIGFkbWl0cyBubyBzbGFzaC4gVGhlIHNlY3JldCBnb2VzIHRvCiMgU1RET1VULCBuZXZlciBhcmd2IOKAlCBzdWRvIGxvZ3MgYXJndi4KIyBFLTJhOiB0aGUgYmFja3VwLXRhcmdldCBzdG9yYWdlIHNoaW0uIENyZWF0aW5nIGEgUFZFIHN0b3JhZ2UgbmVlZHMgRGF0YXN0b3JlLkFsbG9jYXRlIGF0IC9zdG9yYWdlCiMgYW5kIHRoZSBncmFudCBuZWVkcyBQZXJtaXNzaW9ucy5Nb2RpZnkgLS0gdGhlIGFnZW50IGhvbGRzIE5FSVRIRVIgYnkgZGVzaWduIChibGFzdC1yYWRpdXMKIyBjb250YWlubWVudDsgUGVybWlzc2lvbnMuTW9kaWZ5IHdvdWxkIGxldCBpdCByZXdyaXRlIGl0cyBvd24gYXV0aG9yaXR5KS4gQm90aCBsaXZlIGJlaGluZCB0aGlzCiMgZml4ZWQtdm9jYWJ1bGFyeSByb290IHNoaW0gaW5zdGVhZCwgZXhhY3RseSBsaWtlIHRoZSBta2ZzIGFuZCBwYnMtYXBwbHkgd3JhcHBlcnMuIFRoZSB3cmFwcGVyIGhhcwojIE5PIHN0b3JhZ2UtcmVtb3ZhbCBwYXRoLCBlbmZvcmNlcyBpc19tb3VudHBvaW50IDEsIGFuZCByZWZ1c2VzIGEgdGFyZ2V0IG9uIHRoZSByb290IGRldmljZS4KQ21uZF9BbGlhcyBGRUxIT01fQkFDS1VQVEFSR0VUID0gXAogIC91c3IvbG9jYWwvc2Jpbi9mZWxob20tYmFja3VwLXRhcmdldC1hcHBseSBjcmVhdGUgKiwgXAogIC91c3IvbG9jYWwvc2Jpbi9mZWxob20tYmFja3VwLXRhcmdldC1hcHBseSBncmFudCAqCgpDbW5kX0FsaWFzIEZFTEhPTV9QQlNEUiA9IFwKICAvdXNyL2xvY2FsL3NiaW4vZmVsaG9tLXBicy1hcHBseSBjcmVhdGUgKiwgXAogIC91c3IvbG9jYWwvc2Jpbi9mZWxob20tcGJzLWFwcGx5IHJlY29uY2lsZSAqLCBcCiAgL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1wYnMtYXBwbHkgZ3JhbnQgKiwgXAogIC91c3IvbG9jYWwvc2Jpbi9mZWxob20tcGJzLWFwcGx5IHJlYWQgKgoKIyBPT0IgbmZ0IGJlbHQgKFRBU0sgSDEpLiBUaGUgU1RBVElDIHRhYmxlIGBpbmV0IGZlbGhvbV9vb2JgIGlzIGluc3RhbGxlZCBvbmNlIGJ5IGhvc3QtaW5zdGFsbDsgdGhlCiMgYWdlbnQgbXV0YXRlcyBPTkxZIGl0cyB0d28gU0VUUyDigJQgQG9wZXJhdG9yX2lwcyAodGhlIG9wZXJhdG9yIC8zMikgKyBAc3NoX3BvcnQgKHRoZSBjbGFpbWVkIHBvcnQpLgojIFNFVCBFTEVNRU5UUyBPTkxZIFt0cmFwIDRdOiBOTyBgbmZ0IGFkZCBydWxlYCwgTk8gYG5mdCAtZmAsIE5PIGBmbHVzaCBydWxlc2V0L3RhYmxlYCDigJQgYSBydWxlIGdyYW50CiMgd291bGQgbGV0IHRoZSBhZ2VudCBmaXJld2FsbCBhbnl0aGluZy4gVGhlIGFnZW50IGZpbmUtdmFsaWRhdGVzIGV2ZXJ5IGVsZW1lbnQgKG5ldGlwIC8gaW50IHJhbmdlKQojIGJlZm9yZSBleGVjOyB0aGUgdHJhaWxpbmcgd2lsZGNhcmRzIGFyZSB0aGUgY29hcnNlIGFsbG93bGlzdCAodmFsdWVzIG9ubHkpLgpDbW5kX0FsaWFzIEZFTEhPTV9PT0IgPSBcCiAgL3Vzci9zYmluL25mdCBsaXN0IHNldCBpbmV0IGZlbGhvbV9vb2Igb3BlcmF0b3JfaXBzLCBcCiAgL3Vzci9zYmluL25mdCBsaXN0IHNldCBpbmV0IGZlbGhvbV9vb2Igc3NoX3BvcnQsIFwKICAvdXNyL3NiaW4vbmZ0IGZsdXNoIHNldCBpbmV0IGZlbGhvbV9vb2Igb3BlcmF0b3JfaXBzLCBcCiAgL3Vzci9zYmluL25mdCBmbHVzaCBzZXQgaW5ldCBmZWxob21fb29iIHNzaF9wb3J0LCBcCiAgL3Vzci9zYmluL25mdCBhZGQgZWxlbWVudCBpbmV0IGZlbGhvbV9vb2Igb3BlcmF0b3JfaXBzICosIFwKICAvdXNyL3NiaW4vbmZ0IGFkZCBlbGVtZW50IGluZXQgZmVsaG9tX29vYiBzc2hfcG9ydCAqCgojIEVzY3JvdyBjZXJlbW9ueSAoY29udHJvbGxlci1kcml2ZW4sIFRBU0sgMjAyNi0wNy0xMzsgbWVjaGFuaWNzIHZhbGlkYXRlZCBieQojIFNQSUtFLWNvbnRyb2xsZXItZXNjcm93LTIwMjYtMDctMTMpLiBPTkUgZml4ZWQgYXJndiDigJQgc3Vkb2VycyBtYXRjaGVzIHRoZSBhcmd1bWVudCB2ZWN0b3IKIyBieXRlLWZvci1ieXRlIChzcGlrZSDCpzIuMik6IGFueSBhbHRlcmF0aW9uICh2YWx1ZSwgZXh0cmEgZmxhZywgb3JkZXIsIGNvbmZpZyBwYXRoKSBpcyByZWZ1c2VkLgojIC0tY29uZmlnIHBpbm5lZDogZW52X3Jlc2V0IHN0cmlwcyBGRUxIT01fQUdFTlRfQ09ORklHIGFuZCB0aGUgcGluIGNsb3NlcyBhbHRlcm5hdGUtY29uZmlnCiMgaW5qZWN0aW9uLiBSIHJpZGVzIHRoZSBzdWJwcm9jZXNzIHN0ZG91dCBwaXBlIG9ubHk7IHN1ZG8gbG9ncyBhcmd2ID0gc2VjcmV0cy1mcmVlLiBUaGUgYXJndgojIE1VU1Qgc3RheSBieXRlLWlkZW50aWNhbCB0byBlc2Nyb3cuQ2VyZW1vbnlBcmdzKCkgKGludGVybmFsL2VzY3Jvdy9jZXJlbW9ueS5nbykg4oCUIHRoZQojIGNhcGFiaWxpdHkgbWFuaWZlc3QgZW50cnkgKyBUZXN0TWFuaWZlc3RDb3ZlcmVkQnlTdWRvZXJzIGxvY2sgdGhlIHRocmVlIGNvcGllcyB0b2dldGhlci4KQ21uZF9BbGlhcyBGRUxIT01fRVNDUk9XID0gXAogIC91c3IvbG9jYWwvYmluL2ZlbGhvbS1hZ2VudCAtLWNvbmZpZyAvZXRjL2ZlbGhvbS1hZ2VudC9hZ2VudC5qc29uIC0tc2VsZnRlc3Q9ZXNjcm93LWNyZWF0ZSAtLXVwbG9hZCAtLW91dHB1dD1qc29uCgojIE5vZGUgc2VsZi1oZWFsIChDQU1QQUlHTi0zIFBhcnQgNiwgRjEyLWNsYXNzIGRlZmVuc2UgaW4gZGVwdGgpLiBUaGUgT05FIGZpeGVkIHVuaXQgdGhlIGFwcGxpYW5jZQojIHdhdGNoZG9nIG1heSAocmUpc3RhcnQgd2hlbiBhIGJvb3QgbGVhdmVzIG5ldHdvcmtpbmcgZG93biDigJQgdGhlIGV4YWN0IGNvbW1hbmQgdGhlIG1vcm5pbmcgcmVjb3ZlcnkKIyByYW4gYnkgaGFuZCBhZnRlciB0aGUgRjEyIGhvc3QgbG9zcy4gRklYRUQgdW5pdCwgbm8gZ2xvYjogdGhpcyBncmFudCBhbG9uZSBjYW5ub3QgaGFybSDigJQgc3RhcnRpbmcKIyBuZXR3b3JraW5nLnNlcnZpY2UgaXMgcHJlY2lzZWx5IHdoYXQgdGhlIGJvb3Qgc2hvdWxkIGhhdmUgZG9uZS4gVGhlIHJlbWVkeSBpcyBBTFNPIGNvZGUtZ2F0ZWQgb24KIyBkZXBsb3ltZW50X21vZGU9ImFwcGxpYW5jZSIgKHRoZSBNYW5hZ2VyIHJlZnVzZXMgdG8gaW52b2tlIGl0IG9uIGEgYnlvIGhvc3QpOyB0aGUgc3Vkb2VycyBncmFudCBpcwojIHRoZSBjb2Fyc2UgZmxvb3IsIHRoZSBtb2RlIGdhdGUgaXMgdGhlIGZpbmUgb25lLgpDbW5kX0FsaWFzIEZFTEhPTV9TRUxGSEVBTCA9IFwKICAvdXNyL2Jpbi9zeXN0ZW1jdGwgc3RhcnQgbmV0d29ya2luZy5zZXJ2aWNlCgojIEd1ZXN0LW5ldHdvcmsgd2F0Y2hkb2cgKGludGVybmFsL2d1ZXN0bmV0LCBSLTU0KS4gVGhlIGd1ZXN0J3MgREhDUCBjbGllbnQgaXMgdW5zdXBlcnZpc2VkIOKAlCB3aGVuIGl0CiMgZGllZCBvbiAyMDI2LTA3LTIwIHRoZSBib3ggbG9zdCBpdHMgYWRkcmVzcyB+ODAgbWludXRlcyBsYXRlciBhbmQgd2VudCBvZmYgdGhlIGludGVybmV0IGZvciAxaDE1bQojIChJTkNJREVOVC1ndWVzdC1kaGNsaWVudC1raWxsZWQtMjAyNi0wNy0yMCkuIEZvdXIgRklYRUQgcmVhZCB2ZWN0b3JzIHBsdXMgT05FIGZpeGVkIGhlYWwgdmVjdG9yOyB0aGUKIyBoZWFsIGlzIHRoZSBpbmNpZGVudCdzIG93biByZXN0b3JlZCBpbnZvY2F0aW9uLCBieXRlIGZvciBieXRlLiBUaGlzIGlzIE5PVCBhIGdlbmVyYWwgYHBjdCBleGVjYDogZXZlcnkKIyBhcmd1bWVudCBhZnRlciB0aGUgbnVtZXJpYyB2bWlkIGlzIGEgbGl0ZXJhbCwgc28gdGhlIGdyYW50IGNhbm5vdCBiZSB3aWRlbmVkIGJ5IGFueXRoaW5nIHRoZSBndWVzdCBvcgojIHRoZSBodWIgc2F5cy4gVGhlIGFkZHJlc3MgcmVhZCBpcyBkZWxpYmVyYXRlbHkgTk9UIGR1cGxpY2F0ZWQgaGVyZSDigJQgaXQgaXMgYWxyZWFkeSBGRUxIT01fRE5TTUFTUSdzLAojIGFuZCB0aGUgc2FtZSBjb21tYW5kIG11c3Qgbm90IGJlIGdyYW50ZWQgdHdpY2UgdW5kZXIgdHdvIG5hbWVzLgojIE9TIHVwZGF0ZXMsIGd1ZXN0IGZhc3QgbGFuZSAoYDExLW9zLXVwZGF0ZXMubWRgIMKnNS40LjEsIGFnZW50IHYwLjE0MC4wKS4gVGhlIE9OTFkgZW50cnk6IHRoZSByb290IHdyYXBwZXIgd2l0aAojIG9uZSBwbGFuIGZpbGUgaW4gdGhlIGFnZW50J3Mgb3duIG9zLyBkaXIuIEV2ZXJ5IHNhZmV0eSBydWxlIChubyByZW1vdmFsLCBubyBkb3duZ3JhZGUsIG5vIG5ldyBvciB1bmxpc3RlZCBwYWNrYWdlLAojIERlYmlhbiBvcmlnaW4gb25seSwgdGhlIGJveCdzIG93biBjdXN0b21lciBndWVzdCBvbmx5KSBsaXZlcyBpbiB0aGUgd3JhcHBlciwgcmVkLXByb3ZlZCBwZXIgcnVsZQojIChjb25maWdzL3Rlc3RfZmVsaG9tX29zX2FwcGx5LnB5KS4gVGhlIGFnZW50IGdldHMgTk8gYXB0IGdyYW50IG9mIGl0cyBvd24uCkNtbmRfQWxpYXMgRkVMSE9NX09TQVBQTFkgPSBcCiAgL3Vzci9sb2NhbC9zYmluL2ZlbGhvbS1vcy1hcHBseSAtLXBsYW4gL3Zhci9saWIvZmVsaG9tLWFnZW50L29zL3BsYW4tKi5qc29uCgpDbW5kX0FsaWFzIEZFTEhPTV9HVUVTVE5FVCA9IFwKICAvdXNyL3NiaW4vcGN0IGV4ZWMgWzAtOV0qIC0tIGlwIHJvdXRlIHNob3cgZGVmYXVsdCwgXAogIC91c3Ivc2Jpbi9wY3QgZXhlYyBbMC05XSogLS0gY2F0IC9ldGMvbmV0d29yay9pbnRlcmZhY2VzLCBcCiAgL3Vzci9zYmluL3BjdCBleGVjIFswLTldKiAtLSBwZ3JlcCAteCBkaGNsaWVudCwgXAogIC91c3Ivc2Jpbi9wY3QgZXhlYyBbMC05XSogLS0gZGhjbGllbnQgLXBmIC9ydW4vZGhjbGllbnQuZXRoMC5waWQgLWxmIC92YXIvbGliL2RoY3AvZGhjbGllbnQuZXRoMC5sZWFzZXMgZXRoMAoKZmVsaG9tLWFnZW50IEFMTD0ocm9vdCkgTk9QQVNTV0Q6IEZFTEhPTV9NT1VOVCwgRkVMSE9NX0RJU0ssIEZFTEhPTV9QUk9WSVNJT04sIEZFTEhPTV9GT1JNQVQsIEZFTEhPTV9ETlNNQVNRLCBGRUxIT01fR1VFU1RIT09LLCBGRUxIT01fSU5URVJNRURJQVJZLCBGRUxIT01fQ09OVFJPTExFUlNXQVAsIEZFTEhPTV9TVEFMRUxPQ0ssIEZFTEhPTV9ORVRNT1VOVCwgRkVMSE9NX1dHLCBGRUxIT01fU0VMRlVQREFURSwgRkVMSE9NX1NTSEQsIEZFTEhPTV9PT0IsIEZFTEhPTV9QQlNEUiwgRkVMSE9NX0JBQ0tVUFRBUkdFVCwgRkVMSE9NX1NFTEZIRUFMLCBGRUxIT01fRVNDUk9XLCBGRUxIT01fR1VFU1RORVQsIEZFTEhPTV9TQ1JBVENIX1RFQVJET1dOLCBGRUxIT01fT1NBUFBMWQo=",
   "mode": "0o440",
   "path": "/etc/sudoers.d/felhom-agent",
   "policy": "replace",
   "sha256": "02df92d751f1780aecbf600b2632b2366fcedeb3601852ebfa98c700e95f4dfc",
   "source": "configs/felhom-agent.sudoers"
  }
 ],
 "format": 1
}
