diff --git a/source/agent-remote/agent.hash b/source/agent-remote/agent.hash new file mode 100644 index 0000000..9a2c544 --- /dev/null +++ b/source/agent-remote/agent.hash @@ -0,0 +1 @@ +36f6a765ce8cbd6264e650e1535004866ef9131f826a85ee425f42ca01fe673e diff --git a/source/src/autogen/_agent-remote.cpp b/source/src/autogen/_agent-remote.cpp index 2468f8e..9b61a7c 100644 --- a/source/src/autogen/_agent-remote.cpp +++ b/source/src/autogen/_agent-remote.cpp @@ -107,6 +107,128 @@ static bool _recreate_file_(const std::filesystem::path& outpath, uint64_t file_ bool recreate_tree(std::string destination_folder) { namespace fs = std::filesystem; bool any_written = false; + { + // File: ds_install.sh + fs::path outpath = fs::path(destination_folder) / "ds_install.sh"; + static const char filedata_base64[] = "IyEvYmluL2Jhc2gKc2V0IC1ldW8gcGlwZWZhaWwKCiMgZHNfaW5zdGFsbC5zaCBTRVJWSUNFCiMK"\ + "IyBIYW5kbGVzIHRoZSBmdWxsIGluc3RhbGwgbGlmZWN5Y2xlIG9uIHRoZSByZW1vdGUgc2VydmVy"\ + "IGluIGEgc2luZ2xlIFNTSCBzZXNzaW9uLgojIENhbGxlZCBhZnRlciB0aGUgbG9jYWwgZHJvcHNo"\ + "ZWxsIGhhcyByc3luY2VkIG5ldyB0ZW1wbGF0ZSArIGNvbmZpZyB0byBhIHN0YWdpbmcgZm9sZGVy"\ + "LgojCiMgUmVtb3RlIGRpcmVjdG9yeSBsYXlvdXQ6CiMgICBzZXJ2aWNlcy9TRVJWSUNFL2NvbmZp"\ + "Zy8gICAgICAgIOKGkCBsaXZlIHNlcnZpY2UgY29uZmlnCiMgICBzZXJ2aWNlcy9TRVJWSUNFL3Rl"\ + "bXBsYXRlLyAgICAgIOKGkCBsaXZlIHRlbXBsYXRlIHNjcmlwdHMKIyAgIHNlcnZpY2VzL1NFUlZJ"\ + "Q0UvX3N0YWdpbmcvY29uZmlnLyAgICDihpAgbmV3IGNvbmZpZyAocnN5bmNlZCBieSBsb2NhbCkK"\ + "IyAgIHNlcnZpY2VzL1NFUlZJQ0UvX3N0YWdpbmcvdGVtcGxhdGUvICDihpAgbmV3IHRlbXBsYXRl"\ + "IChyc3luY2VkIGJ5IGxvY2FsKQojCiMgRmxvdzoKIyAgIDEuIFJ1biBpbnN0YWxsLXByZS5zaCBm"\ + "cm9tIFNUQUdJTkcgKG5ldyBjb2RlICsgbmV3IGNvbmZpZykg4oaSIHZhbGlkYXRlCiMgICAyLiBS"\ + "dW4gdW5pbnN0YWxsLnNoIGZyb20gTElWRSAob2xkIGNvZGUgKyBvbGQgY29uZmlnKSDihpIgc3Rv"\ + "cCBvbGQgc2VydmljZQojICAgMy4gU3dhcCBzdGFnaW5nIOKGkiBsaXZlIChhdG9taWMgcmVwbGFj"\ + "ZW1lbnQpCiMgICA0LiBSdW4gaW5zdGFsbC5zaCBmcm9tIExJVkUgKG5vdyB0aGUgbmV3IHZlcnNp"\ + "b24pCiMKIyBJZiBhbnkgc3RlcCBmYWlscywgdGhlIHNjcmlwdCBleGl0cyBpbW1lZGlhdGVseSAo"\ + "c2V0IC1lKS4KIyBJZiBpbnN0YWxsLXByZS5zaCBmYWlscywgdGhlIG9sZCBzZXJ2aWNlIGlzIHVu"\ + "dG91Y2hlZC4KCiMgLS0gRGV0ZXJtaW5lIHBhdGhzIC0tClNDUklQVF9QQVRIPSIkKHJlYWRsaW5r"\ + "IC1mICIke0JBU0hfU09VUkNFWzBdfSIpIgpBR0VOVF9QQVRIPSIkKGRpcm5hbWUgIiR7U0NSSVBU"\ + "X1BBVEh9IikiCkRST1BTSEVMTF9ESVI9IiQoZGlybmFtZSAiJHtBR0VOVF9QQVRIfSIpIgoKIyBF"\ + "eHBvcnQgZm9yIHNjcmlwdHMgdGhhdCBuZWVkIHRoZW0KZXhwb3J0IEFHRU5UX1BBVEgKZXhwb3J0"\ + "IERST1BTSEVMTF9ESVIKCiMgLS0gU291cmNlIGNvbW1vbiBmdW5jdGlvbnMgLS0Kc291cmNlICIk"\ + "e0FHRU5UX1BBVEh9L2NvbW1vbi5zaCIKCiMgLS0gVmFsaWRhdGUgYXJndW1lbnRzIC0tCmlmIFtb"\ + "ICQjIC1sdCAxIF1dOyB0aGVuCiAgICBlY2hvICJVc2FnZTogZHNfaW5zdGFsbC5zaCBTRVJWSUNF"\ + "IFtURU1QX0RJUl0iID4mMgogICAgZXhpdCAxCmZpCgpTRVJWSUNFPSIkMSIKZXhwb3J0IFNFUlZJ"\ + "Q0UKZXhwb3J0IFRFTVBfRElSPSIkezI6LX0iCmV4cG9ydCBET0NLRVJfQ0xJX0hJTlRTPWZhbHNl"\ + "CgpTRVJWSUNFX0RJUj0iJHtEUk9QU0hFTExfRElSfS9zZXJ2aWNlcy8ke1NFUlZJQ0V9IgoKIyAt"\ + "LSBBY3F1aXJlIGV4Y2x1c2l2ZSBsb2NrIChyZWxlYXNlZCBhdXRvbWF0aWNhbGx5IG9uIGV4aXQp"\ + "IC0tCl9sb2NrX3NlcnZpY2UgIiR7U0VSVklDRV9ESVJ9IgoKTElWRV9DT05GSUc9IiR7U0VSVklD"\ + "RV9ESVJ9L2NvbmZpZyIKTElWRV9URU1QTEFURT0iJHtTRVJWSUNFX0RJUn0vdGVtcGxhdGUiClNU"\ + "QUdJTkdfRElSPSIke1NFUlZJQ0VfRElSfS9fc3RhZ2luZyIKU1RBR0lOR19DT05GSUc9IiR7U1RB"\ + "R0lOR19ESVJ9L2NvbmZpZyIKU1RBR0lOR19URU1QTEFURT0iJHtTVEFHSU5HX0RJUn0vdGVtcGxh"\ + "dGUiCgojIC0tIFZhbGlkYXRlIHN0YWdpbmcgZXhpc3RzIC0tCltbIC1kICIke1NUQUdJTkdfQ09O"\ + "RklHfSIgXV0gfHwgX2RpZSAiU3RhZ2luZyBjb25maWcgbm90IGZvdW5kIGF0ICR7U1RBR0lOR19D"\ + "T05GSUd9IgpbWyAtZCAiJHtTVEFHSU5HX1RFTVBMQVRFfSIgXV0gfHwgX2RpZSAiU3RhZ2luZyB0"\ + "ZW1wbGF0ZSBub3QgZm91bmQgYXQgJHtTVEFHSU5HX1RFTVBMQVRFfSIKW1sgLWYgIiR7RFJPUFNI"\ + "RUxMX0RJUn0vc2VydmVyX2luZm8uZW52IiBdXSB8fCBfZGllICJNaXNzaW5nIHNlcnZlcl9pbmZv"\ + "LmVudiIKCiMgLS0gSGVscGVyOiBzb3VyY2UgZW52IGZvciBhIGdpdmVuIHRlbXBsYXRlL2NvbmZp"\ + "ZyBwYWlyIC0tCmxvYWRfZW52KCkgewogICAgbG9jYWwgdGVtcGxhdGVfZGlyPSIkMSIKICAgIGxv"\ + "Y2FsIGNvbmZpZ19kaXI9IiQyIgoKICAgICMgRmluZCB0ZW1wbGF0ZV9pbmZvLmVudgogICAgbG9j"\ + "YWwgdGluZm89IiR7dGVtcGxhdGVfZGlyfS90ZW1wbGF0ZV9pbmZvLmVudiIKICAgIGlmIFtbICEg"\ + "LWYgIiR7dGluZm99IiBdXTsgdGhlbgogICAgICAgIHRpbmZvPSIke3RlbXBsYXRlX2Rpcn0vY29u"\ + "ZmlnLy50ZW1wbGF0ZV9pbmZvLmVudiIKICAgIGZpCiAgICBbWyAtZiAiJHt0aW5mb30iIF1dIHx8"\ + "IF9kaWUgIk1pc3NpbmcgdGVtcGxhdGVfaW5mby5lbnYgaW4gJHt0ZW1wbGF0ZV9kaXJ9IgoKICAg"\ + "ICMgTXVzdCBoYXZlIHNlcnZpY2UuZW52CiAgICBbWyAtZiAiJHtjb25maWdfZGlyfS9zZXJ2aWNl"\ + "LmVudiIgXV0gfHwgX2RpZSAiTWlzc2luZyBzZXJ2aWNlLmVudiBpbiAke2NvbmZpZ19kaXJ9IgoK"\ + "ICAgICMgU291cmNlIGluIG9yZGVyOiBzZXJ2ZXJfaW5mbyDihpIgdGVtcGxhdGVfaW5mbyDihpIg"\ + "c2VydmljZS5lbnYKICAgIHNldCAtYQogICAgc291cmNlICIke0RST1BTSEVMTF9ESVJ9L3NlcnZl"\ + "cl9pbmZvLmVudiIKICAgIHNvdXJjZSAiJHt0aW5mb30iCiAgICBzb3VyY2UgIiR7Y29uZmlnX2Rp"\ + "cn0vc2VydmljZS5lbnYiCiAgICBzZXQgK2EKCiAgICBleHBvcnQgQ09ORklHX1BBVEg9IiR7Y29u"\ + "ZmlnX2Rpcn0iCiAgICBleHBvcnQgVEVNUExBVEVfUEFUSD0iJHt0ZW1wbGF0ZV9kaXJ9Igp9Cgoj"\ + "IOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAojIFNURVAgMTogUnVuIGluc3RhbGwtcHJl"\ + "LnNoIGZyb20gU1RBR0lORyAobmV3IGNvZGUgKyBuZXcgY29uZmlnKQojIOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkAppZiBbWyAtZiAiJHtTVEFHSU5HX1RFTVBMQVRFfS9pbnN0YWxsLXBy"\ + "ZS5zaCIgXV07IHRoZW4KICAgIGVjaG8gIuKUgOKUgCBTdGVwIDE6IFJ1bm5pbmcgaW5zdGFsbC1w"\ + "cmUuc2ggKG5ldyB2ZXJzaW9uKSDilIDilIAiCiAgICBsb2FkX2VudiAiJHtTVEFHSU5HX1RFTVBM"\ + "QVRFfSIgIiR7U1RBR0lOR19DT05GSUd9IgogICAgY2QgIiR7U1RBR0lOR19URU1QTEFURX0iCgog"\ + "ICAgaWYgISBiYXNoIC4vaW5zdGFsbC1wcmUuc2g7IHRoZW4KICAgICAgICBlY2hvICJpbnN0YWxs"\ + "LXByZS5zaCBmYWlsZWQg4oCUIGFib3J0aW5nIGluc3RhbGwuIE9sZCBzZXJ2aWNlIGlzIHVudG91"\ + "Y2hlZC4iCiAgICAgICAgcm0gLXJmICIke1NUQUdJTkdfRElSfSIKICAgICAgICBleGl0IDEKICAg"\ + "IGZpCmVsc2UKICAgIGVjaG8gIuKUgOKUgCBTdGVwIDE6IE5vIGluc3RhbGwtcHJlLnNoIOKAlCBz"\ + "a2lwcGluZyDilIDilIAiCmZpCgojIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAojIFNU"\ + "RVAgMjogUnVuIHVuaW5zdGFsbC5zaCBmcm9tIExJVkUgKG9sZCBjb2RlICsgb2xkIGNvbmZpZykK"\ + "IyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi"\ + "lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi"\ + "lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi"\ + "lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKaWYgW1sgLWQgIiR7TElWRV9URU1QTEFU"\ + "RX0iIF1dICYmIFtbIC1mICIke0xJVkVfVEVNUExBVEV9L3VuaW5zdGFsbC5zaCIgXV07IHRoZW4K"\ + "ICAgIGVjaG8gIuKUgOKUgCBTdGVwIDI6IFJ1bm5pbmcgdW5pbnN0YWxsLnNoIChvbGQgdmVyc2lv"\ + "bikg4pSA4pSAIgogICAgbG9hZF9lbnYgIiR7TElWRV9URU1QTEFURX0iICIke0xJVkVfQ09ORklH"\ + "fSIKICAgIGNkICIke0xJVkVfVEVNUExBVEV9IgoKICAgICMgVW5pbnN0YWxsIGlzIGJlc3QtZWZm"\ + "b3J0IOKAlCBkb24ndCBhYm9ydCBpZiBpdCBmYWlscwogICAgYmFzaCAuL3VuaW5zdGFsbC5zaCB8"\ + "fCBlY2hvICJXYXJuaW5nOiB1bmluc3RhbGwuc2ggZmFpbGVkLCBjb250aW51aW5nIGFueXdheSIK"\ + "ZWxzZQogICAgZWNobyAi4pSA4pSAIFN0ZXAgMjogTm8gZXhpc3Rpbmcgc2VydmljZSB0byB1bmlu"\ + "c3RhbGwg4pSA4pSAIgpmaQoKIyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi"\ + "lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi"\ + "lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi"\ + "lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKIyBTVEVQ"\ + "IDM6IFN3YXAgc3RhZ2luZyDihpIgbGl2ZQojIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV"\ + "kAplY2hvICLilIDilIAgU3RlcCAzOiBTd2FwcGluZyBzdGFnaW5nIHRvIGxpdmUg4pSA4pSAIgoK"\ + "IyBSZW1vdmUgb2xkIGxpdmUgKGlmIGV4aXN0cykKcm0gLXJmICIke0xJVkVfVEVNUExBVEV9IiAi"\ + "JHtMSVZFX0NPTkZJR30iCgojIE1vdmUgc3RhZ2luZyBpbnRvIHBsYWNlCm1rZGlyIC1wICIke1NF"\ + "UlZJQ0VfRElSfSIKbXYgIiR7U1RBR0lOR19DT05GSUd9IiAiJHtMSVZFX0NPTkZJR30iCm12ICIk"\ + "e1NUQUdJTkdfVEVNUExBVEV9IiAiJHtMSVZFX1RFTVBMQVRFfSIKcm0gLXJmICIke1NUQUdJTkdf"\ + "RElSfSIKCiMg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ"\ + "4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ"\ + "4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ"\ + "4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiMgU1RFUCA0OiBSdW4gaW5z"\ + "dGFsbC5zaCBmcm9tIExJVkUgKG5vdyB0aGUgbmV3IHZlcnNpb24pCiMg4pWQ4pWQ4pWQ4pWQ4pWQ"\ + "4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ"\ + "4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ"\ + "4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ"\ + "4pWQ4pWQ4pWQ4pWQ4pWQCmVjaG8gIuKUgOKUgCBTdGVwIDQ6IFJ1bm5pbmcgaW5zdGFsbC5zaCAo"\ + "bmV3IHZlcnNpb24pIOKUgOKUgCIKbG9hZF9lbnYgIiR7TElWRV9URU1QTEFURX0iICIke0xJVkVf"\ + "Q09ORklHfSIKY2QgIiR7TElWRV9URU1QTEFURX0iCgpiYXNoIC4vaW5zdGFsbC5zaCB8fCBfZGll"\ + "ICJpbnN0YWxsLnNoIGZhaWxlZCIKCmVjaG8gIuKUgOKUgCBJbnN0YWxsIGNvbXBsZXRlIGZvciAk"\ + "e1NFUlZJQ0V9IOKUgOKUgCIK"; + + // Decode Base64 data + size_t decoded_size = (strlen(filedata_base64) * 3) / 4; + unsigned char* decoded_data = new unsigned char[decoded_size]; + size_t actual_size; + base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size); + + bool file_written = _recreate_file_(outpath, 3774145290605033521ULL, std::filesystem::perms(509), decoded_data, actual_size); + delete[] decoded_data; + any_written = any_written || file_written; + } { // File: common.sh fs::path outpath = fs::path(destination_folder) / "common.sh"; @@ -140,78 +262,93 @@ bool recreate_tree(std::string destination_folder) { "cl9uYW1lPiAgOiBQcmludHMgdGhlIGxvZ3MgZm9yIGEgY29udGFpbmVyLgojICAgX2NoZWNrX3Jl"\ "cXVpcmVkX2Vudl92YXJzICJWQVIxIiAuLi4gICAgOiBDaGVja3MgaWYgbGlzdGVkIGVudmlyb25t"\ "ZW50IHZhcmlhYmxlcyBhcmUgc2V0OyBjYWxscyBfZGllKCkgaWYgYW55IGFyZSBtaXNzaW5nLgoj"\ - "ICAgX3Jvb3RfcmVtb3ZlX3RyZWUgPHBhdGg+ICAgICAgICAgICAgICA6IFJlbW92ZXMgYSBwYXRo"\ - "IHVzaW5nIGEgcm9vdCBEb2NrZXIgY29udGFpbmVyIChmb3IgcGVybWlzc2lvbnMpLgoKIyAtLS0t"\ + "ICAgX3JlbW92ZV92b2x1bWUgPHZvbHVtZV9uYW1lPiAgICAgICAgICA6IFJlbW92ZXMgYSBEb2Nr"\ + "ZXIgdm9sdW1lIGlmIGl0IGV4aXN0cy4KIyAgIF9yb290X3JlbW92ZV90cmVlIDxwYXRoPiAgICAg"\ + "ICAgICAgICAgOiBSZW1vdmVzIGEgcGF0aCB1c2luZyBhIHJvb3QgRG9ja2VyIGNvbnRhaW5lciAo"\ + "Zm9yIHBlcm1pc3Npb25zKS4KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t"\ "LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t"\ - "LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIFByaW50cyBh"\ - "biBlcnJvciBtZXNzYWdlIGluIHJlZCBhbmQgZXhpdHMgd2l0aCBzdGF0dXMgY29kZSAxLgpfZGll"\ - "KCkgewogICAgZWNobyAtZSAiRXJyb3I6ICQxIgogICAgZXhpdCAxCn0KCiMgQ3JlYXRlcy9zdGFy"\ - "dHMgYSBjb250YWluZXIsIHZlcmlmeWluZyBpdCBydW5zLgpfY3JlYXRlX2FuZF9zdGFydF9jb250"\ - "YWluZXIoKSB7CiAgICBpZiBbIC16ICIkMSIgXSB8fCBbIC16ICIkMiIgXTsgdGhlbgogICAgICAg"\ - "IF9kaWUgIlRlbXBsYXRlIGVycm9yOiBjcmVhdGVfYW5kX3N0YXJ0X2NvbnRhaW5lciA8cnVuX2Nt"\ - "ZD4gPGNvbnRhaW5lcl9uYW1lPiIKICAgIGZpCgogICAgbG9jYWwgcnVuX2NtZD0iJDEiCiAgICBs"\ - "b2NhbCBjb250YWluZXJfbmFtZT0iJDIiCgogICAgaWYgX2lzX2NvbnRhaW5lcl9leGlzdHMgIiRj"\ - "b250YWluZXJfbmFtZSI7IHRoZW4KICAgICAgICBfaXNfY29udGFpbmVyX3J1bm5pbmcgIiRjb250"\ - "YWluZXJfbmFtZSIgJiYgcmV0dXJuIDAKICAgICAgICBfc3RhcnRfY29udGFpbmVyICIkY29udGFp"\ - "bmVyX25hbWUiCiAgICBlbHNlCiAgICAgICAgJHJ1bl9jbWQKICAgIGZpCgogICAgaWYgISBfaXNf"\ - "Y29udGFpbmVyX3J1bm5pbmcgIiRjb250YWluZXJfbmFtZSI7IHRoZW4KICAgICAgICBfZGllICJD"\ - "b250YWluZXIgJHtjb250YWluZXJfbmFtZX0gZmFpbGVkIHRvIHN0YXJ0IgogICAgZmkKCiAgICBJ"\ - "RD0kKF9nZXRfY29udGFpbmVyX2lkICIkY29udGFpbmVyX25hbWUiKQogICAgZWNobyAiQ29udGFp"\ - "bmVyICR7Y29udGFpbmVyX25hbWV9IGlzIHJ1bm5pbmcgd2l0aCBJRCAke0lEfSIKfQoKIyBDcmVh"\ - "dGVzIGEgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3QgKGNobW9kIDc3NykuCl9jcmVhdGVf"\ - "Zm9sZGVyKCkgewogICAgbG9jYWwgZm9sZGVyPSIkMSIKICAgIGlmIFsgLWQgIiRmb2xkZXIiIF07"\ - "IHRoZW4KICAgICAgICByZXR1cm4gMAogICAgZmkKICAgIGlmICEgbWtkaXIgLXAgIiRmb2xkZXIi"\ - "OyB0aGVuCiAgICAgICAgX2RpZSAiRmFpbGVkIHRvIGNyZWF0ZSBmb2xkZXI6ICRmb2xkZXIiCiAg"\ - "ICBmaQogICAgY2htb2QgNzc3ICIkZm9sZGVyIgogICAgZWNobyAiRm9sZGVyIGNyZWF0ZWQ6ICRm"\ - "b2xkZXIiCn0KCiMgQ2hlY2tzIGlmIERvY2tlciBpcyBpbnN0YWxsZWQsIHJ1bm5pbmcsIGFuZCB1"\ - "c2VyIGhhcyBwZXJtaXNzaW9uLiBSZXR1cm5zIDEgb24gZmFpbHVyZS4KX2NoZWNrX2RvY2tlcl9p"\ - "bnN0YWxsZWQoKSB7CiAgICBpZiAhIGNvbW1hbmQgLXYgZG9ja2VyICY+IC9kZXYvbnVsbDsgdGhl"\ - "bgogICAgICAgIGVjaG8gIkRvY2tlciBpcyBub3QgaW5zdGFsbGVkIgogICAgICAgIHJldHVybiAx"\ - "CiAgICBmaQoKICAgICMgY2hlY2sgaWYgZG9ja2VyIGRhZW1vbiBpcyBydW5uaW5nCiAgICBpZiAh"\ - "IGRvY2tlciBpbmZvICY+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgIGVjaG8gIkRvY2tlciBkYWVt"\ - "b24gaXMgbm90IHJ1bm5pbmciCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCgogICAgIyBjaGVjayBp"\ - "ZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHJ1biBkb2NrZXIKICAgIGlmICEgZG9ja2VyIHJ1biAt"\ - "LXJtIGhlbGxvLXdvcmxkICY+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgIGVjaG8gIlVzZXIgZG9l"\ - "cyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHJ1biBkb2NrZXIiCiAgICAgICAgcmV0dXJuIDEKICAg"\ - "IGZpCgogICAgcmV0dXJuIDAKfQoKIyBDaGVja3MgaWYgYSBjb250YWluZXIgKGFueSBzdGF0ZSkg"\ - "ZXhpc3RzLiBSZXR1cm5zIDEgaWYgbm90IGZvdW5kLgpfaXNfY29udGFpbmVyX2V4aXN0cygpIHsK"\ - "ICAgIFsgLW4gIiR7MTotfSIgXSB8fCB7IGVjaG8gIl9pc19jb250YWluZXJfZXhpc3RzOiBDb250"\ - "YWluZXIgbmFtZSBpcyBlbXB0eSIgPiYyOyByZXR1cm4gMTsgfQogICAgaWYgISBkb2NrZXIgcHMg"\ - "LWEgLS1mb3JtYXQgInt7Lk5hbWVzfX0iIHwgZ3JlcCAtcSAiXiQxJCI7IHRoZW4KICAgICAgICBy"\ - "ZXR1cm4gMQogICAgZmkKICAgIHJldHVybiAwCn0KCiMgQ2hlY2tzIGlmIGEgY29udGFpbmVyIGlz"\ - "IGN1cnJlbnRseSBydW5uaW5nLiBSZXR1cm5zIDEgaWYgbm90IHJ1bm5pbmcuCl9pc19jb250YWlu"\ - "ZXJfcnVubmluZygpIHsKICAgIFsgLW4gIiR7MTotfSIgXSB8fCB7IGVjaG8gIl9pc19jb250YWlu"\ - "ZXJfcnVubmluZzogQ29udGFpbmVyIG5hbWUgaXMgZW1wdHkiID4mMjsgcmV0dXJuIDE7IH0KICAg"\ - "IGlmICEgZG9ja2VyIHBzIC0tZm9ybWF0ICJ7ey5OYW1lc319IiB8IGdyZXAgLXEgIl4kMSQiOyB0"\ - "aGVuCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICByZXR1cm4gMAp9CgojIFByaW50cyB0aGUg"\ - "SUQgb2YgdGhlIG5hbWVkIGNvbnRhaW5lci4KX2dldF9jb250YWluZXJfaWQoKSB7CiAgICBkb2Nr"\ - "ZXIgcHMgLS1mb3JtYXQgInt7LklEfX0iIC0tZmlsdGVyICJuYW1lPSQxIgp9CgojIFByaW50cyB0"\ - "aGUgc3RhdHVzIHN0cmluZyBvZiB0aGUgbmFtZWQgY29udGFpbmVyLgpfZ2V0X2NvbnRhaW5lcl9z"\ - "dGF0dXMoKSB7CiAgICBkb2NrZXIgcHMgLS1mb3JtYXQgInt7LlN0YXR1c319IiAtLWZpbHRlciAi"\ - "bmFtZT0kMSIKfQoKIyBTdGFydHMgYW4gZXhpc3RpbmcsIHN0b3BwZWQgY29udGFpbmVyLgpfc3Rh"\ - "cnRfY29udGFpbmVyKCkgewogICAgX2lzX2NvbnRhaW5lcl9leGlzdHMgIiQxIiB8fCByZXR1cm4g"\ - "MQogICAgX2lzX2NvbnRhaW5lcl9ydW5uaW5nICIkMSIgJiYgcmV0dXJuIDAKICAgIGRvY2tlciBz"\ - "dGFydCAiJDEiCn0KCiMgU3RvcHMgYSBydW5uaW5nIGNvbnRhaW5lci4KX3N0b3BfY29udGFpbmVy"\ - "KCkgewogICAgX2lzX2NvbnRhaW5lcl9ydW5uaW5nICIkMSIgfHwgcmV0dXJuIDA7CiAgICBkb2Nr"\ - "ZXIgc3RvcCAiJDEiCn0gICAKCiMgU3RvcHMgKGlmIG5lZWRlZCkgYW5kIHJlbW92ZXMgYSBjb250"\ - "YWluZXIuCl9yZW1vdmVfY29udGFpbmVyKCkgewogICAgX3N0b3BfY29udGFpbmVyICIkMSIKICAg"\ - "IF9pc19jb250YWluZXJfZXhpc3RzICIkMSIgfHwgcmV0dXJuIDA7CiAgICBkb2NrZXIgcm0gIiQx"\ - "Igp9CgojIFByaW50cyB0aGUgbG9ncyBmb3IgYSBjb250YWluZXIuCl9nZXRfY29udGFpbmVyX2xv"\ - "Z3MoKSB7CiAgICBpZiAhIF9pc19jb250YWluZXJfZXhpc3RzICIkMSI7IHRoZW4KICAgICAgICBl"\ - "Y2hvICJDb250YWluZXIgJDEgZG9lcyBub3QgZXhpc3QiCiAgICAgICAgcmV0dXJuIDEKICAgIGZp"\ - "CgogICAgZG9ja2VyIGxvZ3MgIiQxIgp9CgojIENoZWNrcyBpZiBsaXN0ZWQgZW52aXJvbm1lbnQg"\ - "dmFyaWFibGVzIGFyZSBzZXQ7IGNhbGxzIF9kaWUoKSBpZiBhbnkgYXJlIG1pc3NpbmcuCl9jaGVj"\ - "a19yZXF1aXJlZF9lbnZfdmFycygpIHsKICAgIGxvY2FsIHJlcXVpcmVkX3ZhcnM9KCIkQCIpCiAg"\ - "ICBmb3IgdmFyIGluICIke3JlcXVpcmVkX3ZhcnNbQF19IjsgZG8KICAgICAgICBpZiBbIC16ICIk"\ - "eyF2YXI6LX0iIF07IHRoZW4KICAgICAgICAgICAgX2RpZSAiUmVxdWlyZWQgZW52aXJvbm1lbnQg"\ - "dmFyaWFibGUgJHZhciBpcyBub3Qgc2V0IgogICAgICAgIGZpCiAgICBkb25lCn0KCiMgUmVtb3Zl"\ - "cyBhIHBhdGggdXNpbmcgYSByb290IERvY2tlciBjb250YWluZXIgKGZvciBwZXJtaXNzaW9ucyku"\ - "Cl9yb290X3JlbW92ZV90cmVlKCkgewogICAgbG9jYWwgdG9fcmVtb3ZlPSIkMSIKICAgIHBhcmVu"\ - "dD0kKGRpcm5hbWUgIiR0b19yZW1vdmUiKQogICAgYWJzX3BhcmVudD0kKHJlYWxwYXRoICIkcGFy"\ - "ZW50IikKICAgIGNoaWxkPSQoYmFzZW5hbWUgIiR0b19yZW1vdmUiKQogICAgZG9ja2VyIHJ1biAt"\ - "LXJtIC12ICIkYWJzX3BhcmVudCI6L2RhdGEgYWxwaW5lIHJtIC1yZiAiL2RhdGEvJGNoaWxkIgp9"\ - "CgojIExvYWQgYXV0b2NvbW1hbmRzCnNvdXJjZSAiJHtBR0VOVF9QQVRIfS9kYXRhY29tbWFuZHNf"\ - "djIuc2gi"; + "LS0tLS0tLS0tLS0tLQoKIyBQcmludHMgYW4gZXJyb3IgbWVzc2FnZSBpbiByZWQgYW5kIGV4aXRz"\ + "IHdpdGggc3RhdHVzIGNvZGUgMS4KX2RpZSgpIHsKICAgIGVjaG8gLWUgIkVycm9yOiAkMSIKICAg"\ + "IGV4aXQgMQp9CgojIENyZWF0ZXMvc3RhcnRzIGEgY29udGFpbmVyLCB2ZXJpZnlpbmcgaXQgcnVu"\ + "cy4KX2NyZWF0ZV9hbmRfc3RhcnRfY29udGFpbmVyKCkgewogICAgaWYgWyAteiAiJDEiIF0gfHwg"\ + "WyAteiAiJDIiIF07IHRoZW4KICAgICAgICBfZGllICJUZW1wbGF0ZSBlcnJvcjogY3JlYXRlX2Fu"\ + "ZF9zdGFydF9jb250YWluZXIgPHJ1bl9jbWQ+IDxjb250YWluZXJfbmFtZT4iCiAgICBmaQoKICAg"\ + "IGxvY2FsIHJ1bl9jbWQ9IiQxIgogICAgbG9jYWwgY29udGFpbmVyX25hbWU9IiQyIgoKICAgIGlm"\ + "IF9pc19jb250YWluZXJfZXhpc3RzICIkY29udGFpbmVyX25hbWUiOyB0aGVuCiAgICAgICAgX2lz"\ + "X2NvbnRhaW5lcl9ydW5uaW5nICIkY29udGFpbmVyX25hbWUiICYmIHJldHVybiAwCiAgICAgICAg"\ + "X3N0YXJ0X2NvbnRhaW5lciAiJGNvbnRhaW5lcl9uYW1lIgogICAgZWxzZQogICAgICAgICMgRGlz"\ + "YWJsZSBnbG9iIGV4cGFuc2lvbiB0byBwcmV2ZW50ICogaW4gYXJndW1lbnRzIGZyb20gZXhwYW5k"\ + "aW5nCiAgICAgICAgc2V0IC1mCiAgICAgICAgZXZhbCAiJHJ1bl9jbWQiCiAgICAgICAgc2V0ICtm"\ + "CiAgICBmaQoKICAgIGlmICEgX2lzX2NvbnRhaW5lcl9ydW5uaW5nICIkY29udGFpbmVyX25hbWUi"\ + "OyB0aGVuCiAgICAgICAgX2RpZSAiQ29udGFpbmVyICR7Y29udGFpbmVyX25hbWV9IGZhaWxlZCB0"\ + "byBzdGFydCIKICAgIGZpCgogICAgSUQ9JChfZ2V0X2NvbnRhaW5lcl9pZCAiJGNvbnRhaW5lcl9u"\ + "YW1lIikKICAgIGVjaG8gIkNvbnRhaW5lciAke2NvbnRhaW5lcl9uYW1lfSBpcyBydW5uaW5nIHdp"\ + "dGggSUQgJHtJRH0iCn0KCiMgQ3JlYXRlcyBhIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0"\ + "IChjaG1vZCA3NzcpLgpfY3JlYXRlX2ZvbGRlcigpIHsKICAgIGxvY2FsIGZvbGRlcj0iJDEiCiAg"\ + "ICBpZiBbIC1kICIkZm9sZGVyIiBdOyB0aGVuCiAgICAgICAgcmV0dXJuIDAKICAgIGZpCiAgICBp"\ + "ZiAhIG1rZGlyIC1wICIkZm9sZGVyIjsgdGhlbgogICAgICAgIF9kaWUgIkZhaWxlZCB0byBjcmVh"\ + "dGUgZm9sZGVyOiAkZm9sZGVyIgogICAgZmkKICAgIGNobW9kIDc3NyAiJGZvbGRlciIKICAgIGVj"\ + "aG8gIkZvbGRlciBjcmVhdGVkOiAkZm9sZGVyIgp9CgojIENoZWNrcyBpZiBEb2NrZXIgaXMgaW5z"\ + "dGFsbGVkLCBydW5uaW5nLCBhbmQgdXNlciBoYXMgcGVybWlzc2lvbi4gUmV0dXJucyAxIG9uIGZh"\ + "aWx1cmUuCl9jaGVja19kb2NrZXJfaW5zdGFsbGVkKCkgewogICAgaWYgISBjb21tYW5kIC12IGRv"\ + "Y2tlciAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgICBlY2hvICJEb2NrZXIgaXMgbm90IGluc3Rh"\ + "bGxlZCIKICAgICAgICByZXR1cm4gMQogICAgZmkKCiAgICAjIGNoZWNrIGlmIGRvY2tlciBkYWVt"\ + "b24gaXMgcnVubmluZwogICAgaWYgISBkb2NrZXIgaW5mbyAmPiAvZGV2L251bGw7IHRoZW4KICAg"\ + "ICAgICBlY2hvICJEb2NrZXIgZGFlbW9uIGlzIG5vdCBydW5uaW5nIgogICAgICAgIHJldHVybiAx"\ + "CiAgICBmaQoKICAgICMgY2hlY2sgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byBydW4gZG9ja2Vy"\ + "CiAgICBpZiAhIGRvY2tlciBydW4gLS1ybSBoZWxsby13b3JsZCAmPiAvZGV2L251bGw7IHRoZW4K"\ + "ICAgICAgICBlY2hvICJVc2VyIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBydW4gZG9ja2Vy"\ + "IgogICAgICAgIHJldHVybiAxCiAgICBmaQoKICAgIHJldHVybiAwCn0KCiMgQ2hlY2tzIGlmIGEg"\ + "Y29udGFpbmVyIChhbnkgc3RhdGUpIGV4aXN0cy4gUmV0dXJucyAxIGlmIG5vdCBmb3VuZC4KX2lz"\ + "X2NvbnRhaW5lcl9leGlzdHMoKSB7CiAgICBbIC1uICIkezE6LX0iIF0gfHwgeyBlY2hvICJfaXNf"\ + "Y29udGFpbmVyX2V4aXN0czogQ29udGFpbmVyIG5hbWUgaXMgZW1wdHkiID4mMjsgcmV0dXJuIDE7"\ + "IH0KICAgIGlmICEgZG9ja2VyIHBzIC1hIC0tZm9ybWF0ICJ7ey5OYW1lc319IiB8IGdyZXAgLXEg"\ + "Il4kMSQiOyB0aGVuCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICByZXR1cm4gMAp9CgojIENo"\ + "ZWNrcyBpZiBhIGNvbnRhaW5lciBpcyBjdXJyZW50bHkgcnVubmluZy4gUmV0dXJucyAxIGlmIG5v"\ + "dCBydW5uaW5nLgpfaXNfY29udGFpbmVyX3J1bm5pbmcoKSB7CiAgICBbIC1uICIkezE6LX0iIF0g"\ + "fHwgeyBlY2hvICJfaXNfY29udGFpbmVyX3J1bm5pbmc6IENvbnRhaW5lciBuYW1lIGlzIGVtcHR5"\ + "IiA+JjI7IHJldHVybiAxOyB9CiAgICBpZiAhIGRvY2tlciBwcyAtLWZvcm1hdCAie3suTmFtZXN9"\ + "fSIgfCBncmVwIC1xICJeJDEkIjsgdGhlbgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgcmV0"\ + "dXJuIDAKfQoKIyBQcmludHMgdGhlIElEIG9mIHRoZSBuYW1lZCBjb250YWluZXIuCl9nZXRfY29u"\ + "dGFpbmVyX2lkKCkgewogICAgZG9ja2VyIHBzIC0tZm9ybWF0ICJ7ey5JRH19IiAtLWZpbHRlciAi"\ + "bmFtZT0kMSIKfQoKIyBQcmludHMgdGhlIHN0YXR1cyBzdHJpbmcgb2YgdGhlIG5hbWVkIGNvbnRh"\ + "aW5lci4KX2dldF9jb250YWluZXJfc3RhdHVzKCkgewogICAgZG9ja2VyIHBzIC0tZm9ybWF0ICJ7"\ + "ey5TdGF0dXN9fSIgLS1maWx0ZXIgIm5hbWU9JDEiCn0KCiMgU3RhcnRzIGFuIGV4aXN0aW5nLCBz"\ + "dG9wcGVkIGNvbnRhaW5lci4KX3N0YXJ0X2NvbnRhaW5lcigpIHsKICAgIF9pc19jb250YWluZXJf"\ + "ZXhpc3RzICIkMSIgfHwgcmV0dXJuIDEKICAgIF9pc19jb250YWluZXJfcnVubmluZyAiJDEiICYm"\ + "IHJldHVybiAwCiAgICBkb2NrZXIgc3RhcnQgIiQxIgp9CgojIFN0b3BzIGEgcnVubmluZyBjb250"\ + "YWluZXIuCl9zdG9wX2NvbnRhaW5lcigpIHsKICAgIF9pc19jb250YWluZXJfcnVubmluZyAiJDEi"\ + "IHx8IHJldHVybiAwOwogICAgZG9ja2VyIHN0b3AgIiQxIgp9ICAgCgojIFN0b3BzIChpZiBuZWVk"\ + "ZWQpIGFuZCByZW1vdmVzIGEgY29udGFpbmVyLgpfcmVtb3ZlX2NvbnRhaW5lcigpIHsKICAgIF9z"\ + "dG9wX2NvbnRhaW5lciAiJDEiCiAgICBfaXNfY29udGFpbmVyX2V4aXN0cyAiJDEiIHx8IHJldHVy"\ + "biAwOwogICAgZG9ja2VyIHJtICIkMSIKfQoKIyBQcmludHMgdGhlIGxvZ3MgZm9yIGEgY29udGFp"\ + "bmVyLgpfZ2V0X2NvbnRhaW5lcl9sb2dzKCkgewogICAgaWYgISBfaXNfY29udGFpbmVyX2V4aXN0"\ + "cyAiJDEiOyB0aGVuCiAgICAgICAgZWNobyAiQ29udGFpbmVyICQxIGRvZXMgbm90IGV4aXN0Igog"\ + "ICAgICAgIHJldHVybiAxCiAgICBmaQoKICAgIGRvY2tlciBsb2dzICIkMSIKfQoKIyBDaGVja3Mg"\ + "aWYgbGlzdGVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc2V0OyBjYWxscyBfZGllKCkgaWYg"\ + "YW55IGFyZSBtaXNzaW5nLgpfY2hlY2tfcmVxdWlyZWRfZW52X3ZhcnMoKSB7CiAgICBsb2NhbCBy"\ + "ZXF1aXJlZF92YXJzPSgiJEAiKQogICAgZm9yIHZhciBpbiAiJHtyZXF1aXJlZF92YXJzW0BdfSI7"\ + "IGRvCiAgICAgICAgaWYgWyAteiAiJHshdmFyOi19IiBdOyB0aGVuCiAgICAgICAgICAgIF9kaWUg"\ + "IlJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlICR2YXIgaXMgbm90IHNldCIKICAgICAgICBm"\ + "aQogICAgZG9uZQp9CgojIFJlbW92ZXMgYSBEb2NrZXIgdm9sdW1lIGlmIGl0IGV4aXN0cy4KX3Jl"\ + "bW92ZV92b2x1bWUoKSB7CiAgICBbIC1uICIkezE6LX0iIF0gfHwgeyBlY2hvICJfcmVtb3ZlX3Zv"\ + "bHVtZTogVm9sdW1lIG5hbWUgaXMgZW1wdHkiID4mMjsgcmV0dXJuIDE7IH0KICAgIGlmIGRvY2tl"\ + "ciB2b2x1bWUgaW5zcGVjdCAiJDEiICY+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgZG9ja2VyIHZv"\ + "bHVtZSBybSAiJDEiCiAgICBmaQp9CgojIFJlbW92ZXMgYSBwYXRoIHVzaW5nIGEgcm9vdCBEb2Nr"\ + "ZXIgY29udGFpbmVyIChmb3IgcGVybWlzc2lvbnMpLgpfcm9vdF9yZW1vdmVfdHJlZSgpIHsKICAg"\ + "IGxvY2FsIHRvX3JlbW92ZT0iJDEiCiAgICBwYXJlbnQ9JChkaXJuYW1lICIkdG9fcmVtb3ZlIikK"\ + "ICAgIGFic19wYXJlbnQ9JChyZWFscGF0aCAiJHBhcmVudCIpCiAgICBjaGlsZD0kKGJhc2VuYW1l"\ + "ICIkdG9fcmVtb3ZlIikKICAgIGRvY2tlciBydW4gLS1ybSAtdiAiJGFic19wYXJlbnQiOi9kYXRh"\ + "IGFscGluZSBybSAtcmYgIi9kYXRhLyRjaGlsZCIKfQoKIyBBY3F1aXJlcyBhbiBleGNsdXNpdmUg"\ + "bG9jayBvbiBhIHNlcnZpY2UgZGlyZWN0b3J5IHRvIHByZXZlbnQgY29uY3VycmVudCBvcGVyYXRp"\ + "b25zLgojIFVzZXMgZmxvY2soKSB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IHJlbGVhc2VkIHdoZW4g"\ + "dGhlIHByb2Nlc3MgZXhpdHMgKGV2ZW4gb24gY3Jhc2gvU0lHS0lMTCkuCl9sb2NrX3NlcnZpY2Uo"\ + "KSB7CiAgICBsb2NhbCBzZXJ2aWNlX2Rpcj0iJDEiCiAgICBsb2NhbCBsb2NrZmlsZT0iJHtzZXJ2"\ + "aWNlX2Rpcn0vLmRlcGxveS5sb2NrIgogICAgbWtkaXIgLXAgIiR7c2VydmljZV9kaXJ9IgogICAg"\ + "ZXhlYyAyMDA+IiR7bG9ja2ZpbGV9IgogICAgaWYgISBmbG9jayAtbiAyMDA7IHRoZW4KICAgICAg"\ + "ICBfZGllICJBbm90aGVyIG9wZXJhdGlvbiBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gdGhpcyBzZXJ2"\ + "aWNlLiBBYm9ydGluZy4iCiAgICBmaQp9CgojIExvYWQgYXV0b2NvbW1hbmRzCnNvdXJjZSAiJHtB"\ + "R0VOVF9QQVRIfS9kYXRhY29tbWFuZHNfdjIuc2gi"; // Decode Base64 data size_t decoded_size = (strlen(filedata_base64) * 3) / 4; @@ -219,7 +356,7 @@ bool recreate_tree(std::string destination_folder) { size_t actual_size; base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size); - bool file_written = _recreate_file_(outpath, 325502528690785098ULL, std::filesystem::perms(509), decoded_data, actual_size); + bool file_written = _recreate_file_(outpath, 16215435023201018047ULL, std::filesystem::perms(509), decoded_data, actual_size); delete[] decoded_data; any_written = any_written || file_written; } @@ -228,53 +365,67 @@ bool recreate_tree(std::string destination_folder) { fs::path outpath = fs::path(destination_folder) / "all_status.sh"; static const char filedata_base64[] = "IyEvYmluL2Jhc2gKc2V0IC11byBwaXBlZmFpbAoKIyBhbGxfc3RhdHVzLnNoIC0gR2V0IHN0YXR1"\ "cyBhbmQgcG9ydHMgZm9yIGFsbCBzZXJ2aWNlcyBvbiB0aGlzIHNlcnZlcgojCiMgVXNhZ2U6IGFs"\ - "bF9zdGF0dXMuc2gKIwojIE91dHB1dDogSlNPTiBvYmplY3Qgd2l0aCBzdGF0dXMgYW5kIHBvcnRz"\ - "IGZvciBlYWNoIHNlcnZpY2UKIyB7CiMgICAic2VydmljZXMiOiBbCiMgICAgIHsKIyAgICAgICAi"\ - "bmFtZSI6ICJzZXJ2aWNlLW5hbWUiLAojICAgICAgICJzdGF0dXMiOiAiUnVubmluZ3xTdG9wcGVk"\ - "fEVycm9yfFVua25vd24iLAojICAgICAgICJwb3J0cyI6ICJwb3J0IG91dHB1dCBvciBlbXB0eSIK"\ - "IyAgICAgfSwKIyAgICAgLi4uCiMgICBdCiMgfQoKIyAtLSBEZXRlcm1pbmUgcGF0aHMgLS0KU0NS"\ - "SVBUX1BBVEg9IiQocmVhZGxpbmsgLWYgIiR7QkFTSF9TT1VSQ0VbMF19IikiCkFHRU5UX1BBVEg9"\ - "IiQoZGlybmFtZSAiJHtTQ1JJUFRfUEFUSH0iKSIKRFJPUFNIRUxMX0RJUj0iJChkaXJuYW1lICIk"\ - "e0FHRU5UX1BBVEh9IikiCgpTRVJWSUNFU19ESVI9IiR7RFJPUFNIRUxMX0RJUn0vc2VydmljZXMi"\ - "CgojIC0tIEhlbHBlciB0byBlc2NhcGUgSlNPTiBzdHJpbmdzIC0tCmpzb25fZXNjYXBlKCkgewog"\ - "ICAgbG9jYWwgc3RyPSIkMSIKICAgICMgRXNjYXBlIGJhY2tzbGFzaGVzLCBxdW90ZXMsIGFuZCBj"\ - "b250cm9sIGNoYXJhY3RlcnMKICAgIHN0cj0iJHtzdHIvL1xcL1xcXFx9IgogICAgc3RyPSIke3N0"\ - "ci8vXCIvXFxcIn0iCiAgICBzdHI9IiR7c3RyLy8kJ1xuJy9cXG59IgogICAgc3RyPSIke3N0ci8v"\ - "JCdccicvXFxyfSIKICAgIHN0cj0iJHtzdHIvLyQnXHQnL1xcdH0iCiAgICBlY2hvIC1uICIkc3Ry"\ - "Igp9CgojIC0tIFN0YXJ0IEpTT04gb3V0cHV0IC0tCmVjaG8gLW4gJ3sic2VydmljZXMiOlsnCgpm"\ - "aXJzdD10cnVlCgojIC0tIENoZWNrIGlmIHNlcnZpY2VzIGRpcmVjdG9yeSBleGlzdHMgLS0KaWYg"\ - "W1sgLWQgIiR7U0VSVklDRVNfRElSfSIgXV07IHRoZW4KICAgICMgSXRlcmF0ZSB0aHJvdWdoIGFs"\ - "bCBzZXJ2aWNlIGRpcmVjdG9yaWVzCiAgICBmb3Igc2VydmljZV9kaXIgaW4gIiR7U0VSVklDRVNf"\ - "RElSfSIvKi87IGRvCiAgICAgICAgIyBTa2lwIGlmIG5vIGRpcmVjdG9yaWVzIGZvdW5kIChnbG9i"\ - "IHJldHVybmVkIGxpdGVyYWwpCiAgICAgICAgW1sgLWQgIiRzZXJ2aWNlX2RpciIgXV0gfHwgY29u"\ - "dGludWUKCiAgICAgICAgc2VydmljZV9uYW1lPSIkKGJhc2VuYW1lICIkc2VydmljZV9kaXIiKSIK"\ - "CiAgICAgICAgIyBTa2lwIGlmIG5vIGNvbmZpZyBkaXJlY3RvcnkgKG5vdCBhIHZhbGlkIHNlcnZp"\ - "Y2UpCiAgICAgICAgW1sgLWQgIiR7c2VydmljZV9kaXJ9Y29uZmlnIiBdXSB8fCBjb250aW51ZQoK"\ - "ICAgICAgICAjIEdldCB0ZW1wbGF0ZSBwYXRoCiAgICAgICAgdGVtcGxhdGVfcGF0aD0iJHtzZXJ2"\ - "aWNlX2Rpcn10ZW1wbGF0ZSIKCiAgICAgICAgIyAtLSBHZXQgc3RhdHVzIC0tCiAgICAgICAgc3Rh"\ - "dHVzPSJVbmtub3duIgogICAgICAgIGlmIFtbIC1mICIke3RlbXBsYXRlX3BhdGh9L3N0YXR1cy5z"\ - "aCIgXV0gfHwgW1sgLWYgIiR7dGVtcGxhdGVfcGF0aH0vc3RhdHVzIiBdXTsgdGhlbgogICAgICAg"\ - "ICAgICAjIFJ1biBzdGF0dXMgdmlhIGRzX3J1bi5zaCwgY2FwdHVyZSBvdXRwdXQKICAgICAgICAg"\ - "ICAgc3RhdHVzX291dHB1dD0kKCIke0FHRU5UX1BBVEh9L2RzX3J1bi5zaCIgIiRzZXJ2aWNlX25h"\ - "bWUiICJzdGF0dXMiIDI+L2Rldi9udWxsKSB8fCB0cnVlCiAgICAgICAgICAgICMgVGFrZSBmaXJz"\ - "dCBsaW5lLCB0cmltIHdoaXRlc3BhY2UKICAgICAgICAgICAgc3RhdHVzPSQoZWNobyAiJHN0YXR1"\ - "c19vdXRwdXQiIHwgaGVhZCAtbjEgfCB0ciAtZCAnWzpzcGFjZTpdJykKICAgICAgICAgICAgIyBW"\ - "YWxpZGF0ZSBzdGF0dXMgdmFsdWUKICAgICAgICAgICAgY2FzZSAiJHN0YXR1cyIgaW4KICAgICAg"\ - "ICAgICAgICAgIFJ1bm5pbmd8U3RvcHBlZHxFcnJvcnxVbmtub3duKSA7OwogICAgICAgICAgICAg"\ - "ICAgKikgc3RhdHVzPSJVbmtub3duIiA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgZmkKCiAg"\ - "ICAgICAgIyAtLSBHZXQgcG9ydHMgLS0KICAgICAgICBwb3J0cz0iIgogICAgICAgIGlmIFtbIC1m"\ - "ICIke3RlbXBsYXRlX3BhdGh9L3BvcnRzLnNoIiBdXSB8fCBbWyAtZiAiJHt0ZW1wbGF0ZV9wYXRo"\ - "fS9wb3J0cyIgXV07IHRoZW4KICAgICAgICAgICAgIyBSdW4gcG9ydHMgdmlhIGRzX3J1bi5zaCwg"\ - "Y2FwdHVyZSBvdXRwdXQKICAgICAgICAgICAgcG9ydHNfb3V0cHV0PSQoIiR7QUdFTlRfUEFUSH0v"\ - "ZHNfcnVuLnNoIiAiJHNlcnZpY2VfbmFtZSIgInBvcnRzIiAyPi9kZXYvbnVsbCkgfHwgdHJ1ZQog"\ - "ICAgICAgICAgICBwb3J0cz0iJHBvcnRzX291dHB1dCIKICAgICAgICBmaQoKICAgICAgICAjIC0t"\ - "IE91dHB1dCBKU09OIGZvciB0aGlzIHNlcnZpY2UgLS0KICAgICAgICBpZiBbWyAiJGZpcnN0IiA9"\ - "PSAidHJ1ZSIgXV07IHRoZW4KICAgICAgICAgICAgZmlyc3Q9ZmFsc2UKICAgICAgICBlbHNlCiAg"\ - "ICAgICAgICAgIGVjaG8gLW4gJywnCiAgICAgICAgZmkKCiAgICAgICAgZWNobyAtbiAneyJuYW1l"\ - "IjoiJwogICAgICAgIGpzb25fZXNjYXBlICIkc2VydmljZV9uYW1lIgogICAgICAgIGVjaG8gLW4g"\ - "JyIsInN0YXR1cyI6IicKICAgICAgICBqc29uX2VzY2FwZSAiJHN0YXR1cyIKICAgICAgICBlY2hv"\ - "IC1uICciLCJwb3J0cyI6IicKICAgICAgICBqc29uX2VzY2FwZSAiJHBvcnRzIgogICAgICAgIGVj"\ - "aG8gLW4gJyJ9JwogICAgZG9uZQpmaQoKZWNobyAnXX0nCg=="; + "bF9zdGF0dXMuc2ggW0VYUEVDVEVEX0FHRU5UX0hBU0hdCiMKIyBPdXRwdXQ6IEpTT04gb2JqZWN0"\ + "IHdpdGggc3RhdHVzIGFuZCBwb3J0cyBmb3IgZWFjaCBzZXJ2aWNlCiMgewojICAgImFnZW50X2hh"\ + "c2giOiAiaGFzaC1vZi1yZW1vdGUtYWdlbnQiLAojICAgImFnZW50X21hdGNoIjogdHJ1ZXxmYWxz"\ + "ZSwKIyAgICJzZXJ2aWNlcyI6IFsKIyAgICAgewojICAgICAgICJuYW1lIjogInNlcnZpY2UtbmFt"\ + "ZSIsCiMgICAgICAgInN0YXR1cyI6ICJSdW5uaW5nfFN0b3BwZWR8RXJyb3J8VW5rbm93biIsCiMg"\ + "ICAgICAgInBvcnRzIjogInBvcnQgb3V0cHV0IG9yIGVtcHR5IgojICAgICB9LAojICAgICAuLi4K"\ + "IyAgIF0KIyB9CgojIC0tIERldGVybWluZSBwYXRocyAtLQpTQ1JJUFRfUEFUSD0iJChyZWFkbGlu"\ + "ayAtZiAiJHtCQVNIX1NPVVJDRVswXX0iKSIKQUdFTlRfUEFUSD0iJChkaXJuYW1lICIke1NDUklQ"\ + "VF9QQVRIfSIpIgpEUk9QU0hFTExfRElSPSIkKGRpcm5hbWUgIiR7QUdFTlRfUEFUSH0iKSIKClNF"\ + "UlZJQ0VTX0RJUj0iJHtEUk9QU0hFTExfRElSfS9zZXJ2aWNlcyIKCiMgLS0gR2V0IGFnZW50IGhh"\ + "c2ggLS0KRVhQRUNURURfSEFTSD0iJHsxOi19IgpMT0NBTF9IQVNIPSIiCkFHRU5UX01BVENIPSJ0"\ + "cnVlIgppZiBbWyAtZiAiJHtBR0VOVF9QQVRIfS9hZ2VudC5oYXNoIiBdXTsgdGhlbgogICAgTE9D"\ + "QUxfSEFTSD0kKGNhdCAiJHtBR0VOVF9QQVRIfS9hZ2VudC5oYXNoIiB8IHRyIC1kICdbOnNwYWNl"\ + "Ol0nKQpmaQppZiBbWyAtbiAiJHtFWFBFQ1RFRF9IQVNIfSIgJiYgIiR7TE9DQUxfSEFTSH0iICE9"\ + "ICIke0VYUEVDVEVEX0hBU0h9IiBdXTsgdGhlbgogICAgQUdFTlRfTUFUQ0g9ImZhbHNlIgpmaQoK"\ + "IyAtLSBIZWxwZXIgdG8gZXNjYXBlIEpTT04gc3RyaW5ncyAtLQpqc29uX2VzY2FwZSgpIHsKICAg"\ + "IGxvY2FsIHN0cj0iJDEiCiAgICAjIEVzY2FwZSBiYWNrc2xhc2hlcywgcXVvdGVzLCBhbmQgY29u"\ + "dHJvbCBjaGFyYWN0ZXJzCiAgICBzdHI9IiR7c3RyLy9cXC9cXFxcfSIKICAgIHN0cj0iJHtzdHIv"\ + "L1wiL1xcXCJ9IgogICAgc3RyPSIke3N0ci8vJCdcbicvXFxufSIKICAgIHN0cj0iJHtzdHIvLyQn"\ + "XHInL1xccn0iCiAgICBzdHI9IiR7c3RyLy8kJ1x0Jy9cXHR9IgogICAgZWNobyAtbiAiJHN0ciIK"\ + "fQoKIyAtLSBTdGFydCBKU09OIG91dHB1dCAtLQplY2hvIC1uICd7ImFnZW50X2hhc2giOiInCmpz"\ + "b25fZXNjYXBlICIkTE9DQUxfSEFTSCIKZWNobyAtbiAnIiwiYWdlbnRfbWF0Y2giOicKZWNobyAt"\ + "biAiJEFHRU5UX01BVENIIgplY2hvIC1uICcsInNlcnZpY2VzIjpbJwoKZmlyc3Q9dHJ1ZQoKIyAt"\ + "LSBDaGVjayBpZiBzZXJ2aWNlcyBkaXJlY3RvcnkgZXhpc3RzIC0tCmlmIFtbIC1kICIke1NFUlZJ"\ + "Q0VTX0RJUn0iIF1dOyB0aGVuCiAgICAjIEl0ZXJhdGUgdGhyb3VnaCBhbGwgc2VydmljZSBkaXJl"\ + "Y3RvcmllcwogICAgZm9yIHNlcnZpY2VfZGlyIGluICIke1NFUlZJQ0VTX0RJUn0iLyovOyBkbwog"\ + "ICAgICAgICMgU2tpcCBpZiBubyBkaXJlY3RvcmllcyBmb3VuZCAoZ2xvYiByZXR1cm5lZCBsaXRl"\ + "cmFsKQogICAgICAgIFtbIC1kICIkc2VydmljZV9kaXIiIF1dIHx8IGNvbnRpbnVlCgogICAgICAg"\ + "IHNlcnZpY2VfbmFtZT0iJChiYXNlbmFtZSAiJHNlcnZpY2VfZGlyIikiCgogICAgICAgICMgU2tp"\ + "cCBpZiBubyBjb25maWcgZGlyZWN0b3J5IChub3QgYSB2YWxpZCBzZXJ2aWNlKQogICAgICAgIFtb"\ + "IC1kICIke3NlcnZpY2VfZGlyfWNvbmZpZyIgXV0gfHwgY29udGludWUKCiAgICAgICAgIyBHZXQg"\ + "dGVtcGxhdGUgcGF0aAogICAgICAgIHRlbXBsYXRlX3BhdGg9IiR7c2VydmljZV9kaXJ9dGVtcGxh"\ + "dGUiCgogICAgICAgICMgLS0gR2V0IHN0YXR1cyAtLQogICAgICAgIHN0YXR1cz0iVW5rbm93biIK"\ + "ICAgICAgICBpZiBbWyAtZiAiJHt0ZW1wbGF0ZV9wYXRofS9zdGF0dXMuc2giIF1dIHx8IFtbIC1m"\ + "ICIke3RlbXBsYXRlX3BhdGh9L3N0YXR1cyIgXV07IHRoZW4KICAgICAgICAgICAgIyBSdW4gc3Rh"\ + "dHVzIHZpYSBkc19ydW4uc2gsIGNhcHR1cmUgb3V0cHV0CiAgICAgICAgICAgIHN0YXR1c19vdXRw"\ + "dXQ9JCgiJHtBR0VOVF9QQVRIfS9kc19ydW4uc2giICIkc2VydmljZV9uYW1lIiAic3RhdHVzIiAy"\ + "Pi9kZXYvbnVsbCkgfHwgdHJ1ZQogICAgICAgICAgICAjIFRha2UgZmlyc3QgbGluZSwgdHJpbSB3"\ + "aGl0ZXNwYWNlCiAgICAgICAgICAgIHN0YXR1cz0kKGVjaG8gIiRzdGF0dXNfb3V0cHV0IiB8IGhl"\ + "YWQgLW4xIHwgdHIgLWQgJ1s6c3BhY2U6XScpCiAgICAgICAgICAgICMgVmFsaWRhdGUgc3RhdHVz"\ + "IHZhbHVlCiAgICAgICAgICAgIGNhc2UgIiRzdGF0dXMiIGluCiAgICAgICAgICAgICAgICBSdW5u"\ + "aW5nfFN0b3BwZWR8RXJyb3J8VW5rbm93bikgOzsKICAgICAgICAgICAgICAgICopIHN0YXR1cz0i"\ + "VW5rbm93biIgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgIGZpCgogICAgICAgICMgLS0gR2V0"\ + "IHBvcnRzIC0tCiAgICAgICAgcG9ydHM9IiIKICAgICAgICBpZiBbWyAtZiAiJHt0ZW1wbGF0ZV9w"\ + "YXRofS9wb3J0cy5zaCIgXV0gfHwgW1sgLWYgIiR7dGVtcGxhdGVfcGF0aH0vcG9ydHMiIF1dOyB0"\ + "aGVuCiAgICAgICAgICAgICMgUnVuIHBvcnRzIHZpYSBkc19ydW4uc2gsIGNhcHR1cmUgb3V0cHV0"\ + "CiAgICAgICAgICAgIHBvcnRzX291dHB1dD0kKCIke0FHRU5UX1BBVEh9L2RzX3J1bi5zaCIgIiRz"\ + "ZXJ2aWNlX25hbWUiICJwb3J0cyIgMj4vZGV2L251bGwpIHx8IHRydWUKICAgICAgICAgICAgcG9y"\ + "dHM9IiRwb3J0c19vdXRwdXQiCiAgICAgICAgZmkKCiAgICAgICAgIyAtLSBHZXQgdGVtcGxhdGUg"\ + "aGFzaCAtLQogICAgICAgIHRlbXBsYXRlX2hhc2g9IiIKICAgICAgICBpZiBbWyAtZiAiJHtzZXJ2"\ + "aWNlX2Rpcn10ZW1wbGF0ZS5oYXNoIiBdXTsgdGhlbgogICAgICAgICAgICB0ZW1wbGF0ZV9oYXNo"\ + "PSQoY2F0ICIke3NlcnZpY2VfZGlyfXRlbXBsYXRlLmhhc2giIHwgdHIgLWQgJ1s6c3BhY2U6XScp"\ + "CiAgICAgICAgZmkKCiAgICAgICAgIyAtLSBPdXRwdXQgSlNPTiBmb3IgdGhpcyBzZXJ2aWNlIC0t"\ + "CiAgICAgICAgaWYgW1sgIiRmaXJzdCIgPT0gInRydWUiIF1dOyB0aGVuCiAgICAgICAgICAgIGZp"\ + "cnN0PWZhbHNlCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvIC1uICcsJwogICAgICAgIGZp"\ + "CgogICAgICAgIGVjaG8gLW4gJ3sibmFtZSI6IicKICAgICAgICBqc29uX2VzY2FwZSAiJHNlcnZp"\ + "Y2VfbmFtZSIKICAgICAgICBlY2hvIC1uICciLCJzdGF0dXMiOiInCiAgICAgICAganNvbl9lc2Nh"\ + "cGUgIiRzdGF0dXMiCiAgICAgICAgZWNobyAtbiAnIiwicG9ydHMiOiInCiAgICAgICAganNvbl9l"\ + "c2NhcGUgIiRwb3J0cyIKICAgICAgICBlY2hvIC1uICciLCJ0ZW1wbGF0ZV9oYXNoIjoiJwogICAg"\ + "ICAgIGpzb25fZXNjYXBlICIkdGVtcGxhdGVfaGFzaCIKICAgICAgICBlY2hvIC1uICcifScKICAg"\ + "IGRvbmUKZmkKCmVjaG8gJ119Jwo="; // Decode Base64 data size_t decoded_size = (strlen(filedata_base64) * 3) / 4; @@ -282,7 +433,114 @@ bool recreate_tree(std::string destination_folder) { size_t actual_size; base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size); - bool file_written = _recreate_file_(outpath, 1992974316724067048ULL, std::filesystem::perms(457), decoded_data, actual_size); + bool file_written = _recreate_file_(outpath, 15599927198261298697ULL, std::filesystem::perms(457), decoded_data, actual_size); + delete[] decoded_data; + any_written = any_written || file_written; + } + { + // File: hostinfo.sh + fs::path outpath = fs::path(destination_folder) / "hostinfo.sh"; + static const char filedata_base64[] = "IyEvYmluL2Jhc2gKc2V0IC11byBwaXBlZmFpbAoKIyBob3N0aW5mby5zaCAtIEdhdGhlciBoYXJk"\ + "d2FyZS9zeXN0ZW0gaW5mbyBmcm9tIGEgcmVtb3RlIGhvc3QKIwojIE91dHB1dDogSlNPTiBvYmpl"\ + "Y3Qgd2l0aCBzeXN0ZW0gaW5mb3JtYXRpb24KCiMgLS0gSGVscGVyIHRvIGVzY2FwZSBKU09OIHN0"\ + "cmluZ3MgLS0KanNvbl9lc2NhcGUoKSB7CiAgICBsb2NhbCBzdHI9IiQxIgogICAgc3RyPSIke3N0"\ + "ci8vXFwvXFxcXH0iCiAgICBzdHI9IiR7c3RyLy9cIi9cXFwifSIKICAgIHN0cj0iJHtzdHIvLyQn"\ + "XG4nL1xcbn0iCiAgICBzdHI9IiR7c3RyLy8kJ1xyJy9cXHJ9IgogICAgc3RyPSIke3N0ci8vJCdc"\ + "dCcvXFx0fSIKICAgIGVjaG8gLW4gIiRzdHIiCn0KCiMgLS0gR2F0aGVyIHN5c3RlbSBpbmZvIC0t"\ + "CgpIT1NUTkFNRT0kKGhvc3RuYW1lIDI+L2Rldi9udWxsIHx8IGVjaG8gIlVua25vd24iKQoKQ1BV"\ + "PSQoZ3JlcCAtbTEgJ21vZGVsIG5hbWUnIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQg"\ + "LWQ6IC1mMiB8IHhhcmdzIHx8IGVjaG8gIlVua25vd24iKQpDUFVfQ09SRVM9JChucHJvYyAyPi9k"\ + "ZXYvbnVsbCB8fCBncmVwIC1jICdecHJvY2Vzc29yJyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxs"\ + "IHx8IGVjaG8gIjAiKQoKTU9USEVSQk9BUkQ9JChjYXQgL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1p"\ + "L2lkL2JvYXJkX25hbWUgMj4vZGV2L251bGwgfHwgZWNobyAiVW5rbm93biIpCgojIFJBTSBmcm9t"\ + "IGZyZWUgLW0gKHVzZWQgPSB0b3RhbCAtIGF2YWlsYWJsZSkKUkFNX1RPVEFMX01CPSQoZnJlZSAt"\ + "bSAyPi9kZXYvbnVsbCB8IGF3ayAnTlI9PTJ7cHJpbnQgJDJ9JyB8fCBlY2hvICIwIikKUkFNX0FW"\ + "QUlMX01CPSQoZnJlZSAtbSAyPi9kZXYvbnVsbCB8IGF3ayAnTlI9PTJ7cHJpbnQgJDd9JyB8fCBl"\ + "Y2hvICIwIikKUkFNX1VTRURfTUI9JCgoIFJBTV9UT1RBTF9NQiAtIFJBTV9BVkFJTF9NQiApKQoK"\ + "IyBEaXNrIHJvb3QgKHN0cmlwIHRyYWlsaW5nIEcgZnJvbSBkZiAtQkcgb3V0cHV0KQpESVNLX1JP"\ + "T1RfVVNFRF9HQj0kKGRmIC1CRyAvIDI+L2Rldi9udWxsIHwgYXdrICdOUj09Mntnc3ViKC9HLywi"\ + "IiwkMyk7IHByaW50ICQzfScgfHwgZWNobyAiMCIpCkRJU0tfUk9PVF9UT1RBTF9HQj0kKGRmIC1C"\ + "RyAvIDI+L2Rldi9udWxsIHwgYXdrICdOUj09Mntnc3ViKC9HLywiIiwkMik7IHByaW50ICQyfScg"\ + "fHwgZWNobyAiMCIpCgojIERpc2sgL3RhbmsgKG9ubHkgaWYgbW91bnRlZCkKRElTS19UQU5LX1VT"\ + "RURfR0I9IiIKRElTS19UQU5LX1RPVEFMX0dCPSIiCmlmIFsgLWQgL3RhbmsgXSAmJiBtb3VudHBv"\ + "aW50IC1xIC90YW5rIDI+L2Rldi9udWxsOyB0aGVuCiAgICBESVNLX1RBTktfVVNFRF9HQj0kKGRm"\ + "IC1CRyAvdGFuayAyPi9kZXYvbnVsbCB8IGF3ayAnTlI9PTJ7Z3N1YigvRy8sIiIsJDMpOyBwcmlu"\ + "dCAkM30nIHx8IGVjaG8gIiIpCiAgICBESVNLX1RBTktfVE9UQUxfR0I9JChkZiAtQkcgL3Rhbmsg"\ + "Mj4vZGV2L251bGwgfCBhd2sgJ05SPT0ye2dzdWIoL0cvLCIiLCQyKTsgcHJpbnQgJDJ9JyB8fCBl"\ + "Y2hvICIiKQpmaQoKIyBJUCBhZGRyZXNzZXMKSVBfTE9DQUw9JChob3N0bmFtZSAtSSAyPi9kZXYv"\ + "bnVsbCB8IGF3ayAne3ByaW50ICQxfScgfHwgZWNobyAiVW5rbm93biIpCgpJUF9UQUlMU0NBTEU9"\ + "IiIKaWYgY29tbWFuZCAtdiB0YWlsc2NhbGUgJj4vZGV2L251bGw7IHRoZW4KICAgIElQX1RBSUxT"\ + "Q0FMRT0kKHRhaWxzY2FsZSBpcCAtNCAyPi9kZXYvbnVsbCB8fCBlY2hvICIiKQpmaQoKSVBfUFVC"\ + "TElDPSIiCmlmIGNvbW1hbmQgLXYgY3VybCAmPi9kZXYvbnVsbDsgdGhlbgogICAgSVBfUFVCTElD"\ + "PSQoY3VybCAtcyAtLW1heC10aW1lIDMgaWZjb25maWcubWUgMj4vZGV2L251bGwgfHwgZWNobyAi"\ + "IikKZWxpZiBjb21tYW5kIC12IHdnZXQgJj4vZGV2L251bGw7IHRoZW4KICAgIElQX1BVQkxJQz0k"\ + "KHdnZXQgLXFPLSAtLXRpbWVvdXQ9MyBpZmNvbmZpZy5tZSAyPi9kZXYvbnVsbCB8fCBlY2hvICIi"\ + "KQpmaQoKIyBPUyBpbmZvCk9TPSQoZ3JlcCBQUkVUVFlfTkFNRSAvZXRjL29zLXJlbGVhc2UgMj4v"\ + "ZGV2L251bGwgfCBjdXQgLWQ9IC1mMiB8IHRyIC1kICciJyB8fCB1bmFtZSAtbyAyPi9kZXYvbnVs"\ + "bCB8fCBlY2hvICJVbmtub3duIikKS0VSTkVMPSQodW5hbWUgLXIgMj4vZGV2L251bGwgfHwgZWNo"\ + "byAiVW5rbm93biIpClVQVElNRT0kKHVwdGltZSAtcCAyPi9kZXYvbnVsbCB8fCB1cHRpbWUgMj4v"\ + "ZGV2L251bGwgfHwgZWNobyAiVW5rbm93biIpCgojIERvY2tlcgpET0NLRVJfVkVSU0lPTj0iIgpp"\ + "ZiBjb21tYW5kIC12IGRvY2tlciAmPi9kZXYvbnVsbDsgdGhlbgogICAgRE9DS0VSX1ZFUlNJT049"\ + "JChkb2NrZXIgLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgYXdrICd7cHJpbnQgJDN9JyB8IHRyIC1k"\ + "ICcsJyB8fCBlY2hvICIiKQpmaQoKIyBHUFUgbGlzdCAobWF5IGhhdmUgMCwgMSwgb3IgbXVsdGlw"\ + "bGUpCkdQVV9KU09OPSJbXSIKaWYgY29tbWFuZCAtdiBsc3BjaSAmPi9kZXYvbnVsbDsgdGhlbgog"\ + "ICAgR1BVX0xJTkVTPSQobHNwY2kgMj4vZGV2L251bGwgfCBncmVwIC1pICdWR0EgY29tcGF0aWJs"\ + "ZSBjb250cm9sbGVyXHwzRCBjb250cm9sbGVyXHxEaXNwbGF5IGNvbnRyb2xsZXInIHwgc2VkICdz"\ + "L15bXiBdKiAvLzsgcy9WR0EgY29tcGF0aWJsZSBjb250cm9sbGVyOiAvLzsgcy8zRCBjb250cm9s"\ + "bGVyOiAvLzsgcy9EaXNwbGF5IGNvbnRyb2xsZXI6IC8vJyB8fCB0cnVlKQogICAgaWYgWyAtbiAi"\ + "JEdQVV9MSU5FUyIgXTsgdGhlbgogICAgICAgIEdQVV9KU09OPSJbIgogICAgICAgIGZpcnN0PXRy"\ + "dWUKICAgICAgICB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG8KICAgICAgICAgICAgWyAteiAi"\ + "JGxpbmUiIF0gJiYgY29udGludWUKICAgICAgICAgICAgaWYgWyAiJGZpcnN0IiA9ICJ0cnVlIiBd"\ + "OyB0aGVuCiAgICAgICAgICAgICAgICBmaXJzdD1mYWxzZQogICAgICAgICAgICBlbHNlCiAgICAg"\ + "ICAgICAgICAgICBHUFVfSlNPTis9IiwiCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIEdQVV9K"\ + "U09OKz0iXCIiCiAgICAgICAgICAgIEdQVV9KU09OKz0kKGpzb25fZXNjYXBlICIkbGluZSIpCiAg"\ + "ICAgICAgICAgIEdQVV9KU09OKz0iXCIiCiAgICAgICAgZG9uZSA8PDwgIiRHUFVfTElORVMiCiAg"\ + "ICAgICAgR1BVX0pTT04rPSJdIgogICAgZmkKZmkKCiMgLS0gT3V0cHV0IEpTT04gLS0KZWNobyAt"\ + "biAneycKZWNobyAtbiAnImhvc3RuYW1lIjoiJzsganNvbl9lc2NhcGUgIiRIT1NUTkFNRSI7IGVj"\ + "aG8gLW4gJyInCmVjaG8gLW4gJywiY3B1IjoiJzsganNvbl9lc2NhcGUgIiRDUFUiOyBlY2hvIC1u"\ + "ICciJwplY2hvIC1uICcsImNwdV9jb3JlcyI6Iic7IGpzb25fZXNjYXBlICIkQ1BVX0NPUkVTIjsg"\ + "ZWNobyAtbiAnIicKZWNobyAtbiAnLCJtb3RoZXJib2FyZCI6Iic7IGpzb25fZXNjYXBlICIkTU9U"\ + "SEVSQk9BUkQiOyBlY2hvIC1uICciJwplY2hvIC1uICcsImdwdSI6JyIkR1BVX0pTT04iCmVjaG8g"\ + "LW4gJywicmFtX3VzZWRfbWIiOiInOyBqc29uX2VzY2FwZSAiJFJBTV9VU0VEX01CIjsgZWNobyAt"\ + "biAnIicKZWNobyAtbiAnLCJyYW1fdG90YWxfbWIiOiInOyBqc29uX2VzY2FwZSAiJFJBTV9UT1RB"\ + "TF9NQiI7IGVjaG8gLW4gJyInCmVjaG8gLW4gJywiZGlza19yb290X3VzZWRfZ2IiOiInOyBqc29u"\ + "X2VzY2FwZSAiJERJU0tfUk9PVF9VU0VEX0dCIjsgZWNobyAtbiAnIicKZWNobyAtbiAnLCJkaXNr"\ + "X3Jvb3RfdG90YWxfZ2IiOiInOyBqc29uX2VzY2FwZSAiJERJU0tfUk9PVF9UT1RBTF9HQiI7IGVj"\ + "aG8gLW4gJyInCmVjaG8gLW4gJywiZGlza190YW5rX3VzZWRfZ2IiOiInOyBqc29uX2VzY2FwZSAi"\ + "JERJU0tfVEFOS19VU0VEX0dCIjsgZWNobyAtbiAnIicKZWNobyAtbiAnLCJkaXNrX3RhbmtfdG90"\ + "YWxfZ2IiOiInOyBqc29uX2VzY2FwZSAiJERJU0tfVEFOS19UT1RBTF9HQiI7IGVjaG8gLW4gJyIn"\ + "CmVjaG8gLW4gJywiaXBfbG9jYWwiOiInOyBqc29uX2VzY2FwZSAiJElQX0xPQ0FMIjsgZWNobyAt"\ + "biAnIicKZWNobyAtbiAnLCJpcF90YWlsc2NhbGUiOiInOyBqc29uX2VzY2FwZSAiJElQX1RBSUxT"\ + "Q0FMRSI7IGVjaG8gLW4gJyInCmVjaG8gLW4gJywiaXBfcHVibGljIjoiJzsganNvbl9lc2NhcGUg"\ + "IiRJUF9QVUJMSUMiOyBlY2hvIC1uICciJwplY2hvIC1uICcsIm9zIjoiJzsganNvbl9lc2NhcGUg"\ + "IiRPUyI7IGVjaG8gLW4gJyInCmVjaG8gLW4gJywia2VybmVsIjoiJzsganNvbl9lc2NhcGUgIiRL"\ + "RVJORUwiOyBlY2hvIC1uICciJwplY2hvIC1uICcsInVwdGltZSI6Iic7IGpzb25fZXNjYXBlICIk"\ + "VVBUSU1FIjsgZWNobyAtbiAnIicKZWNobyAtbiAnLCJkb2NrZXJfdmVyc2lvbiI6Iic7IGpzb25f"\ + "ZXNjYXBlICIkRE9DS0VSX1ZFUlNJT04iOyBlY2hvIC1uICciJwplY2hvICd9Jwo="; + + // Decode Base64 data + size_t decoded_size = (strlen(filedata_base64) * 3) / 4; + unsigned char* decoded_data = new unsigned char[decoded_size]; + size_t actual_size; + base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size); + + bool file_written = _recreate_file_(outpath, 14298237631679424228ULL, std::filesystem::perms(509), decoded_data, actual_size); + delete[] decoded_data; + any_written = any_written || file_written; + } + { + // File: agent.hash + fs::path outpath = fs::path(destination_folder) / "agent.hash"; + static const char filedata_base64[] = "MzZmNmE3NjVjZThjYmQ2MjY0ZTY1MGUxNTM1MDA0ODY2ZWY5MTMxZjgyNmE4NWVlNDI1ZjQyY2Ew"\ + "MWZlNjczZQo="; + + // Decode Base64 data + size_t decoded_size = (strlen(filedata_base64) * 3) / 4; + unsigned char* decoded_data = new unsigned char[decoded_size]; + size_t actual_size; + base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size); + + bool file_written = _recreate_file_(outpath, 16323319876897252222ULL, std::filesystem::perms(436), decoded_data, actual_size); delete[] decoded_data; any_written = any_written || file_written; } @@ -291,259 +549,261 @@ bool recreate_tree(std::string destination_folder) { fs::path outpath = fs::path(destination_folder) / "datacommands_v2.sh"; static const char filedata_base64[] = "IyEvYmluL2Jhc2gKCiMgUmVmYWN0b3JlZCBkYXRhIGNvbW1hbmRzIHdpdGggdHlwZS1zcGVjaWZp"\ "YyBmdW5jdGlvbnMgYW5kIHN0YW5kYXJkaXplZCBsYWJlbHMKIyBGb3JtYXQ6IDxjb21tYW5kPl88"\ - "dHlwZT4gPGxhYmVsPiA8bG9jYXRpb24+CiMgd2hlcmU6CiMgICAtIGNvbW1hbmQ6IGNyZWF0ZSwg"\ - "ZGVzdHJveSwgYmFja3VwLCByZXN0b3JlCiMgICAtIHR5cGU6IGZpbGUsIHBhdGgsIHZvbHVtZQoj"\ - "ICAgLSBsYWJlbDogc3RhbmRhcmRpemVkIGlkZW50aWZpZXIgKGUuZy4sICJjb25maWciLCAiZGF0"\ - "YSIsICJsb2dzIikKIyAgIC0gbG9jYXRpb246IGFjdHVhbCBwYXRoL3ZvbHVtZSBuYW1lICh2YXJp"\ - "ZXMgcGVyIGluc3RhbGxhdGlvbikKCk1ZSUQ9JChpZCAtdSkKTVlHUlA9JChpZCAtZykKCiMgPT09"\ + "dHlwZT4gPHR5cGUxOmxhYmVsMTpsb2NhdGlvbjE+IDx0eXBlMjpsYWJlbDI6bG9jYXRpb24yPiAu"\ + "Li4uCiMgd2hlcmU6CiMgICAtIGNvbW1hbmQ6IGNyZWF0ZSwgZGVzdHJveSwgYmFja3VwLCByZXN0"\ + "b3JlCiMgICAtIHR5cGU6IGZpbGUsIHBhdGgsIHZvbHVtZQojICAgLSBsYWJlbDogc3RhbmRhcmRp"\ + "emVkIGlkZW50aWZpZXIgKGUuZy4sICJjb25maWciLCAiZGF0YSIsICJsb2dzIikKIyAgIC0gbG9j"\ + "YXRpb246IGZvciBmaWxlcyAtIGZ1bGwgZmlsZSBwYXRoLgojICAgICAgICAgICAgICAgZm9yIHBh"\ + "dGhzIC0gZnVsbCBkaXJlY3RvcnkgcGF0aAojICAgICAgICAgICAgICAgZm9yIHZvbHVtZXMgLSB2"\ + "b2x1bWUgbGFiZWwKCk1ZSUQ9JChpZCAtdSkKTVlHUlA9JChpZCAtZykKCiMgPT09PT09PT09PT09"\ "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ - "PT09PT09PT09PT09PT09PQojIEZJTEUgT1BFUkFUSU9OUwojID09PT09PT09PT09PT09PT09PT09"\ - "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K"\ - "CmNyZWF0ZV9maWxlKCkgewogICAgbG9jYWwgbGFiZWw9IiQxIgogICAgbG9jYWwgZmlsZXBhdGg9"\ - "IiQyIgogICAgCiAgICBlY2hvICJbY3JlYXRlX2ZpbGVdIGxhYmVsPSRsYWJlbCBmaWxlcGF0aD0k"\ - "ZmlsZXBhdGgiCiAgICAKICAgIGxvY2FsIGZpbGVfcGFyZW50CiAgICBmaWxlX3BhcmVudD0kKGRp"\ - "cm5hbWUgIiR7ZmlsZXBhdGh9IikKICAgIGxvY2FsIGZpbGVfbmFtZQogICAgZmlsZV9uYW1lPSQo"\ - "YmFzZW5hbWUgIiR7ZmlsZXBhdGh9IikKICAgIAogICAgaWYgWyAhIC1kICIke2ZpbGVfcGFyZW50"\ - "fSIgXTsgdGhlbgogICAgICAgIGVjaG8gIkNyZWF0aW5nIHBhcmVudCBkaXJlY3RvcnkgJHtmaWxl"\ - "X3BhcmVudH0iCiAgICAgICAgbWtkaXIgLXAgIiR7ZmlsZV9wYXJlbnR9IgogICAgZmkKICAgIAog"\ - "ICAgaWYgWyAhIC1mICIke2ZpbGVwYXRofSIgXTsgdGhlbgogICAgICAgIGVjaG8gIkNyZWF0aW5n"\ - "IGZpbGUgJHtmaWxlcGF0aH0iCiAgICAgICAgdG91Y2ggIiR7ZmlsZXBhdGh9IgogICAgZWxzZQog"\ - "ICAgICAgIGVjaG8gIkZpbGUgJHtmaWxlcGF0aH0gYWxyZWFkeSBleGlzdHMgLSB1bmNoYW5nZWQi"\ - "CiAgICBmaQp9CgpkZXN0cm95X2ZpbGUoKSB7CiAgICBsb2NhbCBsYWJlbD0iJDEiCiAgICBsb2Nh"\ - "bCBmaWxlcGF0aD0iJDIiCiAgICAKICAgIGVjaG8gIltkZXN0cm95X2ZpbGVdIGxhYmVsPSRsYWJl"\ - "bCBmaWxlcGF0aD0kZmlsZXBhdGgiCiAgICAKICAgIGlmIFsgLWYgIiR7ZmlsZXBhdGh9IiBdOyB0"\ - "aGVuCiAgICAgICAgZWNobyAiUmVtb3ZpbmcgZmlsZSAke2ZpbGVwYXRofSIKICAgICAgICBybSAt"\ - "ZiAiJHtmaWxlcGF0aH0iCiAgICBlbHNlCiAgICAgICAgZWNobyAiRmlsZSAke2ZpbGVwYXRofSBk"\ - "b2VzIG5vdCBleGlzdCAtIG5vdGhpbmcgdG8gZGVzdHJveSIKICAgIGZpCn0KCmJhY2t1cF9maWxl"\ - "KCkgewogICAgbG9jYWwgbGFiZWw9IiQxIgogICAgbG9jYWwgZmlsZXBhdGg9IiQyIgogICAgbG9j"\ - "YWwgYmFja3VwX2ZvbGRlcj0iJDMiCiAgICAKICAgIGVjaG8gIltiYWNrdXBfZmlsZV0gbGFiZWw9"\ - "JGxhYmVsIGZpbGVwYXRoPSRmaWxlcGF0aCBiYWNrdXBfZm9sZGVyPSRiYWNrdXBfZm9sZGVyIgog"\ - "ICAgCiAgICAjIENyZWF0ZSBzdWJmb2xkZXIgdXNpbmcgdGhlIGxhYmVsCiAgICBsb2NhbCB0YXJn"\ - "ZXRfZGlyPSIke2JhY2t1cF9mb2xkZXJ9L2ZpbGVfJHtsYWJlbH0iCiAgICBta2RpciAtcCAiJHt0"\ - "YXJnZXRfZGlyfSIKICAgIAogICAgaWYgWyAtZiAiJHtmaWxlcGF0aH0iIF07IHRoZW4KICAgICAg"\ - "ICBsb2NhbCBmaWxlX3BhcmVudAogICAgICAgIGZpbGVfcGFyZW50PSQoZGlybmFtZSAiJHtmaWxl"\ - "cGF0aH0iKQogICAgICAgIGxvY2FsIGZpbGVfbmFtZQogICAgICAgIGZpbGVfbmFtZT0kKGJhc2Vu"\ - "YW1lICIke2ZpbGVwYXRofSIpCiAgICAgICAgCiAgICAgICAgIyBTdG9yZSBtZXRhZGF0YSBhYm91"\ - "dCB0aGUgZmlsZQogICAgICAgIGVjaG8gIiR7ZmlsZXBhdGh9IiA+ICIke3RhcmdldF9kaXJ9L29y"\ - "aWdpbmFsX3BhdGgudHh0IgogICAgICAgIAogICAgICAgICMgQ29weSB0aGUgZmlsZSAtIHNhdmUg"\ - "YXMgdGhlIGxhYmVsIG5hbWUsIG5vdCBvcmlnaW5hbCBmaWxlbmFtZQogICAgICAgIGRvY2tlciBy"\ - "dW4gLS1ybSBcCiAgICAgICAgICAgIC12ICIke2ZpbGVfcGFyZW50fSI6L3NvdXJjZSBcCiAgICAg"\ - "ICAgICAgIC12ICIke3RhcmdldF9kaXJ9IjovYmFja3VwIFwKICAgICAgICAgICAgZGViaWFuIGJh"\ - "c2ggLWMgImNwIC9zb3VyY2UvJHtmaWxlX25hbWV9IC9iYWNrdXAvJHtsYWJlbH0uZGF0YSAmJiBj"\ - "aG93biAtUiAkTVlJRDokTVlHUlAgL2JhY2t1cCIKICAgICAgICAKICAgICAgICBlY2hvICJGaWxl"\ - "ICR7ZmlsZXBhdGh9IGJhY2tlZCB1cCBzdWNjZXNzZnVsbHkgYXMgJHtsYWJlbH0uZGF0YSIKICAg"\ - "IGVsc2UKICAgICAgICBlY2hvICJGaWxlICR7ZmlsZXBhdGh9IGRvZXMgbm90IGV4aXN0IC0gbm90"\ - "aGluZyB0byBiYWNrdXAiCiAgICBmaQp9CgpyZXN0b3JlX2ZpbGUoKSB7CiAgICBsb2NhbCBsYWJl"\ - "bD0iJDEiCiAgICBsb2NhbCBmaWxlcGF0aD0iJDIiCiAgICBsb2NhbCBiYWNrdXBfZm9sZGVyPSIk"\ - "MyIKICAgIAogICAgZWNobyAiW3Jlc3RvcmVfZmlsZV0gbGFiZWw9JGxhYmVsIGZpbGVwYXRoPSRm"\ - "aWxlcGF0aCBiYWNrdXBfZm9sZGVyPSRiYWNrdXBfZm9sZGVyIgogICAgCiAgICBsb2NhbCBzb3Vy"\ - "Y2VfZGlyPSIke2JhY2t1cF9mb2xkZXJ9L2ZpbGVfJHtsYWJlbH0iCiAgICAKICAgIGlmIFsgISAt"\ - "ZCAiJHtzb3VyY2VfZGlyfSIgXTsgdGhlbgogICAgICAgIGVjaG8gIkJhY2t1cCBmb3IgbGFiZWwg"\ - "JyR7bGFiZWx9JyBub3QgZm91bmQgaW4gJHtiYWNrdXBfZm9sZGVyfSIKICAgICAgICByZXR1cm4g"\ - "MQogICAgZmkKICAgIAogICAgIyBGaWxlIGlzIGJhY2tlZCB1cCBhcyAke2xhYmVsfS5kYXRhLCBu"\ - "b3Qgb3JpZ2luYWwgZmlsZW5hbWUKICAgIGlmIFsgLWYgIiR7c291cmNlX2Rpcn0vJHtsYWJlbH0u"\ - "ZGF0YSIgXTsgdGhlbgogICAgICAgICMgRW5zdXJlIHBhcmVudCBkaXJlY3RvcnkgZXhpc3RzCiAg"\ - "ICAgICAgbG9jYWwgZmlsZV9wYXJlbnQKICAgICAgICBmaWxlX3BhcmVudD0kKGRpcm5hbWUgIiR7"\ - "ZmlsZXBhdGh9IikKICAgICAgICBta2RpciAtcCAiJHtmaWxlX3BhcmVudH0iCiAgICAgICAgCiAg"\ - "ICAgICAgIyBSZW1vdmUgZXhpc3RpbmcgZmlsZSBpZiBwcmVzZW50CiAgICAgICAgcm0gLWYgIiR7"\ - "ZmlsZXBhdGh9IgogICAgICAgIAogICAgICAgICMgQ29weSBmcm9tIGJhY2t1cCAtIHJlc3RvcmUg"\ - "ZnJvbSBsYWJlbC5kYXRhIHRvIHRhcmdldCBmaWxlcGF0aAogICAgICAgIGNwICIke3NvdXJjZV9k"\ - "aXJ9LyR7bGFiZWx9LmRhdGEiICIke2ZpbGVwYXRofSIKICAgICAgICBlY2hvICJGaWxlICR7Zmls"\ - "ZXBhdGh9IHJlc3RvcmVkIHN1Y2Nlc3NmdWxseSBmcm9tICR7bGFiZWx9LmRhdGEiCiAgICBlbHNl"\ - "CiAgICAgICAgZWNobyAiQmFja3VwIGZpbGUgJHtzb3VyY2VfZGlyfS8ke2xhYmVsfS5kYXRhIG5v"\ - "dCBmb3VuZCIKICAgICAgICByZXR1cm4gMQogICAgZmkKfQoKIyA9PT09PT09PT09PT09PT09PT09"\ - "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ - "CiMgUEFUSCBPUEVSQVRJT05TCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ - "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKY3JlYXRlX3BhdGgoKSB7"\ - "CiAgICBsb2NhbCBsYWJlbD0iJDEiCiAgICBsb2NhbCBwYXRoPSIkMiIKICAgIAogICAgZWNobyAi"\ - "W2NyZWF0ZV9wYXRoXSBsYWJlbD0kbGFiZWwgcGF0aD0kcGF0aCIKICAgIAogICAgaWYgWyAtZCAi"\ - "JHtwYXRofSIgXTsgdGhlbgogICAgICAgIGVjaG8gIlBhdGggJHtwYXRofSBhbHJlYWR5IGV4aXN0"\ - "cyAtIHVuY2hhbmdlZCIKICAgIGVsc2UKICAgICAgICBlY2hvICJDcmVhdGluZyBwYXRoICR7cGF0"\ - "aH0iCiAgICAgICAgbWtkaXIgLXAgIiR7cGF0aH0iCiAgICBmaQp9CgpkZXN0cm95X3BhdGgoKSB7"\ - "CiAgICBsb2NhbCBsYWJlbD0iJDEiCiAgICBsb2NhbCBwYXRoPSIkMiIKICAgIAogICAgZWNobyAi"\ - "W2Rlc3Ryb3lfcGF0aF0gbGFiZWw9JGxhYmVsIHBhdGg9JHBhdGgiCiAgICAKICAgIGlmIFsgLWQg"\ - "IiR7cGF0aH0iIF07IHRoZW4KICAgICAgICBsb2NhbCBwYXRoX3BhcmVudAogICAgICAgIHBhdGhf"\ - "cGFyZW50PSQoZGlybmFtZSAiJHtwYXRofSIpCiAgICAgICAgbG9jYWwgcGF0aF9jaGlsZAogICAg"\ - "ICAgIHBhdGhfY2hpbGQ9JChiYXNlbmFtZSAiJHtwYXRofSIpCiAgICAgICAgCiAgICAgICAgZWNo"\ - "byAiRGVzdHJveWluZyBwYXRoICR7cGF0aH0iCiAgICAgICAgZG9ja2VyIHJ1biAtLXJtIC12ICIk"\ - "e3BhdGhfcGFyZW50fSI6L3ZvbHVtZSBkZWJpYW4gYmFzaCAtYyAicm0gLXJmIC92b2x1bWUvJHtw"\ - "YXRoX2NoaWxkfSIKICAgIGVsc2UKICAgICAgICBlY2hvICJQYXRoICR7cGF0aH0gZG9lcyBub3Qg"\ - "ZXhpc3QgLSBub3RoaW5nIHRvIGRlc3Ryb3kiCiAgICBmaQp9CgpiYWNrdXBfcGF0aCgpIHsKICAg"\ - "IGxvY2FsIGxhYmVsPSIkMSIKICAgIGxvY2FsIHBhdGg9IiQyIgogICAgbG9jYWwgYmFja3VwX2Zv"\ - "bGRlcj0iJDMiCiAgICAKICAgIGVjaG8gIltiYWNrdXBfcGF0aF0gbGFiZWw9JGxhYmVsIHBhdGg9"\ - "JHBhdGggYmFja3VwX2ZvbGRlcj0kYmFja3VwX2ZvbGRlciIKICAgIAogICAgIyBDcmVhdGUgc3Vi"\ - "Zm9sZGVyIHVzaW5nIHRoZSBsYWJlbAogICAgbG9jYWwgdGFyZ2V0X2Rpcj0iJHtiYWNrdXBfZm9s"\ - "ZGVyfS9wYXRoXyR7bGFiZWx9IgogICAgbWtkaXIgLXAgIiR7dGFyZ2V0X2Rpcn0iCiAgICAKICAg"\ - "IGlmIFsgLWQgIiR7cGF0aH0iIF07IHRoZW4KICAgICAgICAjIFN0b3JlIG1ldGFkYXRhIGFib3V0"\ - "IHRoZSBwYXRoCiAgICAgICAgZWNobyAiJHtwYXRofSIgPiAiJHt0YXJnZXRfZGlyfS9vcmlnaW5h"\ - "bF9wYXRoLnR4dCIKICAgICAgICAKICAgICAgICAjIENyZWF0ZSB0YXIgYXJjaGl2ZSBvZiB0aGUg"\ - "cGF0aCBjb250ZW50cwogICAgICAgIGRvY2tlciBydW4gLS1ybSBcCiAgICAgICAgICAgIC12ICIk"\ - "e3BhdGh9Ijovc291cmNlIFwKICAgICAgICAgICAgLXYgIiR7dGFyZ2V0X2Rpcn0iOi9iYWNrdXAg"\ - "XAogICAgICAgICAgICBkZWJpYW4gYmFzaCAtYyAidGFyIC1jemYgL2JhY2t1cC9kYXRhLnRhci5n"\ - "eiAtQyAvc291cmNlIC4gJiYgY2hvd24gLVIgJE1ZSUQ6JE1ZR1JQIC9iYWNrdXAiCiAgICAgICAg"\ - "CiAgICAgICAgZWNobyAiUGF0aCAke3BhdGh9IGJhY2tlZCB1cCBzdWNjZXNzZnVsbHkiCiAgICBl"\ - "bHNlCiAgICAgICAgZWNobyAiUGF0aCAke3BhdGh9IGRvZXMgbm90IGV4aXN0IC0gbm90aGluZyB0"\ - "byBiYWNrdXAiCiAgICBmaQp9CgpyZXN0b3JlX3BhdGgoKSB7CiAgICBsb2NhbCBsYWJlbD0iJDEi"\ - "CiAgICBsb2NhbCBwYXRoPSIkMiIKICAgIGxvY2FsIGJhY2t1cF9mb2xkZXI9IiQzIgogICAgCiAg"\ - "ICBlY2hvICJbcmVzdG9yZV9wYXRoXSBsYWJlbD0kbGFiZWwgcGF0aD0kcGF0aCBiYWNrdXBfZm9s"\ - "ZGVyPSRiYWNrdXBfZm9sZGVyIgogICAgCiAgICBsb2NhbCBzb3VyY2VfZGlyPSIke2JhY2t1cF9m"\ - "b2xkZXJ9L3BhdGhfJHtsYWJlbH0iCiAgICAKICAgIGlmIFsgISAtZCAiJHtzb3VyY2VfZGlyfSIg"\ - "XTsgdGhlbgogICAgICAgIGVjaG8gIkJhY2t1cCBmb3IgbGFiZWwgJyR7bGFiZWx9JyBub3QgZm91"\ - "bmQgaW4gJHtiYWNrdXBfZm9sZGVyfSIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIAogICAg"\ - "aWYgWyAtZiAiJHtzb3VyY2VfZGlyfS9kYXRhLnRhci5neiIgXTsgdGhlbgogICAgICAgICMgRW5z"\ - "dXJlIHBhdGggZXhpc3RzCiAgICAgICAgbWtkaXIgLXAgIiR7cGF0aH0iCiAgICAgICAgCiAgICAg"\ - "ICAgIyBDbGVhciBleGlzdGluZyBjb250ZW50cwogICAgICAgIGVjaG8gIkNsZWFyaW5nIGV4aXN0"\ - "aW5nIGNvbnRlbnRzIG9mICR7cGF0aH0iCiAgICAgICAgZG9ja2VyIHJ1biAtLXJtIC12ICIke3Bh"\ - "dGh9IjovdGFyZ2V0IGRlYmlhbiBiYXNoIC1jICJybSAtcmYgL3RhcmdldC97KiwuKn0gMj4vZGV2"\ - "L251bGwgfHwgdHJ1ZSIKICAgICAgICAKICAgICAgICAjIEV4dHJhY3QgYmFja3VwCiAgICAgICAg"\ - "ZG9ja2VyIHJ1biAtLXJtIFwKICAgICAgICAgICAgLXYgIiR7cGF0aH0iOi90YXJnZXQgXAogICAg"\ - "ICAgICAgICAtdiAiJHtzb3VyY2VfZGlyfSI6L2JhY2t1cCBcCiAgICAgICAgICAgIGRlYmlhbiBi"\ - "YXNoIC1jICJ0YXIgLXh6ZiAvYmFja3VwL2RhdGEudGFyLmd6IC1DIC90YXJnZXQiCiAgICAgICAg"\ - "CiAgICAgICAgZWNobyAiUGF0aCAke3BhdGh9IHJlc3RvcmVkIHN1Y2Nlc3NmdWxseSIKICAgIGVs"\ - "c2UKICAgICAgICBlY2hvICJCYWNrdXAgZmlsZSAke3NvdXJjZV9kaXJ9L2RhdGEudGFyLmd6IG5v"\ - "dCBmb3VuZCIKICAgICAgICByZXR1cm4gMQogICAgZmkKfQoKIyA9PT09PT09PT09PT09PT09PT09"\ - "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ - "CiMgVk9MVU1FIE9QRVJBVElPTlMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ - "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpjcmVhdGVfdm9sdW1l"\ - "KCkgewogICAgbG9jYWwgbGFiZWw9IiQxIgogICAgbG9jYWwgdm9sdW1lX25hbWU9IiQyIgogICAg"\ - "CiAgICBlY2hvICJbY3JlYXRlX3ZvbHVtZV0gbGFiZWw9JGxhYmVsIHZvbHVtZT0kdm9sdW1lX25h"\ - "bWUiCiAgICAKICAgIGlmIGRvY2tlciB2b2x1bWUgbHMgfCBncmVwIC1xICJebG9jYWxbWzpzcGFj"\ - "ZTpdXSoke3ZvbHVtZV9uYW1lfSQiOyB0aGVuCiAgICAgICAgZWNobyAiVm9sdW1lICR7dm9sdW1l"\ - "X25hbWV9IGFscmVhZHkgZXhpc3RzIC0gdW5jaGFuZ2VkIgogICAgZWxzZQogICAgICAgIGVjaG8g"\ - "IkNyZWF0aW5nIHZvbHVtZSAke3ZvbHVtZV9uYW1lfSIKICAgICAgICBkb2NrZXIgdm9sdW1lIGNy"\ - "ZWF0ZSAiJHt2b2x1bWVfbmFtZX0iCiAgICBmaQp9CgpkZXN0cm95X3ZvbHVtZSgpIHsKICAgIGxv"\ - "Y2FsIGxhYmVsPSIkMSIKICAgIGxvY2FsIHZvbHVtZV9uYW1lPSIkMiIKICAgIAogICAgZWNobyAi"\ - "W2Rlc3Ryb3lfdm9sdW1lXSBsYWJlbD0kbGFiZWwgdm9sdW1lPSR2b2x1bWVfbmFtZSIKICAgIAog"\ - "ICAgaWYgZG9ja2VyIHZvbHVtZSBscyB8IGdyZXAgLXEgIl5sb2NhbFtbOnNwYWNlOl1dKiR7dm9s"\ - "dW1lX25hbWV9JCI7IHRoZW4KICAgICAgICBlY2hvICJEZXN0cm95aW5nIHZvbHVtZSAke3ZvbHVt"\ - "ZV9uYW1lfSIKICAgICAgICBkb2NrZXIgdm9sdW1lIHJtICIke3ZvbHVtZV9uYW1lfSIKICAgIGVs"\ - "c2UKICAgICAgICBlY2hvICJWb2x1bWUgJHt2b2x1bWVfbmFtZX0gZG9lcyBub3QgZXhpc3QgLSBu"\ - "b3RoaW5nIHRvIGRlc3Ryb3kiCiAgICBmaQp9CgpiYWNrdXBfdm9sdW1lKCkgewogICAgbG9jYWwg"\ - "bGFiZWw9IiQxIgogICAgbG9jYWwgdm9sdW1lX25hbWU9IiQyIgogICAgbG9jYWwgYmFja3VwX2Zv"\ - "bGRlcj0iJDMiCiAgICAKICAgIGVjaG8gIltiYWNrdXBfdm9sdW1lXSBsYWJlbD0kbGFiZWwgdm9s"\ - "dW1lPSR2b2x1bWVfbmFtZSBiYWNrdXBfZm9sZGVyPSRiYWNrdXBfZm9sZGVyIgogICAgCiAgICAj"\ + "PT09PT09PQojIEZJTEUgT1BFUkFUSU9OUwojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmNyZWF0ZV9m"\ + "aWxlKCkgewogICAgbG9jYWwgbGFiZWw9IiQxIgogICAgbG9jYWwgZmlsZXBhdGg9IiQyIgogICAg"\ + "CiAgICBlY2hvICJbY3JlYXRlX2ZpbGVdIGxhYmVsPSRsYWJlbCBmaWxlcGF0aD0kZmlsZXBhdGgi"\ + "CiAgICAKICAgIGxvY2FsIGZpbGVfcGFyZW50CiAgICBmaWxlX3BhcmVudD0kKGRpcm5hbWUgIiR7"\ + "ZmlsZXBhdGh9IikKICAgIGxvY2FsIGZpbGVfbmFtZQogICAgZmlsZV9uYW1lPSQoYmFzZW5hbWUg"\ + "IiR7ZmlsZXBhdGh9IikKICAgIAogICAgaWYgWyAhIC1kICIke2ZpbGVfcGFyZW50fSIgXTsgdGhl"\ + "bgogICAgICAgIGVjaG8gIkNyZWF0aW5nIHBhcmVudCBkaXJlY3RvcnkgJHtmaWxlX3BhcmVudH0i"\ + "CiAgICAgICAgbWtkaXIgLXAgIiR7ZmlsZV9wYXJlbnR9IgogICAgZmkKICAgIAogICAgaWYgWyAh"\ + "IC1mICIke2ZpbGVwYXRofSIgXTsgdGhlbgogICAgICAgIGVjaG8gIkNyZWF0aW5nIGZpbGUgJHtm"\ + "aWxlcGF0aH0iCiAgICAgICAgdG91Y2ggIiR7ZmlsZXBhdGh9IgogICAgZWxzZQogICAgICAgIGVj"\ + "aG8gIkZpbGUgJHtmaWxlcGF0aH0gYWxyZWFkeSBleGlzdHMgLSB1bmNoYW5nZWQiCiAgICBmaQp9"\ + "CgpkZXN0cm95X2ZpbGUoKSB7CiAgICBsb2NhbCBsYWJlbD0iJDEiCiAgICBsb2NhbCBmaWxlcGF0"\ + "aD0iJDIiCiAgICAKICAgIGVjaG8gIltkZXN0cm95X2ZpbGVdIGxhYmVsPSRsYWJlbCBmaWxlcGF0"\ + "aD0kZmlsZXBhdGgiCiAgICAKICAgIGlmIFsgLWYgIiR7ZmlsZXBhdGh9IiBdOyB0aGVuCiAgICAg"\ + "ICAgZWNobyAiUmVtb3ZpbmcgZmlsZSAke2ZpbGVwYXRofSIKICAgICAgICBybSAtZiAiJHtmaWxl"\ + "cGF0aH0iCiAgICBlbHNlCiAgICAgICAgZWNobyAiRmlsZSAke2ZpbGVwYXRofSBkb2VzIG5vdCBl"\ + "eGlzdCAtIG5vdGhpbmcgdG8gZGVzdHJveSIKICAgIGZpCn0KCmJhY2t1cF9maWxlKCkgewogICAg"\ + "bG9jYWwgbGFiZWw9IiQxIgogICAgbG9jYWwgZmlsZXBhdGg9IiQyIgogICAgbG9jYWwgYmFja3Vw"\ + "X2ZvbGRlcj0iJDMiCiAgICAKICAgIGVjaG8gIltiYWNrdXBfZmlsZV0gbGFiZWw9JGxhYmVsIGZp"\ + "bGVwYXRoPSRmaWxlcGF0aCBiYWNrdXBfZm9sZGVyPSRiYWNrdXBfZm9sZGVyIgogICAgCiAgICAj"\ "IENyZWF0ZSBzdWJmb2xkZXIgdXNpbmcgdGhlIGxhYmVsCiAgICBsb2NhbCB0YXJnZXRfZGlyPSIk"\ - "e2JhY2t1cF9mb2xkZXJ9L3ZvbHVtZV8ke2xhYmVsfSIKICAgIG1rZGlyIC1wICIke3RhcmdldF9k"\ - "aXJ9IgogICAgCiAgICBpZiBkb2NrZXIgdm9sdW1lIGxzIHwgZ3JlcCAtcSAiXmxvY2FsW1s6c3Bh"\ - "Y2U6XV0qJHt2b2x1bWVfbmFtZX0kIjsgdGhlbgogICAgICAgICMgU3RvcmUgbWV0YWRhdGEgYWJv"\ - "dXQgdGhlIHZvbHVtZQogICAgICAgIGVjaG8gIiR7dm9sdW1lX25hbWV9IiA+ICIke3RhcmdldF9k"\ - "aXJ9L29yaWdpbmFsX3ZvbHVtZS50eHQiCiAgICAgICAgCiAgICAgICAgIyBDcmVhdGUgdGFyIGFy"\ - "Y2hpdmUgb2YgdGhlIHZvbHVtZSBjb250ZW50cwogICAgICAgIGRvY2tlciBydW4gLS1ybSBcCiAg"\ - "ICAgICAgICAgIC12ICIke3ZvbHVtZV9uYW1lfSI6L3NvdXJjZSBcCiAgICAgICAgICAgIC12ICIk"\ - "e3RhcmdldF9kaXJ9IjovYmFja3VwIFwKICAgICAgICAgICAgZGViaWFuIGJhc2ggLWMgInRhciAt"\ - "Y3pmIC9iYWNrdXAvZGF0YS50YXIuZ3ogLUMgL3NvdXJjZSAuICYmIGNob3duIC1SICRNWUlEOiRN"\ - "WUdSUCAvYmFja3VwIgogICAgICAgIAogICAgICAgIGVjaG8gIlZvbHVtZSAke3ZvbHVtZV9uYW1l"\ - "fSBiYWNrZWQgdXAgc3VjY2Vzc2Z1bGx5IgogICAgZWxzZQogICAgICAgIGVjaG8gIlZvbHVtZSAk"\ - "e3ZvbHVtZV9uYW1lfSBkb2VzIG5vdCBleGlzdCAtIG5vdGhpbmcgdG8gYmFja3VwIgogICAgZmkK"\ - "fQoKcmVzdG9yZV92b2x1bWUoKSB7CiAgICBsb2NhbCBsYWJlbD0iJDEiCiAgICBsb2NhbCB2b2x1"\ - "bWVfbmFtZT0iJDIiCiAgICBsb2NhbCBiYWNrdXBfZm9sZGVyPSIkVEVNUF9ESVIvYmFja3VwIgog"\ - "ICAgCiAgICBlY2hvICJbcmVzdG9yZV92b2x1bWVdIGxhYmVsPSRsYWJlbCB2b2x1bWU9JHZvbHVt"\ - "ZV9uYW1lIGJhY2t1cF9mb2xkZXI9JGJhY2t1cF9mb2xkZXIiCiAgICAKICAgIGxvY2FsIHNvdXJj"\ - "ZV9kaXI9IiR7YmFja3VwX2ZvbGRlcn0vdm9sdW1lXyR7bGFiZWx9IgogICAgCiAgICBpZiBbICEg"\ - "LWQgIiR7c291cmNlX2Rpcn0iIF07IHRoZW4KICAgICAgICBlY2hvICJCYWNrdXAgZm9yIGxhYmVs"\ - "ICcke2xhYmVsfScgbm90IGZvdW5kIGluICR7YmFja3VwX2ZvbGRlcn0iCiAgICAgICAgcmV0dXJu"\ - "IDEKICAgIGZpCiAgICAKICAgIGlmIFsgLWYgIiR7c291cmNlX2Rpcn0vZGF0YS50YXIuZ3oiIF07"\ - "IHRoZW4KICAgICAgICAjIFJlbW92ZSBleGlzdGluZyB2b2x1bWUgaWYgcHJlc2VudAogICAgICAg"\ - "IGlmIGRvY2tlciB2b2x1bWUgbHMgfCBncmVwIC1xICJebG9jYWxbWzpzcGFjZTpdXSoke3ZvbHVt"\ - "ZV9uYW1lfSQiOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIlJlbW92aW5nIGV4aXN0aW5nIHZvbHVt"\ - "ZSAke3ZvbHVtZV9uYW1lfSIKICAgICAgICAgICAgZG9ja2VyIHZvbHVtZSBybSAiJHt2b2x1bWVf"\ - "bmFtZX0iCiAgICAgICAgZmkKICAgICAgICAKICAgICAgICAjIENyZWF0ZSBuZXcgdm9sdW1lCiAg"\ - "ICAgICAgZG9ja2VyIHZvbHVtZSBjcmVhdGUgIiR7dm9sdW1lX25hbWV9IgogICAgICAgIAogICAg"\ - "ICAgICMgRXh0cmFjdCBiYWNrdXAgaW50byB2b2x1bWUKICAgICAgICBkb2NrZXIgcnVuIC0tcm0g"\ - "XAogICAgICAgICAgICAtdiAiJHt2b2x1bWVfbmFtZX0iOi90YXJnZXQgXAogICAgICAgICAgICAt"\ + "e2JhY2t1cF9mb2xkZXJ9L2ZpbGVfJHtsYWJlbH0iCiAgICBta2RpciAtcCAiJHt0YXJnZXRfZGly"\ + "fSIKICAgIAogICAgaWYgWyAtZiAiJHtmaWxlcGF0aH0iIF07IHRoZW4KICAgICAgICBsb2NhbCBm"\ + "aWxlX3BhcmVudAogICAgICAgIGZpbGVfcGFyZW50PSQoZGlybmFtZSAiJHtmaWxlcGF0aH0iKQog"\ + "ICAgICAgIGxvY2FsIGZpbGVfbmFtZQogICAgICAgIGZpbGVfbmFtZT0kKGJhc2VuYW1lICIke2Zp"\ + "bGVwYXRofSIpCiAgICAgICAgCiAgICAgICAgIyBTdG9yZSBtZXRhZGF0YSBhYm91dCB0aGUgZmls"\ + "ZQogICAgICAgIGVjaG8gIiR7ZmlsZXBhdGh9IiA+ICIke3RhcmdldF9kaXJ9L29yaWdpbmFsX3Bh"\ + "dGgudHh0IgogICAgICAgIAogICAgICAgICMgQ29weSB0aGUgZmlsZSAtIHNhdmUgYXMgdGhlIGxh"\ + "YmVsIG5hbWUsIG5vdCBvcmlnaW5hbCBmaWxlbmFtZQogICAgICAgIGRvY2tlciBydW4gLS1ybSBc"\ + "CiAgICAgICAgICAgIC12ICIke2ZpbGVfcGFyZW50fSI6L3NvdXJjZSBcCiAgICAgICAgICAgIC12"\ + "ICIke3RhcmdldF9kaXJ9IjovYmFja3VwIFwKICAgICAgICAgICAgZGViaWFuIGJhc2ggLWMgImNw"\ + "IC9zb3VyY2UvJHtmaWxlX25hbWV9IC9iYWNrdXAvJHtsYWJlbH0uZGF0YSAmJiBjaG93biAtUiAk"\ + "TVlJRDokTVlHUlAgL2JhY2t1cCIKICAgICAgICAKICAgICAgICBlY2hvICJGaWxlICR7ZmlsZXBh"\ + "dGh9IGJhY2tlZCB1cCBzdWNjZXNzZnVsbHkgYXMgJHtsYWJlbH0uZGF0YSIKICAgIGVsc2UKICAg"\ + "ICAgICBlY2hvICJGaWxlICR7ZmlsZXBhdGh9IGRvZXMgbm90IGV4aXN0IC0gbm90aGluZyB0byBi"\ + "YWNrdXAiCiAgICBmaQp9CgpyZXN0b3JlX2ZpbGUoKSB7CiAgICBsb2NhbCBsYWJlbD0iJDEiCiAg"\ + "ICBsb2NhbCBmaWxlcGF0aD0iJDIiCiAgICBsb2NhbCBiYWNrdXBfZm9sZGVyPSIkMyIKICAgIAog"\ + "ICAgZWNobyAiW3Jlc3RvcmVfZmlsZV0gbGFiZWw9JGxhYmVsIGZpbGVwYXRoPSRmaWxlcGF0aCBi"\ + "YWNrdXBfZm9sZGVyPSRiYWNrdXBfZm9sZGVyIgogICAgCiAgICBsb2NhbCBzb3VyY2VfZGlyPSIk"\ + "e2JhY2t1cF9mb2xkZXJ9L2ZpbGVfJHtsYWJlbH0iCiAgICAKICAgIGlmIFsgISAtZCAiJHtzb3Vy"\ + "Y2VfZGlyfSIgXTsgdGhlbgogICAgICAgIGVjaG8gIkJhY2t1cCBmb3IgbGFiZWwgJyR7bGFiZWx9"\ + "JyBub3QgZm91bmQgaW4gJHtiYWNrdXBfZm9sZGVyfSIKICAgICAgICByZXR1cm4gMQogICAgZmkK"\ + "ICAgIAogICAgIyBGaWxlIGlzIGJhY2tlZCB1cCBhcyAke2xhYmVsfS5kYXRhLCBub3Qgb3JpZ2lu"\ + "YWwgZmlsZW5hbWUKICAgIGlmIFsgLWYgIiR7c291cmNlX2Rpcn0vJHtsYWJlbH0uZGF0YSIgXTsg"\ + "dGhlbgogICAgICAgICMgRW5zdXJlIHBhcmVudCBkaXJlY3RvcnkgZXhpc3RzCiAgICAgICAgbG9j"\ + "YWwgZmlsZV9wYXJlbnQKICAgICAgICBmaWxlX3BhcmVudD0kKGRpcm5hbWUgIiR7ZmlsZXBhdGh9"\ + "IikKICAgICAgICBta2RpciAtcCAiJHtmaWxlX3BhcmVudH0iCiAgICAgICAgCiAgICAgICAgIyBS"\ + "ZW1vdmUgZXhpc3RpbmcgZmlsZSBpZiBwcmVzZW50CiAgICAgICAgcm0gLWYgIiR7ZmlsZXBhdGh9"\ + "IgogICAgICAgIAogICAgICAgICMgQ29weSBmcm9tIGJhY2t1cCAtIHJlc3RvcmUgZnJvbSBsYWJl"\ + "bC5kYXRhIHRvIHRhcmdldCBmaWxlcGF0aAogICAgICAgIGNwICIke3NvdXJjZV9kaXJ9LyR7bGFi"\ + "ZWx9LmRhdGEiICIke2ZpbGVwYXRofSIKICAgICAgICBlY2hvICJGaWxlICR7ZmlsZXBhdGh9IHJl"\ + "c3RvcmVkIHN1Y2Nlc3NmdWxseSBmcm9tICR7bGFiZWx9LmRhdGEiCiAgICBlbHNlCiAgICAgICAg"\ + "ZWNobyAiQmFja3VwIGZpbGUgJHtzb3VyY2VfZGlyfS8ke2xhYmVsfS5kYXRhIG5vdCBmb3VuZCIK"\ + "ICAgICAgICByZXR1cm4gMQogICAgZmkKfQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgUEFUSCBP"\ + "UEVSQVRJT05TCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKY3JlYXRlX3BhdGgoKSB7CiAgICBsb2Nh"\ + "bCBsYWJlbD0iJDEiCiAgICBsb2NhbCBwYXRoPSIkMiIKICAgIAogICAgZWNobyAiW2NyZWF0ZV9w"\ + "YXRoXSBsYWJlbD0kbGFiZWwgcGF0aD0kcGF0aCIKICAgIAogICAgaWYgWyAtZCAiJHtwYXRofSIg"\ + "XTsgdGhlbgogICAgICAgIGVjaG8gIlBhdGggJHtwYXRofSBhbHJlYWR5IGV4aXN0cyAtIHVuY2hh"\ + "bmdlZCIKICAgIGVsc2UKICAgICAgICBlY2hvICJDcmVhdGluZyBwYXRoICR7cGF0aH0iCiAgICAg"\ + "ICAgbWtkaXIgLXAgIiR7cGF0aH0iCiAgICBmaQp9CgpkZXN0cm95X3BhdGgoKSB7CiAgICBsb2Nh"\ + "bCBsYWJlbD0iJDEiCiAgICBsb2NhbCBwYXRoPSIkMiIKICAgIAogICAgZWNobyAiW2Rlc3Ryb3lf"\ + "cGF0aF0gbGFiZWw9JGxhYmVsIHBhdGg9JHBhdGgiCiAgICAKICAgIGlmIFsgLWQgIiR7cGF0aH0i"\ + "IF07IHRoZW4KICAgICAgICBsb2NhbCBwYXRoX3BhcmVudAogICAgICAgIHBhdGhfcGFyZW50PSQo"\ + "ZGlybmFtZSAiJHtwYXRofSIpCiAgICAgICAgbG9jYWwgcGF0aF9jaGlsZAogICAgICAgIHBhdGhf"\ + "Y2hpbGQ9JChiYXNlbmFtZSAiJHtwYXRofSIpCiAgICAgICAgCiAgICAgICAgZWNobyAiRGVzdHJv"\ + "eWluZyBwYXRoICR7cGF0aH0iCiAgICAgICAgZG9ja2VyIHJ1biAtLXJtIC12ICIke3BhdGhfcGFy"\ + "ZW50fSI6L3ZvbHVtZSBkZWJpYW4gYmFzaCAtYyAicm0gLXJmIC92b2x1bWUvJHtwYXRoX2NoaWxk"\ + "fSIKICAgIGVsc2UKICAgICAgICBlY2hvICJQYXRoICR7cGF0aH0gZG9lcyBub3QgZXhpc3QgLSBu"\ + "b3RoaW5nIHRvIGRlc3Ryb3kiCiAgICBmaQp9CgpiYWNrdXBfcGF0aCgpIHsKICAgIGxvY2FsIGxh"\ + "YmVsPSIkMSIKICAgIGxvY2FsIHBhdGg9IiQyIgogICAgbG9jYWwgYmFja3VwX2ZvbGRlcj0iJDMi"\ + "CiAgICAKICAgIGVjaG8gIltiYWNrdXBfcGF0aF0gbGFiZWw9JGxhYmVsIHBhdGg9JHBhdGggYmFj"\ + "a3VwX2ZvbGRlcj0kYmFja3VwX2ZvbGRlciIKICAgIAogICAgIyBDcmVhdGUgc3ViZm9sZGVyIHVz"\ + "aW5nIHRoZSBsYWJlbAogICAgbG9jYWwgdGFyZ2V0X2Rpcj0iJHtiYWNrdXBfZm9sZGVyfS9wYXRo"\ + "XyR7bGFiZWx9IgogICAgbWtkaXIgLXAgIiR7dGFyZ2V0X2Rpcn0iCiAgICAKICAgIGlmIFsgLWQg"\ + "IiR7cGF0aH0iIF07IHRoZW4KICAgICAgICAjIFN0b3JlIG1ldGFkYXRhIGFib3V0IHRoZSBwYXRo"\ + "CiAgICAgICAgZWNobyAiJHtwYXRofSIgPiAiJHt0YXJnZXRfZGlyfS9vcmlnaW5hbF9wYXRoLnR4"\ + "dCIKICAgICAgICAKICAgICAgICAjIENyZWF0ZSB0YXIgYXJjaGl2ZSBvZiB0aGUgcGF0aCBjb250"\ + "ZW50cwogICAgICAgIGRvY2tlciBydW4gLS1ybSBcCiAgICAgICAgICAgIC12ICIke3BhdGh9Ijov"\ + "c291cmNlIFwKICAgICAgICAgICAgLXYgIiR7dGFyZ2V0X2Rpcn0iOi9iYWNrdXAgXAogICAgICAg"\ + "ICAgICBkZWJpYW4gYmFzaCAtYyAidGFyIC1jemYgL2JhY2t1cC9kYXRhLnRhci5neiAtQyAvc291"\ + "cmNlIC4gJiYgY2hvd24gLVIgJE1ZSUQ6JE1ZR1JQIC9iYWNrdXAiCiAgICAgICAgCiAgICAgICAg"\ + "ZWNobyAiUGF0aCAke3BhdGh9IGJhY2tlZCB1cCBzdWNjZXNzZnVsbHkiCiAgICBlbHNlCiAgICAg"\ + "ICAgZWNobyAiUGF0aCAke3BhdGh9IGRvZXMgbm90IGV4aXN0IC0gbm90aGluZyB0byBiYWNrdXAi"\ + "CiAgICBmaQp9CgpyZXN0b3JlX3BhdGgoKSB7CiAgICBsb2NhbCBsYWJlbD0iJDEiCiAgICBsb2Nh"\ + "bCBwYXRoPSIkMiIKICAgIGxvY2FsIGJhY2t1cF9mb2xkZXI9IiQzIgogICAgCiAgICBlY2hvICJb"\ + "cmVzdG9yZV9wYXRoXSBsYWJlbD0kbGFiZWwgcGF0aD0kcGF0aCBiYWNrdXBfZm9sZGVyPSRiYWNr"\ + "dXBfZm9sZGVyIgogICAgCiAgICBsb2NhbCBzb3VyY2VfZGlyPSIke2JhY2t1cF9mb2xkZXJ9L3Bh"\ + "dGhfJHtsYWJlbH0iCiAgICAKICAgIGlmIFsgISAtZCAiJHtzb3VyY2VfZGlyfSIgXTsgdGhlbgog"\ + "ICAgICAgIGVjaG8gIkJhY2t1cCBmb3IgbGFiZWwgJyR7bGFiZWx9JyBub3QgZm91bmQgaW4gJHti"\ + "YWNrdXBfZm9sZGVyfSIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIAogICAgaWYgWyAtZiAi"\ + "JHtzb3VyY2VfZGlyfS9kYXRhLnRhci5neiIgXTsgdGhlbgogICAgICAgICMgRW5zdXJlIHBhdGgg"\ + "ZXhpc3RzCiAgICAgICAgbWtkaXIgLXAgIiR7cGF0aH0iCiAgICAgICAgCiAgICAgICAgIyBDbGVh"\ + "ciBleGlzdGluZyBjb250ZW50cwogICAgICAgIGVjaG8gIkNsZWFyaW5nIGV4aXN0aW5nIGNvbnRl"\ + "bnRzIG9mICR7cGF0aH0iCiAgICAgICAgZG9ja2VyIHJ1biAtLXJtIC12ICIke3BhdGh9IjovdGFy"\ + "Z2V0IGRlYmlhbiBiYXNoIC1jICJybSAtcmYgL3RhcmdldC97KiwuKn0gMj4vZGV2L251bGwgfHwg"\ + "dHJ1ZSIKICAgICAgICAKICAgICAgICAjIEV4dHJhY3QgYmFja3VwCiAgICAgICAgZG9ja2VyIHJ1"\ + "biAtLXJtIFwKICAgICAgICAgICAgLXYgIiR7cGF0aH0iOi90YXJnZXQgXAogICAgICAgICAgICAt"\ "diAiJHtzb3VyY2VfZGlyfSI6L2JhY2t1cCBcCiAgICAgICAgICAgIGRlYmlhbiBiYXNoIC1jICJ0"\ "YXIgLXh6ZiAvYmFja3VwL2RhdGEudGFyLmd6IC1DIC90YXJnZXQiCiAgICAgICAgCiAgICAgICAg"\ - "ZWNobyAiVm9sdW1lICR7dm9sdW1lX25hbWV9IHJlc3RvcmVkIHN1Y2Nlc3NmdWxseSIKICAgIGVs"\ - "c2UKICAgICAgICBlY2hvICJCYWNrdXAgZmlsZSAke3NvdXJjZV9kaXJ9L2RhdGEudGFyLmd6IG5v"\ - "dCBmb3VuZCIKICAgICAgICByZXR1cm4gMQogICAgZmkKfQoKIyA9PT09PT09PT09PT09PT09PT09"\ - "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ - "CiMgTUFJTiBCQUNLVVAvUkVTVE9SRSBPUkNIRVNUUkFUSU9OCiMgPT09PT09PT09PT09PT09PT09"\ - "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ - "PQoKIyBQcm9jZXNzIG11bHRpcGxlIGl0ZW1zIGZvciBjcmVhdGlvbgojIFVzYWdlOiBjcmVhdGVf"\ - "aXRlbXMgdHlwZTE6bGFiZWwxOmxvY2F0aW9uMSB0eXBlMjpsYWJlbDI6bG9jYXRpb24yIC4uLgpj"\ - "cmVhdGVfaXRlbXMoKSB7CiAgICBlY2hvICJTdGFydGluZyBjcmVhdGUgb3BlcmF0aW9ucyIKICAg"\ - "IAogICAgIyBQcm9jZXNzIGVhY2ggaXRlbQogICAgZm9yIGl0ZW0gaW4gIiRAIjsgZG8KICAgICAg"\ - "ICBJRlM9JzonIHJlYWQgLXIgdHlwZSBsYWJlbCBsb2NhdGlvbiA8PDwgIiRpdGVtIgogICAgICAg"\ - "IAogICAgICAgIGNhc2UgIiR0eXBlIiBpbgogICAgICAgICAgICBmaWxlKQogICAgICAgICAgICAg"\ - "ICAgY3JlYXRlX2ZpbGUgIiRsYWJlbCIgIiRsb2NhdGlvbiIKICAgICAgICAgICAgICAgIDs7CiAg"\ - "ICAgICAgICAgIHBhdGgpCiAgICAgICAgICAgICAgICBjcmVhdGVfcGF0aCAiJGxhYmVsIiAiJGxv"\ - "Y2F0aW9uIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgdm9sdW1lKQogICAgICAgICAg"\ - "ICAgICAgY3JlYXRlX3ZvbHVtZSAiJGxhYmVsIiAiJGxvY2F0aW9uIgogICAgICAgICAgICAgICAg"\ - "OzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGVjaG8gIlVua25vd24gdHlwZTogJHR5"\ - "cGUgKG11c3QgYmUgZmlsZSwgcGF0aCwgb3Igdm9sdW1lKSIKICAgICAgICAgICAgICAgIDs7CiAg"\ - "ICAgICAgZXNhYwogICAgZG9uZQogICAgCiAgICBlY2hvICJDcmVhdGUgb3BlcmF0aW9ucyBjb21w"\ - "bGV0ZWQiCn0KCiMgUHJvY2VzcyBtdWx0aXBsZSBpdGVtcyBmb3IgZGVzdHJ1Y3Rpb24KIyBVc2Fn"\ - "ZTogZGVzdHJveV9pdGVtcyB0eXBlMTpsYWJlbDE6bG9jYXRpb24xIHR5cGUyOmxhYmVsMjpsb2Nh"\ - "dGlvbjIgLi4uCmRlc3Ryb3lfaXRlbXMoKSB7CiAgICBlY2hvICJTdGFydGluZyBkZXN0cm95IG9w"\ - "ZXJhdGlvbnMiCiAgICAKICAgICMgUHJvY2VzcyBlYWNoIGl0ZW0KICAgIGZvciBpdGVtIGluICIk"\ - "QCI7IGRvCiAgICAgICAgSUZTPSc6JyByZWFkIC1yIHR5cGUgbGFiZWwgbG9jYXRpb24gPDw8ICIk"\ - "aXRlbSIKICAgICAgICAKICAgICAgICBjYXNlICIkdHlwZSIgaW4KICAgICAgICAgICAgZmlsZSkK"\ - "ICAgICAgICAgICAgICAgIGRlc3Ryb3lfZmlsZSAiJGxhYmVsIiAiJGxvY2F0aW9uIgogICAgICAg"\ - "ICAgICAgICAgOzsKICAgICAgICAgICAgcGF0aCkKICAgICAgICAgICAgICAgIGRlc3Ryb3lfcGF0"\ - "aCAiJGxhYmVsIiAiJGxvY2F0aW9uIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgdm9s"\ - "dW1lKQogICAgICAgICAgICAgICAgZGVzdHJveV92b2x1bWUgIiRsYWJlbCIgIiRsb2NhdGlvbiIK"\ - "ICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICBlY2hvICJV"\ - "bmtub3duIHR5cGU6ICR0eXBlIChtdXN0IGJlIGZpbGUsIHBhdGgsIG9yIHZvbHVtZSkiCiAgICAg"\ - "ICAgICAgICAgICA7OwogICAgICAgIGVzYWMKICAgIGRvbmUKICAgIAogICAgZWNobyAiRGVzdHJv"\ - "eSBvcGVyYXRpb25zIGNvbXBsZXRlZCIKfQoKIyBQcm9jZXNzIG11bHRpcGxlIGl0ZW1zIGZvciBi"\ - "YWNrdXAKIyBVc2FnZTogYmFja3VwX2l0ZW1zIHR5cGUxOmxhYmVsMTpsb2NhdGlvbjEgdHlwZTI6"\ - "bGFiZWwyOmxvY2F0aW9uMiAuLi4KYmFja3VwX2l0ZW1zKCkgewogICAgX2NoZWNrX3JlcXVpcmVk"\ - "X2Vudl92YXJzICJCQUNLVVBfRklMRSIgIlRFTVBfRElSIgogICAgbG9jYWwgYmFja3VwX2ZpbGU9"\ - "IiR7QkFDS1VQX0ZJTEV9IgogICAgbG9jYWwgdGVtcF9kaXI9IiR7VEVNUF9ESVJ9IgogICAgCiAg"\ - "ICBsb2NhbCBiYWNrdXBfdGVtcF9wYXRoPSIke3RlbXBfZGlyfS9iYWNrdXAiCiAgICBta2RpciAt"\ - "cCAiJGJhY2t1cF90ZW1wX3BhdGgiCiAgICAKICAgIGVjaG8gIlN0YXJ0aW5nIGJhY2t1cCB0byAk"\ - "e2JhY2t1cF9maWxlfSIKICAgIAogICAgIyBQcm9jZXNzIGVhY2ggaXRlbQogICAgZm9yIGl0ZW0g"\ - "aW4gIiRAIjsgZG8KICAgICAgICBJRlM9JzonIHJlYWQgLXIgdHlwZSBsYWJlbCBsb2NhdGlvbiA8"\ - "PDwgIiRpdGVtIgogICAgICAgIAogICAgICAgIGNhc2UgIiR0eXBlIiBpbgogICAgICAgICAgICBm"\ - "aWxlKQogICAgICAgICAgICAgICAgYmFja3VwX2ZpbGUgIiRsYWJlbCIgIiRsb2NhdGlvbiIgIiRi"\ - "YWNrdXBfdGVtcF9wYXRoIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgcGF0aCkKICAg"\ - "ICAgICAgICAgICAgIGJhY2t1cF9wYXRoICIkbGFiZWwiICIkbG9jYXRpb24iICIkYmFja3VwX3Rl"\ - "bXBfcGF0aCIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIHZvbHVtZSkKICAgICAgICAg"\ - "ICAgICAgIGJhY2t1cF92b2x1bWUgIiRsYWJlbCIgIiRsb2NhdGlvbiIgIiRiYWNrdXBfdGVtcF9w"\ - "YXRoIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGVj"\ - "aG8gIlVua25vd24gdHlwZTogJHR5cGUgKG11c3QgYmUgZmlsZSwgcGF0aCwgb3Igdm9sdW1lKSIK"\ - "ICAgICAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwogICAgZG9uZQogICAgCiAgICAjIENyZWF0"\ - "ZSBmaW5hbCBiYWNrdXAgYXJjaGl2ZQogICAgZWNobyAiQ3JlYXRpbmcgYmFja3VwIGFyY2hpdmUg"\ - "JHtiYWNrdXBfZmlsZX0iCiAgICB0YXIgLWN6ZiAiJGJhY2t1cF9maWxlIiAtQyAiJGJhY2t1cF90"\ - "ZW1wX3BhdGgiIC4KICAgIAogICAgIyBDbGVhbiB1cCB0ZW1wIGRpcmVjdG9yeQogICAgcm0gLXJm"\ - "ICIkYmFja3VwX3RlbXBfcGF0aCIKICAgIAogICAgZWNobyAiQmFja3VwIGNvbXBsZXRlZCBzdWNj"\ - "ZXNzZnVsbHkiCn0KCiMgUHJvY2VzcyBtdWx0aXBsZSBpdGVtcyBmb3IgcmVzdG9yZQojIFVzYWdl"\ - "OiByZXN0b3JlX2l0ZW1zIHR5cGUxOmxhYmVsMTpsb2NhdGlvbjEgdHlwZTI6bGFiZWwyOmxvY2F0"\ - "aW9uMiAuLi4KcmVzdG9yZV9pdGVtcygpIHsKICAgIF9jaGVja19yZXF1aXJlZF9lbnZfdmFycyAi"\ - "QkFDS1VQX0ZJTEUiICJURU1QX0RJUiIKICAgIGxvY2FsIGJhY2t1cF9maWxlPSIke0JBQ0tVUF9G"\ - "SUxFfSIKICAgIGxvY2FsIHRlbXBfZGlyPSIke1RFTVBfRElSfSIKICAgIAogICAgaWYgWyAhIC1m"\ - "ICIkYmFja3VwX2ZpbGUiIF07IHRoZW4KICAgICAgICBlY2hvICJCYWNrdXAgZmlsZSAkYmFja3Vw"\ - "X2ZpbGUgbm90IGZvdW5kIgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgCiAgICBsb2NhbCBy"\ - "ZXN0b3JlX3RlbXBfcGF0aD0iJHt0ZW1wX2Rpcn0vcmVzdG9yZSIKICAgIG1rZGlyIC1wICIkcmVz"\ - "dG9yZV90ZW1wX3BhdGgiCiAgICAKICAgIGVjaG8gIlN0YXJ0aW5nIHJlc3RvcmUgZnJvbSAke2Jh"\ - "Y2t1cF9maWxlfSIKICAgIAogICAgIyBFeHRyYWN0IGJhY2t1cCBhcmNoaXZlCiAgICBlY2hvICJF"\ - "eHRyYWN0aW5nIGJhY2t1cCBhcmNoaXZlIgogICAgdGFyIC14emYgIiRiYWNrdXBfZmlsZSIgLUMg"\ - "IiRyZXN0b3JlX3RlbXBfcGF0aCIKICAgIAogICAgIyBQcm9jZXNzIGVhY2ggaXRlbQogICAgZm9y"\ - "IGl0ZW0gaW4gIiRAIjsgZG8KICAgICAgICBJRlM9JzonIHJlYWQgLXIgdHlwZSBsYWJlbCBsb2Nh"\ - "dGlvbiA8PDwgIiRpdGVtIgogICAgICAgIAogICAgICAgIGNhc2UgIiR0eXBlIiBpbgogICAgICAg"\ - "ICAgICBmaWxlKQogICAgICAgICAgICAgICAgcmVzdG9yZV9maWxlICIkbGFiZWwiICIkbG9jYXRp"\ - "b24iICIkcmVzdG9yZV90ZW1wX3BhdGgiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBw"\ - "YXRoKQogICAgICAgICAgICAgICAgcmVzdG9yZV9wYXRoICIkbGFiZWwiICIkbG9jYXRpb24iICIk"\ - "cmVzdG9yZV90ZW1wX3BhdGgiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICB2b2x1bWUp"\ - "CiAgICAgICAgICAgICAgICByZXN0b3JlX3ZvbHVtZSAiJGxhYmVsIiAiJGxvY2F0aW9uIiAiJHJl"\ - "c3RvcmVfdGVtcF9wYXRoIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAg"\ - "ICAgICAgICAgIGVjaG8gIlVua25vd24gdHlwZTogJHR5cGUgKG11c3QgYmUgZmlsZSwgcGF0aCwg"\ - "b3Igdm9sdW1lKSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwogICAgZG9uZQogICAg"\ - "CiAgICAjIENsZWFuIHVwIHRlbXAgZGlyZWN0b3J5CiAgICBybSAtcmYgIiRyZXN0b3JlX3RlbXBf"\ - "cGF0aCIKICAgIAogICAgZWNobyAiUmVzdG9yZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Igp9Cgoj"\ - "ICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ - "PT09PT09PT09PT09PT09PT09PT09PQojICMgTEVHQUNZIENPTVBBVElCSUxJVFkgV1JBUFBFUiAo"\ - "Y2FuIGJlIHJlbW92ZWQgb25jZSBtaWdyYXRpb24gaXMgY29tcGxldGUpCiMgIyA9PT09PT09PT09"\ - "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ - "PT09PT09PT09CgojICMgQ29udmVydCBvbGQgZm9ybWF0IHRvIG5ldyBmb3JtYXQKIyAjIElucHV0"\ - "OiBrZXk9dmFsdWUgKGUuZy4sICJ2b2x1bWU9bXlhcHBfZGF0YSIpCiMgIyBPdXRwdXQ6IHR5cGU6"\ - "bGFiZWw6bG9jYXRpb24gKGUuZy4sICJ2b2x1bWU6ZGF0YTpteWFwcF9kYXRhIikKIyBjb252ZXJ0"\ - "X2xlZ2FjeV9mb3JtYXQoKSB7CiMgICAgIGxvY2FsIHBhaXI9IiQxIgojICAgICBsb2NhbCBrZXk9"\ - "IiR7cGFpciUlPSp9IgojICAgICBsb2NhbCB2YWx1ZT0iJHtwYWlyIyo9fSIKICAgIAojICAgICAj"\ - "IEdlbmVyYXRlIGEgbGFiZWwgZnJvbSB0aGUgdmFsdWUgKHNpbXBsaWZpZWQgLSB5b3UgbWF5IHdh"\ - "bnQgbW9yZSBzb3BoaXN0aWNhdGVkIGxvZ2ljKQojICAgICBsb2NhbCBsYWJlbAojICAgICBsYWJl"\ - "bD0kKGVjaG8gIiR2YWx1ZSIgfCBzZWQgJ3MvW15hLXpBLVowLTlfLV0vXy9nJykKICAgIAojICAg"\ - "ICBlY2hvICIke2tleX06JHtsYWJlbH06JHt2YWx1ZX0iCiMgfQo="; + "ZWNobyAiUGF0aCAke3BhdGh9IHJlc3RvcmVkIHN1Y2Nlc3NmdWxseSIKICAgIGVsc2UKICAgICAg"\ + "ICBlY2hvICJCYWNrdXAgZmlsZSAke3NvdXJjZV9kaXJ9L2RhdGEudGFyLmd6IG5vdCBmb3VuZCIK"\ + "ICAgICAgICByZXR1cm4gMQogICAgZmkKfQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgVk9MVU1F"\ + "IE9QRVJBVElPTlMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpjcmVhdGVfdm9sdW1lKCkgewogICAg"\ + "bG9jYWwgbGFiZWw9IiQxIgogICAgbG9jYWwgdm9sdW1lX25hbWU9IiQyIgogICAgCiAgICBlY2hv"\ + "ICJbY3JlYXRlX3ZvbHVtZV0gbGFiZWw9JGxhYmVsIHZvbHVtZT0kdm9sdW1lX25hbWUiCiAgICAK"\ + "ICAgIGlmIGRvY2tlciB2b2x1bWUgbHMgfCBncmVwIC1xICJebG9jYWxbWzpzcGFjZTpdXSoke3Zv"\ + "bHVtZV9uYW1lfSQiOyB0aGVuCiAgICAgICAgZWNobyAiVm9sdW1lICR7dm9sdW1lX25hbWV9IGFs"\ + "cmVhZHkgZXhpc3RzIC0gdW5jaGFuZ2VkIgogICAgZWxzZQogICAgICAgIGVjaG8gIkNyZWF0aW5n"\ + "IHZvbHVtZSAke3ZvbHVtZV9uYW1lfSIKICAgICAgICBkb2NrZXIgdm9sdW1lIGNyZWF0ZSAiJHt2"\ + "b2x1bWVfbmFtZX0iCiAgICBmaQp9CgpkZXN0cm95X3ZvbHVtZSgpIHsKICAgIGxvY2FsIGxhYmVs"\ + "PSIkMSIKICAgIGxvY2FsIHZvbHVtZV9uYW1lPSIkMiIKICAgIAogICAgZWNobyAiW2Rlc3Ryb3lf"\ + "dm9sdW1lXSBsYWJlbD0kbGFiZWwgdm9sdW1lPSR2b2x1bWVfbmFtZSIKICAgIAogICAgaWYgZG9j"\ + "a2VyIHZvbHVtZSBscyB8IGdyZXAgLXEgIl5sb2NhbFtbOnNwYWNlOl1dKiR7dm9sdW1lX25hbWV9"\ + "JCI7IHRoZW4KICAgICAgICBlY2hvICJEZXN0cm95aW5nIHZvbHVtZSAke3ZvbHVtZV9uYW1lfSIK"\ + "ICAgICAgICBkb2NrZXIgdm9sdW1lIHJtICIke3ZvbHVtZV9uYW1lfSIKICAgIGVsc2UKICAgICAg"\ + "ICBlY2hvICJWb2x1bWUgJHt2b2x1bWVfbmFtZX0gZG9lcyBub3QgZXhpc3QgLSBub3RoaW5nIHRv"\ + "IGRlc3Ryb3kiCiAgICBmaQp9CgpiYWNrdXBfdm9sdW1lKCkgewogICAgbG9jYWwgbGFiZWw9IiQx"\ + "IgogICAgbG9jYWwgdm9sdW1lX25hbWU9IiQyIgogICAgbG9jYWwgYmFja3VwX2ZvbGRlcj0iJDMi"\ + "CiAgICAKICAgIGVjaG8gIltiYWNrdXBfdm9sdW1lXSBsYWJlbD0kbGFiZWwgdm9sdW1lPSR2b2x1"\ + "bWVfbmFtZSBiYWNrdXBfZm9sZGVyPSRiYWNrdXBfZm9sZGVyIgogICAgCiAgICAjIENyZWF0ZSBz"\ + "dWJmb2xkZXIgdXNpbmcgdGhlIGxhYmVsCiAgICBsb2NhbCB0YXJnZXRfZGlyPSIke2JhY2t1cF9m"\ + "b2xkZXJ9L3ZvbHVtZV8ke2xhYmVsfSIKICAgIG1rZGlyIC1wICIke3RhcmdldF9kaXJ9IgogICAg"\ + "CiAgICBpZiBkb2NrZXIgdm9sdW1lIGxzIHwgZ3JlcCAtcSAiXmxvY2FsW1s6c3BhY2U6XV0qJHt2"\ + "b2x1bWVfbmFtZX0kIjsgdGhlbgogICAgICAgICMgU3RvcmUgbWV0YWRhdGEgYWJvdXQgdGhlIHZv"\ + "bHVtZQogICAgICAgIGVjaG8gIiR7dm9sdW1lX25hbWV9IiA+ICIke3RhcmdldF9kaXJ9L29yaWdp"\ + "bmFsX3ZvbHVtZS50eHQiCiAgICAgICAgCiAgICAgICAgIyBDcmVhdGUgdGFyIGFyY2hpdmUgb2Yg"\ + "dGhlIHZvbHVtZSBjb250ZW50cwogICAgICAgIGRvY2tlciBydW4gLS1ybSBcCiAgICAgICAgICAg"\ + "IC12ICIke3ZvbHVtZV9uYW1lfSI6L3NvdXJjZSBcCiAgICAgICAgICAgIC12ICIke3RhcmdldF9k"\ + "aXJ9IjovYmFja3VwIFwKICAgICAgICAgICAgZGViaWFuIGJhc2ggLWMgInRhciAtY3pmIC9iYWNr"\ + "dXAvZGF0YS50YXIuZ3ogLUMgL3NvdXJjZSAuICYmIGNob3duIC1SICRNWUlEOiRNWUdSUCAvYmFj"\ + "a3VwIgogICAgICAgIAogICAgICAgIGVjaG8gIlZvbHVtZSAke3ZvbHVtZV9uYW1lfSBiYWNrZWQg"\ + "dXAgc3VjY2Vzc2Z1bGx5IgogICAgZWxzZQogICAgICAgIGVjaG8gIlZvbHVtZSAke3ZvbHVtZV9u"\ + "YW1lfSBkb2VzIG5vdCBleGlzdCAtIG5vdGhpbmcgdG8gYmFja3VwIgogICAgZmkKfQoKcmVzdG9y"\ + "ZV92b2x1bWUoKSB7CiAgICBsb2NhbCBsYWJlbD0iJDEiCiAgICBsb2NhbCB2b2x1bWVfbmFtZT0i"\ + "JDIiCiAgICBsb2NhbCBiYWNrdXBfZm9sZGVyPSIkMyIKCiAgICBlY2hvICJbcmVzdG9yZV92b2x1"\ + "bWVdIGxhYmVsPSRsYWJlbCB2b2x1bWU9JHZvbHVtZV9uYW1lIGJhY2t1cF9mb2xkZXI9JGJhY2t1"\ + "cF9mb2xkZXIiCiAgICAKICAgIGxvY2FsIHNvdXJjZV9kaXI9IiR7YmFja3VwX2ZvbGRlcn0vdm9s"\ + "dW1lXyR7bGFiZWx9IgogICAgCiAgICBpZiBbICEgLWQgIiR7c291cmNlX2Rpcn0iIF07IHRoZW4K"\ + "ICAgICAgICBlY2hvICJCYWNrdXAgZm9yIGxhYmVsICcke2xhYmVsfScgbm90IGZvdW5kIGluICR7"\ + "YmFja3VwX2ZvbGRlcn0iCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAgIGlmIFsgLWYg"\ + "IiR7c291cmNlX2Rpcn0vZGF0YS50YXIuZ3oiIF07IHRoZW4KICAgICAgICAjIFJlbW92ZSBleGlz"\ + "dGluZyB2b2x1bWUgaWYgcHJlc2VudAogICAgICAgIGlmIGRvY2tlciB2b2x1bWUgbHMgfCBncmVw"\ + "IC1xICJebG9jYWxbWzpzcGFjZTpdXSoke3ZvbHVtZV9uYW1lfSQiOyB0aGVuCiAgICAgICAgICAg"\ + "IGVjaG8gIlJlbW92aW5nIGV4aXN0aW5nIHZvbHVtZSAke3ZvbHVtZV9uYW1lfSIKICAgICAgICAg"\ + "ICAgZG9ja2VyIHZvbHVtZSBybSAiJHt2b2x1bWVfbmFtZX0iCiAgICAgICAgZmkKICAgICAgICAK"\ + "ICAgICAgICAjIENyZWF0ZSBuZXcgdm9sdW1lCiAgICAgICAgZG9ja2VyIHZvbHVtZSBjcmVhdGUg"\ + "IiR7dm9sdW1lX25hbWV9IgogICAgICAgIAogICAgICAgICMgRXh0cmFjdCBiYWNrdXAgaW50byB2"\ + "b2x1bWUKICAgICAgICBkb2NrZXIgcnVuIC0tcm0gXAogICAgICAgICAgICAtdiAiJHt2b2x1bWVf"\ + "bmFtZX0iOi90YXJnZXQgXAogICAgICAgICAgICAtdiAiJHtzb3VyY2VfZGlyfSI6L2JhY2t1cCBc"\ + "CiAgICAgICAgICAgIGRlYmlhbiBiYXNoIC1jICJ0YXIgLXh6ZiAvYmFja3VwL2RhdGEudGFyLmd6"\ + "IC1DIC90YXJnZXQiCiAgICAgICAgCiAgICAgICAgZWNobyAiVm9sdW1lICR7dm9sdW1lX25hbWV9"\ + "IHJlc3RvcmVkIHN1Y2Nlc3NmdWxseSIKICAgIGVsc2UKICAgICAgICBlY2hvICJCYWNrdXAgZmls"\ + "ZSAke3NvdXJjZV9kaXJ9L2RhdGEudGFyLmd6IG5vdCBmb3VuZCIKICAgICAgICByZXR1cm4gMQog"\ + "ICAgZmkKfQoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgTUFJTiBCQUNLVVAvUkVTVE9SRSBPUkNI"\ + "RVNUUkFUSU9OCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKIyBQcm9jZXNzIG11bHRpcGxlIGl0ZW1z"\ + "IGZvciBjcmVhdGlvbgojIFVzYWdlOiBjcmVhdGVfaXRlbXMgdHlwZTE6bGFiZWwxOmxvY2F0aW9u"\ + "MSB0eXBlMjpsYWJlbDI6bG9jYXRpb24yIC4uLgpjcmVhdGVfaXRlbXMoKSB7CiAgICBlY2hvICJT"\ + "dGFydGluZyBjcmVhdGUgb3BlcmF0aW9ucyIKICAgIAogICAgIyBQcm9jZXNzIGVhY2ggaXRlbQog"\ + "ICAgZm9yIGl0ZW0gaW4gIiRAIjsgZG8KICAgICAgICBJRlM9JzonIHJlYWQgLXIgdHlwZSBsYWJl"\ + "bCBsb2NhdGlvbiA8PDwgIiRpdGVtIgogICAgICAgIAogICAgICAgIGNhc2UgIiR0eXBlIiBpbgog"\ + "ICAgICAgICAgICBmaWxlKQogICAgICAgICAgICAgICAgY3JlYXRlX2ZpbGUgIiRsYWJlbCIgIiRs"\ + "b2NhdGlvbiIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIHBhdGgpCiAgICAgICAgICAg"\ + "ICAgICBjcmVhdGVfcGF0aCAiJGxhYmVsIiAiJGxvY2F0aW9uIgogICAgICAgICAgICAgICAgOzsK"\ + "ICAgICAgICAgICAgdm9sdW1lKQogICAgICAgICAgICAgICAgY3JlYXRlX3ZvbHVtZSAiJGxhYmVs"\ + "IiAiJGxvY2F0aW9uIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAg"\ + "ICAgICAgIGVjaG8gIlVua25vd24gdHlwZTogJHR5cGUgKG11c3QgYmUgZmlsZSwgcGF0aCwgb3Ig"\ + "dm9sdW1lKSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwogICAgZG9uZQogICAgCiAg"\ + "ICBlY2hvICJDcmVhdGUgb3BlcmF0aW9ucyBjb21wbGV0ZWQiCn0KCiMgUHJvY2VzcyBtdWx0aXBs"\ + "ZSBpdGVtcyBmb3IgZGVzdHJ1Y3Rpb24KIyBVc2FnZTogZGVzdHJveV9pdGVtcyB0eXBlMTpsYWJl"\ + "bDE6bG9jYXRpb24xIHR5cGUyOmxhYmVsMjpsb2NhdGlvbjIgLi4uCmRlc3Ryb3lfaXRlbXMoKSB7"\ + "CiAgICBlY2hvICJTdGFydGluZyBkZXN0cm95IG9wZXJhdGlvbnMiCiAgICAKICAgICMgUHJvY2Vz"\ + "cyBlYWNoIGl0ZW0KICAgIGZvciBpdGVtIGluICIkQCI7IGRvCiAgICAgICAgSUZTPSc6JyByZWFk"\ + "IC1yIHR5cGUgbGFiZWwgbG9jYXRpb24gPDw8ICIkaXRlbSIKICAgICAgICAKICAgICAgICBjYXNl"\ + "ICIkdHlwZSIgaW4KICAgICAgICAgICAgZmlsZSkKICAgICAgICAgICAgICAgIGRlc3Ryb3lfZmls"\ + "ZSAiJGxhYmVsIiAiJGxvY2F0aW9uIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgcGF0"\ + "aCkKICAgICAgICAgICAgICAgIGRlc3Ryb3lfcGF0aCAiJGxhYmVsIiAiJGxvY2F0aW9uIgogICAg"\ + "ICAgICAgICAgICAgOzsKICAgICAgICAgICAgdm9sdW1lKQogICAgICAgICAgICAgICAgZGVzdHJv"\ + "eV92b2x1bWUgIiRsYWJlbCIgIiRsb2NhdGlvbiIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAg"\ + "ICAgICopCiAgICAgICAgICAgICAgICBlY2hvICJVbmtub3duIHR5cGU6ICR0eXBlIChtdXN0IGJl"\ + "IGZpbGUsIHBhdGgsIG9yIHZvbHVtZSkiCiAgICAgICAgICAgICAgICA7OwogICAgICAgIGVzYWMK"\ + "ICAgIGRvbmUKICAgIAogICAgZWNobyAiRGVzdHJveSBvcGVyYXRpb25zIGNvbXBsZXRlZCIKfQoK"\ + "IyBQcm9jZXNzIG11bHRpcGxlIGl0ZW1zIGZvciBiYWNrdXAKIyBVc2FnZTogYmFja3VwX2l0ZW1z"\ + "IHR5cGUxOmxhYmVsMTpsb2NhdGlvbjEgdHlwZTI6bGFiZWwyOmxvY2F0aW9uMiAuLi4KYmFja3Vw"\ + "X2l0ZW1zKCkgewogICAgX2NoZWNrX3JlcXVpcmVkX2Vudl92YXJzICJCQUNLVVBfRklMRSIgIlRF"\ + "TVBfRElSIgogICAgbG9jYWwgYmFja3VwX2ZpbGU9IiR7QkFDS1VQX0ZJTEV9IgogICAgbG9jYWwg"\ + "dGVtcF9kaXI9IiR7VEVNUF9ESVJ9IgogICAgCiAgICBsb2NhbCBiYWNrdXBfdGVtcF9wYXRoPSIk"\ + "e3RlbXBfZGlyfS9iYWNrdXAiCiAgICBta2RpciAtcCAiJGJhY2t1cF90ZW1wX3BhdGgiCiAgICAK"\ + "ICAgIGVjaG8gIlN0YXJ0aW5nIGJhY2t1cCB0byAke2JhY2t1cF9maWxlfSIKICAgIAogICAgIyBQ"\ + "cm9jZXNzIGVhY2ggaXRlbQogICAgZm9yIGl0ZW0gaW4gIiRAIjsgZG8KICAgICAgICBJRlM9Jzon"\ + "IHJlYWQgLXIgdHlwZSBsYWJlbCBsb2NhdGlvbiA8PDwgIiRpdGVtIgogICAgICAgIAogICAgICAg"\ + "IGNhc2UgIiR0eXBlIiBpbgogICAgICAgICAgICBmaWxlKQogICAgICAgICAgICAgICAgYmFja3Vw"\ + "X2ZpbGUgIiRsYWJlbCIgIiRsb2NhdGlvbiIgIiRiYWNrdXBfdGVtcF9wYXRoIgogICAgICAgICAg"\ + "ICAgICAgOzsKICAgICAgICAgICAgcGF0aCkKICAgICAgICAgICAgICAgIGJhY2t1cF9wYXRoICIk"\ + "bGFiZWwiICIkbG9jYXRpb24iICIkYmFja3VwX3RlbXBfcGF0aCIKICAgICAgICAgICAgICAgIDs7"\ + "CiAgICAgICAgICAgIHZvbHVtZSkKICAgICAgICAgICAgICAgIGJhY2t1cF92b2x1bWUgIiRsYWJl"\ + "bCIgIiRsb2NhdGlvbiIgIiRiYWNrdXBfdGVtcF9wYXRoIgogICAgICAgICAgICAgICAgOzsKICAg"\ + "ICAgICAgICAgKikKICAgICAgICAgICAgICAgIGVjaG8gIlVua25vd24gdHlwZTogJHR5cGUgKG11"\ + "c3QgYmUgZmlsZSwgcGF0aCwgb3Igdm9sdW1lKSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAg"\ + "ZXNhYwogICAgZG9uZQogICAgCiAgICAjIENyZWF0ZSBmaW5hbCBiYWNrdXAgYXJjaGl2ZQogICAg"\ + "ZWNobyAiQ3JlYXRpbmcgYmFja3VwIGFyY2hpdmUgJHtiYWNrdXBfZmlsZX0iCiAgICB0YXIgLWN6"\ + "ZiAiJGJhY2t1cF9maWxlIiAtQyAiJGJhY2t1cF90ZW1wX3BhdGgiIC4KICAgIAogICAgIyBDbGVh"\ + "biB1cCB0ZW1wIGRpcmVjdG9yeQogICAgcm0gLXJmICIkYmFja3VwX3RlbXBfcGF0aCIKICAgIAog"\ + "ICAgZWNobyAiQmFja3VwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiCn0KCiMgUHJvY2VzcyBtdWx0"\ + "aXBsZSBpdGVtcyBmb3IgcmVzdG9yZQojIFVzYWdlOiByZXN0b3JlX2l0ZW1zIHR5cGUxOmxhYmVs"\ + "MTpsb2NhdGlvbjEgdHlwZTI6bGFiZWwyOmxvY2F0aW9uMiAuLi4KcmVzdG9yZV9pdGVtcygpIHsK"\ + "ICAgIF9jaGVja19yZXF1aXJlZF9lbnZfdmFycyAiQkFDS1VQX0ZJTEUiICJURU1QX0RJUiIKICAg"\ + "IGxvY2FsIGJhY2t1cF9maWxlPSIke0JBQ0tVUF9GSUxFfSIKICAgIGxvY2FsIHRlbXBfZGlyPSIk"\ + "e1RFTVBfRElSfSIKICAgIAogICAgaWYgWyAhIC1mICIkYmFja3VwX2ZpbGUiIF07IHRoZW4KICAg"\ + "ICAgICBlY2hvICJCYWNrdXAgZmlsZSAkYmFja3VwX2ZpbGUgbm90IGZvdW5kIgogICAgICAgIHJl"\ + "dHVybiAxCiAgICBmaQogICAgCiAgICBsb2NhbCByZXN0b3JlX3RlbXBfcGF0aD0iJHt0ZW1wX2Rp"\ + "cn0vcmVzdG9yZSIKICAgIG1rZGlyIC1wICIkcmVzdG9yZV90ZW1wX3BhdGgiCiAgICAKICAgIGVj"\ + "aG8gIlN0YXJ0aW5nIHJlc3RvcmUgZnJvbSAke2JhY2t1cF9maWxlfSIKICAgIAogICAgIyBFeHRy"\ + "YWN0IGJhY2t1cCBhcmNoaXZlCiAgICBlY2hvICJFeHRyYWN0aW5nIGJhY2t1cCBhcmNoaXZlIgog"\ + "ICAgdGFyIC14emYgIiRiYWNrdXBfZmlsZSIgLUMgIiRyZXN0b3JlX3RlbXBfcGF0aCIKICAgIAog"\ + "ICAgIyBQcm9jZXNzIGVhY2ggaXRlbQogICAgZm9yIGl0ZW0gaW4gIiRAIjsgZG8KICAgICAgICBJ"\ + "RlM9JzonIHJlYWQgLXIgdHlwZSBsYWJlbCBsb2NhdGlvbiA8PDwgIiRpdGVtIgogICAgICAgIAog"\ + "ICAgICAgIGNhc2UgIiR0eXBlIiBpbgogICAgICAgICAgICBmaWxlKQogICAgICAgICAgICAgICAg"\ + "cmVzdG9yZV9maWxlICIkbGFiZWwiICIkbG9jYXRpb24iICIkcmVzdG9yZV90ZW1wX3BhdGgiCiAg"\ + "ICAgICAgICAgICAgICA7OwogICAgICAgICAgICBwYXRoKQogICAgICAgICAgICAgICAgcmVzdG9y"\ + "ZV9wYXRoICIkbGFiZWwiICIkbG9jYXRpb24iICIkcmVzdG9yZV90ZW1wX3BhdGgiCiAgICAgICAg"\ + "ICAgICAgICA7OwogICAgICAgICAgICB2b2x1bWUpCiAgICAgICAgICAgICAgICByZXN0b3JlX3Zv"\ + "bHVtZSAiJGxhYmVsIiAiJGxvY2F0aW9uIiAiJHJlc3RvcmVfdGVtcF9wYXRoIgogICAgICAgICAg"\ + "ICAgICAgOzsKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGVjaG8gIlVua25vd24gdHlw"\ + "ZTogJHR5cGUgKG11c3QgYmUgZmlsZSwgcGF0aCwgb3Igdm9sdW1lKSIKICAgICAgICAgICAgICAg"\ + "IDs7CiAgICAgICAgZXNhYwogICAgZG9uZQogICAgCiAgICAjIENsZWFuIHVwIHRlbXAgZGlyZWN0"\ + "b3J5CiAgICBybSAtcmYgIiRyZXN0b3JlX3RlbXBfcGF0aCIKICAgIAogICAgZWNobyAiUmVzdG9y"\ + "ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Igp9CgojICMgPT09PT09PT09PT09PT09PT09PT09PT09"\ + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojICMg"\ + "TEVHQUNZIENPTVBBVElCSUxJVFkgV1JBUFBFUiAoY2FuIGJlIHJlbW92ZWQgb25jZSBtaWdyYXRp"\ + "b24gaXMgY29tcGxldGUpCiMgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09"\ + "PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgojICMgQ29udmVydCBvbGQg"\ + "Zm9ybWF0IHRvIG5ldyBmb3JtYXQKIyAjIElucHV0OiBrZXk9dmFsdWUgKGUuZy4sICJ2b2x1bWU9"\ + "bXlhcHBfZGF0YSIpCiMgIyBPdXRwdXQ6IHR5cGU6bGFiZWw6bG9jYXRpb24gKGUuZy4sICJ2b2x1"\ + "bWU6ZGF0YTpteWFwcF9kYXRhIikKIyBjb252ZXJ0X2xlZ2FjeV9mb3JtYXQoKSB7CiMgICAgIGxv"\ + "Y2FsIHBhaXI9IiQxIgojICAgICBsb2NhbCBrZXk9IiR7cGFpciUlPSp9IgojICAgICBsb2NhbCB2"\ + "YWx1ZT0iJHtwYWlyIyo9fSIKICAgIAojICAgICAjIEdlbmVyYXRlIGEgbGFiZWwgZnJvbSB0aGUg"\ + "dmFsdWUgKHNpbXBsaWZpZWQgLSB5b3UgbWF5IHdhbnQgbW9yZSBzb3BoaXN0aWNhdGVkIGxvZ2lj"\ + "KQojICAgICBsb2NhbCBsYWJlbAojICAgICBsYWJlbD0kKGVjaG8gIiR2YWx1ZSIgfCBzZWQgJ3Mv"\ + "W15hLXpBLVowLTlfLV0vXy9nJykKICAgIAojICAgICBlY2hvICIke2tleX06JHtsYWJlbH06JHt2"\ + "YWx1ZX0iCiMgfQo="; // Decode Base64 data size_t decoded_size = (strlen(filedata_base64) * 3) / 4; @@ -551,7 +811,7 @@ bool recreate_tree(std::string destination_folder) { size_t actual_size; base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size); - bool file_written = _recreate_file_(outpath, 15066387203561406336ULL, std::filesystem::perms(509), decoded_data, actual_size); + bool file_written = _recreate_file_(outpath, 1169642567665237768ULL, std::filesystem::perms(509), decoded_data, actual_size); delete[] decoded_data; any_written = any_written || file_written; } @@ -779,37 +1039,53 @@ bool recreate_tree(std::string destination_folder) { "dCAobmVlZGVkIGZvciBfZGllKSAtLQppZiBbWyAhIC1mICIke0FHRU5UX1BBVEh9L2NvbW1vbi5z"\ "aCIgXV07IHRoZW4KICAgIGVjaG8gIkVycm9yOiBjb21tb24uc2ggbm90IGZvdW5kIGF0ICR7QUdF"\ "TlRfUEFUSH0vY29tbW9uLnNoIiA+JjIKICAgIGV4aXQgMQpmaQpzb3VyY2UgIiR7QUdFTlRfUEFU"\ - "SH0vY29tbW9uLnNoIgoKIyAtLSBWYWxpZGF0ZSBhcmd1bWVudHMgLS0KaWYgW1sgJCMgLWx0IDIg"\ - "XV07IHRoZW4KICAgIGVjaG8gIlVzYWdlOiBkc19ydW4uc2ggU0VSVklDRSBDT01NQU5EIFthcmdz"\ - "Li4uXSIgPiYyCiAgICBleGl0IDEKZmkKCmV4cG9ydCBTRVJWSUNFPSIkMSIKZXhwb3J0IERTQ09N"\ - "TUFORD0iJDIiCnNoaWZ0IDIKCiMgU3VwcHJlc3MgRG9ja2VyIENMSSBoaW50cwpleHBvcnQgRE9D"\ - "S0VSX0NMSV9ISU5UUz1mYWxzZQoKIyAtLSBTZXQgdXAgcGF0aHMgLS0KZXhwb3J0IENPTkZJR19Q"\ - "QVRIPSIke0RST1BTSEVMTF9ESVJ9L3NlcnZpY2VzLyR7U0VSVklDRX0vY29uZmlnIgpleHBvcnQg"\ - "VEVNUExBVEVfUEFUSD0iJHtEUk9QU0hFTExfRElSfS9zZXJ2aWNlcy8ke1NFUlZJQ0V9L3RlbXBs"\ - "YXRlIgoKIyAtLSBWYWxpZGF0ZSBzZXJ2aWNlIGV4aXN0cyAtLQpbWyAtZiAiJHtEUk9QU0hFTExf"\ - "RElSfS9zZXJ2ZXJfaW5mby5lbnYiIF1dIHx8IF9kaWUgIk1pc3NpbmcgJHtEUk9QU0hFTExfRElS"\ - "fS9zZXJ2ZXJfaW5mby5lbnYiCltbIC1kICIke0NPTkZJR19QQVRIfSIgXV0gfHwgX2RpZSAiU2Vy"\ - "dmljZSAnJHtTRVJWSUNFfScgZG9lcyBub3QgZXhpc3Qgb24gc2VydmVyIChtaXNzaW5nICR7Q09O"\ - "RklHX1BBVEh9KSIKCiMgLS0gTG9hZCB0ZW1wbGF0ZSBpbmZvICh0ZW1wbGF0ZSBkZWZhdWx0cywg"\ - "bG9hZGVkIGZpcnN0KSAtLQpleHBvcnQgVEVNUExBVEVfSU5GT19FTlY9IiR7VEVNUExBVEVfUEFU"\ - "SH0vdGVtcGxhdGVfaW5mby5lbnYiCmlmIFtbICEgLWYgIiR7VEVNUExBVEVfSU5GT19FTlZ9IiBd"\ - "XTsgdGhlbgogICAgVEVNUExBVEVfSU5GT19FTlY9IiR7VEVNUExBVEVfUEFUSH0vY29uZmlnLy50"\ - "ZW1wbGF0ZV9pbmZvLmVudiIKZmkKW1sgLWYgIiR7VEVNUExBVEVfSU5GT19FTlZ9IiBdXSB8fCBf"\ - "ZGllICJNaXNzaW5nIHRlbXBsYXRlX2luZm8uZW52IGF0ICR7VEVNUExBVEVfSU5GT19FTlZ9IgoK"\ - "IyAtLSBMb2FkIHNlcnZpY2UgY29uZmlnIChvdmVycmlkZXMgdGVtcGxhdGUgZGVmYXVsdHMpIC0t"\ - "CmV4cG9ydCBTRVJWSUNFX0VOVj0iJHtDT05GSUdfUEFUSH0vc2VydmljZS5lbnYiCltbIC1mICIk"\ - "e1NFUlZJQ0VfRU5WfSIgXV0gfHwgX2RpZSAiTWlzc2luZyBzZXJ2aWNlLmVudiBhdCAke1NFUlZJ"\ - "Q0VfRU5WfSIKCiMgLS0gU291cmNlIGVudiBmaWxlcyB3aXRoIGF1dG8tZXhwb3J0IChzZXQgLWEg"\ - "ZXhwb3J0cyBhbGwgYXNzaWduZWQgdmFyaWFibGVzKSAtLQpzZXQgLWEKc291cmNlICIke0RST1BT"\ - "SEVMTF9ESVJ9L3NlcnZlcl9pbmZvLmVudiIKc291cmNlICIke1RFTVBMQVRFX0lORk9fRU5WfSIK"\ - "c291cmNlICIke1NFUlZJQ0VfRU5WfSIKc2V0ICthCgojIC0tIExvY2F0ZSBhbmQgdmFsaWRhdGUg"\ - "Y29tbWFuZCBzY3JpcHQgLS0KQ09NTUFORF9UT19SVU49IiR7VEVNUExBVEVfUEFUSH0vJHtEU0NP"\ - "TU1BTkR9IgppZiBbWyAhIC1mICIke0NPTU1BTkRfVE9fUlVOfSIgXV07IHRoZW4KICAgIENPTU1B"\ - "TkRfVE9fUlVOPSIke0NPTU1BTkRfVE9fUlVOfS5zaCIKZmkKW1sgLWYgIiR7Q09NTUFORF9UT19S"\ - "VU59IiBdXSB8fCBfZGllICJDb21tYW5kIG5vdCBmb3VuZDogJHtEU0NPTU1BTkR9IChsb29rZWQg"\ - "Zm9yICR7VEVNUExBVEVfUEFUSH0vJHtEU0NPTU1BTkR9Wy5zaF0pIgoKIyAtLSBFeGVjdXRlIHRo"\ - "ZSBjb21tYW5kIHdpdGggYW55IHJlbWFpbmluZyBhcmd1bWVudHMgLS0KY2QgIiR7VEVNUExBVEVf"\ - "UEFUSH0iCmV4ZWMgYmFzaCAiJHtDT01NQU5EX1RPX1JVTn0iICIkQCIK"; + "SH0vY29tbW9uLnNoIgoKIyAtLSBDaGVjayBhZ2VudCBoYXNoIChpZiBBR0VOVF9IQVNIIGlzIHBy"\ + "b3ZpZGVkIGJ5IGRyb3BzaGVsbCkgLS0KIyBFeGl0IGNvZGUgMTk5ID0gYWdlbnQgbWlzbWF0Y2gg"\ + "KHNwZWNpYWwgY29kZSBmb3IgZHJvcHNoZWxsIHRvIGRldGVjdCkKaWYgW1sgLW4gIiR7QUdFTlRf"\ + "SEFTSDotfSIgXV07IHRoZW4KICAgIExPQ0FMX0hBU0hfRklMRT0iJHtBR0VOVF9QQVRIfS9hZ2Vu"\ + "dC5oYXNoIgogICAgaWYgW1sgLWYgIiR7TE9DQUxfSEFTSF9GSUxFfSIgXV07IHRoZW4KICAgICAg"\ + "ICBMT0NBTF9IQVNIPSQoY2F0ICIke0xPQ0FMX0hBU0hfRklMRX0iIHwgdHIgLWQgJ1s6c3BhY2U6"\ + "XScpCiAgICAgICAgRVhQRUNURURfSEFTSD0kKGVjaG8gIiR7QUdFTlRfSEFTSH0iIHwgdHIgLWQg"\ + "J1s6c3BhY2U6XScpCiAgICAgICAgaWYgW1sgIiR7TE9DQUxfSEFTSH0iICE9ICIke0VYUEVDVEVE"\ + "X0hBU0h9IiBdXTsgdGhlbgogICAgICAgICAgICBlY2hvICJBR0VOVF9NSVNNQVRDSDoke0VYUEVD"\ + "VEVEX0hBU0h9OiR7TE9DQUxfSEFTSH0iID4mMgogICAgICAgICAgICBleGl0IDE5OQogICAgICAg"\ + "IGZpCiAgICBlbHNlCiAgICAgICAgIyBObyBsb2NhbCBoYXNoIGZpbGUgLSBhZ2VudCBpcyBvdXRk"\ + "YXRlZCAocHJlLWhhc2ggdmVyc2lvbikKICAgICAgICBlY2hvICJBR0VOVF9NSVNNQVRDSDoke0FH"\ + "RU5UX0hBU0h9Om5vX2hhc2hfZmlsZSIgPiYyCiAgICAgICAgZXhpdCAxOTkKICAgIGZpCmZpCgoj"\ + "IC0tIFZhbGlkYXRlIGFyZ3VtZW50cyAtLQppZiBbWyAkIyAtbHQgMiBdXTsgdGhlbgogICAgZWNo"\ + "byAiVXNhZ2U6IGRzX3J1bi5zaCBTRVJWSUNFIENPTU1BTkQgW2FyZ3MuLi5dIiA+JjIKICAgIGV4"\ + "aXQgMQpmaQoKZXhwb3J0IFNFUlZJQ0U9IiQxIgpleHBvcnQgRFNDT01NQU5EPSIkMiIKc2hpZnQg"\ + "MgoKIyBTdXBwcmVzcyBEb2NrZXIgQ0xJIGhpbnRzCmV4cG9ydCBET0NLRVJfQ0xJX0hJTlRTPWZh"\ + "bHNlCgojIC0tIFNldCB1cCBwYXRocyAtLQpleHBvcnQgQ09ORklHX1BBVEg9IiR7RFJPUFNIRUxM"\ + "X0RJUn0vc2VydmljZXMvJHtTRVJWSUNFfS9jb25maWciCmV4cG9ydCBURU1QTEFURV9QQVRIPSIk"\ + "e0RST1BTSEVMTF9ESVJ9L3NlcnZpY2VzLyR7U0VSVklDRX0vdGVtcGxhdGUiCgojIC0tIFZhbGlk"\ + "YXRlIHNlcnZpY2UgZXhpc3RzIC0tCltbIC1mICIke0RST1BTSEVMTF9ESVJ9L3NlcnZlcl9pbmZv"\ + "LmVudiIgXV0gfHwgX2RpZSAiTWlzc2luZyAke0RST1BTSEVMTF9ESVJ9L3NlcnZlcl9pbmZvLmVu"\ + "diIKW1sgLWQgIiR7Q09ORklHX1BBVEh9IiBdXSB8fCBfZGllICJTZXJ2aWNlICcke1NFUlZJQ0V9"\ + "JyBkb2VzIG5vdCBleGlzdCBvbiBzZXJ2ZXIgKG1pc3NpbmcgJHtDT05GSUdfUEFUSH0pIgoKIyAt"\ + "LSBBY3F1aXJlIGV4Y2x1c2l2ZSBsb2NrIChyZWxlYXNlZCBhdXRvbWF0aWNhbGx5IG9uIGV4aXQp"\ + "IC0tCl9sb2NrX3NlcnZpY2UgIiR7RFJPUFNIRUxMX0RJUn0vc2VydmljZXMvJHtTRVJWSUNFfSIK"\ + "CiMgLS0gTG9hZCB0ZW1wbGF0ZSBpbmZvICh0ZW1wbGF0ZSBkZWZhdWx0cywgbG9hZGVkIGZpcnN0"\ + "KSAtLQpleHBvcnQgVEVNUExBVEVfSU5GT19FTlY9IiR7VEVNUExBVEVfUEFUSH0vdGVtcGxhdGVf"\ + "aW5mby5lbnYiCmlmIFtbICEgLWYgIiR7VEVNUExBVEVfSU5GT19FTlZ9IiBdXTsgdGhlbgogICAg"\ + "VEVNUExBVEVfSU5GT19FTlY9IiR7VEVNUExBVEVfUEFUSH0vY29uZmlnLy50ZW1wbGF0ZV9pbmZv"\ + "LmVudiIKZmkKW1sgLWYgIiR7VEVNUExBVEVfSU5GT19FTlZ9IiBdXSB8fCBfZGllICJNaXNzaW5n"\ + "IHRlbXBsYXRlX2luZm8uZW52IGF0ICR7VEVNUExBVEVfSU5GT19FTlZ9IgoKIyAtLSBMb2FkIHNl"\ + "cnZpY2UgY29uZmlnIChvdmVycmlkZXMgdGVtcGxhdGUgZGVmYXVsdHMpIC0tCmV4cG9ydCBTRVJW"\ + "SUNFX0VOVj0iJHtDT05GSUdfUEFUSH0vc2VydmljZS5lbnYiCltbIC1mICIke1NFUlZJQ0VfRU5W"\ + "fSIgXV0gfHwgX2RpZSAiTWlzc2luZyBzZXJ2aWNlLmVudiBhdCAke1NFUlZJQ0VfRU5WfSIKCiMg"\ + "LS0gU291cmNlIGVudiBmaWxlcyB3aXRoIGF1dG8tZXhwb3J0IChzZXQgLWEgZXhwb3J0cyBhbGwg"\ + "YXNzaWduZWQgdmFyaWFibGVzKSAtLQpzZXQgLWEKc291cmNlICIke0RST1BTSEVMTF9ESVJ9L3Nl"\ + "cnZlcl9pbmZvLmVudiIKc291cmNlICIke1RFTVBMQVRFX0lORk9fRU5WfSIKc291cmNlICIke1NF"\ + "UlZJQ0VfRU5WfSIKc2V0ICthCgojIC0tIExvY2F0ZSBhbmQgdmFsaWRhdGUgY29tbWFuZCBzY3Jp"\ + "cHQgLS0KQ09NTUFORF9QQVRIPSIke1RFTVBMQVRFX1BBVEh9IgpDT01NQU5EX1RPX1JVTj0iJHtD"\ + "T01NQU5EX1BBVEh9LyR7RFNDT01NQU5EfSIKaWYgW1sgISAtZiAiJHtDT01NQU5EX1RPX1JVTn0i"\ + "IF1dOyB0aGVuCiAgICBDT01NQU5EX1RPX1JVTj0iJHtDT01NQU5EX1RPX1JVTn0uc2giCmZpCltb"\ + "IC1mICIke0NPTU1BTkRfVE9fUlVOfSIgXV0gfHwgX2RpZSAiQ29tbWFuZCBub3QgZm91bmQ6ICR7"\ + "RFNDT01NQU5EfSAobG9va2VkIGZvciAke1RFTVBMQVRFX1BBVEh9LyR7RFNDT01NQU5EfVsuc2hd"\ + "KSIKCiMgLS0gRXhlY3V0ZSB0aGUgY29tbWFuZCB3aXRoIGFueSByZW1haW5pbmcgYXJndW1lbnRz"\ + "IC0tCmNkICIke0NPTU1BTkRfUEFUSH0iICYmIGV4ZWMgIiR7Q09NTUFORF9UT19SVU59IiAiJEAi"\ + "Cg=="; // Decode Base64 data size_t decoded_size = (strlen(filedata_base64) * 3) / 4; @@ -817,7 +1093,7 @@ bool recreate_tree(std::string destination_folder) { size_t actual_size; base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size); - bool file_written = _recreate_file_(outpath, 9042417257106529502ULL, std::filesystem::perms(509), decoded_data, actual_size); + bool file_written = _recreate_file_(outpath, 17430512775742796633ULL, std::filesystem::perms(509), decoded_data, actual_size); delete[] decoded_data; any_written = any_written || file_written; } diff --git a/source/src/utils/service_env_overrides.cpp b/source/src/utils/service_env_overrides.cpp index fdc7b42..552cf84 100644 --- a/source/src/utils/service_env_overrides.cpp +++ b/source/src/utils/service_env_overrides.cpp @@ -2,8 +2,12 @@ #include "directories.hpp" #include "envmanager.hpp" #include "service_env_validator.hpp" +#include "services.hpp" +#include "templates.hpp" +#include "output.hpp" #include +#include namespace dropshell { @@ -31,13 +35,47 @@ std::vector apply_overrides( if (override_vars.empty()) return changes; + // Build set of allowed variable names from template service.env and template_info.env + std::set allowed_vars; + LocalServiceInfo service_info = get_service_info(server_name, service_name); + if (!service_info.template_name.empty()) { + template_info tinfo = gTemplateManager().get_template_info(service_info.template_name); + if (tinfo.is_set()) { + std::filesystem::path template_service_env = tinfo.local_template_service_env_path(); + if (std::filesystem::exists(template_service_env)) { + envmanager tmpl_env(template_service_env.string()); + if (tmpl_env.load()) { + ordered_env_vars tmpl_vars; + tmpl_env.get_all_variables(tmpl_vars); + for (const auto& [key, value] : tmpl_vars) + allowed_vars.insert(key); + } + } + + std::filesystem::path template_info_env = tinfo.local_template_info_env_path(); + if (std::filesystem::exists(template_info_env)) { + envmanager info_env(template_info_env.string()); + if (info_env.load()) { + ordered_env_vars info_vars; + info_env.get_all_variables(info_vars); + for (const auto& [key, value] : info_vars) + allowed_vars.insert(key); + } + } + } + } + // Load current service env envmanager service_env(service_env_path); if (!service_env.load()) return changes; - // Apply each override + // Apply each override, skipping variables not defined in the template for (const auto& [key, new_val] : override_vars) { + if (!allowed_vars.empty() && allowed_vars.find(key) == allowed_vars.end()) { + warning << "Override skipped: " << key << " is not defined in the template for " << service_name << std::endl; + continue; + } std::string current_val = service_env.get_variable(key); if (current_val != new_val) { set_env_variable(service_env_path, key, new_val);