diff --git a/src/agent/samples/policy/yaml/deployment/deployment-azure-vote-back.yaml b/src/agent/samples/policy/yaml/deployment/deployment-azure-vote-back.yaml index 99e3b7570cb5..85f152ec8fa2 100644 --- a/src/agent/samples/policy/yaml/deployment/deployment-azure-vote-back.yaml +++ b/src/agent/samples/policy/yaml/deployment/deployment-azure-vote-back.yaml @@ -13,7 +13,7 @@ spec: labels: app: azure-vote-back annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMTAwMSwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL29wdC9iaXRuYW1pL3NjcmlwdHMvcmVkaXMvZW50cnlwb2ludC5zaCIsCiAgICAgICAgICAgICIvb3B0L2JpdG5hbWkvc2NyaXB0cy9yZWRpcy9ydW4uc2giCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L29wdC9iaXRuYW1pL2NvbW1vbi9iaW46L29wdC9iaXRuYW1pL3JlZGlzL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgICAiSE9NRT0vIiwKICAgICAgICAgICAgIk9TX0FSQ0g9YW1kNjQiLAogICAgICAgICAgICAiT1NfRkxBVk9VUj1kZWJpYW4tMTAiLAogICAgICAgICAgICAiT1NfTkFNRT1saW51eCIsCiAgICAgICAgICAgICJCSVROQU1JX0FQUF9OQU1FPXJlZGlzIiwKICAgICAgICAgICAgIkJJVE5BTUlfSU1BR0VfVkVSU0lPTj02LjAuOC1kZWJpYW4tMTAtcjIzIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJBTExPV19FTVBUWV9QQVNTV09SRD15ZXMiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImF6dXJlLXZvdGUtYmFjayIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogIm1jci5taWNyb3NvZnQuY29tL29zcy9iaXRuYW1pL3JlZGlzOjYuMC44IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDMpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDQpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDUpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDYpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDcpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDgpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDkpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiYmRmZTJkMjRmYWMyNGIzNzZlY2Y0MWRhOWZhNjlmZWM4NjMyMWRjMTU1MWI4Y2NjNWNjYjg0YmQwNGUwM2JiNTphNmU3YjFlMTE2NzU0MDJjMzA0OTgzZTU3Nzk4YWViMTg5ZDQxNWQ0OTIyMDI2NjZhMThjOGE4ODQzNmE1NmU1OjVhZGU3M2U5MGVhNTc4ZThlMTBjM2JhMGU0MDY1YjQ0NjdlMTUzMDk2YmJkYmI3MzZlMWUyNGE4M2E4Yjc0MjI6ZTkxMDgyMTNmNjU4MzU1ZjEzMTI4YzJkYjBmMmJkZThhOWNmMjY4YWU2MjY5OTE3NzU2Yjk4ZjZjY2QyMTI1NTozMWU2YzI0YTRjMWQxYWQ0YWM3MTQwMTNjNDAwYTFlMGQzZWRhNmRlNjA0OTUwZjU0NmM4YzVkZWNjNTljMTlkOmM2ZDQ3NThkYjRjMDkxMDRiMDU1NGEzZmYyNWQzN2U0MmU0ZjA3OTVhMDIyZjJhNDJmNzE0MTI5NDM2Y2UxNDM6OTQ0NDJkN2Q3NzM1MjgxMzIwNmYxZGMwOTliZGIzYzk5MGYzYmMwZDJlYTY2NjE1NTE0Yzk5MGNlMTA3NjM2NDo1NzRiNzNlNjZkYWYyYzczNTcyOWQ3NGE2OTU0NjA5M2ZkYzA2ODEzMWFlZGRiNTgwMmJkZDllYzk3ZjQxMDMwOjNmNTJjYjY1MjVkOGU2OGQ1NzNjMzgxZjZkMTA0ZGQxNjhjYzBiMzNhMTE2OGYxNmIwMGM4NzdjZThiOGI2MTU6NmI3NjcwNDZlZjA3NzcxNDk4M2E2NzUzYjlmOWZiNDExMmQ0MTBkMzYwZWFiYTU5NzBjMmY3M2IzNDY0YjgyMjpmY2JlYjk5NTlmNDQyMzFjZmJmM2Y0YjY3OTgyODE5YWY2MmNmMWY2MTQ3NjM0Y2Y2YjE3YWEzODdkNjhhMGI3IiwKICAgICAgICAgICAgImM2YzA2MmM5N2JiNTMzZDU1NDlhNGQ5NWMzZGNjZjBhNzU4ZTQyMzQ5N2JkNzNkNDUyNWY4MWI2OTdhMjQwMzA6NTVkMGFlMDdmMmMwNGU2YzllNjAwYzg3NGEyNWI5YWFlMTM0NjAwZjY0OWJjYmM4MTA3YTBiZjRkMTFmODEyMTozNDkwNWRlMGJhMDk5NWQyNGU3MmQxNjA3ODUyNzZlNTFjMzFjOTNlMmM2NTRmZDI4YTAyM2ZiZTU3MjBkNDg3OjgxNzEwZTA0NGM0Y2NlNDYyNzk5ODJhNWE5NTdiOWJiMTczYWVkMmJmNGIwYTRhZDdkNzY5ZmNkOTZmOTMyZjc6YTBhYjY1NDU1MTg0MzQ0MmNiOGE3ODRjNmUyNzY4MzQwYmI4ODJlMDQ4ZDE0MGMyMjhmZDViMThhZTgxZGJjNDpkNWQ4ZDYxODdiMjc1NDFmODk4ZmJlMThlNTg2MTE2ZjBjMjczNWQ5MjQ5MDZhMWM1ZDA1YWQ3MTA2YzNhNWZmOjNjMTY1ZDY2NjQxMDUzOTI4Mzg4MTQ3NzBkN2U3NDM0YTFiMGMzNWIxMDY4ZTA1MzI5NTg4ZDNlZDQ5NDMwZmY6ODUxNzE3OWQzZTk5MTlkZmVkNDJiMTI4MmNjMzkzYzM5MmM1NmIwZDgyOTgzNDc4NzJjOWE5OTY0N2M1NjBhZjo0NWMxNDE1MDViMzliZWEwZTZjMzhiMDQ1MTllMzE0MTE1NWNlZGQyZWIwYzZjNTNhNGE1ZWFmZGU2ODVlMGE5OmEzOTc4YWFiOWU3NTZkNmI2ZDRiMzNkYzMxZDE1ZTU0M2Y0MmVkZDZiZmY1MzFhZGEzZDdlMzg0MjFiZTRlNzU6MzllODVmNzJhNmQ4NDE5NWE1N2IzMzg1YTRlNjhiNzkxNTFjZGMxOTE3YTE2MWY5Yjg3OTllNjhmNWVhODFkOSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMTAwMSwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL29wdC9iaXRuYW1pL3NjcmlwdHMvcmVkaXMvZW50cnlwb2ludC5zaCIsCiAgICAgICAgICAgICIvb3B0L2JpdG5hbWkvc2NyaXB0cy9yZWRpcy9ydW4uc2giCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L29wdC9iaXRuYW1pL2NvbW1vbi9iaW46L29wdC9iaXRuYW1pL3JlZGlzL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgICAiSE9NRT0vIiwKICAgICAgICAgICAgIk9TX0FSQ0g9YW1kNjQiLAogICAgICAgICAgICAiT1NfRkxBVk9VUj1kZWJpYW4tMTAiLAogICAgICAgICAgICAiT1NfTkFNRT1saW51eCIsCiAgICAgICAgICAgICJCSVROQU1JX0FQUF9OQU1FPXJlZGlzIiwKICAgICAgICAgICAgIkJJVE5BTUlfSU1BR0VfVkVSU0lPTj02LjAuOC1kZWJpYW4tMTAtcjIzIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJBTExPV19FTVBUWV9QQVNTV09SRD15ZXMiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImF6dXJlLXZvdGUtYmFjayIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogIm1jci5taWNyb3NvZnQuY29tL29zcy9iaXRuYW1pL3JlZGlzOjYuMC44IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDMpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDQpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDUpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDYpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDcpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDgpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDkpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiYmRmZTJkMjRmYWMyNGIzNzZlY2Y0MWRhOWZhNjlmZWM4NjMyMWRjMTU1MWI4Y2NjNWNjYjg0YmQwNGUwM2JiNTphNmU3YjFlMTE2NzU0MDJjMzA0OTgzZTU3Nzk4YWViMTg5ZDQxNWQ0OTIyMDI2NjZhMThjOGE4ODQzNmE1NmU1OjVhZGU3M2U5MGVhNTc4ZThlMTBjM2JhMGU0MDY1YjQ0NjdlMTUzMDk2YmJkYmI3MzZlMWUyNGE4M2E4Yjc0MjI6ZTkxMDgyMTNmNjU4MzU1ZjEzMTI4YzJkYjBmMmJkZThhOWNmMjY4YWU2MjY5OTE3NzU2Yjk4ZjZjY2QyMTI1NTozMWU2YzI0YTRjMWQxYWQ0YWM3MTQwMTNjNDAwYTFlMGQzZWRhNmRlNjA0OTUwZjU0NmM4YzVkZWNjNTljMTlkOmM2ZDQ3NThkYjRjMDkxMDRiMDU1NGEzZmYyNWQzN2U0MmU0ZjA3OTVhMDIyZjJhNDJmNzE0MTI5NDM2Y2UxNDM6OTQ0NDJkN2Q3NzM1MjgxMzIwNmYxZGMwOTliZGIzYzk5MGYzYmMwZDJlYTY2NjE1NTE0Yzk5MGNlMTA3NjM2NDo1NzRiNzNlNjZkYWYyYzczNTcyOWQ3NGE2OTU0NjA5M2ZkYzA2ODEzMWFlZGRiNTgwMmJkZDllYzk3ZjQxMDMwOjNmNTJjYjY1MjVkOGU2OGQ1NzNjMzgxZjZkMTA0ZGQxNjhjYzBiMzNhMTE2OGYxNmIwMGM4NzdjZThiOGI2MTU6NmI3NjcwNDZlZjA3NzcxNDk4M2E2NzUzYjlmOWZiNDExMmQ0MTBkMzYwZWFiYTU5NzBjMmY3M2IzNDY0YjgyMjpmY2JlYjk5NTlmNDQyMzFjZmJmM2Y0YjY3OTgyODE5YWY2MmNmMWY2MTQ3NjM0Y2Y2YjE3YWEzODdkNjhhMGI3IiwKICAgICAgICAgICAgImM2YzA2MmM5N2JiNTMzZDU1NDlhNGQ5NWMzZGNjZjBhNzU4ZTQyMzQ5N2JkNzNkNDUyNWY4MWI2OTdhMjQwMzA6NTVkMGFlMDdmMmMwNGU2YzllNjAwYzg3NGEyNWI5YWFlMTM0NjAwZjY0OWJjYmM4MTA3YTBiZjRkMTFmODEyMTozNDkwNWRlMGJhMDk5NWQyNGU3MmQxNjA3ODUyNzZlNTFjMzFjOTNlMmM2NTRmZDI4YTAyM2ZiZTU3MjBkNDg3OjgxNzEwZTA0NGM0Y2NlNDYyNzk5ODJhNWE5NTdiOWJiMTczYWVkMmJmNGIwYTRhZDdkNzY5ZmNkOTZmOTMyZjc6YTBhYjY1NDU1MTg0MzQ0MmNiOGE3ODRjNmUyNzY4MzQwYmI4ODJlMDQ4ZDE0MGMyMjhmZDViMThhZTgxZGJjNDpkNWQ4ZDYxODdiMjc1NDFmODk4ZmJlMThlNTg2MTE2ZjBjMjczNWQ5MjQ5MDZhMWM1ZDA1YWQ3MTA2YzNhNWZmOjNjMTY1ZDY2NjQxMDUzOTI4Mzg4MTQ3NzBkN2U3NDM0YTFiMGMzNWIxMDY4ZTA1MzI5NTg4ZDNlZDQ5NDMwZmY6ODUxNzE3OWQzZTk5MTlkZmVkNDJiMTI4MmNjMzkzYzM5MmM1NmIwZDgyOTgzNDc4NzJjOWE5OTY0N2M1NjBhZjo4M2I4NTIwODFhMDUyZjJhODMyZGRmYzA0ZGViNmRlZWM0YmE3MDg1NDQyYTM2MGI1MjQ3OTdlZDE2YTM5OGQzOmEzOTc4YWFiOWU3NTZkNmI2ZDRiMzNkYzMxZDE1ZTU0M2Y0MmVkZDZiZmY1MzFhZGEzZDdlMzg0MjFiZTRlNzU6MzllODVmNzJhNmQ4NDE5NWE1N2IzMzg1YTRlNjhiNzkxNTFjZGMxOTE3YTE2MWY5Yjg3OTllNjhmNWVhODFkOSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== spec: nodeSelector: kubernetes.io/os: linux diff --git a/src/agent/samples/policy/yaml/deployment/deployment-azure-vote-front.yaml b/src/agent/samples/policy/yaml/deployment/deployment-azure-vote-front.yaml index 1166da5c123b..a7c45e69fdad 100644 --- a/src/agent/samples/policy/yaml/deployment/deployment-azure-vote-front.yaml +++ b/src/agent/samples/policy/yaml/deployment/deployment-azure-vote-front.yaml @@ -13,7 +13,7 @@ spec: labels: app: azure-vote-front annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2VudHJ5cG9pbnQuc2giLAogICAgICAgICAgICAiL3N0YXJ0LnNoIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJMQU5HPUMuVVRGLTgiLAogICAgICAgICAgICAiR1BHX0tFWT0wRDk2REY0RDQxMTBFNUM0M0ZCRkIxN0YyRDM0N0VBNkFBNjU0MjFEIiwKICAgICAgICAgICAgIlBZVEhPTl9WRVJTSU9OPTMuNi4zIiwKICAgICAgICAgICAgIlBZVEhPTl9QSVBfVkVSU0lPTj05LjAuMSIsCiAgICAgICAgICAgICJOR0lOWF9WRVJTSU9OPTEuMTMuNy0xfnN0cmV0Y2giLAogICAgICAgICAgICAiTkpTX1ZFUlNJT049MS4xMy43LjAuMS4xNS0xfnN0cmV0Y2giLAogICAgICAgICAgICAiVVdTR0lfSU5JPS9hcHAvdXdzZ2kuaW5pIiwKICAgICAgICAgICAgIk5HSU5YX01BWF9VUExPQUQ9MCIsCiAgICAgICAgICAgICJMSVNURU5fUE9SVD04MCIsCiAgICAgICAgICAgICJTVEFUSUNfVVJMPS9zdGF0aWMiLAogICAgICAgICAgICAiU1RBVElDX1BBVEg9L2FwcC9zdGF0aWMiLAogICAgICAgICAgICAiU1RBVElDX0lOREVYPTAiLAogICAgICAgICAgICAiUFlUSE9OUEFUSD0vYXBwIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJSRURJUz1henVyZS12b3RlLWJhY2siCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvYXBwIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImF6dXJlLXZvdGUtZnJvbnQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJtY3IubWljcm9zb2Z0LmNvbS9henVyZWRvY3MvYXp1cmUtdm90ZS1mcm9udDp2MSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g3KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g4KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjgpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g5KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjkpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDExKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjExKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxMykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDE0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjE0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTUpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxNikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDE3KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjE3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTgpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTgpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxOSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxOSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMjEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMjQpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyNSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDI2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMjcpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMjcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyOCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjlmZWJlMjUxMGI2Yzg1NzdmYjkzMmE1ZmYwYjJiYTJlY2U2MDNhNDE3YTY2Yjg3NmU0OTA2YWZmNTdhYzYwMzU6Y2NhMjc2NzQzODc4MWM2MjU1MDJlNjJhNjkyYjAwMTBjNTU4N2YxOTAxOTVmNjczNjlmNmU4MjQ4OTgwYmZjMjoyYWQ1NGNlNWQ3ZGU1ZmU5YmJlNDUxYjdiZWY2NDNhNmQ4NTEyZWM0M2VhYmQyODdmMTY2NDFlNWJiMDZiYWEyOjdlYjlhYjhiNmEzZTliNTFmZGZkN2VjMDU2MmM3NGEzMTgzZmUyNjRiY2QxMDA0MTgyZWZkN2JmZWIzNTVhNWQ6NTExZWRhOTQ1ZTc0ZWIxZjMxYTZhODZkYzhjMWIzMzQ0ZDlmYzJiMzAzNWZlMTU0MjYxZDkxNjdjY2RmMzZhNDphYTIyNDY4YWQ4YTNhN2ZmOTU3YmM4ZGE5MjkwOGJiMGJiMDQ5NWM1YTQxN2NkYTIxYWI3MDhhMDc3ZWFiZWFmOmYwM2NlMjQxOTJkMTkwYWJkZGI1ZmI4MTVkMDRjYjBlNTM0YzY3MzlhNDhlZDdhOWI1MWI5ZTAxZWViMzkxZGI6ZDliMmQ5YjRlNWZjN2YyNDdhYjA3NTVlYjFjMTEyOGM4Y2MwYzU4ZDBiNDI5OGJiNzVjNjg2NTFjZWIwMTYxYzoxZTU5NDZmMTFiOWZjYTIyNzg4MzlmN2MwNTczNjJlNTI2MGFkMjI2NmY0NDc0ZGFmYTlkM2UyYTBlNmVjOTQ1OjQyYTljMWZiNzhkYjFmZWY1YmM0ZmM2MjgwZWViZGIzZTgzMTA5M2RkNzFiOGQ1YzgwOWI2ZTNhM2ZmZTE1NWI6MWZjNTZhNjFlZjUyYjBiOTZhNzU2ZTA1NzhlMjQxYmFmNjE1OTM3NjU3NmZjNDFkOGVkODliNzRhNzFkMjk3ZjoxM2RhMjMwN2ViZDMxOGJhMjBkZmFlN2YzMzBjNTUzMWMzOTI1ODM0M2Y4MzU3ODcxMjI3YTUyNjI5MGU3YTM4OmQ5ZTgyMTJhNjVhMjAzZWQxNjRmMTgzZmRlMDhhYTcxYTBjNTc3YzA0NWVjNmRhNWI5MmVmMmJiMWFiZDRkZWE6MGI4MTU0MjNlY2MzZGEyMTVjOGM2ZDAzYzJmYjdhMTgwMjgyMTQyMzZlYzJlNmIwNDQwNmIwZDE3MDljMzRhNjoyOGYwZDZmNTU2ZmI4MmQ4MjEzZDY2YzVlYzA5Yjg4MjQxNGM1Y2YxZDUxMjdmMTFjYjI1NzU5MDAwOWRlN2MzOmZiYTIyYTdkNzM1YzVmZmNmYWE5MTEzYTg0YjQyNGZlYTMxNWZiNDgxZmI4ZWUyY2NkMjVjMGNlMTkzZTg2MDA6ZDc1ODE3YjA4ZWY5N2IyZTZjOTNmZWZkZTMwNDljODcxYzM3ZjdmM2FkMDhjNjVhYjk4YzA4NGQxZWYzY2JiMTpmYTdiNzE3NWUwN2I3ODZiODZiMTRlMmQ1MTdhNjRjYjY3Y2VlMTBmNzZmMzQ3N2E5MWQ1OGRmOGUxOTUzZmZiOmZmY2E2YjU3NmE4YzczZmViNzkzODc4MmZkZjg4ZGE0NjBkM2QyZmI5MWJhMjQzMTAyY2QzMmMwYTE2MmY4NDg6NjVlNDQ0NjM2YzNiNTE4MDM1MDY3YmVlYWUxYzVmMmFhZDcyMzZkMDM2ZTkwNzFkMjAzMjMxMDhhZTViYzkzNjplNTVkNDcyMGZmMGNhNTA5NWRkMjIyZTU5NDY4NGFhYjZlZjIyYzlkNDE3NTJmZjExNGMxM2MzZDI5Y2M1ZjJhOjBjMjgzODgwZTM4YmZjNDdmYjQ5NjhkNzdlYjU0ZjFhMGYxOGJiYmIzNzFmZWQ3MzVkZThhM2RkYjZkMzkwZjE6M2FlMDk1MjE3OThhMTExY2I0OTQxZWQ5MjNkYWI2OTJlZjAzYjNiMmNiNmJmODc2MGRiYzI4YzQ3ZGE5YjA2NTpiMzRmMTRiYTQyNWMzMjc3NWVlZDQwOTdkZmI1NmE3YmE3ZGQ3NDYyNzA0NGM2ZjZlMDZjYzY5NTc3Y2UwMmIzOmNjODFmZTM4YTg4MWMzNjgxOTQ2ZTkwZmMyNjRjNDJhNGVkNDI1MmNmY2QzY2ZjODdhMTE3OGEyZWU4NWUwMmU6ZWI1ZjNjOTUxMGExYjA0OTEzMjc2NThmZmMwM2JjYzIzM2Y1ODE0ZDYwMjUzZmZjYjdhMzlhMjMyMWQwNDM5YTo0Y2I3OTZkZmJhNDJhOWI1ZTU0NWFiOTk0NTA2NTU1ZjdlYmFlYTI0ZDdiMTUxMGRlZWRkOTgwMjc4ZWYxMmQ2OmZkNGJkMjQ3ODIwNmY1N2M3NGQ5MDU0NTk0MmQ5OTlhN2JlNDg1Yzk3ZmQxOGY0MmQ4M2U4NDBkYjE4Y2EzNmU6MzNiZTRiZDhlNWRlNDNmYzU5YmUwODM1MDE2MGI2NGVjYzNhZDZjNjc4ZWUyMTA3ZDZhYjhiYTkxNDZkNWZiNSIsCiAgICAgICAgICAgICI5NGQxMGY3OGVhZGY3ZGYxNWNiMjZmOTc3Zjg4MWJkZmIxZjI4ZDUzZWNkNjNkZWQ4MDg1ZGYwYjkzNTkwMTE3OjM2OWI0YWMwMzFhZGQ0YjIxNDg4OTI3OGQ1ZWY1MzNlZTc5NjgyMDdkYWZhOTM0YmJiMDc1OTM0MWE4ZTE2ODI6MjdhOTM2NTQwMzdmYWJhN2RkMDdjOGYyZTA1ZmViNzdlYjgzOGE3MzgwNWY4MTg5ZTBjY2E1NzU5Y2I2OWJiOToxNTc5YjhiZmNiZGFmOWFlMDMzOGU2ZGMwOTk5YzFkMmU1NGU1ZWU3YjVmMmEzM2RlNThmZTRlZmIzN2Q4MWY2OmUzYjAzOGVjOTI1OTQ4ZGQwZGVmOWVlOTI4NDVhYjM4NzJkNzM3NjBhYTI2NDU5NWU0ZGJmMzgwMzIxZmUyNjk6ZDcyMmZhYWY2OTRmYWI0YTkzM2VmZjEwZmYzNTFkMmI4Y2EwMDczOWQxMGI2ODk4MWY3YWY2YzFkNmZhNmRhYzo4YTliMjBiOWE1MDExNmEzYmI5NTJhYWJiMzZjZDc5ZmRkNTYwZTZlNDUwMWUxMTc0ZGJiNDAwYzFmODU1YTY5OmY5OTc3NDExY2ViNzIwMzIxMDI1M2M5OWM0YzJhMWY0YWFjM2JlMmZhNDNhZDRkNDczNWE1ZmJiYjQ1MWIwZDM6YzM5NjU2N2E1MGNhYjQwY2IxOWQ0NjE3ZDk3M2NjYmQ1YTBmMjk4ZjE5MmViMTFjNTNlNDQyOTFiNDFmY2Y4ZjoxYzFjM2U2YjY1ZGUyYTA2NmFiZDUwOGE2MGRiY2FjN2IwZDQyNzRjZWZlMzJkNmY3NmMyMTczN2Y3MWQ4N2I3OmI0ZTViODAzNzA0ZmMyMmJmNTc0YWIzMDhjNzgyNTQyODczYTZiYzU2NmM1ZjcwZDY0NDExNjY5YzIxNmJlYzc6MjgxMDI3NjU2ZWJjMzQ5MGMyMDU3OGQ0ODdiOTViYzZlNTdlNGRhMGVlN2U5ZDdmOGRhMDczNjhlMWRjOWQ4ZjpiY2NmMWEzMDQ2NDVlZDk1YTJlNmZlNTU4ZDJjYzk5OTI0NjI5ZjgyOTYyZDQ1NDIzMzBiMGUyYWE0MGJlNTY2OjIwNjNmY2UwODU5ODFlYzE3NjYwNjVlODg3OGFkMzk3MjQ5YzFhMDU1MzViZWMyYzQwMDNhNTBjNGZkOTgyMGQ6NzhlOTcyMGU5ZjIzYmQzZTA3NDlhMTU4MjJkMWI2ODYxMzU0OThmMzUxY2U3ZTMyNjFkMmZlZGNhYzY2YTkxNjpkZWFhNmM5N2ZiNWFjNzE3OTZlNWRkNzg4N2VlZjE5M2M2NDY0YTBkOTk3ZDYzZmU2MDBlYjk5M2YzNmMxODk3OmM1NTExZTk5N2NkOGRjMzk5ZTEwMjMzMjg4YzViODM0YzcyMzc1ZmY2NWI2NDExZThlMTVmNDE4ZWU4MGYxMTg6ODY5M2VhZWY3ZjQ2OGVkYmY2ZTY1ZjU4ZDlmYzhkYTgyMDk1YjhhNWE4ODdmMWU1MDQ0NWQ0NjMxM2VmODRhODo2OWVjZTE5MGFkZjI1Y2E2YTljNDhkODQwNzE4Yzc5MTQwY2Y2Y2NjYTFjM2VjODIyMWE5MzlmMDE4YTY4NzkwOjE5OWZmZjViYjA2OTJiNThmYTkzMmMyNTA3NGU3OGQxMzBhZDE5OGE5MDBmNmYyYzJmNzI4MDk1ZTY1MzQzYTU6ZDJmZmU2NWJjYjdlYmIzMGE0ZjE2NzdhMDgyYmY4NTBlM2EzNWNkN2FmMTdkMDk3OWI1MWU3MWRjMWRiNjJkNDo2OGQ5YmRhYTdkMjFhNjAzZDVmNzRjYTA4NTA2NDkyYzRhODAyNWVhMGVlMTlhZDdkNzIzZGY2YTJkNDQxMTBhOjQxODFkMDA4OGQ4ZDNjZDA3ZmFlNDNmNjY2NGI0Y2I0MzJjMzViODMyNzEwMzhjZTlhOGQ0NDllNzc1Mzg4OGI6ZjMxM2Y5NmRjNzViZTQxZGRjNzdjNWU4MTBhY2Q3MjUxNzU2ZGE5YzJhY2JlM2UyMjMzOWVmNTQzMDU4Njg4Njo0NzBlZDAzMjY0MTdmYjg0MTQ2Yjc2MmFlYWRiOTBkMTQ0NzQwN2QzNGE3NjM2NGU0YTU1NTViODVlNjMyNTZlOjIyYmFmYWNjMTQ4NjUzMmY1NGY1NmNlYmM1OGNhMDkwNjg1ZTVkNmUwNzdmMWM0NTQzYjZmYThmZTBjZTM4Zjc6MzkxMTA2Y2NkZjY2OWU1YjM3NDhiM2M3M2FkOWIwYjdlYjlkMmEzZGY0MDM1NTE3MDJjMDAzMDAwYzA4ZjQwNjo4YzRkNTJmNDZlYTcyZWIyOWE4ODNkMzUwMTZhZjk4ZDUzMjRmNWUxNzI0ZWM0NDI0NTM1YzRhZGNkYmRhMWE3OmMyYzZiNGM1ZDgwOGFhMDc4NTI4YjgxMzM4Y2U1NzZhZTg4YmU0ODAyZDkzMDIwM2M2ZTIyMmVjODYxMjFjMTUiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2VudHJ5cG9pbnQuc2giLAogICAgICAgICAgICAiL3N0YXJ0LnNoIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJMQU5HPUMuVVRGLTgiLAogICAgICAgICAgICAiR1BHX0tFWT0wRDk2REY0RDQxMTBFNUM0M0ZCRkIxN0YyRDM0N0VBNkFBNjU0MjFEIiwKICAgICAgICAgICAgIlBZVEhPTl9WRVJTSU9OPTMuNi4zIiwKICAgICAgICAgICAgIlBZVEhPTl9QSVBfVkVSU0lPTj05LjAuMSIsCiAgICAgICAgICAgICJOR0lOWF9WRVJTSU9OPTEuMTMuNy0xfnN0cmV0Y2giLAogICAgICAgICAgICAiTkpTX1ZFUlNJT049MS4xMy43LjAuMS4xNS0xfnN0cmV0Y2giLAogICAgICAgICAgICAiVVdTR0lfSU5JPS9hcHAvdXdzZ2kuaW5pIiwKICAgICAgICAgICAgIk5HSU5YX01BWF9VUExPQUQ9MCIsCiAgICAgICAgICAgICJMSVNURU5fUE9SVD04MCIsCiAgICAgICAgICAgICJTVEFUSUNfVVJMPS9zdGF0aWMiLAogICAgICAgICAgICAiU1RBVElDX1BBVEg9L2FwcC9zdGF0aWMiLAogICAgICAgICAgICAiU1RBVElDX0lOREVYPTAiLAogICAgICAgICAgICAiUFlUSE9OUEFUSD0vYXBwIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJSRURJUz1henVyZS12b3RlLWJhY2siCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvYXBwIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImF6dXJlLXZvdGUtZnJvbnQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJtY3IubWljcm9zb2Z0LmNvbS9henVyZWRvY3MvYXp1cmUtdm90ZS1mcm9udDp2MSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g3KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g4KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjgpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g5KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjkpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDExKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjExKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxMykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDE0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjE0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTUpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxNikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDE3KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjE3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTgpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTgpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxOSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxOSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMjEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMjQpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyNSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDI2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMjcpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMjcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyOCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjlmZWJlMjUxMGI2Yzg1NzdmYjkzMmE1ZmYwYjJiYTJlY2U2MDNhNDE3YTY2Yjg3NmU0OTA2YWZmNTdhYzYwMzU6Y2NhMjc2NzQzODc4MWM2MjU1MDJlNjJhNjkyYjAwMTBjNTU4N2YxOTAxOTVmNjczNjlmNmU4MjQ4OTgwYmZjMjoyYWQ1NGNlNWQ3ZGU1ZmU5YmJlNDUxYjdiZWY2NDNhNmQ4NTEyZWM0M2VhYmQyODdmMTY2NDFlNWJiMDZiYWEyOjdlYjlhYjhiNmEzZTliNTFmZGZkN2VjMDU2MmM3NGEzMTgzZmUyNjRiY2QxMDA0MTgyZWZkN2JmZWIzNTVhNWQ6NTExZWRhOTQ1ZTc0ZWIxZjMxYTZhODZkYzhjMWIzMzQ0ZDlmYzJiMzAzNWZlMTU0MjYxZDkxNjdjY2RmMzZhNDphYTIyNDY4YWQ4YTNhN2ZmOTU3YmM4ZGE5MjkwOGJiMGJiMDQ5NWM1YTQxN2NkYTIxYWI3MDhhMDc3ZWFiZWFmOmYwM2NlMjQxOTJkMTkwYWJkZGI1ZmI4MTVkMDRjYjBlNTM0YzY3MzlhNDhlZDdhOWI1MWI5ZTAxZWViMzkxZGI6ZDliMmQ5YjRlNWZjN2YyNDdhYjA3NTVlYjFjMTEyOGM4Y2MwYzU4ZDBiNDI5OGJiNzVjNjg2NTFjZWIwMTYxYzoxZTU5NDZmMTFiOWZjYTIyNzg4MzlmN2MwNTczNjJlNTI2MGFkMjI2NmY0NDc0ZGFmYTlkM2UyYTBlNmVjOTQ1OjQyYTljMWZiNzhkYjFmZWY1YmM0ZmM2MjgwZWViZGIzZTgzMTA5M2RkNzFiOGQ1YzgwOWI2ZTNhM2ZmZTE1NWI6MWZjNTZhNjFlZjUyYjBiOTZhNzU2ZTA1NzhlMjQxYmFmNjE1OTM3NjU3NmZjNDFkOGVkODliNzRhNzFkMjk3ZjoxM2RhMjMwN2ViZDMxOGJhMjBkZmFlN2YzMzBjNTUzMWMzOTI1ODM0M2Y4MzU3ODcxMjI3YTUyNjI5MGU3YTM4OmQ5ZTgyMTJhNjVhMjAzZWQxNjRmMTgzZmRlMDhhYTcxYTBjNTc3YzA0NWVjNmRhNWI5MmVmMmJiMWFiZDRkZWE6MGI4MTU0MjNlY2MzZGEyMTVjOGM2ZDAzYzJmYjdhMTgwMjgyMTQyMzZlYzJlNmIwNDQwNmIwZDE3MDljMzRhNjoyOGYwZDZmNTU2ZmI4MmQ4MjEzZDY2YzVlYzA5Yjg4MjQxNGM1Y2YxZDUxMjdmMTFjYjI1NzU5MDAwOWRlN2MzOmZiYTIyYTdkNzM1YzVmZmNmYWE5MTEzYTg0YjQyNGZlYTMxNWZiNDgxZmI4ZWUyY2NkMjVjMGNlMTkzZTg2MDA6ZDc1ODE3YjA4ZWY5N2IyZTZjOTNmZWZkZTMwNDljODcxYzM3ZjdmM2FkMDhjNjVhYjk4YzA4NGQxZWYzY2JiMTpmYTdiNzE3NWUwN2I3ODZiODZiMTRlMmQ1MTdhNjRjYjY3Y2VlMTBmNzZmMzQ3N2E5MWQ1OGRmOGUxOTUzZmZiOmZmY2E2YjU3NmE4YzczZmViNzkzODc4MmZkZjg4ZGE0NjBkM2QyZmI5MWJhMjQzMTAyY2QzMmMwYTE2MmY4NDg6NjVlNDQ0NjM2YzNiNTE4MDM1MDY3YmVlYWUxYzVmMmFhZDcyMzZkMDM2ZTkwNzFkMjAzMjMxMDhhZTViYzkzNjplNTVkNDcyMGZmMGNhNTA5NWRkMjIyZTU5NDY4NGFhYjZlZjIyYzlkNDE3NTJmZjExNGMxM2MzZDI5Y2M1ZjJhOjBjMjgzODgwZTM4YmZjNDdmYjQ5NjhkNzdlYjU0ZjFhMGYxOGJiYmIzNzFmZWQ3MzVkZThhM2RkYjZkMzkwZjE6M2FlMDk1MjE3OThhMTExY2I0OTQxZWQ5MjNkYWI2OTJlZjAzYjNiMmNiNmJmODc2MGRiYzI4YzQ3ZGE5YjA2NTpiMzRmMTRiYTQyNWMzMjc3NWVlZDQwOTdkZmI1NmE3YmE3ZGQ3NDYyNzA0NGM2ZjZlMDZjYzY5NTc3Y2UwMmIzOmNjODFmZTM4YTg4MWMzNjgxOTQ2ZTkwZmMyNjRjNDJhNGVkNDI1MmNmY2QzY2ZjODdhMTE3OGEyZWU4NWUwMmU6ZWI1ZjNjOTUxMGExYjA0OTEzMjc2NThmZmMwM2JjYzIzM2Y1ODE0ZDYwMjUzZmZjYjdhMzlhMjMyMWQwNDM5YTo0Y2I3OTZkZmJhNDJhOWI1ZTU0NWFiOTk0NTA2NTU1ZjdlYmFlYTI0ZDdiMTUxMGRlZWRkOTgwMjc4ZWYxMmQ2OmZkNGJkMjQ3ODIwNmY1N2M3NGQ5MDU0NTk0MmQ5OTlhN2JlNDg1Yzk3ZmQxOGY0MmQ4M2U4NDBkYjE4Y2EzNmU6MzNiZTRiZDhlNWRlNDNmYzU5YmUwODM1MDE2MGI2NGVjYzNhZDZjNjc4ZWUyMTA3ZDZhYjhiYTkxNDZkNWZiNSIsCiAgICAgICAgICAgICI5NGQxMGY3OGVhZGY3ZGYxNWNiMjZmOTc3Zjg4MWJkZmIxZjI4ZDUzZWNkNjNkZWQ4MDg1ZGYwYjkzNTkwMTE3OjM2OWI0YWMwMzFhZGQ0YjIxNDg4OTI3OGQ1ZWY1MzNlZTc5NjgyMDdkYWZhOTM0YmJiMDc1OTM0MWE4ZTE2ODI6MjdhOTM2NTQwMzdmYWJhN2RkMDdjOGYyZTA1ZmViNzdlYjgzOGE3MzgwNWY4MTg5ZTBjY2E1NzU5Y2I2OWJiOToxNTc5YjhiZmNiZGFmOWFlMDMzOGU2ZGMwOTk5YzFkMmU1NGU1ZWU3YjVmMmEzM2RlNThmZTRlZmIzN2Q4MWY2OmUzYjAzOGVjOTI1OTQ4ZGQwZGVmOWVlOTI4NDVhYjM4NzJkNzM3NjBhYTI2NDU5NWU0ZGJmMzgwMzIxZmUyNjk6ZDcyMmZhYWY2OTRmYWI0YTkzM2VmZjEwZmYzNTFkMmI4Y2EwMDczOWQxMGI2ODk4MWY3YWY2YzFkNmZhNmRhYzo4YTliMjBiOWE1MDExNmEzYmI5NTJhYWJiMzZjZDc5ZmRkNTYwZTZlNDUwMWUxMTc0ZGJiNDAwYzFmODU1YTY5OmY5OTc3NDExY2ViNzIwMzIxMDI1M2M5OWM0YzJhMWY0YWFjM2JlMmZhNDNhZDRkNDczNWE1ZmJiYjQ1MWIwZDM6YzM5NjU2N2E1MGNhYjQwY2IxOWQ0NjE3ZDk3M2NjYmQ1YTBmMjk4ZjE5MmViMTFjNTNlNDQyOTFiNDFmY2Y4ZjoxYzFjM2U2YjY1ZGUyYTA2NmFiZDUwOGE2MGRiY2FjN2IwZDQyNzRjZWZlMzJkNmY3NmMyMTczN2Y3MWQ4N2I3OmI0ZTViODAzNzA0ZmMyMmJmNTc0YWIzMDhjNzgyNTQyODczYTZiYzU2NmM1ZjcwZDY0NDExNjY5YzIxNmJlYzc6MjgxMDI3NjU2ZWJjMzQ5MGMyMDU3OGQ0ODdiOTViYzZlNTdlNGRhMGVlN2U5ZDdmOGRhMDczNjhlMWRjOWQ4ZjpiY2NmMWEzMDQ2NDVlZDk1YTJlNmZlNTU4ZDJjYzk5OTI0NjI5ZjgyOTYyZDQ1NDIzMzBiMGUyYWE0MGJlNTY2OjIwNjNmY2UwODU5ODFlYzE3NjYwNjVlODg3OGFkMzk3MjQ5YzFhMDU1MzViZWMyYzQwMDNhNTBjNGZkOTgyMGQ6NzhlOTcyMGU5ZjIzYmQzZTA3NDlhMTU4MjJkMWI2ODYxMzU0OThmMzUxY2U3ZTMyNjFkMmZlZGNhYzY2YTkxNjpkZWFhNmM5N2ZiNWFjNzE3OTZlNWRkNzg4N2VlZjE5M2M2NDY0YTBkOTk3ZDYzZmU2MDBlYjk5M2YzNmMxODk3OmM1NTExZTk5N2NkOGRjMzk5ZTEwMjMzMjg4YzViODM0YzcyMzc1ZmY2NWI2NDExZThlMTVmNDE4ZWU4MGYxMTg6ODY5M2VhZWY3ZjQ2OGVkYmY2ZTY1ZjU4ZDlmYzhkYTgyMDk1YjhhNWE4ODdmMWU1MDQ0NWQ0NjMxM2VmODRhODo2OWVjZTE5MGFkZjI1Y2E2YTljNDhkODQwNzE4Yzc5MTQwY2Y2Y2NjYTFjM2VjODIyMWE5MzlmMDE4YTY4NzkwOjE5OWZmZjViYjA2OTJiNThmYTkzMmMyNTA3NGU3OGQxMzBhZDE5OGE5MDBmNmYyYzJmNzI4MDk1ZTY1MzQzYTU6ZDJmZmU2NWJjYjdlYmIzMGE0ZjE2NzdhMDgyYmY4NTBlM2EzNWNkN2FmMTdkMDk3OWI1MWU3MWRjMWRiNjJkNDo2OGQ5YmRhYTdkMjFhNjAzZDVmNzRjYTA4NTA2NDkyYzRhODAyNWVhMGVlMTlhZDdkNzIzZGY2YTJkNDQxMTBhOjQxODFkMDA4OGQ4ZDNjZDA3ZmFlNDNmNjY2NGI0Y2I0MzJjMzViODMyNzEwMzhjZTlhOGQ0NDllNzc1Mzg4OGI6ZjMxM2Y5NmRjNzViZTQxZGRjNzdjNWU4MTBhY2Q3MjUxNzU2ZGE5YzJhY2JlM2UyMjMzOWVmNTQzMDU4Njg4Njo0NzBlZDAzMjY0MTdmYjg0MTQ2Yjc2MmFlYWRiOTBkMTQ0NzQwN2QzNGE3NjM2NGU0YTU1NTViODVlNjMyNTZlOjIyYmFmYWNjMTQ4NjUzMmY1NGY1NmNlYmM1OGNhMDkwNjg1ZTVkNmUwNzdmMWM0NTQzYjZmYThmZTBjZTM4Zjc6MzkxMTA2Y2NkZjY2OWU1YjM3NDhiM2M3M2FkOWIwYjdlYjlkMmEzZGY0MDM1NTE3MDJjMDAzMDAwYzA4ZjQwNjo4OWFlNDU3N2U1ZGU3MmY4N2QyYTU3MzljOWYwYzZlODk3MWYyYjBkNDkzZWMxMGU5MTVhNzYyN2ZkYmZjMzQ2OmMyYzZiNGM1ZDgwOGFhMDc4NTI4YjgxMzM4Y2U1NzZhZTg4YmU0ODAyZDkzMDIwM2M2ZTIyMmVjODYxMjFjMTUiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= spec: nodeSelector: kubernetes.io/os: linux diff --git a/src/agent/samples/policy/yaml/kubernetes/conformance/netexecrc.yaml b/src/agent/samples/policy/yaml/kubernetes/conformance/netexecrc.yaml index f433a2935c07..5c959a58229c 100644 --- a/src/agent/samples/policy/yaml/kubernetes/conformance/netexecrc.yaml +++ b/src/agent/samples/policy/yaml/kubernetes/conformance/netexecrc.yaml @@ -10,7 +10,7 @@ spec: labels: app: netexec annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Fnbmhvc3QiLAogICAgICAgICAgICAibmV0ZXhlYyIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgICAiSE9TVE5BTUU9JChob3N0LW5hbWUpIgogICAgICAgICAgXSwKICAgICAgICAgICJDd2QiOiAiLyIsCiAgICAgICAgICAiQ2FwYWJpbGl0aWVzIjogewogICAgICAgICAgICAiQW1iaWVudCI6IFtdLAogICAgICAgICAgICAiQm91bmRpbmciOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkVmZmVjdGl2ZSI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiSW5oZXJpdGFibGUiOiBbXSwKICAgICAgICAgICAgIlBlcm1pdHRlZCI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgIk5vTmV3UHJpdmlsZWdlcyI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cy9mcy9jZ3JvdXAiLAogICAgICAgICAgICAic291cmNlIjogImNncm91cCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJjZ3JvdXAiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJyZWxhdGltZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXJtaW5hdGlvbi1sb2ckIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0bmFtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0bmFtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClzZXJ2aWNlYWNjb3VudCQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2VucyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0b2tlbnMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJuZXRleGVjIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuMzIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDNhZWJlOWFlMGE3YzU4OTljNDk1MjBmYjBjZDY4ZTAwOTJmODAxMDBiMzNhNWRkYTIyMTk1YjZjYzA3MTQzNjozZjAwY2VlODU0NjhlMmEwMWNkZjEwMDE0NWQ3MTcxZTg2Yjg5ZDhiNzM3NTIyYWY3MTNjYjgyYmM2YmFkMjNjOjUzMTkxODNlZTU4NjBmZTQ3ZGM0MzkwMTExZjNhMTIwYjk0ZDJlNGQ0ZTU2OTFkMTQ4ZWFlMzY1MWVmZDBiYmQ6MjZkYzdhMDljZjg1MmQ4ZGExNDQzM2MzYTU1MTdiZTFlMTI2NDNmMmQ2ZWVjYWIxMmIwMmRjMTlmNjIzOWIyNjoxN2ZjMWY4Njg3MjUzZjUxMTg2NzAxOGFkNjc5NGM4NGY4ZmVhYjBlZmQ2YTQ5MGFlMDY1YWM2ZTFmOGMyNzYxOjAzMzY2YTczM2QyYjM5MmRlOWFlM2EwYWRiNjM3OTkwMzNiOTIxMmZhNzUwY2M1NDk0NzY3NWYwZWM0OTA2MDA6NjA2N2NmNDUwNDQ1N2NhMmFhZWU4M2UwOTJiMmNkOGExM2M0N2RjOGIzNzU4NWJhZWQyMjViN2VjZWU0MjVhNjplYzA3MTRkYjlhMjk2MTIwZWViMGQxMzQ5NGVkNDllMDBkZjVkMzc3N2VlNmFjNTgwZjNiNmYzMjAxMGJjYzc2OjE5MDQ3M2E3YWY5MTEyNWMyYWFhODM5ZWRhNjE2OWJiYTU1ZGRhM2IwODNhYTY3MWI4ZjBmMmI0ZDc3YTkzNTkiLAogICAgICAgICAgICAiN2YyMjYzNzQzMjc1MGY1MDU2YmU3OTUzOGM1NDFlNzE3NWEzODk2MWY4MjI4NzkwMGRjMzEyNjczNWUxZmEzYTpjZTNmYjQ0NjI5MzczYTNmYTE4YTQyN2FiMmU1OWZlMDNhZDU1NDlmYjRlMzdmZTIzMDhlOWI2NzUyZDc0NGE3OmRjYmNmNTg3MDNlOTMwMWEzNGVmM2E2ZTI4MWFiMTcxYjUzYTk1YTY3OTEwZTViYThhMzVlMGZkMGVmYjFmYTg6NjVjNWU4M2UwZGEwYzE1ZDEyZjRmZmM2NDUwOWI3MWU0YjQ5OTM5ZjI0NzUyOTUzNTk1NTNkMzdlYTVjYmY1ZTo2YTEzMjE0Y2IwMjExOTJkY2E4ZjdhNWQzMjA0YTFkOTM0ZGRkMjlkNDI2ZDAxZWFhNGMwZjg3YjUwNDQyY2Y5OjEyMzFkOWI1ZDFiMDcwYTA5MGQ4ZmEwNzRiODRjMTBlOWU4M2JhZjVkN2M0MTZhNTg4YWNkYjkyMGM1MTM0MGM6ZTJhZmNkOTkzNjYyYjNiYzI2MDQ4MjdkZWMyNmRlMzA4N2ZkMTY5ZjAzODI4MzUzZmY1NjM5OTQ2NTljMzVlZTo0OGQzODc2NGZmNzEzNjBkMTA4MGNhMTI0MGJhZTE0MGVmNjJjZjNhNzg3NjUyNTIxNTZmNWRkMTUyN2YwZWIyOjQ3YjY2OWU1YTczMDNjZDEzYmM4ZmJkOTI0ZTQyYTI1YWJlZDNhZTFhZmZmOWI1YzYyOTI2ZjdjZTc3YjA1NGEiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Fnbmhvc3QiLAogICAgICAgICAgICAibmV0ZXhlYyIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgICAiSE9TVE5BTUU9JChob3N0LW5hbWUpIgogICAgICAgICAgXSwKICAgICAgICAgICJDd2QiOiAiLyIsCiAgICAgICAgICAiQ2FwYWJpbGl0aWVzIjogewogICAgICAgICAgICAiQW1iaWVudCI6IFtdLAogICAgICAgICAgICAiQm91bmRpbmciOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkVmZmVjdGl2ZSI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiSW5oZXJpdGFibGUiOiBbXSwKICAgICAgICAgICAgIlBlcm1pdHRlZCI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgIk5vTmV3UHJpdmlsZWdlcyI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cy9mcy9jZ3JvdXAiLAogICAgICAgICAgICAic291cmNlIjogImNncm91cCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJjZ3JvdXAiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJyZWxhdGltZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXJtaW5hdGlvbi1sb2ckIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0bmFtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0bmFtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClzZXJ2aWNlYWNjb3VudCQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2VucyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0b2tlbnMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJuZXRleGVjIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuMzIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDNhZWJlOWFlMGE3YzU4OTljNDk1MjBmYjBjZDY4ZTAwOTJmODAxMDBiMzNhNWRkYTIyMTk1YjZjYzA3MTQzNjozZjAwY2VlODU0NjhlMmEwMWNkZjEwMDE0NWQ3MTcxZTg2Yjg5ZDhiNzM3NTIyYWY3MTNjYjgyYmM2YmFkMjNjOjUzMTkxODNlZTU4NjBmZTQ3ZGM0MzkwMTExZjNhMTIwYjk0ZDJlNGQ0ZTU2OTFkMTQ4ZWFlMzY1MWVmZDBiYmQ6MjZkYzdhMDljZjg1MmQ4ZGExNDQzM2MzYTU1MTdiZTFlMTI2NDNmMmQ2ZWVjYWIxMmIwMmRjMTlmNjIzOWIyNjoxN2ZjMWY4Njg3MjUzZjUxMTg2NzAxOGFkNjc5NGM4NGY4ZmVhYjBlZmQ2YTQ5MGFlMDY1YWM2ZTFmOGMyNzYxOjAzMzY2YTczM2QyYjM5MmRlOWFlM2EwYWRiNjM3OTkwMzNiOTIxMmZhNzUwY2M1NDk0NzY3NWYwZWM0OTA2MDA6NjA2N2NmNDUwNDQ1N2NhMmFhZWU4M2UwOTJiMmNkOGExM2M0N2RjOGIzNzU4NWJhZWQyMjViN2VjZWU0MjVhNjplYzA3MTRkYjlhMjk2MTIwZWViMGQxMzQ5NGVkNDllMDBkZjVkMzc3N2VlNmFjNTgwZjNiNmYzMjAxMGJjYzc2OjE5MDQ3M2E3YWY5MTEyNWMyYWFhODM5ZWRhNjE2OWJiYTU1ZGRhM2IwODNhYTY3MWI4ZjBmMmI0ZDc3YTkzNTkiLAogICAgICAgICAgICAiN2YyMjYzNzQzMjc1MGY1MDU2YmU3OTUzOGM1NDFlNzE3NWEzODk2MWY4MjI4NzkwMGRjMzEyNjczNWUxZmEzYTpjZTNmYjQ0NjI5MzczYTNmYTE4YTQyN2FiMmU1OWZlMDNhZDU1NDlmYjRlMzdmZTIzMDhlOWI2NzUyZDc0NGE3OmRjYmNmNTg3MDNlOTMwMWEzNGVmM2E2ZTI4MWFiMTcxYjUzYTk1YTY3OTEwZTViYThhMzVlMGZkMGVmYjFmYTg6NjVjNWU4M2UwZGEwYzE1ZDEyZjRmZmM2NDUwOWI3MWU0YjQ5OTM5ZjI0NzUyOTUzNTk1NTNkMzdlYTVjYmY1ZTo2YTEzMjE0Y2IwMjExOTJkY2E4ZjdhNWQzMjA0YTFkOTM0ZGRkMjlkNDI2ZDAxZWFhNGMwZjg3YjUwNDQyY2Y5OjEyMzFkOWI1ZDFiMDcwYTA5MGQ4ZmEwNzRiODRjMTBlOWU4M2JhZjVkN2M0MTZhNTg4YWNkYjkyMGM1MTM0MGM6ZTJhZmNkOTkzNjYyYjNiYzI2MDQ4MjdkZWMyNmRlMzA4N2ZkMTY5ZjAzODI4MzUzZmY1NjM5OTQ2NTljMzVlZTpiZmY3MTRlNDcwMWVkY2Y0MjEyODBhZjY0ZjA0YmY2ODE5ZTBlZjkxYzI1ZGJhYWM3Y2JmNWMyYjhhYjViMDVkOjQ3YjY2OWU1YTczMDNjZDEzYmM4ZmJkOTI0ZTQyYTI1YWJlZDNhZTFhZmZmOWI1YzYyOTI2ZjdjZTc3YjA1NGEiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= spec: runtimeClassName: kata-cc containers: diff --git a/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-http-rc.yaml b/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-http-rc.yaml index 4f76344d0e6b..038c288c15a0 100644 --- a/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-http-rc.yaml +++ b/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-http-rc.yaml @@ -10,7 +10,7 @@ spec: labels: app: echoheaders annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Fnbmhvc3QiLAogICAgICAgICAgICAibmV0ZXhlYyIsCiAgICAgICAgICAgICItLWh0dHAtcG9ydD04MDgwIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImVjaG9oZWFkZXJzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuNDEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMmQxMDdkMjc4NTE3YTA2MWFmNjEwYjkzODRkMmM2YTE3OTkzNzUzOTUyNTNmMWE1NmZjMzk2NmIzMmUyNDliMjplZjEyMTAwYzQzZDgwMzY4ZjRiNWE0NDA3MTc2ZjBhMGY2YzIyYjUxYjU3ODlhMWUyOTZjOGExOWYzMmRkMjlhOjI5MDcyYjMzYzVhNzdiNGZmYjc0MWUxMTc4OGE5NzRmOTk2ZTM0NjY2YzdlZWQyOWRiYjNkYjk4ZDEyM2U5Mzg6NDQ1M2I5NzY0ZWNkYTgzNWEzYjJhZWY4NWRmZjM3MTI3MjcyOGU5MDdmMDcwYTBlNTAxNjIwZGM5MDk0YzM2Mzo3YzE1M2VhNzMzMTlmNGNjYTc3NzgxMjg1NzU5NjQ3ZDQzMTQzMWI2MWIxYzllYTljMDE3YTM1MDgxMGJjNjgxOmZmNWYyMzE1MTFhYzZkNWJjZjNiNjdmOGQ1ZGY3YzFmMDg4YzUxNjJkZDM0NDMwYmM2MDVlMjJjNjA2NGQ2OTU6NzAzYjI3YmUzYTcwMTI2MDMzN2Q1MjUxMDgwMmIzNmM1NWFlOWQ4MDNmN2QzMWYzYTg1OGM4YzViNzg3NjI4ZjpiNTY5YjUyZDA2OGQyOGQ2OGVhOWVjNTkzODMyNmE0OWI0NjU2MTVkZjc3YzRhYzhmYmRiOTNkNjYwOTJhMTE5OmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiNDNkZjZmNTQ4YzFjY2JmODNhNzg2YjY5NGFjZGNjOTllODBlNTU1ZWNlMTdlOWNlZDU0OGZlNjcwNTE2MTQzMzpkZTJiN2Q2YTFmNjNiOWM3ZDVmNmExNDAyZGI1MGU4MjFiMzgxMTI0ZTk5NTk3YTVjZmFkOTgwNWJmYmE2OGUxOjM2YjlkYTFhNDE3ZDc4ZTg1NjhkNDNlNDM4NTg1Y2Q5ODJhOWZkOTdlZmJlMTFmOGM3ZWUzYzEzMTkyNmIxZWE6MmJiOGI2NjU3ZmFhNmVhMzkxYTUwODcwMjNmOTUyYjI4MGQzMGFmZjc1MTYxYWFkN2I5MDU3YzU3ODFhMjgxOTo0MWFhODdmMzA1ZGZmNmUyNTZjMDY2ZjQxOTUxMDgzOThmZGZmMDI4MWIyMDk5YTZhMWNkNGM4ZTdhNTI2NmNhOjhkZjdiOWEwNmY0MTI3Mzk1ZWJiN2JjMWY2OWY3YmFlZmM4NmJiY2NmZDRlMDc2NzFhMDM1MzVlZmEwZDExNDU6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMTo3ZmE4ZGFmY2FiZWQ0YzY5ODI1YzNlY2FkNDllMTdhYTRkZjUwNmY2Zjk4N2EzZDYyNzM5ODkwMzVjMWI4NjYzOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Fnbmhvc3QiLAogICAgICAgICAgICAibmV0ZXhlYyIsCiAgICAgICAgICAgICItLWh0dHAtcG9ydD04MDgwIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImVjaG9oZWFkZXJzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuNDEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMmQxMDdkMjc4NTE3YTA2MWFmNjEwYjkzODRkMmM2YTE3OTkzNzUzOTUyNTNmMWE1NmZjMzk2NmIzMmUyNDliMjplZjEyMTAwYzQzZDgwMzY4ZjRiNWE0NDA3MTc2ZjBhMGY2YzIyYjUxYjU3ODlhMWUyOTZjOGExOWYzMmRkMjlhOjI5MDcyYjMzYzVhNzdiNGZmYjc0MWUxMTc4OGE5NzRmOTk2ZTM0NjY2YzdlZWQyOWRiYjNkYjk4ZDEyM2U5Mzg6NDQ1M2I5NzY0ZWNkYTgzNWEzYjJhZWY4NWRmZjM3MTI3MjcyOGU5MDdmMDcwYTBlNTAxNjIwZGM5MDk0YzM2Mzo3YzE1M2VhNzMzMTlmNGNjYTc3NzgxMjg1NzU5NjQ3ZDQzMTQzMWI2MWIxYzllYTljMDE3YTM1MDgxMGJjNjgxOmZmNWYyMzE1MTFhYzZkNWJjZjNiNjdmOGQ1ZGY3YzFmMDg4YzUxNjJkZDM0NDMwYmM2MDVlMjJjNjA2NGQ2OTU6NzAzYjI3YmUzYTcwMTI2MDMzN2Q1MjUxMDgwMmIzNmM1NWFlOWQ4MDNmN2QzMWYzYTg1OGM4YzViNzg3NjI4ZjpiNTY5YjUyZDA2OGQyOGQ2OGVhOWVjNTkzODMyNmE0OWI0NjU2MTVkZjc3YzRhYzhmYmRiOTNkNjYwOTJhMTE5OmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiNDNkZjZmNTQ4YzFjY2JmODNhNzg2YjY5NGFjZGNjOTllODBlNTU1ZWNlMTdlOWNlZDU0OGZlNjcwNTE2MTQzMzpkZTJiN2Q2YTFmNjNiOWM3ZDVmNmExNDAyZGI1MGU4MjFiMzgxMTI0ZTk5NTk3YTVjZmFkOTgwNWJmYmE2OGUxOjM2YjlkYTFhNDE3ZDc4ZTg1NjhkNDNlNDM4NTg1Y2Q5ODJhOWZkOTdlZmJlMTFmOGM3ZWUzYzEzMTkyNmIxZWE6MmJiOGI2NjU3ZmFhNmVhMzkxYTUwODcwMjNmOTUyYjI4MGQzMGFmZjc1MTYxYWFkN2I5MDU3YzU3ODFhMjgxOTo0MWFhODdmMzA1ZGZmNmUyNTZjMDY2ZjQxOTUxMDgzOThmZGZmMDI4MWIyMDk5YTZhMWNkNGM4ZTdhNTI2NmNhOjhkZjdiOWEwNmY0MTI3Mzk1ZWJiN2JjMWY2OWY3YmFlZmM4NmJiY2NmZDRlMDc2NzFhMDM1MzVlZmEwZDExNDU6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMToyZWFjMDc3ZmQ4ZTM3YzU2NDJhMjU3YzkzNDU2NzBiM2RlMmMwNGM1YTZjMmFlNTMwOWJlMjIwY2ZkM2M1ZTdkOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= spec: runtimeClassName: kata-cc containers: diff --git a/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-http2-rc.yaml b/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-http2-rc.yaml index 395ed5bf6f49..9579ccfb1ef0 100644 --- a/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-http2-rc.yaml +++ b/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-http2-rc.yaml @@ -13,7 +13,7 @@ spec: labels: app: echoheaders annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Fnbmhvc3QiLAogICAgICAgICAgICAibmV0ZXhlYyIsCiAgICAgICAgICAgICItLWh0dHAtcG9ydD04NDQzIiwKICAgICAgICAgICAgIi0tdGxzLWNlcnQtZmlsZT0vbG9jYWxob3N0LmNydCIsCiAgICAgICAgICAgICItLXRscy1wcml2YXRlLWtleS1maWxlPS9sb2NhbGhvc3Qua2V5IgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImVjaG9oZWFkZXJzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuNDAiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDQzNmQ5Mzk5MzRhMjliM2Q1OTc5MzUzNGZmOTNlMTk5Zjk0MzhmOWI5NDFlMTNhZTYzMjE1ZjE2N2M0OTNiODpiZjFjN2YxZjlmN2Y5OTVhYTk2YjBjMGViNTQzOTJkYjRlYzc3OTNlZWI1MzJiNDM4MmI1M2Y3MDA0NDQ2MzVmOjEyNzYyNjJiOTEwNGYxODY3MDQxMGNjYWU1M2JhMzJjM2QyMTk1ZWIxMTdjZWRhZmI2N2YyNTliODljZDRkN2E6Y2Y1NDMyMWYwOWNlNDk3OTNiMTNmMGExYjlmMjVjODY5M2Q0NDY2ZDRjMTg1MWRmMjZlNWM3ZWYyODJlMTg1NjphNzA0ZmIwMDZlOTY3YWY5ODExMTJmNDYxODZiZjZiM2RjM2RmYzlmMWVkNjI2MTRlZTlmZGM4MTEzMDU3NGRlOjZhNzBkN2FkZGU0YmYzNTdlNDczNGQ0ZmFkODgxNjA5MjAwZmEzZWJiMjc5MmYyYmFjMGUzYmNhODMxYjRjMjI6ZTIyNGU1M2ZjY2FkYTdjOTYyNzE0YjM4ZmM2YjQzZWVjNTU2NGVkMzUwMWI1MzE4ODQxMmRlYzU1Y2E5ZTRjMTplZWY2NTNmOTVjYTMyNjUyYjg3ZTY3NmMwYTM3YzBmMjA0ZTU4MTQ1ZDg2NmI0YzY4YmUwZWYzZGQzNmI0MjExOmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiMTFlYmM1M2RmY2YwMDhkZGFjZjQ1ZWU2NjM5ZGI1OGRmNDY2ZWQ3OTc1ZTAxMGI0N2EyMTYyMmQ2NzA0OGY2MDo4MzUyMmEzODhmZGY3YTIwZTVjMDU1YjNkOGRhN2E3NzI2ZmIwNGI3MTZiN2M1MjI4YmUzOTllNzgyMjA0NGI5OjZjN2VhMGY2YzQ4MTE3ZWYwYjVhMjVkMDhlNzAzMzE5NDY2NTU5NGFhYWQxODJjNWQ3MjI2Nzg4ZTc3OWJmMDg6NTY4ZDkxMTFiNTc5YTllYjY2MWVkNzk3OGVjYjQ5YjAzNTFmOGZiN2M5ODcxMjkwYmU0ZWMzYjVmODVhMDdhOTpjMGNkZTQwOTFlMjBiYjI2NGM1OTI4ZmNjZjNlMzE1N2Y4ODBkODY0ZGYzZmMzMjFiYjlmNmI1YzM1ZjllNGU0OjM1OTkyZTJjYWJhOTYyZmMwZDNjYmIyMmYyMzhiYmU1MmJlMGQ1NDRiM2IzYTllYjI4N2Q2YmZkOTdmYTdkZjI6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMTphZjMxZTY1MWVkZDFmMjViZDgzOTQzNGI2ZDYwNTYyYmNiZDkwNzFlYzUxNmY0MWM2YjJlZmIyOWU4NDBjNDNlOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Fnbmhvc3QiLAogICAgICAgICAgICAibmV0ZXhlYyIsCiAgICAgICAgICAgICItLWh0dHAtcG9ydD04NDQzIiwKICAgICAgICAgICAgIi0tdGxzLWNlcnQtZmlsZT0vbG9jYWxob3N0LmNydCIsCiAgICAgICAgICAgICItLXRscy1wcml2YXRlLWtleS1maWxlPS9sb2NhbGhvc3Qua2V5IgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImVjaG9oZWFkZXJzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuNDAiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDQzNmQ5Mzk5MzRhMjliM2Q1OTc5MzUzNGZmOTNlMTk5Zjk0MzhmOWI5NDFlMTNhZTYzMjE1ZjE2N2M0OTNiODpiZjFjN2YxZjlmN2Y5OTVhYTk2YjBjMGViNTQzOTJkYjRlYzc3OTNlZWI1MzJiNDM4MmI1M2Y3MDA0NDQ2MzVmOjEyNzYyNjJiOTEwNGYxODY3MDQxMGNjYWU1M2JhMzJjM2QyMTk1ZWIxMTdjZWRhZmI2N2YyNTliODljZDRkN2E6Y2Y1NDMyMWYwOWNlNDk3OTNiMTNmMGExYjlmMjVjODY5M2Q0NDY2ZDRjMTg1MWRmMjZlNWM3ZWYyODJlMTg1NjphNzA0ZmIwMDZlOTY3YWY5ODExMTJmNDYxODZiZjZiM2RjM2RmYzlmMWVkNjI2MTRlZTlmZGM4MTEzMDU3NGRlOjZhNzBkN2FkZGU0YmYzNTdlNDczNGQ0ZmFkODgxNjA5MjAwZmEzZWJiMjc5MmYyYmFjMGUzYmNhODMxYjRjMjI6ZTIyNGU1M2ZjY2FkYTdjOTYyNzE0YjM4ZmM2YjQzZWVjNTU2NGVkMzUwMWI1MzE4ODQxMmRlYzU1Y2E5ZTRjMTplZWY2NTNmOTVjYTMyNjUyYjg3ZTY3NmMwYTM3YzBmMjA0ZTU4MTQ1ZDg2NmI0YzY4YmUwZWYzZGQzNmI0MjExOmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiMTFlYmM1M2RmY2YwMDhkZGFjZjQ1ZWU2NjM5ZGI1OGRmNDY2ZWQ3OTc1ZTAxMGI0N2EyMTYyMmQ2NzA0OGY2MDo4MzUyMmEzODhmZGY3YTIwZTVjMDU1YjNkOGRhN2E3NzI2ZmIwNGI3MTZiN2M1MjI4YmUzOTllNzgyMjA0NGI5OjZjN2VhMGY2YzQ4MTE3ZWYwYjVhMjVkMDhlNzAzMzE5NDY2NTU5NGFhYWQxODJjNWQ3MjI2Nzg4ZTc3OWJmMDg6NTY4ZDkxMTFiNTc5YTllYjY2MWVkNzk3OGVjYjQ5YjAzNTFmOGZiN2M5ODcxMjkwYmU0ZWMzYjVmODVhMDdhOTpjMGNkZTQwOTFlMjBiYjI2NGM1OTI4ZmNjZjNlMzE1N2Y4ODBkODY0ZGYzZmMzMjFiYjlmNmI1YzM1ZjllNGU0OjM1OTkyZTJjYWJhOTYyZmMwZDNjYmIyMmYyMzhiYmU1MmJlMGQ1NDRiM2IzYTllYjI4N2Q2YmZkOTdmYTdkZjI6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMToyOTZjZTFlNTJiNjFkMzFjODE4M2VmMDlmODVmMzAwY2NlYWRmNDE5N2RhMWQ1YjFhYWUyYzMyYTZjZjRiOTAwOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= spec: runtimeClassName: kata-cc containers: diff --git a/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-multiple-certs-rc.yaml b/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-multiple-certs-rc.yaml index bfecef167a40..aec7d1ac9169 100644 --- a/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-multiple-certs-rc.yaml +++ b/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-multiple-certs-rc.yaml @@ -10,7 +10,7 @@ spec: labels: app: echoheaders-https annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Fnbmhvc3QiLAogICAgICAgICAgICAibmV0ZXhlYyIsCiAgICAgICAgICAgICItLWh0dHAtcG9ydD04MDgwIiwKICAgICAgICAgICAgIi0tdGxzLWNlcnQtZmlsZT0vbG9jYWxob3N0LmNydCIsCiAgICAgICAgICAgICItLXRscy1wcml2YXRlLWtleS1maWxlPS9sb2NhbGhvc3Qua2V5IgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImVjaG9oZWFkZXJzLWh0dHBzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuNDEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMmQxMDdkMjc4NTE3YTA2MWFmNjEwYjkzODRkMmM2YTE3OTkzNzUzOTUyNTNmMWE1NmZjMzk2NmIzMmUyNDliMjplZjEyMTAwYzQzZDgwMzY4ZjRiNWE0NDA3MTc2ZjBhMGY2YzIyYjUxYjU3ODlhMWUyOTZjOGExOWYzMmRkMjlhOjI5MDcyYjMzYzVhNzdiNGZmYjc0MWUxMTc4OGE5NzRmOTk2ZTM0NjY2YzdlZWQyOWRiYjNkYjk4ZDEyM2U5Mzg6NDQ1M2I5NzY0ZWNkYTgzNWEzYjJhZWY4NWRmZjM3MTI3MjcyOGU5MDdmMDcwYTBlNTAxNjIwZGM5MDk0YzM2Mzo3YzE1M2VhNzMzMTlmNGNjYTc3NzgxMjg1NzU5NjQ3ZDQzMTQzMWI2MWIxYzllYTljMDE3YTM1MDgxMGJjNjgxOmZmNWYyMzE1MTFhYzZkNWJjZjNiNjdmOGQ1ZGY3YzFmMDg4YzUxNjJkZDM0NDMwYmM2MDVlMjJjNjA2NGQ2OTU6NzAzYjI3YmUzYTcwMTI2MDMzN2Q1MjUxMDgwMmIzNmM1NWFlOWQ4MDNmN2QzMWYzYTg1OGM4YzViNzg3NjI4ZjpiNTY5YjUyZDA2OGQyOGQ2OGVhOWVjNTkzODMyNmE0OWI0NjU2MTVkZjc3YzRhYzhmYmRiOTNkNjYwOTJhMTE5OmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiNDNkZjZmNTQ4YzFjY2JmODNhNzg2YjY5NGFjZGNjOTllODBlNTU1ZWNlMTdlOWNlZDU0OGZlNjcwNTE2MTQzMzpkZTJiN2Q2YTFmNjNiOWM3ZDVmNmExNDAyZGI1MGU4MjFiMzgxMTI0ZTk5NTk3YTVjZmFkOTgwNWJmYmE2OGUxOjM2YjlkYTFhNDE3ZDc4ZTg1NjhkNDNlNDM4NTg1Y2Q5ODJhOWZkOTdlZmJlMTFmOGM3ZWUzYzEzMTkyNmIxZWE6MmJiOGI2NjU3ZmFhNmVhMzkxYTUwODcwMjNmOTUyYjI4MGQzMGFmZjc1MTYxYWFkN2I5MDU3YzU3ODFhMjgxOTo0MWFhODdmMzA1ZGZmNmUyNTZjMDY2ZjQxOTUxMDgzOThmZGZmMDI4MWIyMDk5YTZhMWNkNGM4ZTdhNTI2NmNhOjhkZjdiOWEwNmY0MTI3Mzk1ZWJiN2JjMWY2OWY3YmFlZmM4NmJiY2NmZDRlMDc2NzFhMDM1MzVlZmEwZDExNDU6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMTo3ZmE4ZGFmY2FiZWQ0YzY5ODI1YzNlY2FkNDllMTdhYTRkZjUwNmY2Zjk4N2EzZDYyNzM5ODkwMzVjMWI4NjYzOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Fnbmhvc3QiLAogICAgICAgICAgICAibmV0ZXhlYyIsCiAgICAgICAgICAgICItLWh0dHAtcG9ydD04MDgwIiwKICAgICAgICAgICAgIi0tdGxzLWNlcnQtZmlsZT0vbG9jYWxob3N0LmNydCIsCiAgICAgICAgICAgICItLXRscy1wcml2YXRlLWtleS1maWxlPS9sb2NhbGhvc3Qua2V5IgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImVjaG9oZWFkZXJzLWh0dHBzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuNDEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMmQxMDdkMjc4NTE3YTA2MWFmNjEwYjkzODRkMmM2YTE3OTkzNzUzOTUyNTNmMWE1NmZjMzk2NmIzMmUyNDliMjplZjEyMTAwYzQzZDgwMzY4ZjRiNWE0NDA3MTc2ZjBhMGY2YzIyYjUxYjU3ODlhMWUyOTZjOGExOWYzMmRkMjlhOjI5MDcyYjMzYzVhNzdiNGZmYjc0MWUxMTc4OGE5NzRmOTk2ZTM0NjY2YzdlZWQyOWRiYjNkYjk4ZDEyM2U5Mzg6NDQ1M2I5NzY0ZWNkYTgzNWEzYjJhZWY4NWRmZjM3MTI3MjcyOGU5MDdmMDcwYTBlNTAxNjIwZGM5MDk0YzM2Mzo3YzE1M2VhNzMzMTlmNGNjYTc3NzgxMjg1NzU5NjQ3ZDQzMTQzMWI2MWIxYzllYTljMDE3YTM1MDgxMGJjNjgxOmZmNWYyMzE1MTFhYzZkNWJjZjNiNjdmOGQ1ZGY3YzFmMDg4YzUxNjJkZDM0NDMwYmM2MDVlMjJjNjA2NGQ2OTU6NzAzYjI3YmUzYTcwMTI2MDMzN2Q1MjUxMDgwMmIzNmM1NWFlOWQ4MDNmN2QzMWYzYTg1OGM4YzViNzg3NjI4ZjpiNTY5YjUyZDA2OGQyOGQ2OGVhOWVjNTkzODMyNmE0OWI0NjU2MTVkZjc3YzRhYzhmYmRiOTNkNjYwOTJhMTE5OmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiNDNkZjZmNTQ4YzFjY2JmODNhNzg2YjY5NGFjZGNjOTllODBlNTU1ZWNlMTdlOWNlZDU0OGZlNjcwNTE2MTQzMzpkZTJiN2Q2YTFmNjNiOWM3ZDVmNmExNDAyZGI1MGU4MjFiMzgxMTI0ZTk5NTk3YTVjZmFkOTgwNWJmYmE2OGUxOjM2YjlkYTFhNDE3ZDc4ZTg1NjhkNDNlNDM4NTg1Y2Q5ODJhOWZkOTdlZmJlMTFmOGM3ZWUzYzEzMTkyNmIxZWE6MmJiOGI2NjU3ZmFhNmVhMzkxYTUwODcwMjNmOTUyYjI4MGQzMGFmZjc1MTYxYWFkN2I5MDU3YzU3ODFhMjgxOTo0MWFhODdmMzA1ZGZmNmUyNTZjMDY2ZjQxOTUxMDgzOThmZGZmMDI4MWIyMDk5YTZhMWNkNGM4ZTdhNTI2NmNhOjhkZjdiOWEwNmY0MTI3Mzk1ZWJiN2JjMWY2OWY3YmFlZmM4NmJiY2NmZDRlMDc2NzFhMDM1MzVlZmEwZDExNDU6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMToyZWFjMDc3ZmQ4ZTM3YzU2NDJhMjU3YzkzNDU2NzBiM2RlMmMwNGM1YTZjMmFlNTMwOWJlMjIwY2ZkM2M1ZTdkOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= spec: runtimeClassName: kata-cc containers: diff --git a/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-nginx-rc.yaml b/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-nginx-rc.yaml index bc9d9ad724c5..a74df73cbb1f 100644 --- a/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-nginx-rc.yaml +++ b/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-nginx-rc.yaml @@ -41,7 +41,7 @@ spec: k8s-app: nginx-ingress-lb name: nginx-ingress-lb annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMTAxLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICIvdXNyL2Jpbi9kdW1iLWluaXQiLAogICAgICAgICAgICAiLS0iLAogICAgICAgICAgICAiL25naW54LWluZ3Jlc3MtY29udHJvbGxlciIsCiAgICAgICAgICAgICItLWVsZWN0aW9uLWlkPWluZ3Jlc3MtY29udHJvbGxlci1sZWFkZXIiLAogICAgICAgICAgICAiLS1pbmdyZXNzLWNsYXNzPW5naW54IgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2xvY2FsL2x1YWppdC9iaW46L3Vzci9sb2NhbC9uZ2lueC9zYmluOi91c3IvbG9jYWwvbmdpbngvYmluIiwKICAgICAgICAgICAgIkxVQV9QQVRIPS91c3IvbG9jYWwvc2hhcmUvbHVhaml0LTIuMS4wLWJldGEzLz8ubHVhOy91c3IvbG9jYWwvc2hhcmUvbHVhLzUuMS8/Lmx1YTsvdXNyL2xvY2FsL2xpYi9sdWEvPy5sdWE7OyIsCiAgICAgICAgICAgICJMVUFfQ1BBVEg9L3Vzci9sb2NhbC9saWIvbHVhLz8vPy5zbzsvdXNyL2xvY2FsL2xpYi9sdWEvPy5zbzs7IiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJQT0RfTkFNRT0kKHNhbmRib3gtbmFtZSkiLAogICAgICAgICAgICAiUE9EX05BTUVTUEFDRT1kZWZhdWx0IgogICAgICAgICAgXSwKICAgICAgICAgICJDd2QiOiAiL2V0Yy9uZ2lueCIsCiAgICAgICAgICAiQ2FwYWJpbGl0aWVzIjogewogICAgICAgICAgICAiQW1iaWVudCI6IFtdLAogICAgICAgICAgICAiQm91bmRpbmciOiBbCiAgICAgICAgICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgIk5vTmV3UHJpdmlsZWdlcyI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cy9mcy9jZ3JvdXAiLAogICAgICAgICAgICAic291cmNlIjogImNncm91cCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJjZ3JvdXAiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJyZWxhdGltZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXJtaW5hdGlvbi1sb2ckIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0bmFtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0bmFtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClzZXJ2aWNlYWNjb3VudCQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2VucyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0b2tlbnMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJuZ2lueC1pbmdyZXNzLWxiIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2luZ3Jlc3MtbmdpbngvY29udHJvbGxlcjp2MC40Ni4wIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDMpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDQpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDUpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDYpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDcpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDgpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDkpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiZWUwOTc3ODRlNTc4YTRkZDAyODRjMGFlNTY5Y2Q5YmQyNTM5ZGY2MjVhNTI0YjQwZTUxY2JiZTNhZWJmOGViYzo2YmViYThlYTFjNmRhMzQxYjEwNzhjNWQyMDFhMGRjNDcxZTlhYzdhZGJjM2MzOWQzZjQ2Nzg3MmI5YjY0NjY4OmQ3MTgzZjM3MWVhYThlMzg1NmYyZDQ2OGQ3YWY3Mjc0Y2VjYzc4YzRiNDZmYTY4MTA2OTA4MzM0ZmJiNTlmNzM6NzJhMThiMTQ3NGJkYzBmMDYwN2JjOGNlNjFjNzdlNmNlZGYyNDY5OWQyNjMyMjY0NzNmZDgyMGMzOTM5ZjZkNjo0NGZkZTViYTg0MjI5YmM3NjdmNTA2NTAwMTkxZjI0NDZmMTI1YzgwZjg4YWNlN2JkMmMxOGY0NWI0MGFhZjMzOjY2M2QzZGVlZDM0ODVlYWJkNmIxNTM1ZGFmZTZkZGIyNjkwMDcwMjRlZGU3ZGU0YjY5MjgyMzBmMzZkZjUzYjI6MDczM2RkYzYwMTgzYTNmMzc4NmI0NTAwYTA3NzE0M2JlMDk5Y2EyZTA4MmM5OGJlY2IzMDA3MGQxMmViMzU0NjpiOTdiMDI5MzFmY2JkZWUxMzYyYWM1MjQzZjJhYzAxM2Y5NGM2NGFlMjRhODIwZjQwMjRjMmYyYmVkZWRiZDZhOjgwMmI4YjdkZmVhMTQxZTM0MmY2NWY5NjI4YzFhYWFkZDA2NWM1MDUzYTY5MTM0NjY1ZGFkODkwMDgyYmJhZDk6YzZmNWUxOTM1MmM3MmJjYWY1MWVkNzUyYjc4YTg3NmJhOWExMjg2OWYwMjI5NDI0NGE0OTg2NDUzMTE4MjE4ZjpmYzMzZTc2YmM4ZjE0MzI3OWFkNGQyMDEwZGQ1NDdlOThhNmQwNDE1Mzg2MWI3ZDg4MTAyNmM3ZDk5Y2U0ODY4OmMyOTMxNzJjNzI1YTJmYmQxOTEzN2Q4NzUxZWZiMDRhNzdiYjEyMTliNjk0YmM2MTliMzczN2IwYTNiYTJlNjk6NmI4MTEzNjQ2ZGIwYjY5MDMyODNjZWYxOGIyZmQ4MWVhMTY2OTJjODkzNmFmOTAwN2NmOGVmMDc3ZDNjNGI3ZToyODEyZTUyOGUyZTJiMzQyZmJlMjJlNDY1MGMzNDNkNzY5ZWZlZThhMDU5MDJhMWNlYjE1ZDU4OGFmMzE0ZDViIiwKICAgICAgICAgICAgImY3ZWJhYzI3MGJhZjYxNDA1ZTc2M2JiM2I0ZWJjYmRjNThjNmM2ZjE1ODExMWRmYmRjNGE3NjM5NTI4ZmFjZjQ6YjMzM2E1OGIzMjJkYmRmNzYyZDRlZTkyZTQyNTJjYTQwZjMzYjliMTNhZTNhNzg0ZWE5ZmVlYTUzOTY5NmE5YToyYmM2MWJmZDFhNzk1NGEzZGQxZDUyZWQ3MmU5MDkzM2ZiMWNkMDdjOGZiNWJjYjY4OGFlNjE3MzU1NDdkZGIzOmRlYjQzYzkxNGYwOTJjM2UyZDE3ZDZmMTNmMTA0ZmU3MzIzZTMxNGNiMmQ4NjA4MDUxZTUwN2U5YmIyYTMzYWM6ODYwOWY2MWExYTU5ZDBhYjY3MzQzNDJlY2NiMmQzOTRiMTk0OWM0NzMxMWEzOTI4N2RkOWE1YjNjOTA2MjM1Mzo4YmRlZTEwZDY4NjEyZjQ1Yzg1OWQ0NjM5MzM1Yzc1ZDAwNDcwZTJmN2MyOTY3NDQ0OTczNzdiMGM4Yzg0OTNiOmI3YTg3ZmQ0YzQzYzJlZTI5M2RlMzExMzJjZTVkYzJiNGMyZjZiZGNhYzdiNGUxZGJlZmFiYTY4MTBlNDVkMzA6ODUxM2EzZWRkODI0NDM0NTg5ZDhlYjc1NjdmMDdmMjk2MGUyZGFlYTNjNDc0ZTg0OWFjMDJiNTU5Yjc0ZWQ3NzphOWI4NTYzODFkN2Y0MWJkZTdlZGE4Yzk0MTlkNjA1YTM3MzI0MTNiZDljMjMwMWEyYTZmN2QwODYzYWYxZDAwOmNhMmUzZWU5ZjM1YjBlZDRiNDM5NzY5MTUxMGQ1NWJiODIxNmY4YjU1Mzk4ZDA2Mzg3ZWZlN2Q0NmE2OWQ2YmY6ZGE3ODU1NDg1M2ZiMzk5ZDlhMjRkZjJmMDMyZDQzZTQxYTE5NjRhMGY3OTg2MzE5NzkyMzE2OWQ4YzA4NWY2ZDpiZjExZjdkNDc5NjYyZGRmZGUzY2ZlZTk5N2M4ZDM3MjQ4OWIyZTAxMzg2NGQxZjY2ZTIxOTQyNmYzZDAzZTAyOmFlNzBjOWViYTYwMGMwZmUzMmNlMGFmNTFlNDUxOTFiMjk3NmVhY2RiZDRkNjhjZWFjODIyOGZiZGUyMGEzYjY6NDNiODAzY2IwMmQ1YjExYWM5Zjg0OWVhYTU4MjU4YWVkNzNmNTdhZTE3Yzk5OWEwMjM4NjRkYmNiMjZlYzBmMSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMTAxLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICIvdXNyL2Jpbi9kdW1iLWluaXQiLAogICAgICAgICAgICAiLS0iLAogICAgICAgICAgICAiL25naW54LWluZ3Jlc3MtY29udHJvbGxlciIsCiAgICAgICAgICAgICItLWVsZWN0aW9uLWlkPWluZ3Jlc3MtY29udHJvbGxlci1sZWFkZXIiLAogICAgICAgICAgICAiLS1pbmdyZXNzLWNsYXNzPW5naW54IgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2xvY2FsL2x1YWppdC9iaW46L3Vzci9sb2NhbC9uZ2lueC9zYmluOi91c3IvbG9jYWwvbmdpbngvYmluIiwKICAgICAgICAgICAgIkxVQV9QQVRIPS91c3IvbG9jYWwvc2hhcmUvbHVhaml0LTIuMS4wLWJldGEzLz8ubHVhOy91c3IvbG9jYWwvc2hhcmUvbHVhLzUuMS8/Lmx1YTsvdXNyL2xvY2FsL2xpYi9sdWEvPy5sdWE7OyIsCiAgICAgICAgICAgICJMVUFfQ1BBVEg9L3Vzci9sb2NhbC9saWIvbHVhLz8vPy5zbzsvdXNyL2xvY2FsL2xpYi9sdWEvPy5zbzs7IiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJQT0RfTkFNRT0kKHNhbmRib3gtbmFtZSkiLAogICAgICAgICAgICAiUE9EX05BTUVTUEFDRT1kZWZhdWx0IgogICAgICAgICAgXSwKICAgICAgICAgICJDd2QiOiAiL2V0Yy9uZ2lueCIsCiAgICAgICAgICAiQ2FwYWJpbGl0aWVzIjogewogICAgICAgICAgICAiQW1iaWVudCI6IFtdLAogICAgICAgICAgICAiQm91bmRpbmciOiBbCiAgICAgICAgICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgIk5vTmV3UHJpdmlsZWdlcyI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cy9mcy9jZ3JvdXAiLAogICAgICAgICAgICAic291cmNlIjogImNncm91cCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJjZ3JvdXAiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJyZWxhdGltZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXJtaW5hdGlvbi1sb2ckIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0bmFtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0bmFtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClzZXJ2aWNlYWNjb3VudCQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2VucyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0b2tlbnMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJuZ2lueC1pbmdyZXNzLWxiIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2luZ3Jlc3MtbmdpbngvY29udHJvbGxlcjp2MC40Ni4wIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDMpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDQpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDUpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDYpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDcpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDgpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDkpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiZWUwOTc3ODRlNTc4YTRkZDAyODRjMGFlNTY5Y2Q5YmQyNTM5ZGY2MjVhNTI0YjQwZTUxY2JiZTNhZWJmOGViYzo2YmViYThlYTFjNmRhMzQxYjEwNzhjNWQyMDFhMGRjNDcxZTlhYzdhZGJjM2MzOWQzZjQ2Nzg3MmI5YjY0NjY4OmQ3MTgzZjM3MWVhYThlMzg1NmYyZDQ2OGQ3YWY3Mjc0Y2VjYzc4YzRiNDZmYTY4MTA2OTA4MzM0ZmJiNTlmNzM6NzJhMThiMTQ3NGJkYzBmMDYwN2JjOGNlNjFjNzdlNmNlZGYyNDY5OWQyNjMyMjY0NzNmZDgyMGMzOTM5ZjZkNjo0NGZkZTViYTg0MjI5YmM3NjdmNTA2NTAwMTkxZjI0NDZmMTI1YzgwZjg4YWNlN2JkMmMxOGY0NWI0MGFhZjMzOjY2M2QzZGVlZDM0ODVlYWJkNmIxNTM1ZGFmZTZkZGIyNjkwMDcwMjRlZGU3ZGU0YjY5MjgyMzBmMzZkZjUzYjI6MDczM2RkYzYwMTgzYTNmMzc4NmI0NTAwYTA3NzE0M2JlMDk5Y2EyZTA4MmM5OGJlY2IzMDA3MGQxMmViMzU0NjpiOTdiMDI5MzFmY2JkZWUxMzYyYWM1MjQzZjJhYzAxM2Y5NGM2NGFlMjRhODIwZjQwMjRjMmYyYmVkZWRiZDZhOjgwMmI4YjdkZmVhMTQxZTM0MmY2NWY5NjI4YzFhYWFkZDA2NWM1MDUzYTY5MTM0NjY1ZGFkODkwMDgyYmJhZDk6YzZmNWUxOTM1MmM3MmJjYWY1MWVkNzUyYjc4YTg3NmJhOWExMjg2OWYwMjI5NDI0NGE0OTg2NDUzMTE4MjE4ZjpmYzMzZTc2YmM4ZjE0MzI3OWFkNGQyMDEwZGQ1NDdlOThhNmQwNDE1Mzg2MWI3ZDg4MTAyNmM3ZDk5Y2U0ODY4OmMyOTMxNzJjNzI1YTJmYmQxOTEzN2Q4NzUxZWZiMDRhNzdiYjEyMTliNjk0YmM2MTliMzczN2IwYTNiYTJlNjk6NmI4MTEzNjQ2ZGIwYjY5MDMyODNjZWYxOGIyZmQ4MWVhMTY2OTJjODkzNmFmOTAwN2NmOGVmMDc3ZDNjNGI3ZToyODEyZTUyOGUyZTJiMzQyZmJlMjJlNDY1MGMzNDNkNzY5ZWZlZThhMDU5MDJhMWNlYjE1ZDU4OGFmMzE0ZDViIiwKICAgICAgICAgICAgImY3ZWJhYzI3MGJhZjYxNDA1ZTc2M2JiM2I0ZWJjYmRjNThjNmM2ZjE1ODExMWRmYmRjNGE3NjM5NTI4ZmFjZjQ6YjMzM2E1OGIzMjJkYmRmNzYyZDRlZTkyZTQyNTJjYTQwZjMzYjliMTNhZTNhNzg0ZWE5ZmVlYTUzOTY5NmE5YToyYmM2MWJmZDFhNzk1NGEzZGQxZDUyZWQ3MmU5MDkzM2ZiMWNkMDdjOGZiNWJjYjY4OGFlNjE3MzU1NDdkZGIzOmRlYjQzYzkxNGYwOTJjM2UyZDE3ZDZmMTNmMTA0ZmU3MzIzZTMxNGNiMmQ4NjA4MDUxZTUwN2U5YmIyYTMzYWM6ODYwOWY2MWExYTU5ZDBhYjY3MzQzNDJlY2NiMmQzOTRiMTk0OWM0NzMxMWEzOTI4N2RkOWE1YjNjOTA2MjM1Mzo4YmRlZTEwZDY4NjEyZjQ1Yzg1OWQ0NjM5MzM1Yzc1ZDAwNDcwZTJmN2MyOTY3NDQ0OTczNzdiMGM4Yzg0OTNiOmI3YTg3ZmQ0YzQzYzJlZTI5M2RlMzExMzJjZTVkYzJiNGMyZjZiZGNhYzdiNGUxZGJlZmFiYTY4MTBlNDVkMzA6ODUxM2EzZWRkODI0NDM0NTg5ZDhlYjc1NjdmMDdmMjk2MGUyZGFlYTNjNDc0ZTg0OWFjMDJiNTU5Yjc0ZWQ3NzphOWI4NTYzODFkN2Y0MWJkZTdlZGE4Yzk0MTlkNjA1YTM3MzI0MTNiZDljMjMwMWEyYTZmN2QwODYzYWYxZDAwOjA2YzAxNTE0YzhlZjljNjNiMTEyZGFkNTQyMTVhZjU2ZDNmMmIzNGI0YmI5ZmNkMjczMGFiZGY1MTk3ZjFiZTc6ZGE3ODU1NDg1M2ZiMzk5ZDlhMjRkZjJmMDMyZDQzZTQxYTE5NjRhMGY3OTg2MzE5NzkyMzE2OWQ4YzA4NWY2ZDpiZjExZjdkNDc5NjYyZGRmZGUzY2ZlZTk5N2M4ZDM3MjQ4OWIyZTAxMzg2NGQxZjY2ZTIxOTQyNmYzZDAzZTAyOmFlNzBjOWViYTYwMGMwZmUzMmNlMGFmNTFlNDUxOTFiMjk3NmVhY2RiZDRkNjhjZWFjODIyOGZiZGUyMGEzYjY6NDNiODAzY2IwMmQ1YjExYWM5Zjg0OWVhYTU4MjU4YWVkNzNmNTdhZTE3Yzk5OWEwMjM4NjRkYmNiMjZlYzBmMSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== spec: runtimeClassName: kata-cc terminationGracePeriodSeconds: 0 diff --git a/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-static-ip-rc.yaml b/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-static-ip-rc.yaml index f5422f5e437e..c56bc1920a7a 100644 --- a/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-static-ip-rc.yaml +++ b/src/agent/samples/policy/yaml/kubernetes/conformance2/ingress-static-ip-rc.yaml @@ -10,7 +10,7 @@ spec: labels: app: echoheaders-https annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Fnbmhvc3QiLAogICAgICAgICAgICAibmV0ZXhlYyIsCiAgICAgICAgICAgICItLWh0dHAtcG9ydD04MDgwIiwKICAgICAgICAgICAgIi0tdGxzLWNlcnQtZmlsZT0vbG9jYWxob3N0LmNydCIsCiAgICAgICAgICAgICItLXRscy1wcml2YXRlLWtleS1maWxlPS9sb2NhbGhvc3Qua2V5IgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImVjaG9oZWFkZXJzLWh0dHBzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuNDAiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDQzNmQ5Mzk5MzRhMjliM2Q1OTc5MzUzNGZmOTNlMTk5Zjk0MzhmOWI5NDFlMTNhZTYzMjE1ZjE2N2M0OTNiODpiZjFjN2YxZjlmN2Y5OTVhYTk2YjBjMGViNTQzOTJkYjRlYzc3OTNlZWI1MzJiNDM4MmI1M2Y3MDA0NDQ2MzVmOjEyNzYyNjJiOTEwNGYxODY3MDQxMGNjYWU1M2JhMzJjM2QyMTk1ZWIxMTdjZWRhZmI2N2YyNTliODljZDRkN2E6Y2Y1NDMyMWYwOWNlNDk3OTNiMTNmMGExYjlmMjVjODY5M2Q0NDY2ZDRjMTg1MWRmMjZlNWM3ZWYyODJlMTg1NjphNzA0ZmIwMDZlOTY3YWY5ODExMTJmNDYxODZiZjZiM2RjM2RmYzlmMWVkNjI2MTRlZTlmZGM4MTEzMDU3NGRlOjZhNzBkN2FkZGU0YmYzNTdlNDczNGQ0ZmFkODgxNjA5MjAwZmEzZWJiMjc5MmYyYmFjMGUzYmNhODMxYjRjMjI6ZTIyNGU1M2ZjY2FkYTdjOTYyNzE0YjM4ZmM2YjQzZWVjNTU2NGVkMzUwMWI1MzE4ODQxMmRlYzU1Y2E5ZTRjMTplZWY2NTNmOTVjYTMyNjUyYjg3ZTY3NmMwYTM3YzBmMjA0ZTU4MTQ1ZDg2NmI0YzY4YmUwZWYzZGQzNmI0MjExOmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiMTFlYmM1M2RmY2YwMDhkZGFjZjQ1ZWU2NjM5ZGI1OGRmNDY2ZWQ3OTc1ZTAxMGI0N2EyMTYyMmQ2NzA0OGY2MDo4MzUyMmEzODhmZGY3YTIwZTVjMDU1YjNkOGRhN2E3NzI2ZmIwNGI3MTZiN2M1MjI4YmUzOTllNzgyMjA0NGI5OjZjN2VhMGY2YzQ4MTE3ZWYwYjVhMjVkMDhlNzAzMzE5NDY2NTU5NGFhYWQxODJjNWQ3MjI2Nzg4ZTc3OWJmMDg6NTY4ZDkxMTFiNTc5YTllYjY2MWVkNzk3OGVjYjQ5YjAzNTFmOGZiN2M5ODcxMjkwYmU0ZWMzYjVmODVhMDdhOTpjMGNkZTQwOTFlMjBiYjI2NGM1OTI4ZmNjZjNlMzE1N2Y4ODBkODY0ZGYzZmMzMjFiYjlmNmI1YzM1ZjllNGU0OjM1OTkyZTJjYWJhOTYyZmMwZDNjYmIyMmYyMzhiYmU1MmJlMGQ1NDRiM2IzYTllYjI4N2Q2YmZkOTdmYTdkZjI6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMTphZjMxZTY1MWVkZDFmMjViZDgzOTQzNGI2ZDYwNTYyYmNiZDkwNzFlYzUxNmY0MWM2YjJlZmIyOWU4NDBjNDNlOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Fnbmhvc3QiLAogICAgICAgICAgICAibmV0ZXhlYyIsCiAgICAgICAgICAgICItLWh0dHAtcG9ydD04MDgwIiwKICAgICAgICAgICAgIi0tdGxzLWNlcnQtZmlsZT0vbG9jYWxob3N0LmNydCIsCiAgICAgICAgICAgICItLXRscy1wcml2YXRlLWtleS1maWxlPS9sb2NhbGhvc3Qua2V5IgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImVjaG9oZWFkZXJzLWh0dHBzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuNDAiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDQzNmQ5Mzk5MzRhMjliM2Q1OTc5MzUzNGZmOTNlMTk5Zjk0MzhmOWI5NDFlMTNhZTYzMjE1ZjE2N2M0OTNiODpiZjFjN2YxZjlmN2Y5OTVhYTk2YjBjMGViNTQzOTJkYjRlYzc3OTNlZWI1MzJiNDM4MmI1M2Y3MDA0NDQ2MzVmOjEyNzYyNjJiOTEwNGYxODY3MDQxMGNjYWU1M2JhMzJjM2QyMTk1ZWIxMTdjZWRhZmI2N2YyNTliODljZDRkN2E6Y2Y1NDMyMWYwOWNlNDk3OTNiMTNmMGExYjlmMjVjODY5M2Q0NDY2ZDRjMTg1MWRmMjZlNWM3ZWYyODJlMTg1NjphNzA0ZmIwMDZlOTY3YWY5ODExMTJmNDYxODZiZjZiM2RjM2RmYzlmMWVkNjI2MTRlZTlmZGM4MTEzMDU3NGRlOjZhNzBkN2FkZGU0YmYzNTdlNDczNGQ0ZmFkODgxNjA5MjAwZmEzZWJiMjc5MmYyYmFjMGUzYmNhODMxYjRjMjI6ZTIyNGU1M2ZjY2FkYTdjOTYyNzE0YjM4ZmM2YjQzZWVjNTU2NGVkMzUwMWI1MzE4ODQxMmRlYzU1Y2E5ZTRjMTplZWY2NTNmOTVjYTMyNjUyYjg3ZTY3NmMwYTM3YzBmMjA0ZTU4MTQ1ZDg2NmI0YzY4YmUwZWYzZGQzNmI0MjExOmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiMTFlYmM1M2RmY2YwMDhkZGFjZjQ1ZWU2NjM5ZGI1OGRmNDY2ZWQ3OTc1ZTAxMGI0N2EyMTYyMmQ2NzA0OGY2MDo4MzUyMmEzODhmZGY3YTIwZTVjMDU1YjNkOGRhN2E3NzI2ZmIwNGI3MTZiN2M1MjI4YmUzOTllNzgyMjA0NGI5OjZjN2VhMGY2YzQ4MTE3ZWYwYjVhMjVkMDhlNzAzMzE5NDY2NTU5NGFhYWQxODJjNWQ3MjI2Nzg4ZTc3OWJmMDg6NTY4ZDkxMTFiNTc5YTllYjY2MWVkNzk3OGVjYjQ5YjAzNTFmOGZiN2M5ODcxMjkwYmU0ZWMzYjVmODVhMDdhOTpjMGNkZTQwOTFlMjBiYjI2NGM1OTI4ZmNjZjNlMzE1N2Y4ODBkODY0ZGYzZmMzMjFiYjlmNmI1YzM1ZjllNGU0OjM1OTkyZTJjYWJhOTYyZmMwZDNjYmIyMmYyMzhiYmU1MmJlMGQ1NDRiM2IzYTllYjI4N2Q2YmZkOTdmYTdkZjI6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMToyOTZjZTFlNTJiNjFkMzFjODE4M2VmMDlmODVmMzAwY2NlYWRmNDE5N2RhMWQ1YjFhYWUyYzMyYTZjZjRiOTAwOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= spec: runtimeClassName: kata-cc containers: diff --git a/src/agent/samples/policy/yaml/kubernetes/fixtures/job.yaml b/src/agent/samples/policy/yaml/kubernetes/fixtures/job.yaml index 488b2eb3d6da..15ac1a5b118f 100644 --- a/src/agent/samples/policy/yaml/kubernetes/fixtures/job.yaml +++ b/src/agent/samples/policy/yaml/kubernetes/fixtures/job.yaml @@ -8,7 +8,7 @@ spec: metadata: name: pi annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAicGVybCIsCiAgICAgICAgICAgICItTWJpZ251bT1icGkiLAogICAgICAgICAgICAiLXdsZSIsCiAgICAgICAgICAgICJwcmludCBicGkoMjAwMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIkFubm90YXRpb25zIjogewogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiOiAiL3J1bi9jb250YWluZXJkL2lvLmNvbnRhaW5lcmQucnVudGltZS52Mi50YXNrL2s4cy5pby8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiOiAicG9kX2NvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiOiAicGkiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJwZXJsOjUuMzQuMCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIzMmZkYjZiZDU2YzI3ZWE5YWM2YmNmZTU3ODc0NjE4MGUzNTNjYmMyNWUzMTAxNmMwNTE0MjZhNzM5NTVmNDZmOjI1MDY0ZGZkZTIyOGU4MDliZjhjMjA3ZWI4ZWQyNjc3MDQ1ODIzZjk4YWNmNzI3Yjc1MmU3ZGE2MmJhZjhmNzM6ZjNhMTlmMmZiMTkzNzdiMjM3OTdlNjJhZTI1Y2RiNmY2NzFhOGI5NGM5Y2NjM2M3ZGM1ZjBkYjA2YjA1NjU1MTozNmZmZTJiZTc3ZTA4YzE0N2RiMTE1YzY3NTBmM2YyZTZmYzJiOWViN2NiZDIwOTUwYTBjNmFlODQzNDM4N2NiOmE1NjMzYzRmYjYxMTkzMDc5YmNhYjM5N2VlOWVhMTg0ZTVhOGI0YmNiZjIwYzI3YWYxMWEzNzUyNWVkZjViN2E6ZjllOGE1ZTY0ZDQyOWVmYzBiMzNmYWE1MWI5NWRmZTIyZWVjMGIwYzk1ZTEyNTBiM2FlYWM3NjFmODhlM2MzNTpiOWVkNDcxNzAxNDhiODVkZTM2NTE5ZjkyODQzNWI4ZjA1OGIwZDdlZTVlNjA5Y2Y0ZmJiMjk5YzJkODY4MGRhIiwKICAgICAgICAgICAgIjA0MjBkYzIzOGI5NzUxZmUxMzI1YTU2ZWU3NTBjMjE1OTczZmNhMDllMDdkYjIwNzUyN2YxMDIyNjM2NTQ2ZTA6NzVmMzcxNjk4NWVkYWY4NjhiNDc5OTkwYTlhNDViYmZiNWEyOWJmNDJmYmNmODE5MzI1ODM1ZWU0NWY3NzQ3OTo4ZDg3Yjg0NzUwZmIyYjFjMjVlOTkzMmJjNGZiOWQ3YzFiNTYxZDJhNGZiYTA4ZDgwZmQ4OGQ3OTZiMTgwNjY2OjVhZTZmM2Q3ODY3MjRlMDYyZjc0MGEyZGRiZGFkODM0ZDYxNzQzM2VmNzE4MDQ3MDg3NDlmMzdjYjBlMGM5YTM6Y2Y0MmZjY2Y3N2I0ZDM1NzI5YWM0ZWU2MThhZTE3ZTg5MDA5MDQzMWZiZmViNjAzNTQ4OTliOGY5MTQ3NWQ5Njo2YzI2MDIxYjZjZTAxZTFkMGE0YmE5NmM1YzFiZGY5MTE3M2QzM2E0MmE3YzZmYmEyZWQxZjAxZWI2NWViNmM0OmFjMjhmZmUwMzk5ODA0NjVmYWVjN2E4N2VlOWNhZDQ0MTg1ZTJjZTRmY2EzOGIzYzJhODkwMzcwMDk3N2JjNWMiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAicGVybCIsCiAgICAgICAgICAgICItTWJpZ251bT1icGkiLAogICAgICAgICAgICAiLXdsZSIsCiAgICAgICAgICAgICJwcmludCBicGkoMjAwMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIkFubm90YXRpb25zIjogewogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiOiAiL3J1bi9jb250YWluZXJkL2lvLmNvbnRhaW5lcmQucnVudGltZS52Mi50YXNrL2s4cy5pby8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiOiAicG9kX2NvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiOiAicGkiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJwZXJsOjUuMzQuMCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIzMmZkYjZiZDU2YzI3ZWE5YWM2YmNmZTU3ODc0NjE4MGUzNTNjYmMyNWUzMTAxNmMwNTE0MjZhNzM5NTVmNDZmOjI1MDY0ZGZkZTIyOGU4MDliZjhjMjA3ZWI4ZWQyNjc3MDQ1ODIzZjk4YWNmNzI3Yjc1MmU3ZGE2MmJhZjhmNzM6ZjNhMTlmMmZiMTkzNzdiMjM3OTdlNjJhZTI1Y2RiNmY2NzFhOGI5NGM5Y2NjM2M3ZGM1ZjBkYjA2YjA1NjU1MTozNmZmZTJiZTc3ZTA4YzE0N2RiMTE1YzY3NTBmM2YyZTZmYzJiOWViN2NiZDIwOTUwYTBjNmFlODQzNDM4N2NiOmE1NjMzYzRmYjYxMTkzMDc5YmNhYjM5N2VlOWVhMTg0ZTVhOGI0YmNiZjIwYzI3YWYxMWEzNzUyNWVkZjViN2E6ZjllOGE1ZTY0ZDQyOWVmYzBiMzNmYWE1MWI5NWRmZTIyZWVjMGIwYzk1ZTEyNTBiM2FlYWM3NjFmODhlM2MzNTpiOWVkNDcxNzAxNDhiODVkZTM2NTE5ZjkyODQzNWI4ZjA1OGIwZDdlZTVlNjA5Y2Y0ZmJiMjk5YzJkODY4MGRhIiwKICAgICAgICAgICAgIjA0MjBkYzIzOGI5NzUxZmUxMzI1YTU2ZWU3NTBjMjE1OTczZmNhMDllMDdkYjIwNzUyN2YxMDIyNjM2NTQ2ZTA6NzVmMzcxNjk4NWVkYWY4NjhiNDc5OTkwYTlhNDViYmZiNWEyOWJmNDJmYmNmODE5MzI1ODM1ZWU0NWY3NzQ3OTo4ZDg3Yjg0NzUwZmIyYjFjMjVlOTkzMmJjNGZiOWQ3YzFiNTYxZDJhNGZiYTA4ZDgwZmQ4OGQ3OTZiMTgwNjY2OjVhZTZmM2Q3ODY3MjRlMDYyZjc0MGEyZGRiZGFkODM0ZDYxNzQzM2VmNzE4MDQ3MDg3NDlmMzdjYjBlMGM5YTM6Y2Y0MmZjY2Y3N2I0ZDM1NzI5YWM0ZWU2MThhZTE3ZTg5MDA5MDQzMWZiZmViNjAzNTQ4OTliOGY5MTQ3NWQ5NjplOGE3NDlmM2ZhZDU0YTdmYTVkMGEwYjMxYjdhNTExNTMzMWY4ZGJjOGIyZDkwOTkwODI0ZThjOTc1NzZlZmEzOmFjMjhmZmUwMzk5ODA0NjVmYWVjN2E4N2VlOWNhZDQ0MTg1ZTJjZTRmY2EzOGIzYzJhODkwMzcwMDk3N2JjNWMiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= spec: restartPolicy: Never runtimeClassName: kata-cc diff --git a/src/agent/samples/policy/yaml/kubernetes/incomplete-init/cassandra-statefulset.yaml b/src/agent/samples/policy/yaml/kubernetes/incomplete-init/cassandra-statefulset.yaml index 94f98d3e5aab..654e26b861ce 100644 --- a/src/agent/samples/policy/yaml/kubernetes/incomplete-init/cassandra-statefulset.yaml +++ b/src/agent/samples/policy/yaml/kubernetes/incomplete-init/cassandra-statefulset.yaml @@ -14,7 +14,7 @@ spec: labels: app: cassandra annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL3Vzci9iaW4vZHVtYi1pbml0IiwKICAgICAgICAgICAgIi9iaW4vYmFzaCIsCiAgICAgICAgICAgICIvcnVuLnNoIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2xpYi9qdm0vamF2YS04LW9wZW5qZGstYW1kNjQvYmluOi91c3IvbG9jYWwvYXBhY2hlLWNhc3NhbmRyYS0zLjExLjIvYmluIiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9IT01FPS91c3IvbG9jYWwvYXBhY2hlLWNhc3NhbmRyYS0zLjExLjIiLAogICAgICAgICAgICAiQ0FTU0FORFJBX0NPTkY9L2V0Yy9jYXNzYW5kcmEiLAogICAgICAgICAgICAiQ0FTU0FORFJBX0RBVEE9L2Nhc3NhbmRyYV9kYXRhIiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9MT0dTPS92YXIvbG9nL2Nhc3NhbmRyYSIsCiAgICAgICAgICAgICJKQVZBX0hPTUU9L3Vzci9saWIvanZtL2phdmEtOC1vcGVuamRrLWFtZDY0IiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJNQVhfSEVBUF9TSVpFPTUxMk0iLAogICAgICAgICAgICAiSEVBUF9ORVdTSVpFPTEwME0iLAogICAgICAgICAgICAiUE9EX05BTUVTUEFDRT1kZWZhdWx0IiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9TRUVEUz1jYXNzYW5kcmEtMC5jYXNzYW5kcmEuZGVmYXVsdC5zdmMuY2x1c3Rlci5sb2NhbCIsCiAgICAgICAgICAgICJDQVNTQU5EUkFfQ0xVU1RFUl9OQU1FPUs4RGVtbyIsCiAgICAgICAgICAgICJDQVNTQU5EUkFfREM9REMxLUs4RGVtbyIsCiAgICAgICAgICAgICJDQVNTQU5EUkFfUkFDSz1SYWNrMS1LOERlbW8iLAogICAgICAgICAgICAiUE9EX0lQPSQocG9kLWlwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICJDQVBfQ0hPV04iLAogICAgICAgICAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgICAgICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICAgICAgICAgIkNBUF9GT1dORVIiLAogICAgICAgICAgICAgICJDQVBfTUtOT0QiLAogICAgICAgICAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICAgICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAgICAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgICAgICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAgICAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICAgICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgICAgICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAgICAgICAgICJDQVBfS0lMTCIsCiAgICAgICAgICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICAgICAgICAgIkNBUF9JUENfTE9DSyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkVmZmVjdGl2ZSI6IFsKICAgICAgICAgICAgICAiQ0FQX0NIT1dOIiwKICAgICAgICAgICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICAgICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAgICAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgICAgICAgICAiQ0FQX01LTk9EIiwKICAgICAgICAgICAgICAiQ0FQX05FVF9SQVciLAogICAgICAgICAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgICAgICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICAgICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgICAgICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAgICAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICAgICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgICAgICAgICAiQ0FQX0tJTEwiLAogICAgICAgICAgICAgICJDQVBfQVVESVRfV1JJVEUiLAogICAgICAgICAgICAgICJDQVBfSVBDX0xPQ0siCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICJDQVBfQ0hPV04iLAogICAgICAgICAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgICAgICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICAgICAgICAgIkNBUF9GT1dORVIiLAogICAgICAgICAgICAgICJDQVBfTUtOT0QiLAogICAgICAgICAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICAgICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAgICAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgICAgICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAgICAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICAgICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgICAgICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAgICAgICAgICJDQVBfS0lMTCIsCiAgICAgICAgICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICAgICAgICAgIkNBUF9JUENfTE9DSyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9jYXNzYW5kcmFfZGF0YSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzLyQoYnVuZGxlLWlkKS1bYS16MC05XXsxNn0tY2Fzc2FuZHJhX2RhdGEkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJjYXNzYW5kcmEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJnY3IuaW8vZ29vZ2xlLXNhbXBsZXMvY2Fzc2FuZHJhOnYxMyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICJlNTkxNGNmYzE0N2UxM2U2NWIyOWIzNmYzMTg3NTZjMWU4NTFhODAwNGE1MGYxNjIwY2Y2M2M0ZGI0OWM2NmI4OmM1ZDIyZmRhMTg0ZTllODNkYjIwNTFjZjc4YTM4ODUwNzUzZDdhNDRjNzAwOGU3MTA4NDY3YzU3YmM1ODA1NGQ6NWY4YTJlY2VjYmU2MGVmZTJkYzE2ZTgwYjM2NWE0MGE0MTg4ZTU3ZGQ0ZTNkNmMyNWU3ZTUxM2E2MmQ2N2MxNSIsCiAgICAgICAgICAgICI3NDI1MWQxNTRmMTcxZmY3Nzc1MzY0NmQ2OGU1YjIyODBhYzJlNDczM2NhMGUxMTAxODgwZmRjMGQyYzk0MjRlOjMwYzg2YzBlZTQ1NWEzNmM4OTQ3MjU1NGNkNGMyMzE5YWU0NzkxZmRmMTI3MWJhODk3OTNiNjYyZmI5M2Y0NTA6MDFjZGJkOGY0MTBhYzIwNzllMDMwZTIxM2NjMWQyZDFkOTMzNThiODMwNWRkZjEyNTI1NDk0NmE4YzM2YzgyNyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogWwogICAgICAgICIvYmluL2Jhc2ggLWMgL3JlYWR5LXByb2JlLnNoIiwKICAgICAgICAiL2Jpbi9zaCAtYyBub2RldG9vbCBkcmFpbiIKICAgICAgXQogICAgfQogIF0sCiAgImNvbW1vbiI6IHsKICAgICJjcGF0aCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zaGFyZWQvY29udGFpbmVycyIsCiAgICAic2ZwcmVmaXgiOiAiXiQoY3BhdGgpLyQoYnVuZGxlLWlkKS1bYS16MC05XXsxNn0tIiwKICAgICJpcHY0X2EiOiAiKCgyNVswLTVdfCgyWzAtNF18MVxcZHxbMS05XXwpXFxkKVxcLj9cXGIpezR9IiwKICAgICJpcF9wIjogIlswLTldezEsNX0iLAogICAgInN2Y19uYW1lIjogIltBLVowLTlfXFwuXFwtXSsiLAogICAgImRuc19sYWJlbCI6ICJbYS16QS1aMC05X1xcLlxcLV0rIiwKICAgICJkZWZhdWx0X2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfRlNFVElEIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX01LTk9EIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfU1lTX0NIUk9PVCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfQVVESVRfV1JJVEUiCiAgICBdLAogICAgInByaXZpbGVnZWRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9EQUNfUkVBRF9TRUFSQ0giLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfRlNFVElEIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICJDQVBfTElOVVhfSU1NVVRBQkxFIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9ORVRfQlJPQURDQVNUIiwKICAgICAgIkNBUF9ORVRfQURNSU4iLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX0lQQ19MT0NLIiwKICAgICAgIkNBUF9JUENfT1dORVIiLAogICAgICAiQ0FQX1NZU19NT0RVTEUiLAogICAgICAiQ0FQX1NZU19SQVdJTyIsCiAgICAgICJDQVBfU1lTX0NIUk9PVCIsCiAgICAgICJDQVBfU1lTX1BUUkFDRSIsCiAgICAgICJDQVBfU1lTX1BBQ0NUIiwKICAgICAgIkNBUF9TWVNfQURNSU4iLAogICAgICAiQ0FQX1NZU19CT09UIiwKICAgICAgIkNBUF9TWVNfTklDRSIsCiAgICAgICJDQVBfU1lTX1JFU09VUkNFIiwKICAgICAgIkNBUF9TWVNfVElNRSIsCiAgICAgICJDQVBfU1lTX1RUWV9DT05GSUciLAogICAgICAiQ0FQX01LTk9EIiwKICAgICAgIkNBUF9MRUFTRSIsCiAgICAgICJDQVBfQVVESVRfV1JJVEUiLAogICAgICAiQ0FQX0FVRElUX0NPTlRST0wiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX01BQ19PVkVSUklERSIsCiAgICAgICJDQVBfTUFDX0FETUlOIiwKICAgICAgIkNBUF9TWVNMT0ciLAogICAgICAiQ0FQX1dBS0VfQUxBUk0iLAogICAgICAiQ0FQX0JMT0NLX1NVU1BFTkQiLAogICAgICAiQ0FQX0FVRElUX1JFQUQiLAogICAgICAiQ0FQX1BFUkZNT04iLAogICAgICAiQ0FQX0JQRiIsCiAgICAgICJDQVBfQ0hFQ0tQT0lOVF9SRVNUT1JFIgogICAgXQogIH0sCiAgInNhbmRib3giOiB7CiAgICAic3RvcmFnZXMiOiBbCiAgICAgIHsKICAgICAgICAiZHJpdmVyIjogImVwaGVtZXJhbCIsCiAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgInNvdXJjZSI6ICJzaG0iLAogICAgICAgICJmc3R5cGUiOiAidG1wZnMiLAogICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAibW9kZT0xNzc3IiwKICAgICAgICAgICJzaXplPTY3MTA4ODY0IgogICAgICAgIF0sCiAgICAgICAgIm1vdW50X3BvaW50IjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgIH0KICAgIF0KICB9LAogICJyZXF1ZXN0X2RlZmF1bHRzIjogewogICAgIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3QiOiB7CiAgICAgICJhbGxvd19lbnZfcmVnZXgiOiBbCiAgICAgICAgIl5IT1NUTkFNRT0kKGRuc19sYWJlbCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1A9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUFJPVE89dGNwJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9BRERSPSQoaXB2NF9hKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9IT1NUPSQoaXB2NF9hKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVF8kKGRuc19sYWJlbCk9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeQVpVUkVfQ0xJRU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX1RFTkFOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9GRURFUkFURURfVE9LRU5fRklMRT0vdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2Vucy9henVyZS1pZGVudGl0eS10b2tlbiQiLAogICAgICAgICJeQVpVUkVfQVVUSE9SSVRZX0hPU1Q9aHR0cHM6Ly9sb2dpblxcLm1pY3Jvc29mdG9ubGluZVxcLmNvbS8kIgogICAgICBdCiAgICB9LAogICAgIkNvcHlGaWxlUmVxdWVzdCI6IFsKICAgICAgIiQoc2ZwcmVmaXgpIgogICAgXSwKICAgICJFeGVjUHJvY2Vzc1JlcXVlc3QiOiB7CiAgICAgICJjb21tYW5kcyI6IFtdLAogICAgICAicmVnZXgiOiBbXQogICAgfSwKICAgICJSZWFkU3RyZWFtUmVxdWVzdCI6IHRydWUsCiAgICAiVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCI6IGZhbHNlLAogICAgIldyaXRlU3RyZWFtUmVxdWVzdCI6IGZhbHNlCiAgfQp9 + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL3Vzci9iaW4vZHVtYi1pbml0IiwKICAgICAgICAgICAgIi9iaW4vYmFzaCIsCiAgICAgICAgICAgICIvcnVuLnNoIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2xpYi9qdm0vamF2YS04LW9wZW5qZGstYW1kNjQvYmluOi91c3IvbG9jYWwvYXBhY2hlLWNhc3NhbmRyYS0zLjExLjIvYmluIiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9IT01FPS91c3IvbG9jYWwvYXBhY2hlLWNhc3NhbmRyYS0zLjExLjIiLAogICAgICAgICAgICAiQ0FTU0FORFJBX0NPTkY9L2V0Yy9jYXNzYW5kcmEiLAogICAgICAgICAgICAiQ0FTU0FORFJBX0RBVEE9L2Nhc3NhbmRyYV9kYXRhIiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9MT0dTPS92YXIvbG9nL2Nhc3NhbmRyYSIsCiAgICAgICAgICAgICJKQVZBX0hPTUU9L3Vzci9saWIvanZtL2phdmEtOC1vcGVuamRrLWFtZDY0IiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJNQVhfSEVBUF9TSVpFPTUxMk0iLAogICAgICAgICAgICAiSEVBUF9ORVdTSVpFPTEwME0iLAogICAgICAgICAgICAiUE9EX05BTUVTUEFDRT1kZWZhdWx0IiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9TRUVEUz1jYXNzYW5kcmEtMC5jYXNzYW5kcmEuZGVmYXVsdC5zdmMuY2x1c3Rlci5sb2NhbCIsCiAgICAgICAgICAgICJDQVNTQU5EUkFfQ0xVU1RFUl9OQU1FPUs4RGVtbyIsCiAgICAgICAgICAgICJDQVNTQU5EUkFfREM9REMxLUs4RGVtbyIsCiAgICAgICAgICAgICJDQVNTQU5EUkFfUkFDSz1SYWNrMS1LOERlbW8iLAogICAgICAgICAgICAiUE9EX0lQPSQocG9kLWlwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICJDQVBfQ0hPV04iLAogICAgICAgICAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgICAgICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICAgICAgICAgIkNBUF9GT1dORVIiLAogICAgICAgICAgICAgICJDQVBfTUtOT0QiLAogICAgICAgICAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICAgICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAgICAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgICAgICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAgICAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICAgICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgICAgICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAgICAgICAgICJDQVBfS0lMTCIsCiAgICAgICAgICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICAgICAgICAgIkNBUF9JUENfTE9DSyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkVmZmVjdGl2ZSI6IFsKICAgICAgICAgICAgICAiQ0FQX0NIT1dOIiwKICAgICAgICAgICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICAgICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAgICAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgICAgICAgICAiQ0FQX01LTk9EIiwKICAgICAgICAgICAgICAiQ0FQX05FVF9SQVciLAogICAgICAgICAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgICAgICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICAgICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgICAgICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAgICAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICAgICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgICAgICAgICAiQ0FQX0tJTEwiLAogICAgICAgICAgICAgICJDQVBfQVVESVRfV1JJVEUiLAogICAgICAgICAgICAgICJDQVBfSVBDX0xPQ0siCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICJDQVBfQ0hPV04iLAogICAgICAgICAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgICAgICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICAgICAgICAgIkNBUF9GT1dORVIiLAogICAgICAgICAgICAgICJDQVBfTUtOT0QiLAogICAgICAgICAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICAgICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAgICAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgICAgICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAgICAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICAgICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgICAgICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAgICAgICAgICJDQVBfS0lMTCIsCiAgICAgICAgICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICAgICAgICAgIkNBUF9JUENfTE9DSyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9jYXNzYW5kcmFfZGF0YSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzLyQoYnVuZGxlLWlkKS1bYS16MC05XXsxNn0tY2Fzc2FuZHJhX2RhdGEkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJjYXNzYW5kcmEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJnY3IuaW8vZ29vZ2xlLXNhbXBsZXMvY2Fzc2FuZHJhOnYxMyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICJlNTkxNGNmYzE0N2UxM2U2NWIyOWIzNmYzMTg3NTZjMWU4NTFhODAwNGE1MGYxNjIwY2Y2M2M0ZGI0OWM2NmI4OmM1ZDIyZmRhMTg0ZTllODNkYjIwNTFjZjc4YTM4ODUwNzUzZDdhNDRjNzAwOGU3MTA4NDY3YzU3YmM1ODA1NGQ6NWY4YTJlY2VjYmU2MGVmZTJkYzE2ZTgwYjM2NWE0MGE0MTg4ZTU3ZGQ0ZTNkNmMyNWU3ZTUxM2E2MmQ2N2MxNSIsCiAgICAgICAgICAgICI5NThlNWU4YzU2MDJiYmViY2ZkYTIyMGYzOGJjYmJjNGNkZGZmYzRjNTc1MjMwZmI3ZjBiZDkwYmFmNDgxZGY1OjMwYzg2YzBlZTQ1NWEzNmM4OTQ3MjU1NGNkNGMyMzE5YWU0NzkxZmRmMTI3MWJhODk3OTNiNjYyZmI5M2Y0NTA6MDFjZGJkOGY0MTBhYzIwNzllMDMwZTIxM2NjMWQyZDFkOTMzNThiODMwNWRkZjEyNTI1NDk0NmE4YzM2YzgyNyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogWwogICAgICAgICIvYmluL2Jhc2ggLWMgL3JlYWR5LXByb2JlLnNoIiwKICAgICAgICAiL2Jpbi9zaCAtYyBub2RldG9vbCBkcmFpbiIKICAgICAgXQogICAgfQogIF0sCiAgImNvbW1vbiI6IHsKICAgICJjcGF0aCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zaGFyZWQvY29udGFpbmVycyIsCiAgICAic2ZwcmVmaXgiOiAiXiQoY3BhdGgpLyQoYnVuZGxlLWlkKS1bYS16MC05XXsxNn0tIiwKICAgICJpcHY0X2EiOiAiKCgyNVswLTVdfCgyWzAtNF18MVxcZHxbMS05XXwpXFxkKVxcLj9cXGIpezR9IiwKICAgICJpcF9wIjogIlswLTldezEsNX0iLAogICAgInN2Y19uYW1lIjogIltBLVowLTlfXFwuXFwtXSsiLAogICAgImRuc19sYWJlbCI6ICJbYS16QS1aMC05X1xcLlxcLV0rIiwKICAgICJkZWZhdWx0X2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfRlNFVElEIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX01LTk9EIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfU1lTX0NIUk9PVCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfQVVESVRfV1JJVEUiCiAgICBdLAogICAgInByaXZpbGVnZWRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9EQUNfUkVBRF9TRUFSQ0giLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfRlNFVElEIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICJDQVBfTElOVVhfSU1NVVRBQkxFIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9ORVRfQlJPQURDQVNUIiwKICAgICAgIkNBUF9ORVRfQURNSU4iLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX0lQQ19MT0NLIiwKICAgICAgIkNBUF9JUENfT1dORVIiLAogICAgICAiQ0FQX1NZU19NT0RVTEUiLAogICAgICAiQ0FQX1NZU19SQVdJTyIsCiAgICAgICJDQVBfU1lTX0NIUk9PVCIsCiAgICAgICJDQVBfU1lTX1BUUkFDRSIsCiAgICAgICJDQVBfU1lTX1BBQ0NUIiwKICAgICAgIkNBUF9TWVNfQURNSU4iLAogICAgICAiQ0FQX1NZU19CT09UIiwKICAgICAgIkNBUF9TWVNfTklDRSIsCiAgICAgICJDQVBfU1lTX1JFU09VUkNFIiwKICAgICAgIkNBUF9TWVNfVElNRSIsCiAgICAgICJDQVBfU1lTX1RUWV9DT05GSUciLAogICAgICAiQ0FQX01LTk9EIiwKICAgICAgIkNBUF9MRUFTRSIsCiAgICAgICJDQVBfQVVESVRfV1JJVEUiLAogICAgICAiQ0FQX0FVRElUX0NPTlRST0wiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX01BQ19PVkVSUklERSIsCiAgICAgICJDQVBfTUFDX0FETUlOIiwKICAgICAgIkNBUF9TWVNMT0ciLAogICAgICAiQ0FQX1dBS0VfQUxBUk0iLAogICAgICAiQ0FQX0JMT0NLX1NVU1BFTkQiLAogICAgICAiQ0FQX0FVRElUX1JFQUQiLAogICAgICAiQ0FQX1BFUkZNT04iLAogICAgICAiQ0FQX0JQRiIsCiAgICAgICJDQVBfQ0hFQ0tQT0lOVF9SRVNUT1JFIgogICAgXQogIH0sCiAgInNhbmRib3giOiB7CiAgICAic3RvcmFnZXMiOiBbCiAgICAgIHsKICAgICAgICAiZHJpdmVyIjogImVwaGVtZXJhbCIsCiAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgInNvdXJjZSI6ICJzaG0iLAogICAgICAgICJmc3R5cGUiOiAidG1wZnMiLAogICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAibW9kZT0xNzc3IiwKICAgICAgICAgICJzaXplPTY3MTA4ODY0IgogICAgICAgIF0sCiAgICAgICAgIm1vdW50X3BvaW50IjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgIH0KICAgIF0KICB9LAogICJyZXF1ZXN0X2RlZmF1bHRzIjogewogICAgIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3QiOiB7CiAgICAgICJhbGxvd19lbnZfcmVnZXgiOiBbCiAgICAgICAgIl5IT1NUTkFNRT0kKGRuc19sYWJlbCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1A9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUFJPVE89dGNwJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9BRERSPSQoaXB2NF9hKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9IT1NUPSQoaXB2NF9hKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVF8kKGRuc19sYWJlbCk9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeQVpVUkVfQ0xJRU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX1RFTkFOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9GRURFUkFURURfVE9LRU5fRklMRT0vdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2Vucy9henVyZS1pZGVudGl0eS10b2tlbiQiLAogICAgICAgICJeQVpVUkVfQVVUSE9SSVRZX0hPU1Q9aHR0cHM6Ly9sb2dpblxcLm1pY3Jvc29mdG9ubGluZVxcLmNvbS8kIgogICAgICBdCiAgICB9LAogICAgIkNvcHlGaWxlUmVxdWVzdCI6IFsKICAgICAgIiQoc2ZwcmVmaXgpIgogICAgXSwKICAgICJFeGVjUHJvY2Vzc1JlcXVlc3QiOiB7CiAgICAgICJjb21tYW5kcyI6IFtdLAogICAgICAicmVnZXgiOiBbXQogICAgfSwKICAgICJSZWFkU3RyZWFtUmVxdWVzdCI6IHRydWUsCiAgICAiVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCI6IGZhbHNlLAogICAgIldyaXRlU3RyZWFtUmVxdWVzdCI6IGZhbHNlCiAgfQp9 spec: runtimeClassName: kata-cc containers: diff --git a/src/agent/samples/policy/yaml/kubernetes/incomplete-init/cockroachdb-statefulset.yaml b/src/agent/samples/policy/yaml/kubernetes/incomplete-init/cockroachdb-statefulset.yaml index 740c9895c209..1aa63747a6a4 100644 --- a/src/agent/samples/policy/yaml/kubernetes/incomplete-init/cockroachdb-statefulset.yaml +++ b/src/agent/samples/policy/yaml/kubernetes/incomplete-init/cockroachdb-statefulset.yaml @@ -14,7 +14,7 @@ spec: labels: app: cockroachdb annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL3BlZXItZmluZGVyIiwKICAgICAgICAgICAgIi1vbi1zdGFydD0vb24tc3RhcnQuc2giLAogICAgICAgICAgICAiLXNlcnZpY2U9Y29ja3JvYWNoZGIiCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJQT0RfTkFNRVNQQUNFPWRlZmF1bHQiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvY29ja3JvYWNoL2NvY2tyb2FjaC1kYXRhIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWNvY2tyb2FjaC1kYXRhJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9jb2Nrcm9hY2gvY29ja3JvYWNoLWRhdGEiLAogICAgICAgICAgICAic291cmNlIjogIl4vcnVuL2thdGEtY29udGFpbmVycy9zaGFyZWQvY29udGFpbmVycy8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LWNvY2tyb2FjaC1kYXRhJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIkFubm90YXRpb25zIjogewogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiOiAiL3J1bi9jb250YWluZXJkL2lvLmNvbnRhaW5lcmQucnVudGltZS52Mi50YXNrL2s4cy5pby8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiOiAicG9kX2NvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiOiAiYm9vdHN0cmFwIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAiY29ja3JvYWNoZGIvY29ja3JvYWNoLWs4cy1pbml0OjAuMSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g3KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g4KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjgpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g5KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjkpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI5OWExNDIwNTZjYTNhYjE0MDQ5NjdhMjk4MGRlYTNlZTU2YTYzZTlhYzRhZTFjYjI2MDI4OWZkMGIyNTE5ZGU4Ojg0ODcwYmMzNGM4NWIwOTQ5ZjliYjNiMmRkMTgzZmQ5ODE2YzQwOTdmNjI1NTM4MzJkMDZhNmRmMDNiODg4MmY6YTBhZGU5MmZlMDM4MjA0ZTNlMWVkZTk5NTcyNjEzYWMxZjM0Y2I0NTVmZDA2NjUzYTY2NTliM2ZmYjA0ZTg5MDozMjQxNzM3YjFkYjA0NmNmMDNjY2FjZjRhZWVmMjQyZWI5MGEwMTZlZTVhMjAyMTk4ZDdmZDhjMmZkY2E1NDRiOjA1NGVmYzE2MjdjNDdhZjQ1YzU0MDJjMDQyZWJhZWYwNTIzZDM2MjUwMjc2MDdlYzAzM2U5YmY3MDQzMTJkY2U6NTA0NTkzNWNiYmJkNjJmYWYyMGY0ZWNkZTAzMmUwYTU4OTUzMzYxYjc0OTMzNDA5MDhiMjExMjFkZDFjM2RhMzozYWYyNzIyNTdjZDFjMjQxODI2OGRkMWQwZjljYmE3MDg3MTg1M2E4NDljNWQyNTRmYzAyN2JhYjhjMmY1ZjhlOmFhYjQ0NDNiNzc2NDAzYzI1YWQ5NzBkNzhlNzYzOTUwZTk3MDZmYmJjMjIyNGM4NTEyMGJkNmU1YWQ5Y2NjYzE6Mjk2MTc2YzNiMGJhNjE5ZjExM2I1NDE2NTkxZGNhYzI5ZDAxNjk4NmYxNzcwMDUzNGU5YjMxOTg5MDNmNDI4ZToyM2JhN2JhNTlkMjE1MjU1NTVmOTU2OTRhMjBkN2JhN2JkOTExNTM5YTRhODJkNTY1NTZkZTViNjQ5M2E4YTRjIiwKICAgICAgICAgICAgImQxYzg1ZGI5MDJkMmYzNjQ4ODExNzZmMzI1MTA2ZWY0ZDNjNTFkMmY2NGI4ODNiNGQ1MDgzMjdjYjIxMDhmNjE6ZDFjODVkYjkwMmQyZjM2NDg4MTE3NmYzMjUxMDZlZjRkM2M1MWQyZjY0Yjg4M2I0ZDUwODMyN2NiMjEwOGY2MTo2NzQ1MDA4MmFiNTZkYTFhZWNjNWVhZTJmMThkOTgwY2Q5ZTczMDZlNzkzMzRhMWE4MjZhOTFjZmQ5MDExNGE4OjY3NDUwMDgyYWI1NmRhMWFlY2M1ZWFlMmYxOGQ5ODBjZDllNzMwNmU3OTMzNGExYTgyNmE5MWNmZDkwMTE0YTg6Y2YzMzAwNWE3YmVlNmJjZDAyMzgyZjc3ZThiZTliOGE3NGNiN2JhNTY3Yjg5OWNhNjgxZTFlOTJkN2YzNGI1ODo4NzhhY2YxYjgwNmVmZDc4NWY4ZjUyZDUwYWYwODg5NTdjZjNmYmQ3MmM2M2NjMzIxMjg4YWRmMjBlYWZiZDM1OjAzNjhmMTQ1NTQzNWI5MzE5NzdiNWI3MmZjZGNmNTAwNTM4OTZkMjdjNWU5YTVjMjY1NzQ0ODI2MjcyOGU5ZDM6Njc0NTAwODJhYjU2ZGExYWVjYzVlYWUyZjE4ZDk4MGNkOWU3MzA2ZTc5MzM0YTFhODI2YTkxY2ZkOTAxMTRhODo2NzQ1MDA4MmFiNTZkYTFhZWNjNWVhZTJmMThkOTgwY2Q5ZTczMDZlNzkzMzRhMWE4MjZhOTFjZmQ5MDExNGE4OmQ3NTJjOWJlNTQ2M2I4Mzc1YmQyYWZlNjNjNTFjMDg2YmUyYWMyYmE2NTc4ODE0YTYzYmYwNTIyYzIyY2M5NDAiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9iaW4vYmFzaCIsCiAgICAgICAgICAgICItZWN4IiwKICAgICAgICAgICAgIiMgVGhlIHVzZSBvZiBxdWFsaWZpZWQgYGhvc3RuYW1lIC1mYCBpcyBjcnVjaWFsOlxuIyBPdGhlciBub2RlcyBhcmVuJ3QgYWJsZSB0byBsb29rIHVwIHRoZSB1bnF1YWxpZmllZCBob3N0bmFtZS5cbkNSQVJHUz0oXCJzdGFydFwiIFwiLS1sb2d0b3N0ZGVyclwiIFwiLS1pbnNlY3VyZVwiIFwiLS1ob3N0XCIgXCIkKGhvc3RuYW1lIC1mKVwiIFwiLS1odHRwLWhvc3RcIiBcIjAuMC4wLjBcIilcbiMgV2Ugb25seSB3YW50IHRvIGluaXRpYWxpemUgYSBuZXcgY2x1c3RlciAoYnkgb21pdHRpbmcgdGhlIGpvaW4gZmxhZylcbiMgaWYgd2UncmUgc3VyZSB0aGF0IHdlJ3JlIHRoZSBmaXJzdCBub2RlIChpLmUuIGluZGV4IDApIGFuZCB0aGF0XG4jIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgbm9kZXMgcnVubmluZyBhcyBwYXJ0IG9mIHRoZSBjbHVzdGVyIHRoYXRcbiMgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSBhIHBhcnQgb2YgKHdoaWNoIGluZGljYXRlcyB0aGF0IGEgY2x1c3RlclxuIyBhbHJlYWR5IGV4aXN0cyBhbmQgd2Ugc2hvdWxkIG1ha2Ugc3VyZSBub3QgdG8gY3JlYXRlIGEgbmV3IG9uZSkuXG4jIEl0J3MgZmluZSB0byBydW4gd2l0aG91dCAtLWpvaW4gb24gYSByZXN0YXJ0IGlmIHRoZXJlIGFyZW4ndCBhbnlcbiMgb3RoZXIgbm9kZXMuXG5pZiBbICEgXCIkKGhvc3RuYW1lKVwiID09IFwiY29ja3JvYWNoZGItMFwiIF0gfHwgXFxcbiAgIFsgLWUgXCIvY29ja3JvYWNoL2NvY2tyb2FjaC1kYXRhL2NsdXN0ZXJfZXhpc3RzX21hcmtlclwiIF1cbnRoZW5cbiAgIyBXZSBkb24ndCBqb2luIGNvY2tyb2FjaGRiIGluIG9yZGVyIHRvIGF2b2lkIGEgbm9kZSBhdHRlbXB0aW5nXG4gICMgdG8gam9pbiBpdHNlbGYsIHdoaWNoIGN1cnJlbnRseSBkb2Vzbid0IHdvcmtcbiAgIyAoaHR0cHM6Ly9naXRodWIuY29tL2NvY2tyb2FjaGRiL2NvY2tyb2FjaC9pc3N1ZXMvOTYyNSkuXG4gIENSQVJHUys9KFwiLS1qb2luXCIgXCJjb2Nrcm9hY2hkYi0wLmNvY2tyb2FjaGRiLGNvY2tyb2FjaGRiLTEuY29ja3JvYWNoZGIsY29ja3JvYWNoZGItMi5jb2Nrcm9hY2hkYlwiKVxuZmlcbmV4ZWMgL2NvY2tyb2FjaC9jb2Nrcm9hY2ggJHtDUkFSR1NbKl19XG4iCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi9jb2Nrcm9hY2giLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9jb2Nrcm9hY2gvY29ja3JvYWNoLWRhdGEiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpY29ja3JvYWNoLWRhdGEkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2NvY2tyb2FjaC9jb2Nrcm9hY2gtZGF0YSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzLyQoYnVuZGxlLWlkKS1bYS16MC05XXsxNn0tY29ja3JvYWNoLWRhdGEkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJjb2Nrcm9hY2hkYiIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogImNvY2tyb2FjaGRiL2NvY2tyb2FjaDp2MS4wIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgImVmZTFiOTJjNDNiY2M3OWI0M2M0NjJiMTJhYjBkNDQ3NGVjNjA5MmI3ZDMzYzM2MTRjOTZlOThmOGIxN2VkY2I6MjEzNGQ2NTZjNTMyNTZiYzVkYmQxNGYyZjEzMmE4YjY1MWYzZmY3NWZiNTYwYjFiNWJmNzBjYWI4MTEyNTliZDplMzgzNjliMjk1NjUzOWVkZjI1NWU2YjA1NWYxZDNhZTkwMmE5ODljODQ0ZDFiNjFhMDVjNTQ2MDdhMjM2MGQ4IiwKICAgICAgICAgICAgIjFmODQzZjFkMDFhZGIzYjJlMTA4MGQ0YzBhYzUyYWRlN2QwNGE5MzAyYjcyMmNlZGJjN2I0ZWQzODAyODhjNTI6YjNhNGNhNDJjMTE1MTUwYWQ4NTQ3MjdkNWMyNzBmZmQ3ZmM2MjI0YzQ2NWQxYjU4MTk1YjcwMjM1ODFjMWVlOTplYTdkOTEwOTQ1N2ZiNDRkYjU5YzE4YjVlMDk0ZjQ5ZTExYTY4MjU3MTczNDJkM2JhNWJkNzc3MTk4OTEwMDE4IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfQogIF0sCiAgImNvbW1vbiI6IHsKICAgICJjcGF0aCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zaGFyZWQvY29udGFpbmVycyIsCiAgICAic2ZwcmVmaXgiOiAiXiQoY3BhdGgpLyQoYnVuZGxlLWlkKS1bYS16MC05XXsxNn0tIiwKICAgICJpcHY0X2EiOiAiKCgyNVswLTVdfCgyWzAtNF18MVxcZHxbMS05XXwpXFxkKVxcLj9cXGIpezR9IiwKICAgICJpcF9wIjogIlswLTldezEsNX0iLAogICAgInN2Y19uYW1lIjogIltBLVowLTlfXFwuXFwtXSsiLAogICAgImRuc19sYWJlbCI6ICJbYS16QS1aMC05X1xcLlxcLV0rIiwKICAgICJkZWZhdWx0X2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfRlNFVElEIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX01LTk9EIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfU1lTX0NIUk9PVCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfQVVESVRfV1JJVEUiCiAgICBdLAogICAgInByaXZpbGVnZWRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9EQUNfUkVBRF9TRUFSQ0giLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfRlNFVElEIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICJDQVBfTElOVVhfSU1NVVRBQkxFIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9ORVRfQlJPQURDQVNUIiwKICAgICAgIkNBUF9ORVRfQURNSU4iLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX0lQQ19MT0NLIiwKICAgICAgIkNBUF9JUENfT1dORVIiLAogICAgICAiQ0FQX1NZU19NT0RVTEUiLAogICAgICAiQ0FQX1NZU19SQVdJTyIsCiAgICAgICJDQVBfU1lTX0NIUk9PVCIsCiAgICAgICJDQVBfU1lTX1BUUkFDRSIsCiAgICAgICJDQVBfU1lTX1BBQ0NUIiwKICAgICAgIkNBUF9TWVNfQURNSU4iLAogICAgICAiQ0FQX1NZU19CT09UIiwKICAgICAgIkNBUF9TWVNfTklDRSIsCiAgICAgICJDQVBfU1lTX1JFU09VUkNFIiwKICAgICAgIkNBUF9TWVNfVElNRSIsCiAgICAgICJDQVBfU1lTX1RUWV9DT05GSUciLAogICAgICAiQ0FQX01LTk9EIiwKICAgICAgIkNBUF9MRUFTRSIsCiAgICAgICJDQVBfQVVESVRfV1JJVEUiLAogICAgICAiQ0FQX0FVRElUX0NPTlRST0wiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX01BQ19PVkVSUklERSIsCiAgICAgICJDQVBfTUFDX0FETUlOIiwKICAgICAgIkNBUF9TWVNMT0ciLAogICAgICAiQ0FQX1dBS0VfQUxBUk0iLAogICAgICAiQ0FQX0JMT0NLX1NVU1BFTkQiLAogICAgICAiQ0FQX0FVRElUX1JFQUQiLAogICAgICAiQ0FQX1BFUkZNT04iLAogICAgICAiQ0FQX0JQRiIsCiAgICAgICJDQVBfQ0hFQ0tQT0lOVF9SRVNUT1JFIgogICAgXQogIH0sCiAgInNhbmRib3giOiB7CiAgICAic3RvcmFnZXMiOiBbCiAgICAgIHsKICAgICAgICAiZHJpdmVyIjogImVwaGVtZXJhbCIsCiAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgInNvdXJjZSI6ICJzaG0iLAogICAgICAgICJmc3R5cGUiOiAidG1wZnMiLAogICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAibW9kZT0xNzc3IiwKICAgICAgICAgICJzaXplPTY3MTA4ODY0IgogICAgICAgIF0sCiAgICAgICAgIm1vdW50X3BvaW50IjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgIH0KICAgIF0KICB9LAogICJyZXF1ZXN0X2RlZmF1bHRzIjogewogICAgIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3QiOiB7CiAgICAgICJhbGxvd19lbnZfcmVnZXgiOiBbCiAgICAgICAgIl5IT1NUTkFNRT0kKGRuc19sYWJlbCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1A9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUFJPVE89dGNwJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9BRERSPSQoaXB2NF9hKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9IT1NUPSQoaXB2NF9hKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVF8kKGRuc19sYWJlbCk9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeQVpVUkVfQ0xJRU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX1RFTkFOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9GRURFUkFURURfVE9LRU5fRklMRT0vdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2Vucy9henVyZS1pZGVudGl0eS10b2tlbiQiLAogICAgICAgICJeQVpVUkVfQVVUSE9SSVRZX0hPU1Q9aHR0cHM6Ly9sb2dpblxcLm1pY3Jvc29mdG9ubGluZVxcLmNvbS8kIgogICAgICBdCiAgICB9LAogICAgIkNvcHlGaWxlUmVxdWVzdCI6IFsKICAgICAgIiQoc2ZwcmVmaXgpIgogICAgXSwKICAgICJFeGVjUHJvY2Vzc1JlcXVlc3QiOiB7CiAgICAgICJjb21tYW5kcyI6IFtdLAogICAgICAicmVnZXgiOiBbXQogICAgfSwKICAgICJSZWFkU3RyZWFtUmVxdWVzdCI6IHRydWUsCiAgICAiVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCI6IGZhbHNlLAogICAgIldyaXRlU3RyZWFtUmVxdWVzdCI6IGZhbHNlCiAgfQp9 + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL3BlZXItZmluZGVyIiwKICAgICAgICAgICAgIi1vbi1zdGFydD0vb24tc3RhcnQuc2giLAogICAgICAgICAgICAiLXNlcnZpY2U9Y29ja3JvYWNoZGIiCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJQT0RfTkFNRVNQQUNFPWRlZmF1bHQiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvY29ja3JvYWNoL2NvY2tyb2FjaC1kYXRhIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWNvY2tyb2FjaC1kYXRhJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9jb2Nrcm9hY2gvY29ja3JvYWNoLWRhdGEiLAogICAgICAgICAgICAic291cmNlIjogIl4vcnVuL2thdGEtY29udGFpbmVycy9zaGFyZWQvY29udGFpbmVycy8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LWNvY2tyb2FjaC1kYXRhJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIkFubm90YXRpb25zIjogewogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiOiAiL3J1bi9jb250YWluZXJkL2lvLmNvbnRhaW5lcmQucnVudGltZS52Mi50YXNrL2s4cy5pby8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiOiAicG9kX2NvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiOiAiYm9vdHN0cmFwIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAiY29ja3JvYWNoZGIvY29ja3JvYWNoLWs4cy1pbml0OjAuMSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g3KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g4KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjgpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g5KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjkpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI5OWExNDIwNTZjYTNhYjE0MDQ5NjdhMjk4MGRlYTNlZTU2YTYzZTlhYzRhZTFjYjI2MDI4OWZkMGIyNTE5ZGU4Ojg0ODcwYmMzNGM4NWIwOTQ5ZjliYjNiMmRkMTgzZmQ5ODE2YzQwOTdmNjI1NTM4MzJkMDZhNmRmMDNiODg4MmY6YTBhZGU5MmZlMDM4MjA0ZTNlMWVkZTk5NTcyNjEzYWMxZjM0Y2I0NTVmZDA2NjUzYTY2NTliM2ZmYjA0ZTg5MDozMjQxNzM3YjFkYjA0NmNmMDNjY2FjZjRhZWVmMjQyZWI5MGEwMTZlZTVhMjAyMTk4ZDdmZDhjMmZkY2E1NDRiOjA1NGVmYzE2MjdjNDdhZjQ1YzU0MDJjMDQyZWJhZWYwNTIzZDM2MjUwMjc2MDdlYzAzM2U5YmY3MDQzMTJkY2U6NTA0NTkzNWNiYmJkNjJmYWYyMGY0ZWNkZTAzMmUwYTU4OTUzMzYxYjc0OTMzNDA5MDhiMjExMjFkZDFjM2RhMzozYWYyNzIyNTdjZDFjMjQxODI2OGRkMWQwZjljYmE3MDg3MTg1M2E4NDljNWQyNTRmYzAyN2JhYjhjMmY1ZjhlOmFhYjQ0NDNiNzc2NDAzYzI1YWQ5NzBkNzhlNzYzOTUwZTk3MDZmYmJjMjIyNGM4NTEyMGJkNmU1YWQ5Y2NjYzE6Mjk2MTc2YzNiMGJhNjE5ZjExM2I1NDE2NTkxZGNhYzI5ZDAxNjk4NmYxNzcwMDUzNGU5YjMxOTg5MDNmNDI4ZToyM2JhN2JhNTlkMjE1MjU1NTVmOTU2OTRhMjBkN2JhN2JkOTExNTM5YTRhODJkNTY1NTZkZTViNjQ5M2E4YTRjIiwKICAgICAgICAgICAgImQxYzg1ZGI5MDJkMmYzNjQ4ODExNzZmMzI1MTA2ZWY0ZDNjNTFkMmY2NGI4ODNiNGQ1MDgzMjdjYjIxMDhmNjE6ZDFjODVkYjkwMmQyZjM2NDg4MTE3NmYzMjUxMDZlZjRkM2M1MWQyZjY0Yjg4M2I0ZDUwODMyN2NiMjEwOGY2MTo2NzQ1MDA4MmFiNTZkYTFhZWNjNWVhZTJmMThkOTgwY2Q5ZTczMDZlNzkzMzRhMWE4MjZhOTFjZmQ5MDExNGE4OjY3NDUwMDgyYWI1NmRhMWFlY2M1ZWFlMmYxOGQ5ODBjZDllNzMwNmU3OTMzNGExYTgyNmE5MWNmZDkwMTE0YTg6Y2YzMzAwNWE3YmVlNmJjZDAyMzgyZjc3ZThiZTliOGE3NGNiN2JhNTY3Yjg5OWNhNjgxZTFlOTJkN2YzNGI1ODo4NzhhY2YxYjgwNmVmZDc4NWY4ZjUyZDUwYWYwODg5NTdjZjNmYmQ3MmM2M2NjMzIxMjg4YWRmMjBlYWZiZDM1OjZkODUyM2M1YWYxZjYwYzU5OTRhMTFkYmEzZTdkZTY4NWRlNTk3Nzc5MTM2MDBiMWVlNjQxZTBlMWY3NjQxOWI6Njc0NTAwODJhYjU2ZGExYWVjYzVlYWUyZjE4ZDk4MGNkOWU3MzA2ZTc5MzM0YTFhODI2YTkxY2ZkOTAxMTRhODo2NzQ1MDA4MmFiNTZkYTFhZWNjNWVhZTJmMThkOTgwY2Q5ZTczMDZlNzkzMzRhMWE4MjZhOTFjZmQ5MDExNGE4OmQ3NTJjOWJlNTQ2M2I4Mzc1YmQyYWZlNjNjNTFjMDg2YmUyYWMyYmE2NTc4ODE0YTYzYmYwNTIyYzIyY2M5NDAiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9iaW4vYmFzaCIsCiAgICAgICAgICAgICItZWN4IiwKICAgICAgICAgICAgIiMgVGhlIHVzZSBvZiBxdWFsaWZpZWQgYGhvc3RuYW1lIC1mYCBpcyBjcnVjaWFsOlxuIyBPdGhlciBub2RlcyBhcmVuJ3QgYWJsZSB0byBsb29rIHVwIHRoZSB1bnF1YWxpZmllZCBob3N0bmFtZS5cbkNSQVJHUz0oXCJzdGFydFwiIFwiLS1sb2d0b3N0ZGVyclwiIFwiLS1pbnNlY3VyZVwiIFwiLS1ob3N0XCIgXCIkKGhvc3RuYW1lIC1mKVwiIFwiLS1odHRwLWhvc3RcIiBcIjAuMC4wLjBcIilcbiMgV2Ugb25seSB3YW50IHRvIGluaXRpYWxpemUgYSBuZXcgY2x1c3RlciAoYnkgb21pdHRpbmcgdGhlIGpvaW4gZmxhZylcbiMgaWYgd2UncmUgc3VyZSB0aGF0IHdlJ3JlIHRoZSBmaXJzdCBub2RlIChpLmUuIGluZGV4IDApIGFuZCB0aGF0XG4jIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgbm9kZXMgcnVubmluZyBhcyBwYXJ0IG9mIHRoZSBjbHVzdGVyIHRoYXRcbiMgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSBhIHBhcnQgb2YgKHdoaWNoIGluZGljYXRlcyB0aGF0IGEgY2x1c3RlclxuIyBhbHJlYWR5IGV4aXN0cyBhbmQgd2Ugc2hvdWxkIG1ha2Ugc3VyZSBub3QgdG8gY3JlYXRlIGEgbmV3IG9uZSkuXG4jIEl0J3MgZmluZSB0byBydW4gd2l0aG91dCAtLWpvaW4gb24gYSByZXN0YXJ0IGlmIHRoZXJlIGFyZW4ndCBhbnlcbiMgb3RoZXIgbm9kZXMuXG5pZiBbICEgXCIkKGhvc3RuYW1lKVwiID09IFwiY29ja3JvYWNoZGItMFwiIF0gfHwgXFxcbiAgIFsgLWUgXCIvY29ja3JvYWNoL2NvY2tyb2FjaC1kYXRhL2NsdXN0ZXJfZXhpc3RzX21hcmtlclwiIF1cbnRoZW5cbiAgIyBXZSBkb24ndCBqb2luIGNvY2tyb2FjaGRiIGluIG9yZGVyIHRvIGF2b2lkIGEgbm9kZSBhdHRlbXB0aW5nXG4gICMgdG8gam9pbiBpdHNlbGYsIHdoaWNoIGN1cnJlbnRseSBkb2Vzbid0IHdvcmtcbiAgIyAoaHR0cHM6Ly9naXRodWIuY29tL2NvY2tyb2FjaGRiL2NvY2tyb2FjaC9pc3N1ZXMvOTYyNSkuXG4gIENSQVJHUys9KFwiLS1qb2luXCIgXCJjb2Nrcm9hY2hkYi0wLmNvY2tyb2FjaGRiLGNvY2tyb2FjaGRiLTEuY29ja3JvYWNoZGIsY29ja3JvYWNoZGItMi5jb2Nrcm9hY2hkYlwiKVxuZmlcbmV4ZWMgL2NvY2tyb2FjaC9jb2Nrcm9hY2ggJHtDUkFSR1NbKl19XG4iCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi9jb2Nrcm9hY2giLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9jb2Nrcm9hY2gvY29ja3JvYWNoLWRhdGEiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpY29ja3JvYWNoLWRhdGEkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2NvY2tyb2FjaC9jb2Nrcm9hY2gtZGF0YSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzLyQoYnVuZGxlLWlkKS1bYS16MC05XXsxNn0tY29ja3JvYWNoLWRhdGEkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJjb2Nrcm9hY2hkYiIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogImNvY2tyb2FjaGRiL2NvY2tyb2FjaDp2MS4wIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgImVmZTFiOTJjNDNiY2M3OWI0M2M0NjJiMTJhYjBkNDQ3NGVjNjA5MmI3ZDMzYzM2MTRjOTZlOThmOGIxN2VkY2I6MjEzNGQ2NTZjNTMyNTZiYzVkYmQxNGYyZjEzMmE4YjY1MWYzZmY3NWZiNTYwYjFiNWJmNzBjYWI4MTEyNTliZDplMzgzNjliMjk1NjUzOWVkZjI1NWU2YjA1NWYxZDNhZTkwMmE5ODljODQ0ZDFiNjFhMDVjNTQ2MDdhMjM2MGQ4IiwKICAgICAgICAgICAgIjFmODQzZjFkMDFhZGIzYjJlMTA4MGQ0YzBhYzUyYWRlN2QwNGE5MzAyYjcyMmNlZGJjN2I0ZWQzODAyODhjNTI6YjNhNGNhNDJjMTE1MTUwYWQ4NTQ3MjdkNWMyNzBmZmQ3ZmM2MjI0YzQ2NWQxYjU4MTk1YjcwMjM1ODFjMWVlOTplYTdkOTEwOTQ1N2ZiNDRkYjU5YzE4YjVlMDk0ZjQ5ZTExYTY4MjU3MTczNDJkM2JhNWJkNzc3MTk4OTEwMDE4IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfQogIF0sCiAgImNvbW1vbiI6IHsKICAgICJjcGF0aCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zaGFyZWQvY29udGFpbmVycyIsCiAgICAic2ZwcmVmaXgiOiAiXiQoY3BhdGgpLyQoYnVuZGxlLWlkKS1bYS16MC05XXsxNn0tIiwKICAgICJpcHY0X2EiOiAiKCgyNVswLTVdfCgyWzAtNF18MVxcZHxbMS05XXwpXFxkKVxcLj9cXGIpezR9IiwKICAgICJpcF9wIjogIlswLTldezEsNX0iLAogICAgInN2Y19uYW1lIjogIltBLVowLTlfXFwuXFwtXSsiLAogICAgImRuc19sYWJlbCI6ICJbYS16QS1aMC05X1xcLlxcLV0rIiwKICAgICJkZWZhdWx0X2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfRlNFVElEIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX01LTk9EIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfU1lTX0NIUk9PVCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfQVVESVRfV1JJVEUiCiAgICBdLAogICAgInByaXZpbGVnZWRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9EQUNfUkVBRF9TRUFSQ0giLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfRlNFVElEIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICJDQVBfTElOVVhfSU1NVVRBQkxFIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9ORVRfQlJPQURDQVNUIiwKICAgICAgIkNBUF9ORVRfQURNSU4iLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX0lQQ19MT0NLIiwKICAgICAgIkNBUF9JUENfT1dORVIiLAogICAgICAiQ0FQX1NZU19NT0RVTEUiLAogICAgICAiQ0FQX1NZU19SQVdJTyIsCiAgICAgICJDQVBfU1lTX0NIUk9PVCIsCiAgICAgICJDQVBfU1lTX1BUUkFDRSIsCiAgICAgICJDQVBfU1lTX1BBQ0NUIiwKICAgICAgIkNBUF9TWVNfQURNSU4iLAogICAgICAiQ0FQX1NZU19CT09UIiwKICAgICAgIkNBUF9TWVNfTklDRSIsCiAgICAgICJDQVBfU1lTX1JFU09VUkNFIiwKICAgICAgIkNBUF9TWVNfVElNRSIsCiAgICAgICJDQVBfU1lTX1RUWV9DT05GSUciLAogICAgICAiQ0FQX01LTk9EIiwKICAgICAgIkNBUF9MRUFTRSIsCiAgICAgICJDQVBfQVVESVRfV1JJVEUiLAogICAgICAiQ0FQX0FVRElUX0NPTlRST0wiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX01BQ19PVkVSUklERSIsCiAgICAgICJDQVBfTUFDX0FETUlOIiwKICAgICAgIkNBUF9TWVNMT0ciLAogICAgICAiQ0FQX1dBS0VfQUxBUk0iLAogICAgICAiQ0FQX0JMT0NLX1NVU1BFTkQiLAogICAgICAiQ0FQX0FVRElUX1JFQUQiLAogICAgICAiQ0FQX1BFUkZNT04iLAogICAgICAiQ0FQX0JQRiIsCiAgICAgICJDQVBfQ0hFQ0tQT0lOVF9SRVNUT1JFIgogICAgXQogIH0sCiAgInNhbmRib3giOiB7CiAgICAic3RvcmFnZXMiOiBbCiAgICAgIHsKICAgICAgICAiZHJpdmVyIjogImVwaGVtZXJhbCIsCiAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgInNvdXJjZSI6ICJzaG0iLAogICAgICAgICJmc3R5cGUiOiAidG1wZnMiLAogICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAibW9kZT0xNzc3IiwKICAgICAgICAgICJzaXplPTY3MTA4ODY0IgogICAgICAgIF0sCiAgICAgICAgIm1vdW50X3BvaW50IjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgIH0KICAgIF0KICB9LAogICJyZXF1ZXN0X2RlZmF1bHRzIjogewogICAgIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3QiOiB7CiAgICAgICJhbGxvd19lbnZfcmVnZXgiOiBbCiAgICAgICAgIl5IT1NUTkFNRT0kKGRuc19sYWJlbCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1A9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUFJPVE89dGNwJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9BRERSPSQoaXB2NF9hKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9IT1NUPSQoaXB2NF9hKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVF8kKGRuc19sYWJlbCk9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeQVpVUkVfQ0xJRU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX1RFTkFOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9GRURFUkFURURfVE9LRU5fRklMRT0vdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2Vucy9henVyZS1pZGVudGl0eS10b2tlbiQiLAogICAgICAgICJeQVpVUkVfQVVUSE9SSVRZX0hPU1Q9aHR0cHM6Ly9sb2dpblxcLm1pY3Jvc29mdG9ubGluZVxcLmNvbS8kIgogICAgICBdCiAgICB9LAogICAgIkNvcHlGaWxlUmVxdWVzdCI6IFsKICAgICAgIiQoc2ZwcmVmaXgpIgogICAgXSwKICAgICJFeGVjUHJvY2Vzc1JlcXVlc3QiOiB7CiAgICAgICJjb21tYW5kcyI6IFtdLAogICAgICAicmVnZXgiOiBbXQogICAgfSwKICAgICJSZWFkU3RyZWFtUmVxdWVzdCI6IHRydWUsCiAgICAiVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCI6IGZhbHNlLAogICAgIldyaXRlU3RyZWFtUmVxdWVzdCI6IGZhbHNlCiAgfQp9 spec: runtimeClassName: kata-cc initContainers: diff --git a/src/agent/samples/policy/yaml/kubernetes/incomplete-init/controller.yaml b/src/agent/samples/policy/yaml/kubernetes/incomplete-init/controller.yaml index 8fe05592cd1a..e3d131c241a6 100644 --- a/src/agent/samples/policy/yaml/kubernetes/incomplete-init/controller.yaml +++ b/src/agent/samples/policy/yaml/kubernetes/incomplete-init/controller.yaml @@ -10,7 +10,7 @@ spec: labels: app: cassandra annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL3J1bi5zaCIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9saWIvanZtL2phdmEtOC1vcGVuamRrLWFtZDY0L2JpbjovdXNyL2xvY2FsL2FwYWNoZS1jYXNzYW5kcmEtMy4xMS4yL2JpbiIsCiAgICAgICAgICAgICJDQVNTQU5EUkFfSE9NRT0vdXNyL2xvY2FsL2FwYWNoZS1jYXNzYW5kcmEtMy4xMS4yIiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9DT05GPS9ldGMvY2Fzc2FuZHJhIiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9EQVRBPS9jYXNzYW5kcmFfZGF0YSIsCiAgICAgICAgICAgICJDQVNTQU5EUkFfTE9HUz0vdmFyL2xvZy9jYXNzYW5kcmEiLAogICAgICAgICAgICAiSkFWQV9IT01FPS91c3IvbGliL2p2bS9qYXZhLTgtb3Blbmpkay1hbWQ2NCIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiLAogICAgICAgICAgICAiTUFYX0hFQVBfU0laRT01MTJNIiwKICAgICAgICAgICAgIkhFQVBfTkVXU0laRT0xMDBNIiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9TRUVEX1BST1ZJREVSPWlvLms4cy5jYXNzYW5kcmEuS3ViZXJuZXRlc1NlZWRQcm92aWRlciIsCiAgICAgICAgICAgICJQT0RfTkFNRVNQQUNFPWRlZmF1bHQiLAogICAgICAgICAgICAiUE9EX0lQPSQocG9kLWlwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9jYXNzYW5kcmFfZGF0YSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvZGF0YSQiLAogICAgICAgICAgICAidHlwZV8iOiAibG9jYWwiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJjYXNzYW5kcmEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJnY3IuaW8vZ29vZ2xlLXNhbXBsZXMvY2Fzc2FuZHJhOnYxMyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICJlNTkxNGNmYzE0N2UxM2U2NWIyOWIzNmYzMTg3NTZjMWU4NTFhODAwNGE1MGYxNjIwY2Y2M2M0ZGI0OWM2NmI4OmM1ZDIyZmRhMTg0ZTllODNkYjIwNTFjZjc4YTM4ODUwNzUzZDdhNDRjNzAwOGU3MTA4NDY3YzU3YmM1ODA1NGQ6NWY4YTJlY2VjYmU2MGVmZTJkYzE2ZTgwYjM2NWE0MGE0MTg4ZTU3ZGQ0ZTNkNmMyNWU3ZTUxM2E2MmQ2N2MxNSIsCiAgICAgICAgICAgICI3NDI1MWQxNTRmMTcxZmY3Nzc1MzY0NmQ2OGU1YjIyODBhYzJlNDczM2NhMGUxMTAxODgwZmRjMGQyYzk0MjRlOjMwYzg2YzBlZTQ1NWEzNmM4OTQ3MjU1NGNkNGMyMzE5YWU0NzkxZmRmMTI3MWJhODk3OTNiNjYyZmI5M2Y0NTA6MDFjZGJkOGY0MTBhYzIwNzllMDMwZTIxM2NjMWQyZDFkOTMzNThiODMwNWRkZjEyNTI1NDk0NmE4YzM2YzgyNyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAibG9jYWwiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogImxvY2FsIiwKICAgICAgICAgICJmc3R5cGUiOiAibG9jYWwiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICJtb2RlPTA3NzciCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIl4kKGNwYXRoKS8kKHNhbmRib3gtaWQpL2xvY2FsL2RhdGEkIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL3J1bi5zaCIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L3Vzci9saWIvanZtL2phdmEtOC1vcGVuamRrLWFtZDY0L2JpbjovdXNyL2xvY2FsL2FwYWNoZS1jYXNzYW5kcmEtMy4xMS4yL2JpbiIsCiAgICAgICAgICAgICJDQVNTQU5EUkFfSE9NRT0vdXNyL2xvY2FsL2FwYWNoZS1jYXNzYW5kcmEtMy4xMS4yIiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9DT05GPS9ldGMvY2Fzc2FuZHJhIiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9EQVRBPS9jYXNzYW5kcmFfZGF0YSIsCiAgICAgICAgICAgICJDQVNTQU5EUkFfTE9HUz0vdmFyL2xvZy9jYXNzYW5kcmEiLAogICAgICAgICAgICAiSkFWQV9IT01FPS91c3IvbGliL2p2bS9qYXZhLTgtb3Blbmpkay1hbWQ2NCIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiLAogICAgICAgICAgICAiTUFYX0hFQVBfU0laRT01MTJNIiwKICAgICAgICAgICAgIkhFQVBfTkVXU0laRT0xMDBNIiwKICAgICAgICAgICAgIkNBU1NBTkRSQV9TRUVEX1BST1ZJREVSPWlvLms4cy5jYXNzYW5kcmEuS3ViZXJuZXRlc1NlZWRQcm92aWRlciIsCiAgICAgICAgICAgICJQT0RfTkFNRVNQQUNFPWRlZmF1bHQiLAogICAgICAgICAgICAiUE9EX0lQPSQocG9kLWlwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9jYXNzYW5kcmFfZGF0YSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvZGF0YSQiLAogICAgICAgICAgICAidHlwZV8iOiAibG9jYWwiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJjYXNzYW5kcmEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJnY3IuaW8vZ29vZ2xlLXNhbXBsZXMvY2Fzc2FuZHJhOnYxMyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICJlNTkxNGNmYzE0N2UxM2U2NWIyOWIzNmYzMTg3NTZjMWU4NTFhODAwNGE1MGYxNjIwY2Y2M2M0ZGI0OWM2NmI4OmM1ZDIyZmRhMTg0ZTllODNkYjIwNTFjZjc4YTM4ODUwNzUzZDdhNDRjNzAwOGU3MTA4NDY3YzU3YmM1ODA1NGQ6NWY4YTJlY2VjYmU2MGVmZTJkYzE2ZTgwYjM2NWE0MGE0MTg4ZTU3ZGQ0ZTNkNmMyNWU3ZTUxM2E2MmQ2N2MxNSIsCiAgICAgICAgICAgICI5NThlNWU4YzU2MDJiYmViY2ZkYTIyMGYzOGJjYmJjNGNkZGZmYzRjNTc1MjMwZmI3ZjBiZDkwYmFmNDgxZGY1OjMwYzg2YzBlZTQ1NWEzNmM4OTQ3MjU1NGNkNGMyMzE5YWU0NzkxZmRmMTI3MWJhODk3OTNiNjYyZmI5M2Y0NTA6MDFjZGJkOGY0MTBhYzIwNzllMDMwZTIxM2NjMWQyZDFkOTMzNThiODMwNWRkZjEyNTI1NDk0NmE4YzM2YzgyNyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAibG9jYWwiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogImxvY2FsIiwKICAgICAgICAgICJmc3R5cGUiOiAibG9jYWwiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICJtb2RlPTA3NzciCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIl4kKGNwYXRoKS8kKHNhbmRib3gtaWQpL2xvY2FsL2RhdGEkIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== spec: runtimeClassName: kata-cc containers: diff --git a/src/agent/samples/policy/yaml/pod/pod-spark.yaml b/src/agent/samples/policy/yaml/pod/pod-spark.yaml index 947cb65bcbe3..40b8202261b5 100644 --- a/src/agent/samples/policy/yaml/pod/pod-spark.yaml +++ b/src/agent/samples/policy/yaml/pod/pod-spark.yaml @@ -4,7 +4,7 @@ kind: Pod metadata: name: spark annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJzcGFyayIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIsCiAgICAgICAgICAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSI6ICJeL3Zhci9ydW4vbmV0bnMvY25pLVswLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNWE1YWFkODAwNTVmZjIwMDEyYTUwZGMyNWY4ZGY3YTI5OTI0NDc0MzI0ZDY1ZjdkNTMwNmVlOGVlMjdmZjcxZCIsCiAgICAgICAgICAgICI4MTcyNTBmMWEzZTMzNmRhNzZmNWJkM2ZhNzg0ZTFiMjZkOTU5YjljMTMxODc2ODE1YmEyNjA0MDQ4YjcwYzE4IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICIvYmluL3NoIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2xpYi9qdm0vamF2YS0xLjgtb3Blbmpkay9qcmUvYmluOi91c3IvbGliL2p2bS9qYXZhLTEuOC1vcGVuamRrL2Jpbjovb3B0L3NwYXJrL2JpbiIsCiAgICAgICAgICAgICJMQU5HPUMuVVRGLTgiLAogICAgICAgICAgICAiSkFWQV9IT01FPS91c3IvbGliL2p2bS9qYXZhLTEuOC1vcGVuamRrIiwKICAgICAgICAgICAgIkpBVkFfVkVSU0lPTj04dTIxMiIsCiAgICAgICAgICAgICJKQVZBX0FMUElORV9WRVJTSU9OPTguMjEyLjA0LXIwIiwKICAgICAgICAgICAgIkFQQUNIRV9TUEFSS19WRVJTSU9OPTIuNC4zIiwKICAgICAgICAgICAgIkhBRE9PUF9WRVJTSU9OPTMuMS4yIiwKICAgICAgICAgICAgIkhBRE9PUF9HSVRfQ09NTUlUPXJlbGVhc2UtMy4yLjAtUkMxIiwKICAgICAgICAgICAgIlNQQVJLX0hPTUU9L29wdC9zcGFyayIsCiAgICAgICAgICAgICJIQURPT1BfSE9NRT0vb3B0L2hhZG9vcCIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogInNwYXJrIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAibWNyLm1pY3Jvc29mdC5jb20vbW1sc3Bhcmsvc3BhcmsyLjQ6djRfbWluaSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogInNwYXJrIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDMpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDQpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDUpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDYpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDcpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDgpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDkpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNjg5ODZjMmY4NDhlYmM0MWM4NTYxY2IxYzVkMzAyODg3NjQyOTk0NDhiMDMzZWQ2ZWJiMjU3YTQzZTMxYTNiOTo1NmQzNDA2NmRhMGQ5OWU3NjJmNjM3ZDBkMzJkOTVlNTQ2MjIzNjlmMDQ4ZTI4OWUzN2RiMDJiZTE5NzUzMzA1OjBlZjJiZTU0ODVmOGU3YzVjOGEyMDE1MjFiZjA4NjE5N2FhOWJkMWQ5NDk3ZmE4NTBmNzZlZTFkZWI3NzcyYmI6NDAzM2VlNmE3NzIzM2MwZDNiNDMzZDM5MDkyZTA5OTY4Mzc5OTRlZWYyYmQxZjFmOTJiODU4Y2U2NDM3Mzk2ZjowZjA4YjM4MTE3YmUwYTI3YjFkNDNkMzk1NGYyMTA0MmFlNDNmMDJhMTAwZTA5ZWQwZjQzNzBjZTUzZjNhMjYyOjM1YTI4OWMzMTZmMWRlNTAyMTcyZTRhOGQ5ZTE1MzEzM2JhY2E0YmVjYjM4YjA3MDg4MDA3NjRkY2NjNDYyNTE6ZjQ2YjA0YjQ5YTdlMDdmY2JiYmUzNDI5MDI3NDQ0ZmIyMDM0YjdmZDhkM2E1OWU2Njc4YjMyOWFiMmI2NTc2Mzo3ZTFhYjNiMjcwNWVmMzc5NGIyYzg0NmNiYWM3NTcxNDRkMmE0MGQzODNiM2QzYzg1ZTI3YTVkOGMzOWM4NGYxOjAxMmIxODYwYWY5MDc1MzdlMTE0YWUzOGQ5MjViY2UxZWFhZjNkMWQ4NzgxZmRjMWY3N2VmODI4YzhiNGUyYmI6MmI4NjNmYTI1NzU2MWM1OWYxOWZlZGE0YjViZTA1YTg3MWZmZGRkMzMwNmZkNDNlNWMwNDA1MWQ0ODQyOTliYjo1YTI4Nzk3YWJhNTcyM2JlZjA3NDc3YWM5ZGI2Mzc2NzAxZTEzMzM1MjQxZTJiYjVjNjdkZjQ2NGRjY2UxMTJkIiwKICAgICAgICAgICAgIjljNWU5ZTY1M2QyNmVkNTIzZjAyMmJkMjllMTllOTI2NzM1OTk5NWQ1YTBjOGZkMjI3NTZmODRjYWQ1NDVkM2Y6NmJkYWVmNTY4MjQ0NDUyOWZmZDYyNDI4MGRiYWQxYWY3NTc5NjNkNmI0NGQ2MTRjYjZjYTkxMWYzOWI1ZjgwMzo1YWRhOTdhZTI1ZDliZmQxMjgzMzYzOTdiODU3ZTFhMDdkY2UyMTM3YmZhYjA3NTcxYmY0MWY5ZDQwZDdiNTkwOjViNzdjNmRmNjgzODEwM2E4NTg3ODdjOWNlNDg2NWI2ZDExYmJkZDk4NjE2OWVkMDhlMDM2MmFjNmZkZTRkNzQ6OGNiZjQ1OTVmMGUxMWQ4MDY1MzEwZDJhZDA0NmU3MTEzNDk3NWQwMDZhMDY5OTMxYzNmZjcxZjU3NTQ5NDhhMDowNTAwNGRjM2ExMWM4MmU4YzgwYWY0NmFiYWU3MjhjZDZjZWJmZmMzNDAxODFhNDkzMTBhZGJjYzRkNzZiMTM4OjNlYTVhNjQzZDg4NjAwMjk0ZTJhMzdjZDllZWJkMTRlMTc1ODAzNTJkMTRmZWQzMmJmZTUxZmJkZjAzZGRkNDU6MjU4MTg3ZGU1NWFmMWZjZTdjODExNGE1ODIyZTA0NjU5ZjkxNTk2YjBhOWMwZjQ3YWQ1N2I5NGNjZGNmN2ZjMjphN2RiMjhlMDllNTFlODliNDUxYzJkMWZkZTIxYjAxNmI2NWJhNDhjYTczMzEwOWFhZDBkNWVhYmQxOTFiMDJiOjc5MGJiNTFlNTk1ODEzN2JmYzE1ZDhhMmNhNjkzZWQ3ZWZmNjZmNGZjNDY5MTExNGNmMTdiZjFmZDUxYzEyZWU6MTIwNTUzMjZjMjc1NDA1YTE5MjA2MjEzNzQ2OTg4OGUxYTQ5OGNkODI5YTVjNTFiYzBkZGNjMTg4MGExMGJjMyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJzcGFyayIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIsCiAgICAgICAgICAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSI6ICJeL3Zhci9ydW4vbmV0bnMvY25pLVswLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNWE1YWFkODAwNTVmZjIwMDEyYTUwZGMyNWY4ZGY3YTI5OTI0NDc0MzI0ZDY1ZjdkNTMwNmVlOGVlMjdmZjcxZCIsCiAgICAgICAgICAgICI4MTcyNTBmMWEzZTMzNmRhNzZmNWJkM2ZhNzg0ZTFiMjZkOTU5YjljMTMxODc2ODE1YmEyNjA0MDQ4YjcwYzE4IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICIvYmluL3NoIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2xpYi9qdm0vamF2YS0xLjgtb3Blbmpkay9qcmUvYmluOi91c3IvbGliL2p2bS9qYXZhLTEuOC1vcGVuamRrL2Jpbjovb3B0L3NwYXJrL2JpbiIsCiAgICAgICAgICAgICJMQU5HPUMuVVRGLTgiLAogICAgICAgICAgICAiSkFWQV9IT01FPS91c3IvbGliL2p2bS9qYXZhLTEuOC1vcGVuamRrIiwKICAgICAgICAgICAgIkpBVkFfVkVSU0lPTj04dTIxMiIsCiAgICAgICAgICAgICJKQVZBX0FMUElORV9WRVJTSU9OPTguMjEyLjA0LXIwIiwKICAgICAgICAgICAgIkFQQUNIRV9TUEFSS19WRVJTSU9OPTIuNC4zIiwKICAgICAgICAgICAgIkhBRE9PUF9WRVJTSU9OPTMuMS4yIiwKICAgICAgICAgICAgIkhBRE9PUF9HSVRfQ09NTUlUPXJlbGVhc2UtMy4yLjAtUkMxIiwKICAgICAgICAgICAgIlNQQVJLX0hPTUU9L29wdC9zcGFyayIsCiAgICAgICAgICAgICJIQURPT1BfSE9NRT0vb3B0L2hhZG9vcCIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogInNwYXJrIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAibWNyLm1pY3Jvc29mdC5jb20vbW1sc3Bhcmsvc3BhcmsyLjQ6djRfbWluaSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogInNwYXJrIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDMpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDQpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDUpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDYpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDcpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDgpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDkpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNjg5ODZjMmY4NDhlYmM0MWM4NTYxY2IxYzVkMzAyODg3NjQyOTk0NDhiMDMzZWQ2ZWJiMjU3YTQzZTMxYTNiOTo1NmQzNDA2NmRhMGQ5OWU3NjJmNjM3ZDBkMzJkOTVlNTQ2MjIzNjlmMDQ4ZTI4OWUzN2RiMDJiZTE5NzUzMzA1OjBlZjJiZTU0ODVmOGU3YzVjOGEyMDE1MjFiZjA4NjE5N2FhOWJkMWQ5NDk3ZmE4NTBmNzZlZTFkZWI3NzcyYmI6NDAzM2VlNmE3NzIzM2MwZDNiNDMzZDM5MDkyZTA5OTY4Mzc5OTRlZWYyYmQxZjFmOTJiODU4Y2U2NDM3Mzk2ZjowZjA4YjM4MTE3YmUwYTI3YjFkNDNkMzk1NGYyMTA0MmFlNDNmMDJhMTAwZTA5ZWQwZjQzNzBjZTUzZjNhMjYyOjM1YTI4OWMzMTZmMWRlNTAyMTcyZTRhOGQ5ZTE1MzEzM2JhY2E0YmVjYjM4YjA3MDg4MDA3NjRkY2NjNDYyNTE6ZjQ2YjA0YjQ5YTdlMDdmY2JiYmUzNDI5MDI3NDQ0ZmIyMDM0YjdmZDhkM2E1OWU2Njc4YjMyOWFiMmI2NTc2Mzo3ZTFhYjNiMjcwNWVmMzc5NGIyYzg0NmNiYWM3NTcxNDRkMmE0MGQzODNiM2QzYzg1ZTI3YTVkOGMzOWM4NGYxOjAxMmIxODYwYWY5MDc1MzdlMTE0YWUzOGQ5MjViY2UxZWFhZjNkMWQ4NzgxZmRjMWY3N2VmODI4YzhiNGUyYmI6MmI4NjNmYTI1NzU2MWM1OWYxOWZlZGE0YjViZTA1YTg3MWZmZGRkMzMwNmZkNDNlNWMwNDA1MWQ0ODQyOTliYjo1YTI4Nzk3YWJhNTcyM2JlZjA3NDc3YWM5ZGI2Mzc2NzAxZTEzMzM1MjQxZTJiYjVjNjdkZjQ2NGRjY2UxMTJkIiwKICAgICAgICAgICAgIjljNWU5ZTY1M2QyNmVkNTIzZjAyMmJkMjllMTllOTI2NzM1OTk5NWQ1YTBjOGZkMjI3NTZmODRjYWQ1NDVkM2Y6NmJkYWVmNTY4MjQ0NDUyOWZmZDYyNDI4MGRiYWQxYWY3NTc5NjNkNmI0NGQ2MTRjYjZjYTkxMWYzOWI1ZjgwMzo1YWRhOTdhZTI1ZDliZmQxMjgzMzYzOTdiODU3ZTFhMDdkY2UyMTM3YmZhYjA3NTcxYmY0MWY5ZDQwZDdiNTkwOjViNzdjNmRmNjgzODEwM2E4NTg3ODdjOWNlNDg2NWI2ZDExYmJkZDk4NjE2OWVkMDhlMDM2MmFjNmZkZTRkNzQ6OGNiZjQ1OTVmMGUxMWQ4MDY1MzEwZDJhZDA0NmU3MTEzNDk3NWQwMDZhMDY5OTMxYzNmZjcxZjU3NTQ5NDhhMDowNTAwNGRjM2ExMWM4MmU4YzgwYWY0NmFiYWU3MjhjZDZjZWJmZmMzNDAxODFhNDkzMTBhZGJjYzRkNzZiMTM4OjNlYTVhNjQzZDg4NjAwMjk0ZTJhMzdjZDllZWJkMTRlMTc1ODAzNTJkMTRmZWQzMmJmZTUxZmJkZjAzZGRkNDU6MjU4MTg3ZGU1NWFmMWZjZTdjODExNGE1ODIyZTA0NjU5ZjkxNTk2YjBhOWMwZjQ3YWQ1N2I5NGNjZGNmN2ZjMjozYWU0ZDE2ZjVkNjZlZjBhMWJmODczYjEyM2Y4NjUzODgwNzU4YmYwYWQ3NDQzZTM0OGQxMzE1OWQ2ODQzNmFkOjc5MGJiNTFlNTk1ODEzN2JmYzE1ZDhhMmNhNjkzZWQ3ZWZmNjZmNGZjNDY5MTExNGNmMTdiZjFmZDUxYzEyZWU6MTIwNTUzMjZjMjc1NDA1YTE5MjA2MjEzNzQ2OTg4OGUxYTQ5OGNkODI5YTVjNTFiYzBkZGNjMTg4MGExMGJjMyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== spec: restartPolicy: Never runtimeClassName: runtime-class diff --git a/src/agent/samples/policy/yaml/pod/pod-three-containers.yaml b/src/agent/samples/policy/yaml/pod/pod-three-containers.yaml index dc1a42214db1..09ddc35cfb7d 100644 --- a/src/agent/samples/policy/yaml/pod/pod-three-containers.yaml +++ b/src/agent/samples/policy/yaml/pod/pod-three-containers.yaml @@ -6,7 +6,7 @@ metadata: labels: run: busybox annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCn0KCmNoZWNrX3N5bWxpbmtfc291cmNlIHsKICAgICMgVE9ETzogZGVsZXRlIHRoaXMgcnVsZSBvbmNlIHRoZSBzeW1saW5rX3NyYyBmaWVsZCBnZXRzIGltcGxlbWVudGVkCiAgICAjIGJ5IGFsbC9tb3N0IEd1ZXN0IFZNcy4KICAgIG5vdCBpbnB1dC5zeW1saW5rX3NyYwp9CmNoZWNrX3N5bWxpbmtfc291cmNlIHsKICAgIGlfc3JjIDo9IGlucHV0LnN5bWxpbmtfc3JjCiAgICBwcmludCgiY2hlY2tfc3ltbGlua19zb3VyY2U6IGlfc3JjID0iLCBpX3NyYykKCiAgICBzdGFydHN3aXRoKGlfc3JjLCAiLyIpID09IGZhbHNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfc3JjKQp9CgphbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlfc3RvcmFnZXMpIHsKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiBpX3N0b3JhZ2VzID0iLCBpX3N0b3JhZ2VzKQoKICAgIHBfc3RvcmFnZXMgOj0gcG9saWN5X2RhdGEuc2FuZGJveC5zdG9yYWdlcwogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3NhbmRib3hfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZXM6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBzb21lIHBfc3RvcmFnZSBpbiBwX3N0b3JhZ2VzCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIGlfc3RvcmFnZSA9PSBwX3N0b3JhZ2UKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlOiB0cnVlIikKfQoKQ29weUZpbGVSZXF1ZXN0IHsKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IGlucHV0LnBhdGggPSIsIGlucHV0LnBhdGgpCgogICAgY2hlY2tfc3ltbGlua19zb3VyY2UKICAgIGNoZWNrX2RpcmVjdG9yeV90cmF2ZXJzYWwoaW5wdXQucGF0aCkKCiAgICBzb21lIHJlZ2V4MSBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkNvcHlGaWxlUmVxdWVzdAogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzZnByZWZpeCkiLCBwb2xpY3lfZGF0YS5jb21tb24uc2ZwcmVmaXgpCiAgICByZWdleDMgOj0gcmVwbGFjZShyZWdleDIsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHJlZ2V4NCA6PSByZXBsYWNlKHJlZ2V4MywgIiQoYnVuZGxlLWlkKSIsICJbYS16MC05XXs2NH0iKQogICAgcHJpbnQoIkNvcHlGaWxlUmVxdWVzdDogcmVnZXg0ID0iLCByZWdleDQpCgogICAgcmVnZXgubWF0Y2gocmVnZXg0LCBpbnB1dC5wYXRoKQoKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHRydWUiKQp9CgpDcmVhdGVTYW5kYm94UmVxdWVzdCB7CiAgICBwcmludCgiQ3JlYXRlU2FuZGJveFJlcXVlc3Q6IGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCA9IiwgaW5wdXQuZ3Vlc3RfaG9va19wYXRoKQogICAgY291bnQoaW5wdXQuZ3Vlc3RfaG9va19wYXRoKSA9PSAwCgogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5rZXJuZWxfbW9kdWxlcyA9IiwgaW5wdXQua2VybmVsX21vZHVsZXMpCiAgICBjb3VudChpbnB1dC5rZXJuZWxfbW9kdWxlcykgPT0gMAoKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgaV9waWRucyA9PSBmYWxzZQoKICAgIGFsbG93X3NhbmRib3hfc3RvcmFnZXMoaW5wdXQuc3RvcmFnZXMpCn0KCkV4ZWNQcm9jZXNzUmVxdWVzdCB7CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDE6IGlucHV0ID0iLCBpbnB1dCkKCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgcF9jb21tYW5kIGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LmNvbW1hbmRzCiAgICBwX2NvbW1hbmQgPT0gaV9jb21tYW5kCgogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiB0cnVlIikKfQpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAyOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgIyBUT0RPOiBtYXRjaCBpbnB1dCBjb250YWluZXIgSUQgd2l0aCBpdHMgY29ycmVzcG9uZGluZyBjb250YWluZXIuZXhlY19jb21tYW5kcy4KICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBjb250YWluZXIgaW4gcG9saWN5X2RhdGEuY29udGFpbmVycwogICAgc29tZSBwX2NvbW1hbmQgaW4gY29udGFpbmVyLmV4ZWNfY29tbWFuZHMKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogcF9jb21tYW5kID0iLCBwX2NvbW1hbmQpCgogICAgIyBUT0RPOiBzaG91bGQgb3RoZXIgaW5wdXQgZGF0YSBmaWVsZHMgYmUgdmFsaWRhdGVkIGFzIHdlbGw/CiAgICBwX2NvbW1hbmQgPT0gaV9jb21tYW5kCgogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAyOiB0cnVlIikKfQpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfcmVnZXggaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5FeGVjUHJvY2Vzc1JlcXVlc3QucmVnZXgKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogcF9yZWdleCA9IiwgcF9yZWdleCkKCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBpX2NvbW1hbmQpCgogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiB0cnVlIikKfQoKUmVhZFN0cmVhbVJlcXVlc3QgewogICAgcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5SZWFkU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KClVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QgewogICAgcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5VcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0ID09IHRydWUKfQoKV3JpdGVTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuV3JpdGVTdHJlYW1SZXF1ZXN0ID09IHRydWUKfQoKcG9saWN5X2RhdGEgOj0gewogICJjb250YWluZXJzIjogWwogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDY1NTM1LAogICAgICAgICAgICAiR0lEIjogNjU1MzUsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL3BhdXNlIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicm8iLAogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgIm5vZXhlYyIKICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIkFubm90YXRpb25zIjogewogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiOiAiL3J1bi9jb250YWluZXJkL2lvLmNvbnRhaW5lcmQucnVudGltZS52Mi50YXNrL2s4cy5pby8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiOiAicG9kX3NhbmRib3giLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogInNhbmRib3giLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSI6ICJeL3Zhci9sb2cvcG9kcy8kKHNhbmRib3gtbmFtZXNwYWNlKV8kKHNhbmRib3gtbmFtZSlfWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogInRocmVlLWNvbnRhaW5lcnMiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiYXoiLAogICAgICAgICAgICAiLS1oZWxwIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogIm1hcmluZXItY2xpIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAibWNyLm1pY3Jvc29mdC5jb20vY2JsLW1hcmluZXIvYmFzZS9henVyZS1jbGk6Mi40OS4wLTEtY20yLjAuMjAyMzA2MDktYW1kNjQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJ0aHJlZS1jb250YWluZXJzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDMpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjY4NzhmMmJjZDY1MzY2OWZiN2M0NDMyYmRmMDg1MDIzNGIxYTIwNWQ1OWFiYTQwM2Q1MDgzYTQwMTA0NDEyM2M6YjUyY2JiNTViZmNmMGIzZGJhMzIxZDk1YTNmODQ2NzIwN2M0OTc0ZmUxMGE2MTcyNDFjMGU0MDYyNWMyMjEzYjoyNGM2NjVjYjBiNjdjNzVmZWM3MmI2Y2YxMmRkNmNhODdjOWI1MGRkMjdhYjc1MzI1OWI0OGViMjIwZjEwNTU0OjcxNjIxOTU5M2VjNTUzODQ4N2E5MTMxODcyM2NjNzIyYTI5ZjcxYTRkNWNlY2ZkN2FmMzUyMzQ0ZjZlMDU5NTMiLAogICAgICAgICAgICAiYjU3YmE2ZjM2MmU5ZDMzYmFjNWVkMjQ2Nzk3MGNmNjM5MmQ3ZjM0YTUyNjg1YTAwZDU3NDU2YmU3YzNjYTljMTpkZDIyM2Q5YmRmMTVmMjJlZjU4NmZjZGFhMDEwODI3MTlkNzNmN2Q0NjZmNGUwMjBiZTYwMjhhYzRjNGIzODQ5OmEwNDk3NGIxYWRiNjNjYzIzMDVlNjEwOWZmMTgxMTc5OTBkNGJlZGZlY2Q1OTFlY2U4ZDEyNTBjYTUyMDNmOGY6NjEyYTc5OGUxNWE4MGFjZTYyMjIyMjVlZjgzMzQ5M2I5YzFkODhmYTA2ZDk1MGIzOGEzZWYyN2Q5N2M4YjZiOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogdHJ1ZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICIvYmluL2VjaG8iLAogICAgICAgICAgICAiaGVsbG8iCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImJ1c3lib3giLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJtY3IubWljcm9zb2Z0LmNvbS9ha3MvZTJlL2xpYnJhcnktYnVzeWJveDptYXN0ZXIuMjIwMzE0LjEtbGludXgtYW1kNjQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJ0aHJlZS1jb250YWluZXJzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjJjMzQyYTEzN2U2OTNjNzg5OGFlYzM2ZGExMDQ3ZjE5MWRjN2MxNjg3ZTY2MTk4YWRhY2M0MzljZjRhZGYzNzk6MjU3MGUzYTE5ZTFiZjIwZGRkYTQ1NDk4YTk2MjdmNjE1NTVkMmQ2YzAxNDc5YjliNzY0NjBiNjc5YjI3ZDU1MiIsCiAgICAgICAgICAgICI4NTY4YzcwYzBjY2ZlMDA1MTA5MmU4MThkYTc2OTExMWE1OTg4MmNkMTlkZDc5OWQzYmNhNWZmYTgyNzkxMDgwOmI2NDNiNjIxNzc0ODk4MzgzMGIyNmFjMTRhMzVhMzMyMmRkNTI4YzAwOTYzZWFhZGQ5MWVmNTVmNTEzZGM3M2YiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IHRydWUsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL29wdC9zdGFydHVwL2luaXRfY29udGFpbmVyLnNoIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2Jpbjovb3B0L29yeXg6L2hvbWUvc2l0ZS93d3dyb290IiwKICAgICAgICAgICAgIkRFQklBTl9GTEFWT1I9YnVsbHNleWUiLAogICAgICAgICAgICAiT1JZWF9TREtfU1RPUkFHRV9CQVNFX1VSTD1odHRwczovL29yeXgtY2RuLm1pY3Jvc29mdC5pbyIsCiAgICAgICAgICAgICJFTkFCTEVfRFlOQU1JQ19JTlNUQUxMPXRydWUiLAogICAgICAgICAgICAiT1JZWF9BSV9JTlNUUlVNRU5UQVRJT05fS0VZPTRhYWRiYTZiLTMwYzgtNDJkYi05YjkzLTAyNGQ1YzYyYjg4NyIsCiAgICAgICAgICAgICJIT01FX1NJVEU9L2hvbWUvc2l0ZS93d3dyb290IiwKICAgICAgICAgICAgIkFQUF9QQVRIPS9ob21lL3NpdGUvd3d3cm9vdCIsCiAgICAgICAgICAgICJQT1JUPTgwODAiLAogICAgICAgICAgICAiU1NIX1BPUlQ9MjIyMiIsCiAgICAgICAgICAgICJXRUJTSVRFX1JPTEVfSU5TVEFOQ0VfSUQ9bG9jYWxSb2xlSW5zdGFuY2UiLAogICAgICAgICAgICAiV0VCU0lURV9JTlNUQU5DRV9JRD1sb2NhbEluc3RhbmNlIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIsCiAgICAgICAgICAgICJIT1NUX0lQPSQoaG9zdC1pcCkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvaG9tZS9zaXRlL3d3d3Jvb3QiLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cy9mcy9jZ3JvdXAiLAogICAgICAgICAgICAic291cmNlIjogImNncm91cCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJjZ3JvdXAiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJyZWxhdGltZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3Rlcm1pbmF0aW9uLWN1c3RvbS1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tY3VzdG9tLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImdvIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAibWNyLm1pY3Jvc29mdC5jb20vYXBwc3ZjL2dvOjEuMTktYnVsbHNleWVfMjAyMzAzMjQuMSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogInRocmVlLWNvbnRhaW5lcnMiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI5KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTMpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxNCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDE1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjE1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTYpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxNykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDE4KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjE4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiYTFkMTE5Nzk5ZmZiZDJiM2RlMDEzN2U2Yzc3ZjNkMzI3ZjEyYWJiOTkwMTNiNWQzYzM1ZDMyNzliMjc0ZWUzNjoxMTgwZDNmYmQxOGI1MjdhMzgzNWQzMzVhYTY4MjMxMmFjNjgzZGFhZDAxNTJmNWEyZjZhMTM0NzUxY2Y4NTUwOmM4ZDk0NDQ3MTAwZjhjNWMyNGMzYzgxYzhhNzI1YzVjZTMwOWYxOGY3ZjM5MzUxMjUyYWE4YmJjYzI3YTMwZmY6YjRlZmM0M2ZhMjMyZDE2ODdkMjBiYzMxYjhjNjljM2M2NmZmMTYyYzM5MDVjOWE3OWQ3MjZkZjA4ZGFmNjIxZDozYzQxOWU0NGQ1Mjg2NjIwZWU5MTk5YzgxZmJmZWVhZjU2N2JkN2M4ODA0MDMyZWNmMTkwODZkOGFkN2VmMTExOjE2NTZmMzRkOGZiNmZjOTMyMjc3ZjNlNTk4MDVlOTE5MDE4YWQ5ODUyM2FkNzJhOTA3ZWZmMWU4ZmY4MTZjZmI6MmIzMGYzMzJjYjQyMmZmZjJhYjM0N2ViMDg2MTJiNTBiYTA3ZDNiYTlhYTNjYWYzYTUzNmRlMmU1ZDk0OGQ5Njo0ZjZkN2MxYzNhMjAxYzIyYzdmMWI1NDk5NzNlYzE5YTk3YWYzMGVhYjU5NDQzYTU5MjJkYjAxN2Q5ZTg2YTRlOmVlZTRkZTVkZTUwYzEyMDRiYWI5ODJlYWVkYjA2NzRmNDg1OGE2ZDIyYTA3ZWIxNTViNzczODIyMjM2MDc1ODE6NzIzNWY1ZjE5MzkzNWYxMzkxYTk5Y2Q2YzBhODZjZjNiZmIxNDVkNDM0ZjExY2VkYWI0NWY3YTZmMmM3NTgwMzo4YzhmOTAwMmVhZmZkMWRkYmUxYTBlZTdhMmNmNGU3YjFiNzlmNGQ5ZTgzZDk1OTMyNDFlMjU0MDJmYjEwZDRhOjZmMTVlOWFiZGQ1YTc5YjJiOGZlY2FiYTJmMmM1MWNlNDdiMWIxYzk3ZjgwODlhMjZkMWUzYTE2MjdkMGFkNjY6MmE5MDIwODk4ZDBmOWNmM2VhMjM2MWVhMDRhZWUwMzlkMzRkZjRkOGMyOTYzYjAxNDA1NTg0NWZhZWI1ZGQzYzo2ZjU5NjkxMjU3ZDZjZDNhOGZjNjU5NmY4NGZjMmY1N2EwMGQyNTM5MWVjOWQxMDEyNDc3NDU5MGQ3NjVlYTZhOjdiMTJkN2YwZTAyZDI3MzI2NGZiNjJjMjVhZDgxMjFjZTY3OWYyMzZlYzAyNjc5NzcyYTkyZDFjNTQ5MGIzM2Y6NTE2YmQxOTYwNzY3MGVhYzk2NzQzOTgwNWYzMGMyMGEwYjFkNmYyYmQ4MDY1NDg1MWM5YjI5NDBhNmVhN2FlNjo3MzQyMjMzNmY2ZjE0YmJlMjcyNTM1Y2Y0NTMyZjFlNTkxMzkwNjE0Y2QyZjc5NDcwYTQzN2Q2ZmNjMDhkZDhkOmMwYWMxNjgxZDZhMWVhMzMwNjdlMzVhZWI3NTllZTdiYmJiNjI2NjQ4NTE3YmZhYTM5NGU1NzhiNTdkYTg4MjE6NWQ0YjdjZjhjZmQxYzQ0ZTAwMDQ2N2EyZDUwZGM0NjQ5ZmM0ZDUwMTM4MGRmODU4NjE5YWU3N2Q4YmYxZDMyZCIsCiAgICAgICAgICAgICJiNzQ1NDk1ODM5MTM2ZDE4OGI4ZTc4YzJkYmU1NjMxNmRkMDY2ZDAzOGQzMDM2ZTViODhiZGJjM2MxMmI5MTA1OjRjNTM3M2UxYmJlZDM2MjhlNWUwZDQ2YTM3OWJlY2Y1ZjY2ZGFkOWI0MGMzN2ZjNWRlNjRhY2QxNzM5YTI1OGM6NzFhYzc3NTk1Mjk1Nzk5NjVjYTY3ODI5MmNmM2QwNDQxOTJmZWZiZWIxMGYxNWFiODMzMGUwYjZhYjliMmM4NDpkY2Q3ZjM1OTdhMmJiMjVkZTgzYjc0MDRjYTllNTVjZDUyY2E0YWQ4OWI5NWE1ZDU5MzFlNmUwMzNkMmVlNDVmOmM4Nzk4MTZhZTMyYWRiZmE3NzhiMmYwNTlhYzkyMDA1OWEyZDk0OTk2OGZmNzFhZDU0YTJlN2UxYTkxNDU0MDI6ZWQ3NzFmZDgwYTY5NWQxN2VjMmNhMzJmZWI4N2Q1NGI3YzdmZTk2MmJkODUwYjUyMzg0YzczYWNiMDQxNTJkNzo1N2MwMmM0MDZkZWNmODcyMmI0NDZiNmUwMzM3ZmI5OTdlZjIyNjA0MzhlMjg5ZDZjMDY4ZDZkOTJkNjVlNjYwOmZlYWVjNDgzZTY2ZmZiY2YzMzBhODI0N2FmNjc5MWVjYzYzYzY5ZTEzMzM5YmZlNmVmNThmOGJjYWRlNjQyMDQ6YjA3NzhkM2I4OTYxN2EzMzRhY2I1YWZlODZlMTBlMGE4NmZhNzg5Yzc2NWUwYjdiOWNkZDRkMDQ4NTc1ZDcxMzpmMGJiMGFhMzY5ZmM5YmU4Y2RmMjllNDU2Y2Y5MjUyNDk2OWUwOGI4NjA5OTg4Y2VjNWNhMzY3NjdjMDA0ZjI4Ojk5YTVlZmVmMjI3YzhjMTNlMDU5NDM0YWI2NGQ0MDRmNjgzYzllMzYzMzVlMWJkMzViMmFjYTMyODJjZTk0Nzc6MGFlOGY2YjAyZTdiNTIyMWY5ZTQ1Mjk1MjcyMDE1NGE4MmI3MmMzYjM1NDZjOTk3YWNkYzg1OWI2YzRhMWE1YTpjNjYyZTJiYmFjNDgxMzU5NWZhYmQ3MGUzZjk4MTBhZDJjMzNiZDU2MzAxN2RlMjMwOTA1ODE5NjdlY2VkNjVlOjhkNDZiODc5Y2M2NWFkNDI1MGU1ODVmNDY4YjQyMzIxYjEyOTc2ZjFmZDJjZmZkMDE0NmExZWJlNGZlYzdlZGI6MGM5ZDFiMWYyYzY3ZmU5MDBkNWExODI4Zjg4N2UyMmRlNGJhZjU4NTE1ZjZlOWZkYmJkZDVkMDM2ZmRhNzUzZjozNmQ0M2EzOWZlN2FmNzIyYTBlMmU0NmZhNTk1MmFhMzhmYTc5YWQzMTFhODZjMGRhMGI3NTlhN2UzYzQxYjE0OmMxNzQzY2IwYTIwYjIwMDRiZjNmNGU0NTI0MDJmYTQ1MDMwNmRjNGQyOWUzZTE2ZjM1NGM5YjE2OTU5NDI5OGM6ZGEyZGM1ZTUxMWFlOTM1YzZlMjlhMzIxZTMxZDllNWFhODgzNDlkN2M3ZjRkNGEyYTkwYjAyMmQ2OTk0NjE5OTo4ZjE0ZDU4OWVkOTc3Yzk3ODgyNmM1OGY2NmVjMDIzMjAxNzQyNmZhYzNkZTVlMTBjNGRlNWRlYjgzN2E2Nzk3IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiB0cnVlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJ0aHJlZS1jb250YWluZXJzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IiwKICAgICAgICAgICJuZXJkY3RsL25ldHdvcmstbmFtZXNwYWNlIjogIl4vdmFyL3J1bi9uZXRucy9jbmktWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI1YTVhYWQ4MDA1NWZmMjAwMTJhNTBkYzI1ZjhkZjdhMjk5MjQ0NzQzMjRkNjVmN2Q1MzA2ZWU4ZWUyN2ZmNzFkIiwKICAgICAgICAgICAgIjgxNzI1MGYxYTNlMzM2ZGE3NmY1YmQzZmE3ODRlMWIyNmQ5NTliOWMxMzE4NzY4MTViYTI2MDQwNDhiNzBjMTgiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgImF6IiwKICAgICAgICAgICAgIi0taGVscCIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgICAiQVpfSU5TVEFMTEVSPURPQ0tFUiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogIm1hcmluZXItY2xpIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAibWNyLm1pY3Jvc29mdC5jb20vYXp1cmUtY2xpOjIuNTguMC1jYmwtbWFyaW5lcjIuMC1hbWQ2NCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogInRocmVlLWNvbnRhaW5lcnMiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRlZmF1bHQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDQ3Zjg3ZjFiY2QzZGJlNjFhMTI2Yjg3OTg2ODM3NzE5YzJiMzJjZDYyODU3NDM5ODM4YzM4MWVlZTkxOGUxNjoxMzBkMjAwNmJlZGI1MmJkYjRmOWEwYjY1Y2NiODhhY2JhOTRmNjdiZDg4YzRiNDRhMzgxNzk5YjJkMTJmYmNmOjg5NmQwZmIwMGUzZDQ0MzQzNmUzMjYxNzllYzE2MjE4ZDRlY2FlY2RmNWQ1OTcyMTc5ZGQ4NWYzYTNmMGI2YmUiLAogICAgICAgICAgICAiMWVkZWYxZGNhYWY0M2FmMzI3MTQ0OTkwNmMzNDk1ODQ3NWUwOTk3Yjk4MjhiY2EyYzBlY2FhNzQwMzNmN2FlZjoxNjBkYzEyODFiMWQxYjVmNmNhYWQ0NWEzNDkxYzAwMTdmNGQ5YzY3ZmZhNTI2OThlYTcwMzQ1ZTRjNjNhMWQ4Ojc0MzE0OTM3YmExYmVlZjc5Yzg5NTU5YzNmODhhZjliMWJhMDVlNWQyODgyMmIzNDU3MGQwNWE5ZTJiYTQwNTciCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IHRydWUsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAiL2Jpbi9lY2hvIiwKICAgICAgICAgICAgImhlbGxvIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cy9mcy9jZ3JvdXAiLAogICAgICAgICAgICAic291cmNlIjogImNncm91cCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJjZ3JvdXAiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJyZWxhdGltZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXJtaW5hdGlvbi1sb2ckIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0bmFtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0bmFtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClzZXJ2aWNlYWNjb3VudCQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2VucyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0b2tlbnMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJidXN5Ym94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAibWNyLm1pY3Jvc29mdC5jb20vYWtzL2UyZS9saWJyYXJ5LWJ1c3lib3g6bWFzdGVyLjIyMDMxNC4xLWxpbnV4LWFtZDY0IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiOiAidGhyZWUtY29udGFpbmVycyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZGVmYXVsdCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIyYzM0MmExMzdlNjkzYzc4OThhZWMzNmRhMTA0N2YxOTFkYzdjMTY4N2U2NjE5OGFkYWNjNDM5Y2Y0YWRmMzc5OjI1NzBlM2ExOWUxYmYyMGRkZGE0NTQ5OGE5NjI3ZjYxNTU1ZDJkNmMwMTQ3OWI5Yjc2NDYwYjY3OWIyN2Q1NTIiLAogICAgICAgICAgICAiODU2OGM3MGMwY2NmZTAwNTEwOTJlODE4ZGE3NjkxMTFhNTk4ODJjZDE5ZGQ3OTlkM2JjYTVmZmE4Mjc5MTA4MDpiNjQzYjYyMTc3NDg5ODM4MzBiMjZhYzE0YTM1YTMzMjJkZDUyOGMwMDk2M2VhYWRkOTFlZjU1ZjUxM2RjNzNmIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiB0cnVlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9vcHQvc3RhcnR1cC9pbml0X2NvbnRhaW5lci5zaCIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW46L29wdC9vcnl4Oi9ob21lL3NpdGUvd3d3cm9vdCIsCiAgICAgICAgICAgICJERUJJQU5fRkxBVk9SPWJ1bGxzZXllIiwKICAgICAgICAgICAgIk9SWVhfU0RLX1NUT1JBR0VfQkFTRV9VUkw9aHR0cHM6Ly9vcnl4LWNkbi5taWNyb3NvZnQuaW8iLAogICAgICAgICAgICAiRU5BQkxFX0RZTkFNSUNfSU5TVEFMTD10cnVlIiwKICAgICAgICAgICAgIk9SWVhfQUlfSU5TVFJVTUVOVEFUSU9OX0tFWT00YWFkYmE2Yi0zMGM4LTQyZGItOWI5My0wMjRkNWM2MmI4ODciLAogICAgICAgICAgICAiSE9NRV9TSVRFPS9ob21lL3NpdGUvd3d3cm9vdCIsCiAgICAgICAgICAgICJBUFBfUEFUSD0vaG9tZS9zaXRlL3d3d3Jvb3QiLAogICAgICAgICAgICAiUE9SVD04MDgwIiwKICAgICAgICAgICAgIlNTSF9QT1JUPTIyMjIiLAogICAgICAgICAgICAiV0VCU0lURV9ST0xFX0lOU1RBTkNFX0lEPWxvY2FsUm9sZUluc3RhbmNlIiwKICAgICAgICAgICAgIldFQlNJVEVfSU5TVEFOQ0VfSUQ9bG9jYWxJbnN0YW5jZSIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiLAogICAgICAgICAgICAiSE9TVF9JUD0kKGhvc3QtaXApIgogICAgICAgICAgXSwKICAgICAgICAgICJDd2QiOiAiL2hvbWUvc2l0ZS93d3dyb290IiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1jdXN0b20tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWN1c3RvbS1sb2ckIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0bmFtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0bmFtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClzZXJ2aWNlYWNjb3VudCQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2VucyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0b2tlbnMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJnbyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogIm1jci5taWNyb3NvZnQuY29tL2FwcHN2Yy9nbzoxLjE5LWJ1bGxzZXllXzIwMjMwMzI0LjEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJ0aHJlZS1jb250YWluZXJzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkZWZhdWx0IgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDIpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDMpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDQpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDUpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDYpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDcpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyNykiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDgpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDkpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyOSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTEpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxMikiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDEzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTQpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxNSkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDE2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjE2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMTcpIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMTcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxOCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgImExZDExOTc5OWZmYmQyYjNkZTAxMzdlNmM3N2YzZDMyN2YxMmFiYjk5MDEzYjVkM2MzNWQzMjc5YjI3NGVlMzY6MTE4MGQzZmJkMThiNTI3YTM4MzVkMzM1YWE2ODIzMTJhYzY4M2RhYWQwMTUyZjVhMmY2YTEzNDc1MWNmODU1MDpjOGQ5NDQ0NzEwMGY4YzVjMjRjM2M4MWM4YTcyNWM1Y2UzMDlmMThmN2YzOTM1MTI1MmFhOGJiY2MyN2EzMGZmOmI0ZWZjNDNmYTIzMmQxNjg3ZDIwYmMzMWI4YzY5YzNjNjZmZjE2MmMzOTA1YzlhNzlkNzI2ZGYwOGRhZjYyMWQ6M2M0MTllNDRkNTI4NjYyMGVlOTE5OWM4MWZiZmVlYWY1NjdiZDdjODgwNDAzMmVjZjE5MDg2ZDhhZDdlZjExMToxNjU2ZjM0ZDhmYjZmYzkzMjI3N2YzZTU5ODA1ZTkxOTAxOGFkOTg1MjNhZDcyYTkwN2VmZjFlOGZmODE2Y2ZiOjJiMzBmMzMyY2I0MjJmZmYyYWIzNDdlYjA4NjEyYjUwYmEwN2QzYmE5YWEzY2FmM2E1MzZkZTJlNWQ5NDhkOTY6NGY2ZDdjMWMzYTIwMWMyMmM3ZjFiNTQ5OTczZWMxOWE5N2FmMzBlYWI1OTQ0M2E1OTIyZGIwMTdkOWU4NmE0ZTplZWU0ZGU1ZGU1MGMxMjA0YmFiOTgyZWFlZGIwNjc0ZjQ4NThhNmQyMmEwN2ViMTU1Yjc3MzgyMjIzNjA3NTgxOjcyMzVmNWYxOTM5MzVmMTM5MWE5OWNkNmMwYTg2Y2YzYmZiMTQ1ZDQzNGYxMWNlZGFiNDVmN2E2ZjJjNzU4MDM6OGM4ZjkwMDJlYWZmZDFkZGJlMWEwZWU3YTJjZjRlN2IxYjc5ZjRkOWU4M2Q5NTkzMjQxZTI1NDAyZmIxMGQ0YTo2ZjE1ZTlhYmRkNWE3OWIyYjhmZWNhYmEyZjJjNTFjZTQ3YjFiMWM5N2Y4MDg5YTI2ZDFlM2ExNjI3ZDBhZDY2OjJhOTAyMDg5OGQwZjljZjNlYTIzNjFlYTA0YWVlMDM5ZDM0ZGY0ZDhjMjk2M2IwMTQwNTU4NDVmYWViNWRkM2M6NmY1OTY5MTI1N2Q2Y2QzYThmYzY1OTZmODRmYzJmNTdhMDBkMjUzOTFlYzlkMTAxMjQ3NzQ1OTBkNzY1ZWE2YTo3YjEyZDdmMGUwMmQyNzMyNjRmYjYyYzI1YWQ4MTIxY2U2NzlmMjM2ZWMwMjY3OTc3MmE5MmQxYzU0OTBiMzNmOjUxNmJkMTk2MDc2NzBlYWM5Njc0Mzk4MDVmMzBjMjBhMGIxZDZmMmJkODA2NTQ4NTFjOWIyOTQwYTZlYTdhZTY6NzM0MjIzMzZmNmYxNGJiZTI3MjUzNWNmNDUzMmYxZTU5MTM5MDYxNGNkMmY3OTQ3MGE0MzdkNmZjYzA4ZGQ4ZDpjMGFjMTY4MWQ2YTFlYTMzMDY3ZTM1YWViNzU5ZWU3YmJiYjYyNjY0ODUxN2JmYWEzOTRlNTc4YjU3ZGE4ODIxOjVkNGI3Y2Y4Y2ZkMWM0NGUwMDA0NjdhMmQ1MGRjNDY0OWZjNGQ1MDEzODBkZjg1ODYxOWFlNzdkOGJmMWQzMmQiLAogICAgICAgICAgICAiYjc0NTQ5NTgzOTEzNmQxODhiOGU3OGMyZGJlNTYzMTZkZDA2NmQwMzhkMzAzNmU1Yjg4YmRiYzNjMTJiOTEwNTo0YzUzNzNlMWJiZWQzNjI4ZTVlMGQ0NmEzNzliZWNmNWY2NmRhZDliNDBjMzdmYzVkZTY0YWNkMTczOWEyNThjOjcxYWM3NzU5NTI5NTc5OTY1Y2E2NzgyOTJjZjNkMDQ0MTkyZmVmYmViMTBmMTVhYjgzMzBlMGI2YWI5YjJjODQ6ZGNkN2YzNTk3YTJiYjI1ZGU4M2I3NDA0Y2E5ZTU1Y2Q1MmNhNGFkODliOTVhNWQ1OTMxZTZlMDMzZDJlZTQ1ZjpjODc5ODE2YWUzMmFkYmZhNzc4YjJmMDU5YWM5MjAwNTlhMmQ5NDk5NjhmZjcxYWQ1NGEyZTdlMWE5MTQ1NDAyOmVkNzcxZmQ4MGE2OTVkMTdlYzJjYTMyZmViODdkNTRiN2M3ZmU5NjJiZDg1MGI1MjM4NGM3M2FjYjA0MTUyZDc6NTdjMDJjNDA2ZGVjZjg3MjJiNDQ2YjZlMDMzN2ZiOTk3ZWYyMjYwNDM4ZTI4OWQ2YzA2OGQ2ZDkyZDY1ZTY2MDpmZWFlYzQ4M2U2NmZmYmNmMzMwYTgyNDdhZjY3OTFlY2M2M2M2OWUxMzMzOWJmZTZlZjU4ZjhiY2FkZTY0MjA0OmIwNzc4ZDNiODk2MTdhMzM0YWNiNWFmZTg2ZTEwZTBhODZmYTc4OWM3NjVlMGI3YjljZGQ0ZDA0ODU3NWQ3MTM6ZjBiYjBhYTM2OWZjOWJlOGNkZjI5ZTQ1NmNmOTI1MjQ5NjllMDhiODYwOTk4OGNlYzVjYTM2NzY3YzAwNGYyODo5OWE1ZWZlZjIyN2M4YzEzZTA1OTQzNGFiNjRkNDA0ZjY4M2M5ZTM2MzM1ZTFiZDM1YjJhY2EzMjgyY2U5NDc3OjBhZThmNmIwMmU3YjUyMjFmOWU0NTI5NTI3MjAxNTRhODJiNzJjM2IzNTQ2Yzk5N2FjZGM4NTliNmM0YTFhNWE6YzY2MmUyYmJhYzQ4MTM1OTVmYWJkNzBlM2Y5ODEwYWQyYzMzYmQ1NjMwMTdkZTIzMDkwNTgxOTY3ZWNlZDY1ZTo4ZDQ2Yjg3OWNjNjVhZDQyNTBlNTg1ZjQ2OGI0MjMyMWIxMjk3NmYxZmQyY2ZmZDAxNDZhMWViZTRmZWM3ZWRiOjBjOWQxYjFmMmM2N2ZlOTAwZDVhMTgyOGY4ODdlMjJkZTRiYWY1ODUxNWY2ZTlmZGJiZGQ1ZDAzNmZkYTc1M2Y6MzZkNDNhMzlmZTdhZjcyMmEwZTJlNDZmYTU5NTJhYTM4ZmE3OWFkMzExYTg2YzBkYTBiNzU5YTdlM2M0MWIxNDpjMTc0M2NiMGEyMGIyMDA0YmYzZjRlNDUyNDAyZmE0NTAzMDZkYzRkMjllM2UxNmYzNTRjOWIxNjk1OTQyOThjOmRhMmRjNWU1MTFhZTkzNWM2ZTI5YTMyMWUzMWQ5ZTVhYTg4MzQ5ZDdjN2Y0ZDRhMmE5MGIwMjJkNjk5NDYxOTk6OGYxNGQ1ODllZDk3N2M5Nzg4MjZjNThmNjZlYzAyMzIwMTc0MjZmYWMzZGU1ZTEwYzRkZTVkZWI4MzdhNjc5NyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogdHJ1ZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfQogIF0sCiAgImNvbW1vbiI6IHsKICAgICJjcGF0aCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zaGFyZWQvY29udGFpbmVycyIsCiAgICAic2ZwcmVmaXgiOiAiXiQoY3BhdGgpLyQoYnVuZGxlLWlkKS1bYS16MC05XXsxNn0tIiwKICAgICJpcHY0X2EiOiAiKCgyNVswLTVdfCgyWzAtNF18MVxcZHxbMS05XXwpXFxkKVxcLj9cXGIpezR9IiwKICAgICJpcF9wIjogIlswLTldezEsNX0iLAogICAgInN2Y19uYW1lIjogIltBLVowLTlfXFwuXFwtXSsiLAogICAgImRuc19sYWJlbCI6ICJbYS16QS1aMC05X1xcLlxcLV0rIiwKICAgICJkZWZhdWx0X2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfRlNFVElEIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX01LTk9EIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfU1lTX0NIUk9PVCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfQVVESVRfV1JJVEUiCiAgICBdLAogICAgInByaXZpbGVnZWRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9EQUNfUkVBRF9TRUFSQ0giLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfRlNFVElEIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9TRVRHSUQiLAogICAgICAiQ0FQX1NFVFVJRCIsCiAgICAgICJDQVBfU0VUUENBUCIsCiAgICAgICJDQVBfTElOVVhfSU1NVVRBQkxFIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9ORVRfQlJPQURDQVNUIiwKICAgICAgIkNBUF9ORVRfQURNSU4iLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX0lQQ19MT0NLIiwKICAgICAgIkNBUF9JUENfT1dORVIiLAogICAgICAiQ0FQX1NZU19NT0RVTEUiLAogICAgICAiQ0FQX1NZU19SQVdJTyIsCiAgICAgICJDQVBfU1lTX0NIUk9PVCIsCiAgICAgICJDQVBfU1lTX1BUUkFDRSIsCiAgICAgICJDQVBfU1lTX1BBQ0NUIiwKICAgICAgIkNBUF9TWVNfQURNSU4iLAogICAgICAiQ0FQX1NZU19CT09UIiwKICAgICAgIkNBUF9TWVNfTklDRSIsCiAgICAgICJDQVBfU1lTX1JFU09VUkNFIiwKICAgICAgIkNBUF9TWVNfVElNRSIsCiAgICAgICJDQVBfU1lTX1RUWV9DT05GSUciLAogICAgICAiQ0FQX01LTk9EIiwKICAgICAgIkNBUF9MRUFTRSIsCiAgICAgICJDQVBfQVVESVRfV1JJVEUiLAogICAgICAiQ0FQX0FVRElUX0NPTlRST0wiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX01BQ19PVkVSUklERSIsCiAgICAgICJDQVBfTUFDX0FETUlOIiwKICAgICAgIkNBUF9TWVNMT0ciLAogICAgICAiQ0FQX1dBS0VfQUxBUk0iLAogICAgICAiQ0FQX0JMT0NLX1NVU1BFTkQiLAogICAgICAiQ0FQX0FVRElUX1JFQUQiLAogICAgICAiQ0FQX1BFUkZNT04iLAogICAgICAiQ0FQX0JQRiIsCiAgICAgICJDQVBfQ0hFQ0tQT0lOVF9SRVNUT1JFIgogICAgXQogIH0sCiAgInNhbmRib3giOiB7CiAgICAic3RvcmFnZXMiOiBbCiAgICAgIHsKICAgICAgICAiZHJpdmVyIjogImVwaGVtZXJhbCIsCiAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgInNvdXJjZSI6ICJzaG0iLAogICAgICAgICJmc3R5cGUiOiAidG1wZnMiLAogICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAibW9kZT0xNzc3IiwKICAgICAgICAgICJzaXplPTY3MTA4ODY0IgogICAgICAgIF0sCiAgICAgICAgIm1vdW50X3BvaW50IjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgIH0KICAgIF0KICB9LAogICJyZXF1ZXN0X2RlZmF1bHRzIjogewogICAgIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3QiOiB7CiAgICAgICJhbGxvd19lbnZfcmVnZXgiOiBbCiAgICAgICAgIl5IT1NUTkFNRT0kKGRuc19sYWJlbCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1A9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUFJPVE89dGNwJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9BRERSPSQoaXB2NF9hKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9IT1NUPSQoaXB2NF9hKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVF8kKGRuc19sYWJlbCk9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeQVpVUkVfQ0xJRU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX1RFTkFOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9GRURFUkFURURfVE9LRU5fRklMRT0vdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2Vucy9henVyZS1pZGVudGl0eS10b2tlbiQiLAogICAgICAgICJeQVpVUkVfQVVUSE9SSVRZX0hPU1Q9aHR0cHM6Ly9sb2dpblxcLm1pY3Jvc29mdG9ubGluZVxcLmNvbS8kIgogICAgICBdCiAgICB9LAogICAgIkNvcHlGaWxlUmVxdWVzdCI6IFsKICAgICAgIiQoc2ZwcmVmaXgpIgogICAgXSwKICAgICJFeGVjUHJvY2Vzc1JlcXVlc3QiOiB7CiAgICAgICJjb21tYW5kcyI6IFtdLAogICAgICAicmVnZXgiOiBbXQogICAgfSwKICAgICJSZWFkU3RyZWFtUmVxdWVzdCI6IHRydWUsCiAgICAiVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCI6IGZhbHNlLAogICAgIldyaXRlU3RyZWFtUmVxdWVzdCI6IGZhbHNlCiAgfQp9 spec: restartPolicy: Never runtimeClassName: kata-cc @@ -21,7 +21,7 @@ spec: - /bin/echo - hello - name: mariner-cli - image: "mcr.microsoft.com/cbl-mariner/base/azure-cli:2.49.0-1-cm2.0.20230609-amd64" + image: "mcr.microsoft.com/azure-cli:2.58.0-cbl-mariner2.0-amd64" command: - az - "--help" diff --git a/src/agent/samples/policy/yaml/webhook/webhook-pod3.yaml b/src/agent/samples/policy/yaml/webhook/webhook-pod3.yaml index 56907176e2a0..9d83577ac43e 100644 --- a/src/agent/samples/policy/yaml/webhook/webhook-pod3.yaml +++ b/src/agent/samples/policy/yaml/webhook/webhook-pod3.yaml @@ -78,7 +78,7 @@ metadata: name: pod-secrets-df473706-9a13-4759-84bd-eea6ed2d7b61 namespace: emptydir-wrapper-9641 annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJwb2Qtc2VjcmV0cy1kZjQ3MzcwNi05YTEzLTQ3NTktODRiZC1lZWE2ZWQyZDdiNjEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImVtcHR5ZGlyLXdyYXBwZXItOTY0MSIsCiAgICAgICAgICAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSI6ICJeL3Zhci9ydW4vbmV0bnMvY25pLVswLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNWE1YWFkODAwNTVmZjIwMDEyYTUwZGMyNWY4ZGY3YTI5OTI0NDc0MzI0ZDY1ZjdkNTMwNmVlOGVlMjdmZjcxZCIsCiAgICAgICAgICAgICI4MTcyNTBmMWEzZTMzNmRhNzZmNWJkM2ZhNzg0ZTFiMjZkOTU5YjljMTMxODc2ODE1YmEyNjA0MDQ4YjcwYzE4IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICIvYWduaG9zdCIsCiAgICAgICAgICAgICJ0ZXN0LXdlYnNlcnZlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgICAiSE9TVE5BTUU9JChob3N0LW5hbWUpIgogICAgICAgICAgXSwKICAgICAgICAgICJDd2QiOiAiLyIsCiAgICAgICAgICAiQ2FwYWJpbGl0aWVzIjogewogICAgICAgICAgICAiQW1iaWVudCI6IFtdLAogICAgICAgICAgICAiQm91bmRpbmciOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkVmZmVjdGl2ZSI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiSW5oZXJpdGFibGUiOiBbXSwKICAgICAgICAgICAgIlBlcm1pdHRlZCI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgIk5vTmV3UHJpdmlsZWdlcyI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cy9mcy9jZ3JvdXAiLAogICAgICAgICAgICAic291cmNlIjogImNncm91cCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJjZ3JvdXAiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJyZWxhdGltZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXJtaW5hdGlvbi1sb2ckIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0bmFtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0bmFtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClzZXJ2aWNlYWNjb3VudCQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2VucyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0b2tlbnMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9zZWNyZXQtdm9sdW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlY3JldC12b2x1bWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9jb25maWdtYXAtdm9sdW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWNvbmZpZ21hcC12b2x1bWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJzZWNyZXQtdGVzdCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogInJlZ2lzdHJ5Lms4cy5pby9lMmUtdGVzdC1pbWFnZXMvYWduaG9zdDoyLjQwIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiOiAicG9kLXNlY3JldHMtZGY0NzM3MDYtOWExMy00NzU5LTg0YmQtZWVhNmVkMmQ3YjYxIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJlbXB0eWRpci13cmFwcGVyLTk2NDEiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDQzNmQ5Mzk5MzRhMjliM2Q1OTc5MzUzNGZmOTNlMTk5Zjk0MzhmOWI5NDFlMTNhZTYzMjE1ZjE2N2M0OTNiODpiZjFjN2YxZjlmN2Y5OTVhYTk2YjBjMGViNTQzOTJkYjRlYzc3OTNlZWI1MzJiNDM4MmI1M2Y3MDA0NDQ2MzVmOjEyNzYyNjJiOTEwNGYxODY3MDQxMGNjYWU1M2JhMzJjM2QyMTk1ZWIxMTdjZWRhZmI2N2YyNTliODljZDRkN2E6Y2Y1NDMyMWYwOWNlNDk3OTNiMTNmMGExYjlmMjVjODY5M2Q0NDY2ZDRjMTg1MWRmMjZlNWM3ZWYyODJlMTg1NjphNzA0ZmIwMDZlOTY3YWY5ODExMTJmNDYxODZiZjZiM2RjM2RmYzlmMWVkNjI2MTRlZTlmZGM4MTEzMDU3NGRlOjZhNzBkN2FkZGU0YmYzNTdlNDczNGQ0ZmFkODgxNjA5MjAwZmEzZWJiMjc5MmYyYmFjMGUzYmNhODMxYjRjMjI6ZTIyNGU1M2ZjY2FkYTdjOTYyNzE0YjM4ZmM2YjQzZWVjNTU2NGVkMzUwMWI1MzE4ODQxMmRlYzU1Y2E5ZTRjMTplZWY2NTNmOTVjYTMyNjUyYjg3ZTY3NmMwYTM3YzBmMjA0ZTU4MTQ1ZDg2NmI0YzY4YmUwZWYzZGQzNmI0MjExOmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiMTFlYmM1M2RmY2YwMDhkZGFjZjQ1ZWU2NjM5ZGI1OGRmNDY2ZWQ3OTc1ZTAxMGI0N2EyMTYyMmQ2NzA0OGY2MDo4MzUyMmEzODhmZGY3YTIwZTVjMDU1YjNkOGRhN2E3NzI2ZmIwNGI3MTZiN2M1MjI4YmUzOTllNzgyMjA0NGI5OjZjN2VhMGY2YzQ4MTE3ZWYwYjVhMjVkMDhlNzAzMzE5NDY2NTU5NGFhYWQxODJjNWQ3MjI2Nzg4ZTc3OWJmMDg6NTY4ZDkxMTFiNTc5YTllYjY2MWVkNzk3OGVjYjQ5YjAzNTFmOGZiN2M5ODcxMjkwYmU0ZWMzYjVmODVhMDdhOTpjMGNkZTQwOTFlMjBiYjI2NGM1OTI4ZmNjZjNlMzE1N2Y4ODBkODY0ZGYzZmMzMjFiYjlmNmI1YzM1ZjllNGU0OjM1OTkyZTJjYWJhOTYyZmMwZDNjYmIyMmYyMzhiYmU1MmJlMGQ1NDRiM2IzYTllYjI4N2Q2YmZkOTdmYTdkZjI6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMTphZjMxZTY1MWVkZDFmMjViZDgzOTQzNGI2ZDYwNTYyYmNiZDkwNzFlYzUxNmY0MWM2YjJlZmIyOWU4NDBjNDNlOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJwb2Qtc2VjcmV0cy1kZjQ3MzcwNi05YTEzLTQ3NTktODRiZC1lZWE2ZWQyZDdiNjEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImVtcHR5ZGlyLXdyYXBwZXItOTY0MSIsCiAgICAgICAgICAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSI6ICJeL3Zhci9ydW4vbmV0bnMvY25pLVswLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2Mva2NvcmUiLAogICAgICAgICAgICAiL3Byb2Mva2V5cyIsCiAgICAgICAgICAgICIvcHJvYy9sYXRlbmN5X3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX2xpc3QiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2Mvc2NoZWRfZGVidWciLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIgogICAgICAgICAgXSwKICAgICAgICAgICJSZWFkb25seVBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNWE1YWFkODAwNTVmZjIwMDEyYTUwZGMyNWY4ZGY3YTI5OTI0NDc0MzI0ZDY1ZjdkNTMwNmVlOGVlMjdmZjcxZCIsCiAgICAgICAgICAgICI4MTcyNTBmMWEzZTMzNmRhNzZmNWJkM2ZhNzg0ZTFiMjZkOTU5YjljMTMxODc2ODE1YmEyNjA0MDQ4YjcwYzE4IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICIvYWduaG9zdCIsCiAgICAgICAgICAgICJ0ZXN0LXdlYnNlcnZlciIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgICAiSE9TVE5BTUU9JChob3N0LW5hbWUpIgogICAgICAgICAgXSwKICAgICAgICAgICJDd2QiOiAiLyIsCiAgICAgICAgICAiQ2FwYWJpbGl0aWVzIjogewogICAgICAgICAgICAiQW1iaWVudCI6IFtdLAogICAgICAgICAgICAiQm91bmRpbmciOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkVmZmVjdGl2ZSI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiSW5oZXJpdGFibGUiOiBbXSwKICAgICAgICAgICAgIlBlcm1pdHRlZCI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgIk5vTmV3UHJpdmlsZWdlcyI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cy9mcy9jZ3JvdXAiLAogICAgICAgICAgICAic291cmNlIjogImNncm91cCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJjZ3JvdXAiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJyZWxhdGltZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXJtaW5hdGlvbi1sb2ckIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0bmFtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0bmFtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClzZXJ2aWNlYWNjb3VudCQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2VucyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0b2tlbnMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9zZWNyZXQtdm9sdW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlY3JldC12b2x1bWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9jb25maWdtYXAtdm9sdW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWNvbmZpZ21hcC12b2x1bWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJzZWNyZXQtdGVzdCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogInJlZ2lzdHJ5Lms4cy5pby9lMmUtdGVzdC1pbWFnZXMvYWduaG9zdDoyLjQwIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiOiAicG9kLXNlY3JldHMtZGY0NzM3MDYtOWExMy00NzU5LTg0YmQtZWVhNmVkMmQ3YjYxIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJlbXB0eWRpci13cmFwcGVyLTk2NDEiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDQzNmQ5Mzk5MzRhMjliM2Q1OTc5MzUzNGZmOTNlMTk5Zjk0MzhmOWI5NDFlMTNhZTYzMjE1ZjE2N2M0OTNiODpiZjFjN2YxZjlmN2Y5OTVhYTk2YjBjMGViNTQzOTJkYjRlYzc3OTNlZWI1MzJiNDM4MmI1M2Y3MDA0NDQ2MzVmOjEyNzYyNjJiOTEwNGYxODY3MDQxMGNjYWU1M2JhMzJjM2QyMTk1ZWIxMTdjZWRhZmI2N2YyNTliODljZDRkN2E6Y2Y1NDMyMWYwOWNlNDk3OTNiMTNmMGExYjlmMjVjODY5M2Q0NDY2ZDRjMTg1MWRmMjZlNWM3ZWYyODJlMTg1NjphNzA0ZmIwMDZlOTY3YWY5ODExMTJmNDYxODZiZjZiM2RjM2RmYzlmMWVkNjI2MTRlZTlmZGM4MTEzMDU3NGRlOjZhNzBkN2FkZGU0YmYzNTdlNDczNGQ0ZmFkODgxNjA5MjAwZmEzZWJiMjc5MmYyYmFjMGUzYmNhODMxYjRjMjI6ZTIyNGU1M2ZjY2FkYTdjOTYyNzE0YjM4ZmM2YjQzZWVjNTU2NGVkMzUwMWI1MzE4ODQxMmRlYzU1Y2E5ZTRjMTplZWY2NTNmOTVjYTMyNjUyYjg3ZTY3NmMwYTM3YzBmMjA0ZTU4MTQ1ZDg2NmI0YzY4YmUwZWYzZGQzNmI0MjExOmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiMTFlYmM1M2RmY2YwMDhkZGFjZjQ1ZWU2NjM5ZGI1OGRmNDY2ZWQ3OTc1ZTAxMGI0N2EyMTYyMmQ2NzA0OGY2MDo4MzUyMmEzODhmZGY3YTIwZTVjMDU1YjNkOGRhN2E3NzI2ZmIwNGI3MTZiN2M1MjI4YmUzOTllNzgyMjA0NGI5OjZjN2VhMGY2YzQ4MTE3ZWYwYjVhMjVkMDhlNzAzMzE5NDY2NTU5NGFhYWQxODJjNWQ3MjI2Nzg4ZTc3OWJmMDg6NTY4ZDkxMTFiNTc5YTllYjY2MWVkNzk3OGVjYjQ5YjAzNTFmOGZiN2M5ODcxMjkwYmU0ZWMzYjVmODVhMDdhOTpjMGNkZTQwOTFlMjBiYjI2NGM1OTI4ZmNjZjNlMzE1N2Y4ODBkODY0ZGYzZmMzMjFiYjlmNmI1YzM1ZjllNGU0OjM1OTkyZTJjYWJhOTYyZmMwZDNjYmIyMmYyMzhiYmU1MmJlMGQ1NDRiM2IzYTllYjI4N2Q2YmZkOTdmYTdkZjI6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMToyOTZjZTFlNTJiNjFkMzFjODE4M2VmMDlmODVmMzAwY2NlYWRmNDE5N2RhMWQ1YjFhYWUyYzMyYTZjZjRiOTAwOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= spec: runtimeClassName: kata-cc containers: diff --git a/src/agent/samples/policy/yaml/webhook/webhook-pod6.yaml b/src/agent/samples/policy/yaml/webhook/webhook-pod6.yaml index a7a58f98ad58..dc3953dc666b 100644 --- a/src/agent/samples/policy/yaml/webhook/webhook-pod6.yaml +++ b/src/agent/samples/policy/yaml/webhook/webhook-pod6.yaml @@ -58,7 +58,7 @@ metadata: name: pod-projected-secrets-c64e2cb2-f7ba-418d-a63b-27f49707ea3d namespace: projected-943 annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJwb2QtcHJvamVjdGVkLXNlY3JldHMtYzY0ZTJjYjItZjdiYS00MThkLWE2M2ItMjdmNDk3MDdlYTNkIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJwcm9qZWN0ZWQtOTQzIiwKICAgICAgICAgICJuZXJkY3RsL25ldHdvcmstbmFtZXNwYWNlIjogIl4vdmFyL3J1bi9uZXRucy9jbmktWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI1YTVhYWQ4MDA1NWZmMjAwMTJhNTBkYzI1ZjhkZjdhMjk5MjQ0NzQzMjRkNjVmN2Q1MzA2ZWU4ZWUyN2ZmNzFkIiwKICAgICAgICAgICAgIjgxNzI1MGYxYTNlMzM2ZGE3NmY1YmQzZmE3ODRlMWIyNmQ5NTliOWMxMzE4NzY4MTViYTI2MDQwNDhiNzBjMTgiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgInNoIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Byb2plY3RlZC1zZWNyZXQtdm9sdW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXByb2plY3RlZC1zZWNyZXQtdm9sdW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIkFubm90YXRpb25zIjogewogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiOiAiL3J1bi9jb250YWluZXJkL2lvLmNvbnRhaW5lcmQucnVudGltZS52Mi50YXNrL2s4cy5pby8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiOiAicG9kX2NvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiOiAicHJvamVjdGVkLXNlY3JldC12b2x1bWUtdGVzdCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogInJlZ2lzdHJ5Lms4cy5pby9lMmUtdGVzdC1pbWFnZXMvYWduaG9zdDoyLjQwIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiOiAicG9kLXByb2plY3RlZC1zZWNyZXRzLWM2NGUyY2IyLWY3YmEtNDE4ZC1hNjNiLTI3ZjQ5NzA3ZWEzZCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAicHJvamVjdGVkLTk0MyIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g3KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g4KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjgpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIwNDM2ZDkzOTkzNGEyOWIzZDU5NzkzNTM0ZmY5M2UxOTlmOTQzOGY5Yjk0MWUxM2FlNjMyMTVmMTY3YzQ5M2I4OmJmMWM3ZjFmOWY3Zjk5NWFhOTZiMGMwZWI1NDM5MmRiNGVjNzc5M2VlYjUzMmI0MzgyYjUzZjcwMDQ0NDYzNWY6MTI3NjI2MmI5MTA0ZjE4NjcwNDEwY2NhZTUzYmEzMmMzZDIxOTVlYjExN2NlZGFmYjY3ZjI1OWI4OWNkNGQ3YTpjZjU0MzIxZjA5Y2U0OTc5M2IxM2YwYTFiOWYyNWM4NjkzZDQ0NjZkNGMxODUxZGYyNmU1YzdlZjI4MmUxODU2OmE3MDRmYjAwNmU5NjdhZjk4MTExMmY0NjE4NmJmNmIzZGMzZGZjOWYxZWQ2MjYxNGVlOWZkYzgxMTMwNTc0ZGU6NmE3MGQ3YWRkZTRiZjM1N2U0NzM0ZDRmYWQ4ODE2MDkyMDBmYTNlYmIyNzkyZjJiYWMwZTNiY2E4MzFiNGMyMjplMjI0ZTUzZmNjYWRhN2M5NjI3MTRiMzhmYzZiNDNlZWM1NTY0ZWQzNTAxYjUzMTg4NDEyZGVjNTVjYTllNGMxOmVlZjY1M2Y5NWNhMzI2NTJiODdlNjc2YzBhMzdjMGYyMDRlNTgxNDVkODY2YjRjNjhiZTBlZjNkZDM2YjQyMTE6ZGE1OTgwYTdlMzQzNDQwOWRhMTIzMjQxN2ExZDFjYzAyOTY3YjYyYTA5OTUwMmNhY2QxM2NjMmUzNDIwNmZhNCIsCiAgICAgICAgICAgICIxMWViYzUzZGZjZjAwOGRkYWNmNDVlZTY2MzlkYjU4ZGY0NjZlZDc5NzVlMDEwYjQ3YTIxNjIyZDY3MDQ4ZjYwOjgzNTIyYTM4OGZkZjdhMjBlNWMwNTViM2Q4ZGE3YTc3MjZmYjA0YjcxNmI3YzUyMjhiZTM5OWU3ODIyMDQ0Yjk6NmM3ZWEwZjZjNDgxMTdlZjBiNWEyNWQwOGU3MDMzMTk0NjY1NTk0YWFhZDE4MmM1ZDcyMjY3ODhlNzc5YmYwODo1NjhkOTExMWI1NzlhOWViNjYxZWQ3OTc4ZWNiNDliMDM1MWY4ZmI3Yzk4NzEyOTBiZTRlYzNiNWY4NWEwN2E5OmMwY2RlNDA5MWUyMGJiMjY0YzU5MjhmY2NmM2UzMTU3Zjg4MGQ4NjRkZjNmYzMyMWJiOWY2YjVjMzVmOWU0ZTQ6MzU5OTJlMmNhYmE5NjJmYzBkM2NiYjIyZjIzOGJiZTUyYmUwZDU0NGIzYjNhOWViMjg3ZDZiZmQ5N2ZhN2RmMjpiMTFlYzIyOTA1OTc1OTcxMzVhOTFkZjg0ODEyODc0N2JhNzY4YWQzZmNhZjBiYjc1MGIyOTIxNmUyZTNjMmQxOmFmMzFlNjUxZWRkMWYyNWJkODM5NDM0YjZkNjA1NjJiY2JkOTA3MWVjNTE2ZjQxYzZiMmVmYjI5ZTg0MGM0M2U6MjU0YzUzMTQ4NzNjMjdhOGRlM2RiNTM0N2Y1NmViZDllYjJiZjQ2Y2M4ODEyYTQzNjExZjk4ZTM4YWMzN2JhMiIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJwb2QtcHJvamVjdGVkLXNlY3JldHMtYzY0ZTJjYjItZjdiYS00MThkLWE2M2ItMjdmNDk3MDdlYTNkIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJwcm9qZWN0ZWQtOTQzIiwKICAgICAgICAgICJuZXJkY3RsL25ldHdvcmstbmFtZXNwYWNlIjogIl4vdmFyL3J1bi9uZXRucy9jbmktWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI1YTVhYWQ4MDA1NWZmMjAwMTJhNTBkYzI1ZjhkZjdhMjk5MjQ0NzQzMjRkNjVmN2Q1MzA2ZWU4ZWUyN2ZmNzFkIiwKICAgICAgICAgICAgIjgxNzI1MGYxYTNlMzM2ZGE3NmY1YmQzZmE3ODRlMWIyNmQ5NTliOWMxMzE4NzY4MTViYTI2MDQwNDhiNzBjMTgiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgInNoIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Byb2plY3RlZC1zZWNyZXQtdm9sdW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXByb2plY3RlZC1zZWNyZXQtdm9sdW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIkFubm90YXRpb25zIjogewogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiOiAiL3J1bi9jb250YWluZXJkL2lvLmNvbnRhaW5lcmQucnVudGltZS52Mi50YXNrL2s4cy5pby8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiOiAicG9kX2NvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiOiAicHJvamVjdGVkLXNlY3JldC12b2x1bWUtdGVzdCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogInJlZ2lzdHJ5Lms4cy5pby9lMmUtdGVzdC1pbWFnZXMvYWduaG9zdDoyLjQwIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiOiAicG9kLXByb2plY3RlZC1zZWNyZXRzLWM2NGUyY2IyLWY3YmEtNDE4ZC1hNjNiLTI3ZjQ5NzA3ZWEzZCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAicHJvamVjdGVkLTk0MyIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g3KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g4KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjgpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIwNDM2ZDkzOTkzNGEyOWIzZDU5NzkzNTM0ZmY5M2UxOTlmOTQzOGY5Yjk0MWUxM2FlNjMyMTVmMTY3YzQ5M2I4OmJmMWM3ZjFmOWY3Zjk5NWFhOTZiMGMwZWI1NDM5MmRiNGVjNzc5M2VlYjUzMmI0MzgyYjUzZjcwMDQ0NDYzNWY6MTI3NjI2MmI5MTA0ZjE4NjcwNDEwY2NhZTUzYmEzMmMzZDIxOTVlYjExN2NlZGFmYjY3ZjI1OWI4OWNkNGQ3YTpjZjU0MzIxZjA5Y2U0OTc5M2IxM2YwYTFiOWYyNWM4NjkzZDQ0NjZkNGMxODUxZGYyNmU1YzdlZjI4MmUxODU2OmE3MDRmYjAwNmU5NjdhZjk4MTExMmY0NjE4NmJmNmIzZGMzZGZjOWYxZWQ2MjYxNGVlOWZkYzgxMTMwNTc0ZGU6NmE3MGQ3YWRkZTRiZjM1N2U0NzM0ZDRmYWQ4ODE2MDkyMDBmYTNlYmIyNzkyZjJiYWMwZTNiY2E4MzFiNGMyMjplMjI0ZTUzZmNjYWRhN2M5NjI3MTRiMzhmYzZiNDNlZWM1NTY0ZWQzNTAxYjUzMTg4NDEyZGVjNTVjYTllNGMxOmVlZjY1M2Y5NWNhMzI2NTJiODdlNjc2YzBhMzdjMGYyMDRlNTgxNDVkODY2YjRjNjhiZTBlZjNkZDM2YjQyMTE6ZGE1OTgwYTdlMzQzNDQwOWRhMTIzMjQxN2ExZDFjYzAyOTY3YjYyYTA5OTUwMmNhY2QxM2NjMmUzNDIwNmZhNCIsCiAgICAgICAgICAgICIxMWViYzUzZGZjZjAwOGRkYWNmNDVlZTY2MzlkYjU4ZGY0NjZlZDc5NzVlMDEwYjQ3YTIxNjIyZDY3MDQ4ZjYwOjgzNTIyYTM4OGZkZjdhMjBlNWMwNTViM2Q4ZGE3YTc3MjZmYjA0YjcxNmI3YzUyMjhiZTM5OWU3ODIyMDQ0Yjk6NmM3ZWEwZjZjNDgxMTdlZjBiNWEyNWQwOGU3MDMzMTk0NjY1NTk0YWFhZDE4MmM1ZDcyMjY3ODhlNzc5YmYwODo1NjhkOTExMWI1NzlhOWViNjYxZWQ3OTc4ZWNiNDliMDM1MWY4ZmI3Yzk4NzEyOTBiZTRlYzNiNWY4NWEwN2E5OmMwY2RlNDA5MWUyMGJiMjY0YzU5MjhmY2NmM2UzMTU3Zjg4MGQ4NjRkZjNmYzMyMWJiOWY2YjVjMzVmOWU0ZTQ6MzU5OTJlMmNhYmE5NjJmYzBkM2NiYjIyZjIzOGJiZTUyYmUwZDU0NGIzYjNhOWViMjg3ZDZiZmQ5N2ZhN2RmMjpiMTFlYzIyOTA1OTc1OTcxMzVhOTFkZjg0ODEyODc0N2JhNzY4YWQzZmNhZjBiYjc1MGIyOTIxNmUyZTNjMmQxOjI5NmNlMWU1MmI2MWQzMWM4MTgzZWYwOWY4NWYzMDBjY2VhZGY0MTk3ZGExZDViMWFhZTJjMzJhNmNmNGI5MDA6MjU0YzUzMTQ4NzNjMjdhOGRlM2RiNTM0N2Y1NmViZDllYjJiZjQ2Y2M4ODEyYTQzNjExZjk4ZTM4YWMzN2JhMiIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== spec: containers: - command: diff --git a/src/agent/samples/policy/yaml/webhook/webhook-pod7.yaml b/src/agent/samples/policy/yaml/webhook/webhook-pod7.yaml index 75240971bff4..525c967ee6bc 100644 --- a/src/agent/samples/policy/yaml/webhook/webhook-pod7.yaml +++ b/src/agent/samples/policy/yaml/webhook/webhook-pod7.yaml @@ -52,7 +52,7 @@ metadata: name: test-pod-98011b43-2060-4473-a3bd-c5622997e4a7 namespace: svcaccounts-8341 annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJ0ZXN0LXBvZC05ODAxMWI0My0yMDYwLTQ0NzMtYTNiZC1jNTYyMjk5N2U0YTciLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogInN2Y2FjY291bnRzLTgzNDEiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAic2giCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi90ZXN0LXZvbHVtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXN0LXZvbHVtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImFnbmhvc3QtY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuNDAiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJ0ZXN0LXBvZC05ODAxMWI0My0yMDYwLTQ0NzMtYTNiZC1jNTYyMjk5N2U0YTciLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogInN2Y2FjY291bnRzLTgzNDEiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDQzNmQ5Mzk5MzRhMjliM2Q1OTc5MzUzNGZmOTNlMTk5Zjk0MzhmOWI5NDFlMTNhZTYzMjE1ZjE2N2M0OTNiODpiZjFjN2YxZjlmN2Y5OTVhYTk2YjBjMGViNTQzOTJkYjRlYzc3OTNlZWI1MzJiNDM4MmI1M2Y3MDA0NDQ2MzVmOjEyNzYyNjJiOTEwNGYxODY3MDQxMGNjYWU1M2JhMzJjM2QyMTk1ZWIxMTdjZWRhZmI2N2YyNTliODljZDRkN2E6Y2Y1NDMyMWYwOWNlNDk3OTNiMTNmMGExYjlmMjVjODY5M2Q0NDY2ZDRjMTg1MWRmMjZlNWM3ZWYyODJlMTg1NjphNzA0ZmIwMDZlOTY3YWY5ODExMTJmNDYxODZiZjZiM2RjM2RmYzlmMWVkNjI2MTRlZTlmZGM4MTEzMDU3NGRlOjZhNzBkN2FkZGU0YmYzNTdlNDczNGQ0ZmFkODgxNjA5MjAwZmEzZWJiMjc5MmYyYmFjMGUzYmNhODMxYjRjMjI6ZTIyNGU1M2ZjY2FkYTdjOTYyNzE0YjM4ZmM2YjQzZWVjNTU2NGVkMzUwMWI1MzE4ODQxMmRlYzU1Y2E5ZTRjMTplZWY2NTNmOTVjYTMyNjUyYjg3ZTY3NmMwYTM3YzBmMjA0ZTU4MTQ1ZDg2NmI0YzY4YmUwZWYzZGQzNmI0MjExOmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiMTFlYmM1M2RmY2YwMDhkZGFjZjQ1ZWU2NjM5ZGI1OGRmNDY2ZWQ3OTc1ZTAxMGI0N2EyMTYyMmQ2NzA0OGY2MDo4MzUyMmEzODhmZGY3YTIwZTVjMDU1YjNkOGRhN2E3NzI2ZmIwNGI3MTZiN2M1MjI4YmUzOTllNzgyMjA0NGI5OjZjN2VhMGY2YzQ4MTE3ZWYwYjVhMjVkMDhlNzAzMzE5NDY2NTU5NGFhYWQxODJjNWQ3MjI2Nzg4ZTc3OWJmMDg6NTY4ZDkxMTFiNTc5YTllYjY2MWVkNzk3OGVjYjQ5YjAzNTFmOGZiN2M5ODcxMjkwYmU0ZWMzYjVmODVhMDdhOTpjMGNkZTQwOTFlMjBiYjI2NGM1OTI4ZmNjZjNlMzE1N2Y4ODBkODY0ZGYzZmMzMjFiYjlmNmI1YzM1ZjllNGU0OjM1OTkyZTJjYWJhOTYyZmMwZDNjYmIyMmYyMzhiYmU1MmJlMGQ1NDRiM2IzYTllYjI4N2Q2YmZkOTdmYTdkZjI6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMTphZjMxZTY1MWVkZDFmMjViZDgzOTQzNGI2ZDYwNTYyYmNiZDkwNzFlYzUxNmY0MWM2YjJlZmIyOWU4NDBjNDNlOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJ0ZXN0LXBvZC05ODAxMWI0My0yMDYwLTQ0NzMtYTNiZC1jNTYyMjk5N2U0YTciLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogInN2Y2FjY291bnRzLTgzNDEiLAogICAgICAgICAgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiOiAiXi92YXIvcnVuL25ldG5zL2NuaS1bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kIgogICAgICAgIH0sCiAgICAgICAgIkxpbnV4IjogewogICAgICAgICAgIk5hbWVzcGFjZXMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJpcGMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogInV0cyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAibW91bnQiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJNYXNrZWRQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2FjcGkiLAogICAgICAgICAgICAiL3Byb2MvYXNvdW5kIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiLAogICAgICAgICAgICAiL3Byb2Mvc2NzaSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2J1cyIsCiAgICAgICAgICAgICIvcHJvYy9mcyIsCiAgICAgICAgICAgICIvcHJvYy9pcnEiLAogICAgICAgICAgICAiL3Byb2Mvc3lzIiwKICAgICAgICAgICAgIi9wcm9jL3N5c3JxLXRyaWdnZXIiCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RvcmFnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJibGsiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogInRhciIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIiQoaGFzaDApIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGxheWVyMCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJvdmVybGF5ZnMiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogIiIsCiAgICAgICAgICAiZnN0eXBlIjogImZ1c2UzLmthdGEtb3ZlcmxheSIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIjVhNWFhZDgwMDU1ZmYyMDAxMmE1MGRjMjVmOGRmN2EyOTkyNDQ3NDMyNGQ2NWY3ZDUzMDZlZThlZTI3ZmY3MWQiLAogICAgICAgICAgICAiODE3MjUwZjFhM2UzMzZkYTc2ZjViZDNmYTc4NGUxYjI2ZDk1OWI5YzEzMTg3NjgxNWJhMjYwNDA0OGI3MGMxOCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0sCiAgICB7CiAgICAgICJPQ0kiOiB7CiAgICAgICAgIlZlcnNpb24iOiAiMS4xLjAtcmMuMSIsCiAgICAgICAgIlByb2Nlc3MiOiB7CiAgICAgICAgICAiVGVybWluYWwiOiBmYWxzZSwKICAgICAgICAgICJVc2VyIjogewogICAgICAgICAgICAiVUlEIjogMCwKICAgICAgICAgICAgIkdJRCI6IDAsCiAgICAgICAgICAgICJBZGRpdGlvbmFsR2lkcyI6IFtdLAogICAgICAgICAgICAiVXNlcm5hbWUiOiAiIgogICAgICAgICAgfSwKICAgICAgICAgICJBcmdzIjogWwogICAgICAgICAgICAic2giCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi90ZXN0LXZvbHVtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXN0LXZvbHVtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImFnbmhvc3QtY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9hZ25ob3N0OjIuNDAiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiOiAiXlthLXowLTldezY0fSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJ0ZXN0LXBvZC05ODAxMWI0My0yMDYwLTQ0NzMtYTNiZC1jNTYyMjk5N2U0YTciLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogInN2Y2FjY291bnRzLTgzNDEiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMDQzNmQ5Mzk5MzRhMjliM2Q1OTc5MzUzNGZmOTNlMTk5Zjk0MzhmOWI5NDFlMTNhZTYzMjE1ZjE2N2M0OTNiODpiZjFjN2YxZjlmN2Y5OTVhYTk2YjBjMGViNTQzOTJkYjRlYzc3OTNlZWI1MzJiNDM4MmI1M2Y3MDA0NDQ2MzVmOjEyNzYyNjJiOTEwNGYxODY3MDQxMGNjYWU1M2JhMzJjM2QyMTk1ZWIxMTdjZWRhZmI2N2YyNTliODljZDRkN2E6Y2Y1NDMyMWYwOWNlNDk3OTNiMTNmMGExYjlmMjVjODY5M2Q0NDY2ZDRjMTg1MWRmMjZlNWM3ZWYyODJlMTg1NjphNzA0ZmIwMDZlOTY3YWY5ODExMTJmNDYxODZiZjZiM2RjM2RmYzlmMWVkNjI2MTRlZTlmZGM4MTEzMDU3NGRlOjZhNzBkN2FkZGU0YmYzNTdlNDczNGQ0ZmFkODgxNjA5MjAwZmEzZWJiMjc5MmYyYmFjMGUzYmNhODMxYjRjMjI6ZTIyNGU1M2ZjY2FkYTdjOTYyNzE0YjM4ZmM2YjQzZWVjNTU2NGVkMzUwMWI1MzE4ODQxMmRlYzU1Y2E5ZTRjMTplZWY2NTNmOTVjYTMyNjUyYjg3ZTY3NmMwYTM3YzBmMjA0ZTU4MTQ1ZDg2NmI0YzY4YmUwZWYzZGQzNmI0MjExOmRhNTk4MGE3ZTM0MzQ0MDlkYTEyMzI0MTdhMWQxY2MwMjk2N2I2MmEwOTk1MDJjYWNkMTNjYzJlMzQyMDZmYTQiLAogICAgICAgICAgICAiMTFlYmM1M2RmY2YwMDhkZGFjZjQ1ZWU2NjM5ZGI1OGRmNDY2ZWQ3OTc1ZTAxMGI0N2EyMTYyMmQ2NzA0OGY2MDo4MzUyMmEzODhmZGY3YTIwZTVjMDU1YjNkOGRhN2E3NzI2ZmIwNGI3MTZiN2M1MjI4YmUzOTllNzgyMjA0NGI5OjZjN2VhMGY2YzQ4MTE3ZWYwYjVhMjVkMDhlNzAzMzE5NDY2NTU5NGFhYWQxODJjNWQ3MjI2Nzg4ZTc3OWJmMDg6NTY4ZDkxMTFiNTc5YTllYjY2MWVkNzk3OGVjYjQ5YjAzNTFmOGZiN2M5ODcxMjkwYmU0ZWMzYjVmODVhMDdhOTpjMGNkZTQwOTFlMjBiYjI2NGM1OTI4ZmNjZjNlMzE1N2Y4ODBkODY0ZGYzZmMzMjFiYjlmNmI1YzM1ZjllNGU0OjM1OTkyZTJjYWJhOTYyZmMwZDNjYmIyMmYyMzhiYmU1MmJlMGQ1NDRiM2IzYTllYjI4N2Q2YmZkOTdmYTdkZjI6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMToyOTZjZTFlNTJiNjFkMzFjODE4M2VmMDlmODVmMzAwY2NlYWRmNDE5N2RhMWQ1YjFhYWUyYzMyYTZjZjRiOTAwOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= spec: containers: - command: diff --git a/src/agent/samples/policy/yaml/webhook3/dns-test.yaml b/src/agent/samples/policy/yaml/webhook3/dns-test.yaml index ea5aa30f2cf9..b033272d97db 100644 --- a/src/agent/samples/policy/yaml/webhook3/dns-test.yaml +++ b/src/agent/samples/policy/yaml/webhook3/dns-test.yaml @@ -13,7 +13,7 @@ metadata: resourceVersion: "1055416" uid: 8a84dffd-88a8-4a20-8558-5c3081215436 annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJkbnMtdGVzdC1mODgwZTczZi0xNzE4LTQ0NTUtOWE3OC03NjY2NzllMjI0NzEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRucy05OTg4IiwKICAgICAgICAgICJuZXJkY3RsL25ldHdvcmstbmFtZXNwYWNlIjogIl4vdmFyL3J1bi9uZXRucy9jbmktWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI1YTVhYWQ4MDA1NWZmMjAwMTJhNTBkYzI1ZjhkZjdhMjk5MjQ0NzQzMjRkNjVmN2Q1MzA2ZWU4ZWUyN2ZmNzFkIiwKICAgICAgICAgICAgIjgxNzI1MGYxYTNlMzM2ZGE3NmY1YmQzZmE3ODRlMWIyNmQ5NTliOWMxMzE4NzY4MTViYTI2MDQwNDhiNzBjMTgiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9hZ25ob3N0IiwKICAgICAgICAgICAgInRlc3Qtd2Vic2VydmVyIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcmVzdWx0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAibG9jYWwiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJ3ZWJzZXJ2ZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJyZWdpc3RyeS5rOHMuaW8vZTJlLXRlc3QtaW1hZ2VzL2Fnbmhvc3Q6Mi40MyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogImRucy10ZXN0LWY4ODBlNzNmLTE3MTgtNDQ1NS05YTc4LTc2NjY3OWUyMjQ3MSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZG5zLTk5ODgiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI5KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNTFmMWQ1ZGY5ZTViNjQ2MzI3NzljOTk2YTNhYmI5YjMyY2M2OWM3NmUwYzE3NjIwZWQ2Y2VmZjE1ZDNmMjgxYTpiZjRkMDE0N2YzYWJlYTU1NTUwYThhNjEyYmRjMTE0NGI5Njk2NmQ1MjBjMjY3ZTE1NTE2ZDUxNTdjYjM5YmFiOmIxYmI1N2EzZTVkMDYyZjlhM2RlNGZlMWMyYWQyMzI4MjMzYTY4MTdhYTA0YmIyOGY4M2I4NmQ4MTQ1MmFmNWI6ZGFlZDcxN2VmMjEwMDY3NDIyYzkyN2M0ZWRmMjIwYzQzM2E4MDcwY2Q3ZjBhYzA5YzQ1MDc5ZGEyNDc1YzRmMzplMWY2OTc5Yjg2YzhlYWUxMGM2OGMxOWYzYjA1MDMyZGZhYjFkNzcwMTgyNzI5YWRiM2Q4MDhjNzBmN2I5ZjdmOjE1MzVmNzhhMDdkNTI0MDVhZDczMTdjYmZjZWRmMDRkNjAwZGU0MGIxN2UzMWY1YWIyNTU2NjExMDA0YTViNWE6MTkxOGEwNTJmZmQyMDZlNDU5YTJhZGI3MWNhYmViZWYwMGNjZjc0NGMyMmRhNjRhOGQ4YTk0ZTA5M2Q2ODAzYjoyMDdlYTAwYjVkYWQwNDQ1YTZjNDY1ODI2ZjJmYjU3MTNiYjRkY2NhMzY5NTMxZTJhN2Y1OTVmNTM3Mzk1NTk2Ojk1MDBlNDY2MTdmYjQ1ODI4MjQ5MjFjZTIxZjU1YWVhYTk1YTMxOWJiMzRlYmZjMTE5MDQyYmRlMTk5OTZlZGI6ZGE1OTgwYTdlMzQzNDQwOWRhMTIzMjQxN2ExZDFjYzAyOTY3YjYyYTA5OTUwMmNhY2QxM2NjMmUzNDIwNmZhNCIsCiAgICAgICAgICAgICJlY2U1ZWYyMTZjNDAwNDdhY2NmMzhkM2E4YjE2ODk5ZDEzYjI3MTIwNjdkZDQ3OGEyMTc4Mzc4ZWM3ZmNiZmM2OjE3YTgzOGIwMjM0NzgyZWI3ZjZiY2FhMGZiMjhiZWY5ZjYzMDI2OGQyZTEyYzNiMjgwMjJkYWJmMWNkYmE4MTI6OTMxMGY0YjdjOGQ3MzBiZTA1NTA5NmZiOWUwZGJiNzk2NDliMDJkMDk3ODM3ZDY2MDlmOTIwOTdhYjgwODE5NDoxYTY0NDcxZjNlOTYzMDYwMjBmNTVmOGNmMTdhYjY5YmMyNjAzNzBkZmNjZjMyNjIwMDQyZmYyYzYwNjc2N2ZiOmY0ZDJiMjQ0ODQyZjA1ZjRiMWJlNzcwNjk0NjFlYmRjZTczOTQ1ZDQzMGIwNWY0OWFmOWM1NDBhN2FkNmZlZTE6YTcxZjAwZDI1OGFiZWU0MTBiYTkyMmI0YjU0YzMwZDdlYThkY2RjMDVhZTM0NWUzNWNlYjFlOGE3ZmIwZmRiOToyMTVhN2ViMGI0YWQ0ODRkNTk5Zjk0NWE1YWZiMzcwMDgxOGNiY2Y3OTc4N2M1OTMxY2IzM2UwYmQyZmE4ZGY1OmIxMWVjMjI5MDU5NzU5NzEzNWE5MWRmODQ4MTI4NzQ3YmE3NjhhZDNmY2FmMGJiNzUwYjI5MjE2ZTJlM2MyZDE6OWYxYTgyNDQ1OTAxMTU0Y2Y5OWVkNzZlMmIwMDc5N2FmYWZiZTJiMTQxMzYxNTFhYTBhN2RlYTU2YTVjOWY2MzoyNTRjNTMxNDg3M2MyN2E4ZGUzZGI1MzQ3ZjU2ZWJkOWViMmJmNDZjYzg4MTJhNDM2MTFmOThlMzhhYzM3YmEyIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJsb2NhbCIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAibG9jYWwiLAogICAgICAgICAgImZzdHlwZSI6ICJsb2NhbCIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIm1vZGU9MDc3NyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICJzaCIsCiAgICAgICAgICAgICItYyIsCiAgICAgICAgICAgICJmb3IgaSBpbiBgc2VxIDEgNjAwYDsgZG8gY2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2gga3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3VkcEBrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWw7Y2hlY2s9XCIkJChkaWcgK3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIGt1YmVybmV0ZXMuZGVmYXVsdC5zdmMuY2x1c3Rlci5sb2NhbCBBKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL3doZWV6eV90Y3BAa3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsO3NsZWVwIDE7IGRvbmUiCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9yZXN1bHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJeJChjcGF0aCkvJChzYW5kYm94LWlkKS9sb2NhbC9yZXN1bHRzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJsb2NhbCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogInF1ZXJpZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJyZWdpc3RyeS5rOHMuaW8vZTJlLXRlc3QtaW1hZ2VzL2Fnbmhvc3Q6Mi40MyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogImRucy10ZXN0LWY4ODBlNzNmLTE3MTgtNDQ1NS05YTc4LTc2NjY3OWUyMjQ3MSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZG5zLTk5ODgiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI5KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNTFmMWQ1ZGY5ZTViNjQ2MzI3NzljOTk2YTNhYmI5YjMyY2M2OWM3NmUwYzE3NjIwZWQ2Y2VmZjE1ZDNmMjgxYTpiZjRkMDE0N2YzYWJlYTU1NTUwYThhNjEyYmRjMTE0NGI5Njk2NmQ1MjBjMjY3ZTE1NTE2ZDUxNTdjYjM5YmFiOmIxYmI1N2EzZTVkMDYyZjlhM2RlNGZlMWMyYWQyMzI4MjMzYTY4MTdhYTA0YmIyOGY4M2I4NmQ4MTQ1MmFmNWI6ZGFlZDcxN2VmMjEwMDY3NDIyYzkyN2M0ZWRmMjIwYzQzM2E4MDcwY2Q3ZjBhYzA5YzQ1MDc5ZGEyNDc1YzRmMzplMWY2OTc5Yjg2YzhlYWUxMGM2OGMxOWYzYjA1MDMyZGZhYjFkNzcwMTgyNzI5YWRiM2Q4MDhjNzBmN2I5ZjdmOjE1MzVmNzhhMDdkNTI0MDVhZDczMTdjYmZjZWRmMDRkNjAwZGU0MGIxN2UzMWY1YWIyNTU2NjExMDA0YTViNWE6MTkxOGEwNTJmZmQyMDZlNDU5YTJhZGI3MWNhYmViZWYwMGNjZjc0NGMyMmRhNjRhOGQ4YTk0ZTA5M2Q2ODAzYjoyMDdlYTAwYjVkYWQwNDQ1YTZjNDY1ODI2ZjJmYjU3MTNiYjRkY2NhMzY5NTMxZTJhN2Y1OTVmNTM3Mzk1NTk2Ojk1MDBlNDY2MTdmYjQ1ODI4MjQ5MjFjZTIxZjU1YWVhYTk1YTMxOWJiMzRlYmZjMTE5MDQyYmRlMTk5OTZlZGI6ZGE1OTgwYTdlMzQzNDQwOWRhMTIzMjQxN2ExZDFjYzAyOTY3YjYyYTA5OTUwMmNhY2QxM2NjMmUzNDIwNmZhNCIsCiAgICAgICAgICAgICJlY2U1ZWYyMTZjNDAwNDdhY2NmMzhkM2E4YjE2ODk5ZDEzYjI3MTIwNjdkZDQ3OGEyMTc4Mzc4ZWM3ZmNiZmM2OjE3YTgzOGIwMjM0NzgyZWI3ZjZiY2FhMGZiMjhiZWY5ZjYzMDI2OGQyZTEyYzNiMjgwMjJkYWJmMWNkYmE4MTI6OTMxMGY0YjdjOGQ3MzBiZTA1NTA5NmZiOWUwZGJiNzk2NDliMDJkMDk3ODM3ZDY2MDlmOTIwOTdhYjgwODE5NDoxYTY0NDcxZjNlOTYzMDYwMjBmNTVmOGNmMTdhYjY5YmMyNjAzNzBkZmNjZjMyNjIwMDQyZmYyYzYwNjc2N2ZiOmY0ZDJiMjQ0ODQyZjA1ZjRiMWJlNzcwNjk0NjFlYmRjZTczOTQ1ZDQzMGIwNWY0OWFmOWM1NDBhN2FkNmZlZTE6YTcxZjAwZDI1OGFiZWU0MTBiYTkyMmI0YjU0YzMwZDdlYThkY2RjMDVhZTM0NWUzNWNlYjFlOGE3ZmIwZmRiOToyMTVhN2ViMGI0YWQ0ODRkNTk5Zjk0NWE1YWZiMzcwMDgxOGNiY2Y3OTc4N2M1OTMxY2IzM2UwYmQyZmE4ZGY1OmIxMWVjMjI5MDU5NzU5NzEzNWE5MWRmODQ4MTI4NzQ3YmE3NjhhZDNmY2FmMGJiNzUwYjI5MjE2ZTJlM2MyZDE6OWYxYTgyNDQ1OTAxMTU0Y2Y5OWVkNzZlMmIwMDc5N2FmYWZiZTJiMTQxMzYxNTFhYTBhN2RlYTU2YTVjOWY2MzoyNTRjNTMxNDg3M2MyN2E4ZGUzZGI1MzQ3ZjU2ZWJkOWViMmJmNDZjYzg4MTJhNDM2MTFmOThlMzhhYzM3YmEyIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJsb2NhbCIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAibG9jYWwiLAogICAgICAgICAgImZzdHlwZSI6ICJsb2NhbCIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIm1vZGU9MDc3NyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICJzaCIsCiAgICAgICAgICAgICItYyIsCiAgICAgICAgICAgICJmb3IgaSBpbiBgc2VxIDEgNjAwYDsgZG8gY2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2gga3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvamVzc2llX3VkcEBrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWw7Y2hlY2s9XCIkJChkaWcgK3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIGt1YmVybmV0ZXMuZGVmYXVsdC5zdmMuY2x1c3Rlci5sb2NhbCBBKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL2plc3NpZV90Y3BAa3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsO3NsZWVwIDE7IGRvbmUiCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9yZXN1bHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJeJChjcGF0aCkvJChzYW5kYm94LWlkKS9sb2NhbC9yZXN1bHRzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJsb2NhbCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImplc3NpZS1xdWVyaWVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9qZXNzaWUtZG5zdXRpbHM6MS43IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiOiAiZG5zLXRlc3QtZjg4MGU3M2YtMTcxOC00NDU1LTlhNzgtNzY2Njc5ZTIyNDcxIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkbnMtOTk4OCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIxMGI1NmM3NTY4OWIyZDNmZDM0ZGFiNTg2ZTI4NGM4OTE3YmFhN2YyNDQ1YjY0MzlkNzhhYjZkOTY0NWE2MGIzOmU1MDAwNDk2MTNlYjRlZjAyZTAzZTY1ODBlODBjNWE4MjY3MzBhOTQ0NTIxZGFmZjFlZWY3NzZiMmZjYzBmMjA6YWM4M2Y0YTM3MmIzNDAyMTkzZWEzMTRlYzdlOGE4N2I5MWM1OWM3M2UyM2JhNzljZWM5MmMxYTQxYzhhYWY1NDowYjJjNWMzYzQ2MzM4MjBiNWI0ZjZkNzdlYTIyYzVlZDBlM2QzYzMzMjA5MTY1YzJiMTgxNTg3YjJkOGJlMzEyOjczZmEwYWE5OTZhMzc0Y2M4NDY3MjhmNzI2MzkzY2ZjZmY0NmM5ODJkY2Y2MmQyZDI1OWY2MDA2ZGVlNWUyYmQ6MzVmNzhhZjEwYjYzNDAyYmI4OWRhMTYxNTEzZmE1NjM0NjViY2MxZDQzNDNjNGY3ZDQ5ODExZmY5YjcwZGRhOSIsCiAgICAgICAgICAgICIyYmRjMmZhZTNjODdhY2M2YTE4NjMzNmY4YjMwNjU1MDJkMWJlN2JjZmFhYzMyMTU3ZGZjNDhjNGI0YzFkN2Y2OmViZTYyMzg2NmFiMzcyYzUxMDFiYWFmNzY3YjI4MWRlNzEwMGI5MzQyNjk2YmNjODJmZjRmMDYxZjRiMTU5NjY6MjEzZjg0MGIxMDA2OTA4MDRhNzZhMWE5ZDNjZTNjMDUzMTM4MWIwYTc2MDc2MjU4MDNhNmY4NjcxMzQ0MTJkYjo2NzQ1MDA4MmFiNTZkYTFhZWNjNWVhZTJmMThkOTgwY2Q5ZTczMDZlNzkzMzRhMWE4MjZhOTFjZmQ5MDExNGE4OjA4NTllNTUzMWZkN2Y4YjE3MDcxNDE0YTA4MmFmYjY1YjJiZTcwMmVjZGFmYTAwN2RkMDU3N2FlYTg2Zjg1OTM6MDZmODljMjc1ZGMzNGYyNmI5ZGIwY2YwMTAyYjJhODk5ZGU2NTU1MTA1ODUyZDBhZjJiYjk1ZjM3NGY3MTQ0ZCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAibG9jYWwiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogImxvY2FsIiwKICAgICAgICAgICJmc3R5cGUiOiAibG9jYWwiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICJtb2RlPTA3NzciCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIl4kKGNwYXRoKS8kKHNhbmRib3gtaWQpL2xvY2FsL3Jlc3VsdHMkIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJkbnMtdGVzdC1mODgwZTczZi0xNzE4LTQ0NTUtOWE3OC03NjY2NzllMjI0NzEiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRucy05OTg4IiwKICAgICAgICAgICJuZXJkY3RsL25ldHdvcmstbmFtZXNwYWNlIjogIl4vdmFyL3J1bi9uZXRucy9jbmktWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI1YTVhYWQ4MDA1NWZmMjAwMTJhNTBkYzI1ZjhkZjdhMjk5MjQ0NzQzMjRkNjVmN2Q1MzA2ZWU4ZWUyN2ZmNzFkIiwKICAgICAgICAgICAgIjgxNzI1MGYxYTNlMzM2ZGE3NmY1YmQzZmE3ODRlMWIyNmQ5NTliOWMxMzE4NzY4MTViYTI2MDQwNDhiNzBjMTgiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9hZ25ob3N0IiwKICAgICAgICAgICAgInRlc3Qtd2Vic2VydmVyIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcmVzdWx0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAibG9jYWwiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJ3ZWJzZXJ2ZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJyZWdpc3RyeS5rOHMuaW8vZTJlLXRlc3QtaW1hZ2VzL2Fnbmhvc3Q6Mi40MyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogImRucy10ZXN0LWY4ODBlNzNmLTE3MTgtNDQ1NS05YTc4LTc2NjY3OWUyMjQ3MSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZG5zLTk5ODgiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI5KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNTFmMWQ1ZGY5ZTViNjQ2MzI3NzljOTk2YTNhYmI5YjMyY2M2OWM3NmUwYzE3NjIwZWQ2Y2VmZjE1ZDNmMjgxYTpiZjRkMDE0N2YzYWJlYTU1NTUwYThhNjEyYmRjMTE0NGI5Njk2NmQ1MjBjMjY3ZTE1NTE2ZDUxNTdjYjM5YmFiOmIxYmI1N2EzZTVkMDYyZjlhM2RlNGZlMWMyYWQyMzI4MjMzYTY4MTdhYTA0YmIyOGY4M2I4NmQ4MTQ1MmFmNWI6ZGFlZDcxN2VmMjEwMDY3NDIyYzkyN2M0ZWRmMjIwYzQzM2E4MDcwY2Q3ZjBhYzA5YzQ1MDc5ZGEyNDc1YzRmMzplMWY2OTc5Yjg2YzhlYWUxMGM2OGMxOWYzYjA1MDMyZGZhYjFkNzcwMTgyNzI5YWRiM2Q4MDhjNzBmN2I5ZjdmOjE1MzVmNzhhMDdkNTI0MDVhZDczMTdjYmZjZWRmMDRkNjAwZGU0MGIxN2UzMWY1YWIyNTU2NjExMDA0YTViNWE6MTkxOGEwNTJmZmQyMDZlNDU5YTJhZGI3MWNhYmViZWYwMGNjZjc0NGMyMmRhNjRhOGQ4YTk0ZTA5M2Q2ODAzYjoyMDdlYTAwYjVkYWQwNDQ1YTZjNDY1ODI2ZjJmYjU3MTNiYjRkY2NhMzY5NTMxZTJhN2Y1OTVmNTM3Mzk1NTk2Ojk1MDBlNDY2MTdmYjQ1ODI4MjQ5MjFjZTIxZjU1YWVhYTk1YTMxOWJiMzRlYmZjMTE5MDQyYmRlMTk5OTZlZGI6ZGE1OTgwYTdlMzQzNDQwOWRhMTIzMjQxN2ExZDFjYzAyOTY3YjYyYTA5OTUwMmNhY2QxM2NjMmUzNDIwNmZhNCIsCiAgICAgICAgICAgICJlY2U1ZWYyMTZjNDAwNDdhY2NmMzhkM2E4YjE2ODk5ZDEzYjI3MTIwNjdkZDQ3OGEyMTc4Mzc4ZWM3ZmNiZmM2OjE3YTgzOGIwMjM0NzgyZWI3ZjZiY2FhMGZiMjhiZWY5ZjYzMDI2OGQyZTEyYzNiMjgwMjJkYWJmMWNkYmE4MTI6OTMxMGY0YjdjOGQ3MzBiZTA1NTA5NmZiOWUwZGJiNzk2NDliMDJkMDk3ODM3ZDY2MDlmOTIwOTdhYjgwODE5NDoxYTY0NDcxZjNlOTYzMDYwMjBmNTVmOGNmMTdhYjY5YmMyNjAzNzBkZmNjZjMyNjIwMDQyZmYyYzYwNjc2N2ZiOmY0ZDJiMjQ0ODQyZjA1ZjRiMWJlNzcwNjk0NjFlYmRjZTczOTQ1ZDQzMGIwNWY0OWFmOWM1NDBhN2FkNmZlZTE6YTcxZjAwZDI1OGFiZWU0MTBiYTkyMmI0YjU0YzMwZDdlYThkY2RjMDVhZTM0NWUzNWNlYjFlOGE3ZmIwZmRiOToyMTVhN2ViMGI0YWQ0ODRkNTk5Zjk0NWE1YWZiMzcwMDgxOGNiY2Y3OTc4N2M1OTMxY2IzM2UwYmQyZmE4ZGY1OmIxMWVjMjI5MDU5NzU5NzEzNWE5MWRmODQ4MTI4NzQ3YmE3NjhhZDNmY2FmMGJiNzUwYjI5MjE2ZTJlM2MyZDE6MzRlMzdjM2E2YTAxMTA5OThjMTMyMzZmZGJjNzFlOTBmMzhjOGRmZTlhMGZkYmQwM2RiODc0NjY5NTYxNThmOToyNTRjNTMxNDg3M2MyN2E4ZGUzZGI1MzQ3ZjU2ZWJkOWViMmJmNDZjYzg4MTJhNDM2MTFmOThlMzhhYzM3YmEyIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJsb2NhbCIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAibG9jYWwiLAogICAgICAgICAgImZzdHlwZSI6ICJsb2NhbCIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIm1vZGU9MDc3NyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICJzaCIsCiAgICAgICAgICAgICItYyIsCiAgICAgICAgICAgICJmb3IgaSBpbiBgc2VxIDEgNjAwYDsgZG8gY2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2gga3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3VkcEBrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWw7Y2hlY2s9XCIkJChkaWcgK3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIGt1YmVybmV0ZXMuZGVmYXVsdC5zdmMuY2x1c3Rlci5sb2NhbCBBKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL3doZWV6eV90Y3BAa3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsO3NsZWVwIDE7IGRvbmUiCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9yZXN1bHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJeJChjcGF0aCkvJChzYW5kYm94LWlkKS9sb2NhbC9yZXN1bHRzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJsb2NhbCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogInF1ZXJpZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJyZWdpc3RyeS5rOHMuaW8vZTJlLXRlc3QtaW1hZ2VzL2Fnbmhvc3Q6Mi40MyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogImRucy10ZXN0LWY4ODBlNzNmLTE3MTgtNDQ1NS05YTc4LTc2NjY3OWUyMjQ3MSIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZG5zLTk5ODgiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI5KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNTFmMWQ1ZGY5ZTViNjQ2MzI3NzljOTk2YTNhYmI5YjMyY2M2OWM3NmUwYzE3NjIwZWQ2Y2VmZjE1ZDNmMjgxYTpiZjRkMDE0N2YzYWJlYTU1NTUwYThhNjEyYmRjMTE0NGI5Njk2NmQ1MjBjMjY3ZTE1NTE2ZDUxNTdjYjM5YmFiOmIxYmI1N2EzZTVkMDYyZjlhM2RlNGZlMWMyYWQyMzI4MjMzYTY4MTdhYTA0YmIyOGY4M2I4NmQ4MTQ1MmFmNWI6ZGFlZDcxN2VmMjEwMDY3NDIyYzkyN2M0ZWRmMjIwYzQzM2E4MDcwY2Q3ZjBhYzA5YzQ1MDc5ZGEyNDc1YzRmMzplMWY2OTc5Yjg2YzhlYWUxMGM2OGMxOWYzYjA1MDMyZGZhYjFkNzcwMTgyNzI5YWRiM2Q4MDhjNzBmN2I5ZjdmOjE1MzVmNzhhMDdkNTI0MDVhZDczMTdjYmZjZWRmMDRkNjAwZGU0MGIxN2UzMWY1YWIyNTU2NjExMDA0YTViNWE6MTkxOGEwNTJmZmQyMDZlNDU5YTJhZGI3MWNhYmViZWYwMGNjZjc0NGMyMmRhNjRhOGQ4YTk0ZTA5M2Q2ODAzYjoyMDdlYTAwYjVkYWQwNDQ1YTZjNDY1ODI2ZjJmYjU3MTNiYjRkY2NhMzY5NTMxZTJhN2Y1OTVmNTM3Mzk1NTk2Ojk1MDBlNDY2MTdmYjQ1ODI4MjQ5MjFjZTIxZjU1YWVhYTk1YTMxOWJiMzRlYmZjMTE5MDQyYmRlMTk5OTZlZGI6ZGE1OTgwYTdlMzQzNDQwOWRhMTIzMjQxN2ExZDFjYzAyOTY3YjYyYTA5OTUwMmNhY2QxM2NjMmUzNDIwNmZhNCIsCiAgICAgICAgICAgICJlY2U1ZWYyMTZjNDAwNDdhY2NmMzhkM2E4YjE2ODk5ZDEzYjI3MTIwNjdkZDQ3OGEyMTc4Mzc4ZWM3ZmNiZmM2OjE3YTgzOGIwMjM0NzgyZWI3ZjZiY2FhMGZiMjhiZWY5ZjYzMDI2OGQyZTEyYzNiMjgwMjJkYWJmMWNkYmE4MTI6OTMxMGY0YjdjOGQ3MzBiZTA1NTA5NmZiOWUwZGJiNzk2NDliMDJkMDk3ODM3ZDY2MDlmOTIwOTdhYjgwODE5NDoxYTY0NDcxZjNlOTYzMDYwMjBmNTVmOGNmMTdhYjY5YmMyNjAzNzBkZmNjZjMyNjIwMDQyZmYyYzYwNjc2N2ZiOmY0ZDJiMjQ0ODQyZjA1ZjRiMWJlNzcwNjk0NjFlYmRjZTczOTQ1ZDQzMGIwNWY0OWFmOWM1NDBhN2FkNmZlZTE6YTcxZjAwZDI1OGFiZWU0MTBiYTkyMmI0YjU0YzMwZDdlYThkY2RjMDVhZTM0NWUzNWNlYjFlOGE3ZmIwZmRiOToyMTVhN2ViMGI0YWQ0ODRkNTk5Zjk0NWE1YWZiMzcwMDgxOGNiY2Y3OTc4N2M1OTMxY2IzM2UwYmQyZmE4ZGY1OmIxMWVjMjI5MDU5NzU5NzEzNWE5MWRmODQ4MTI4NzQ3YmE3NjhhZDNmY2FmMGJiNzUwYjI5MjE2ZTJlM2MyZDE6MzRlMzdjM2E2YTAxMTA5OThjMTMyMzZmZGJjNzFlOTBmMzhjOGRmZTlhMGZkYmQwM2RiODc0NjY5NTYxNThmOToyNTRjNTMxNDg3M2MyN2E4ZGUzZGI1MzQ3ZjU2ZWJkOWViMmJmNDZjYzg4MTJhNDM2MTFmOThlMzhhYzM3YmEyIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJsb2NhbCIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAibG9jYWwiLAogICAgICAgICAgImZzdHlwZSI6ICJsb2NhbCIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIm1vZGU9MDc3NyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICJzaCIsCiAgICAgICAgICAgICItYyIsCiAgICAgICAgICAgICJmb3IgaSBpbiBgc2VxIDEgNjAwYDsgZG8gY2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2gga3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvamVzc2llX3VkcEBrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWw7Y2hlY2s9XCIkJChkaWcgK3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIGt1YmVybmV0ZXMuZGVmYXVsdC5zdmMuY2x1c3Rlci5sb2NhbCBBKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL2plc3NpZV90Y3BAa3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsO3NsZWVwIDE7IGRvbmUiCiAgICAgICAgICBdLAogICAgICAgICAgIkVudiI6IFsKICAgICAgICAgICAgIlBBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2JpbjovYmluIiwKICAgICAgICAgICAgIkhPU1ROQU1FPSQoaG9zdC1uYW1lKSIKICAgICAgICAgIF0sCiAgICAgICAgICAiQ3dkIjogIi8iLAogICAgICAgICAgIkNhcGFiaWxpdGllcyI6IHsKICAgICAgICAgICAgIkFtYmllbnQiOiBbXSwKICAgICAgICAgICAgIkJvdW5kaW5nIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJFZmZlY3RpdmUiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkluaGVyaXRhYmxlIjogW10sCiAgICAgICAgICAgICJQZXJtaXR0ZWQiOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgICJOb05ld1ByaXZpbGVnZXMiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJNb3VudHMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcHJvYyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAicHJvYyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJwcm9jIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2RldiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAidG1wZnMiLAogICAgICAgICAgICAidHlwZV8iOiAidG1wZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAic3RyaWN0YXRpbWUiLAogICAgICAgICAgICAgICJtb2RlPTc1NSIsCiAgICAgICAgICAgICAgInNpemU9NjU1MzZrIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9wdHMiLAogICAgICAgICAgICAic291cmNlIjogImRldnB0cyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJkZXZwdHMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibmV3aW5zdGFuY2UiLAogICAgICAgICAgICAgICJwdG14bW9kZT0wNjY2IiwKICAgICAgICAgICAgICAibW9kZT0wNjIwIiwKICAgICAgICAgICAgICAiZ2lkPTUiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3NobSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvbXF1ZXVlIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJtcXVldWUiLAogICAgICAgICAgICAidHlwZV8iOiAibXF1ZXVlIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAic3lzZnMiLAogICAgICAgICAgICAidHlwZV8iOiAic3lzZnMiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMvZnMvY2dyb3VwIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJjZ3JvdXAiLAogICAgICAgICAgICAidHlwZV8iOiAiY2dyb3VwIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicmVsYXRpbWUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdHMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi90ZXJtaW5hdGlvbi1sb2ciLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdGVybWluYXRpb24tbG9nJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvaG9zdG5hbWUiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpaG9zdG5hbWUkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpc2VydmljZWFjY291bnQkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpdG9rZW5zJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9yZXN1bHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJeJChjcGF0aCkvJChzYW5kYm94LWlkKS9sb2NhbC9yZXN1bHRzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJsb2NhbCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9jb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIjogImplc3NpZS1xdWVyaWVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJjb250YWluZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmltYWdlLW5hbWUiOiAicmVnaXN0cnkuazhzLmlvL2UyZS10ZXN0LWltYWdlcy9qZXNzaWUtZG5zdXRpbHM6MS43IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiOiAiZG5zLXRlc3QtZjg4MGU3M2YtMTcxOC00NDU1LTlhNzgtNzY2Njc5ZTIyNDcxIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkbnMtOTk4OCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIxMGI1NmM3NTY4OWIyZDNmZDM0ZGFiNTg2ZTI4NGM4OTE3YmFhN2YyNDQ1YjY0MzlkNzhhYjZkOTY0NWE2MGIzOmU1MDAwNDk2MTNlYjRlZjAyZTAzZTY1ODBlODBjNWE4MjY3MzBhOTQ0NTIxZGFmZjFlZWY3NzZiMmZjYzBmMjA6YWM4M2Y0YTM3MmIzNDAyMTkzZWEzMTRlYzdlOGE4N2I5MWM1OWM3M2UyM2JhNzljZWM5MmMxYTQxYzhhYWY1NDowYjJjNWMzYzQ2MzM4MjBiNWI0ZjZkNzdlYTIyYzVlZDBlM2QzYzMzMjA5MTY1YzJiMTgxNTg3YjJkOGJlMzEyOjczZmEwYWE5OTZhMzc0Y2M4NDY3MjhmNzI2MzkzY2ZjZmY0NmM5ODJkY2Y2MmQyZDI1OWY2MDA2ZGVlNWUyYmQ6MzVmNzhhZjEwYjYzNDAyYmI4OWRhMTYxNTEzZmE1NjM0NjViY2MxZDQzNDNjNGY3ZDQ5ODExZmY5YjcwZGRhOSIsCiAgICAgICAgICAgICIyYmRjMmZhZTNjODdhY2M2YTE4NjMzNmY4YjMwNjU1MDJkMWJlN2JjZmFhYzMyMTU3ZGZjNDhjNGI0YzFkN2Y2OmViZTYyMzg2NmFiMzcyYzUxMDFiYWFmNzY3YjI4MWRlNzEwMGI5MzQyNjk2YmNjODJmZjRmMDYxZjRiMTU5NjY6MjEzZjg0MGIxMDA2OTA4MDRhNzZhMWE5ZDNjZTNjMDUzMTM4MWIwYTc2MDc2MjU4MDNhNmY4NjcxMzQ0MTJkYjo2NzQ1MDA4MmFiNTZkYTFhZWNjNWVhZTJmMThkOTgwY2Q5ZTczMDZlNzkzMzRhMWE4MjZhOTFjZmQ5MDExNGE4OjA4NTllNTUzMWZkN2Y4YjE3MDcxNDE0YTA4MmFmYjY1YjJiZTcwMmVjZGFmYTAwN2RkMDU3N2FlYTg2Zjg1OTM6MDZmODljMjc1ZGMzNGYyNmI5ZGIwY2YwMTAyYjJhODk5ZGU2NTU1MTA1ODUyZDBhZjJiYjk1ZjM3NGY3MTQ0ZCIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAibG9jYWwiLAogICAgICAgICAgImRyaXZlcl9vcHRpb25zIjogW10sCiAgICAgICAgICAic291cmNlIjogImxvY2FsIiwKICAgICAgICAgICJmc3R5cGUiOiAibG9jYWwiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICJtb2RlPTA3NzciCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIl4kKGNwYXRoKS8kKHNhbmRib3gtaWQpL2xvY2FsL3Jlc3VsdHMkIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW5kYm94X3BpZG5zIjogZmFsc2UsCiAgICAgICJleGVjX2NvbW1hbmRzIjogW10KICAgIH0KICBdLAogICJjb21tb24iOiB7CiAgICAiY3BhdGgiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2hhcmVkL2NvbnRhaW5lcnMiLAogICAgInNmcHJlZml4IjogIl4kKGNwYXRoKS8kKGJ1bmRsZS1pZCktW2EtejAtOV17MTZ9LSIsCiAgICAiaXB2NF9hIjogIigoMjVbMC01XXwoMlswLTRdfDFcXGR8WzEtOV18KVxcZClcXC4/XFxiKXs0fSIsCiAgICAiaXBfcCI6ICJbMC05XXsxLDV9IiwKICAgICJzdmNfbmFtZSI6ICJbQS1aMC05X1xcLlxcLV0rIiwKICAgICJkbnNfbGFiZWwiOiAiW2EtekEtWjAtOV9cXC5cXC1dKyIsCiAgICAiZGVmYXVsdF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVEZDQVAiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIgogICAgXSwKICAgICJwcml2aWxlZ2VkX2NhcHMiOiBbCiAgICAgICJDQVBfQ0hPV04iLAogICAgICAiQ0FQX0RBQ19PVkVSUklERSIsCiAgICAgICJDQVBfREFDX1JFQURfU0VBUkNIIiwKICAgICAgIkNBUF9GT1dORVIiLAogICAgICAiQ0FQX0ZTRVRJRCIsCiAgICAgICJDQVBfS0lMTCIsCiAgICAgICJDQVBfU0VUR0lEIiwKICAgICAgIkNBUF9TRVRVSUQiLAogICAgICAiQ0FQX1NFVFBDQVAiLAogICAgICAiQ0FQX0xJTlVYX0lNTVVUQUJMRSIsCiAgICAgICJDQVBfTkVUX0JJTkRfU0VSVklDRSIsCiAgICAgICJDQVBfTkVUX0JST0FEQ0FTVCIsCiAgICAgICJDQVBfTkVUX0FETUlOIiwKICAgICAgIkNBUF9ORVRfUkFXIiwKICAgICAgIkNBUF9JUENfTE9DSyIsCiAgICAgICJDQVBfSVBDX09XTkVSIiwKICAgICAgIkNBUF9TWVNfTU9EVUxFIiwKICAgICAgIkNBUF9TWVNfUkFXSU8iLAogICAgICAiQ0FQX1NZU19DSFJPT1QiLAogICAgICAiQ0FQX1NZU19QVFJBQ0UiLAogICAgICAiQ0FQX1NZU19QQUNDVCIsCiAgICAgICJDQVBfU1lTX0FETUlOIiwKICAgICAgIkNBUF9TWVNfQk9PVCIsCiAgICAgICJDQVBfU1lTX05JQ0UiLAogICAgICAiQ0FQX1NZU19SRVNPVVJDRSIsCiAgICAgICJDQVBfU1lTX1RJTUUiLAogICAgICAiQ0FQX1NZU19UVFlfQ09ORklHIiwKICAgICAgIkNBUF9NS05PRCIsCiAgICAgICJDQVBfTEVBU0UiLAogICAgICAiQ0FQX0FVRElUX1dSSVRFIiwKICAgICAgIkNBUF9BVURJVF9DT05UUk9MIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9NQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX01BQ19BRE1JTiIsCiAgICAgICJDQVBfU1lTTE9HIiwKICAgICAgIkNBUF9XQUtFX0FMQVJNIiwKICAgICAgIkNBUF9CTE9DS19TVVNQRU5EIiwKICAgICAgIkNBUF9BVURJVF9SRUFEIiwKICAgICAgIkNBUF9QRVJGTU9OIiwKICAgICAgIkNBUF9CUEYiLAogICAgICAiQ0FQX0NIRUNLUE9JTlRfUkVTVE9SRSIKICAgIF0KICB9LAogICJzYW5kYm94IjogewogICAgInN0b3JhZ2VzIjogWwogICAgICB7CiAgICAgICAgImRyaXZlciI6ICJlcGhlbWVyYWwiLAogICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICJzb3VyY2UiOiAic2htIiwKICAgICAgICAiZnN0eXBlIjogInRtcGZzIiwKICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgIm1vZGU9MTc3NyIsCiAgICAgICAgICAic2l6ZT02NzEwODg2NCIKICAgICAgICBdLAogICAgICAgICJtb3VudF9wb2ludCI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICB9CiAgICBdCiAgfSwKICAicmVxdWVzdF9kZWZhdWx0cyI6IHsKICAgICJDcmVhdGVDb250YWluZXJSZXF1ZXN0IjogewogICAgICAiYWxsb3dfZW52X3JlZ2V4IjogWwogICAgICAgICJeSE9TVE5BTUU9JChkbnNfbGFiZWwpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX1BST1RPPXRjcCQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QT1JUPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfQUREUj0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfSE9TVD0kKGlwdjRfYSkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1NFUlZJQ0VfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlRfJChkbnNfbGFiZWwpPSQoaXBfcCkkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlQ9dGNwOi8vJChpcHY0X2EpOiQoaXBfcCkkIiwKICAgICAgICAiXkFaVVJFX0NMSUVOVF9JRD1bQS1GYS1mMC05LV0qJCIsCiAgICAgICAgIl5BWlVSRV9URU5BTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEU9L3Zhci9ydW4vc2VjcmV0cy9henVyZS90b2tlbnMvYXp1cmUtaWRlbnRpdHktdG9rZW4kIiwKICAgICAgICAiXkFaVVJFX0FVVEhPUklUWV9IT1NUPWh0dHBzOi8vbG9naW5cXC5taWNyb3NvZnRvbmxpbmVcXC5jb20vJCIKICAgICAgXQogICAgfSwKICAgICJDb3B5RmlsZVJlcXVlc3QiOiBbCiAgICAgICIkKHNmcHJlZml4KSIKICAgIF0sCiAgICAiRXhlY1Byb2Nlc3NSZXF1ZXN0IjogewogICAgICAiY29tbWFuZHMiOiBbXSwKICAgICAgInJlZ2V4IjogW10KICAgIH0sCiAgICAiUmVhZFN0cmVhbVJlcXVlc3QiOiB0cnVlLAogICAgIlVwZGF0ZUVwaGVtZXJhbE1vdW50c1JlcXVlc3QiOiBmYWxzZSwKICAgICJXcml0ZVN0cmVhbVJlcXVlc3QiOiBmYWxzZQogIH0KfQ== spec: containers: - args: diff --git a/src/agent/samples/policy/yaml/webhook3/many-layers.yaml b/src/agent/samples/policy/yaml/webhook3/many-layers.yaml index 18557333d30d..0fa58d861a21 100644 --- a/src/agent/samples/policy/yaml/webhook3/many-layers.yaml +++ b/src/agent/samples/policy/yaml/webhook3/many-layers.yaml @@ -18,7 +18,7 @@ items: resourceVersion: "960453" uid: 94b93dae-74fc-4a7b-86a0-b4fac8402481 annotations: - io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJkbnMtdGVzdC1hODQ4NjUzYS01YzE3LTQ4NWItYmU0Ni1mYWEwYzBkYTExOTIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRucy0xMzcwIiwKICAgICAgICAgICJuZXJkY3RsL25ldHdvcmstbmFtZXNwYWNlIjogIl4vdmFyL3J1bi9uZXRucy9jbmktWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI1YTVhYWQ4MDA1NWZmMjAwMTJhNTBkYzI1ZjhkZjdhMjk5MjQ0NzQzMjRkNjVmN2Q1MzA2ZWU4ZWUyN2ZmNzFkIiwKICAgICAgICAgICAgIjgxNzI1MGYxYTNlMzM2ZGE3NmY1YmQzZmE3ODRlMWIyNmQ5NTliOWMxMzE4NzY4MTViYTI2MDQwNDhiNzBjMTgiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9hZ25ob3N0IiwKICAgICAgICAgICAgInRlc3Qtd2Vic2VydmVyIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcmVzdWx0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAibG9jYWwiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJ3ZWJzZXJ2ZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJyZWdpc3RyeS5rOHMuaW8vZTJlLXRlc3QtaW1hZ2VzL2Fnbmhvc3Q6Mi40MyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogImRucy10ZXN0LWE4NDg2NTNhLTVjMTctNDg1Yi1iZTQ2LWZhYTBjMGRhMTE5MiIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZG5zLTEzNzAiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI5KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNTFmMWQ1ZGY5ZTViNjQ2MzI3NzljOTk2YTNhYmI5YjMyY2M2OWM3NmUwYzE3NjIwZWQ2Y2VmZjE1ZDNmMjgxYTpiZjRkMDE0N2YzYWJlYTU1NTUwYThhNjEyYmRjMTE0NGI5Njk2NmQ1MjBjMjY3ZTE1NTE2ZDUxNTdjYjM5YmFiOmIxYmI1N2EzZTVkMDYyZjlhM2RlNGZlMWMyYWQyMzI4MjMzYTY4MTdhYTA0YmIyOGY4M2I4NmQ4MTQ1MmFmNWI6ZGFlZDcxN2VmMjEwMDY3NDIyYzkyN2M0ZWRmMjIwYzQzM2E4MDcwY2Q3ZjBhYzA5YzQ1MDc5ZGEyNDc1YzRmMzplMWY2OTc5Yjg2YzhlYWUxMGM2OGMxOWYzYjA1MDMyZGZhYjFkNzcwMTgyNzI5YWRiM2Q4MDhjNzBmN2I5ZjdmOjE1MzVmNzhhMDdkNTI0MDVhZDczMTdjYmZjZWRmMDRkNjAwZGU0MGIxN2UzMWY1YWIyNTU2NjExMDA0YTViNWE6MTkxOGEwNTJmZmQyMDZlNDU5YTJhZGI3MWNhYmViZWYwMGNjZjc0NGMyMmRhNjRhOGQ4YTk0ZTA5M2Q2ODAzYjoyMDdlYTAwYjVkYWQwNDQ1YTZjNDY1ODI2ZjJmYjU3MTNiYjRkY2NhMzY5NTMxZTJhN2Y1OTVmNTM3Mzk1NTk2Ojk1MDBlNDY2MTdmYjQ1ODI4MjQ5MjFjZTIxZjU1YWVhYTk1YTMxOWJiMzRlYmZjMTE5MDQyYmRlMTk5OTZlZGI6ZGE1OTgwYTdlMzQzNDQwOWRhMTIzMjQxN2ExZDFjYzAyOTY3YjYyYTA5OTUwMmNhY2QxM2NjMmUzNDIwNmZhNCIsCiAgICAgICAgICAgICJlY2U1ZWYyMTZjNDAwNDdhY2NmMzhkM2E4YjE2ODk5ZDEzYjI3MTIwNjdkZDQ3OGEyMTc4Mzc4ZWM3ZmNiZmM2OjE3YTgzOGIwMjM0NzgyZWI3ZjZiY2FhMGZiMjhiZWY5ZjYzMDI2OGQyZTEyYzNiMjgwMjJkYWJmMWNkYmE4MTI6OTMxMGY0YjdjOGQ3MzBiZTA1NTA5NmZiOWUwZGJiNzk2NDliMDJkMDk3ODM3ZDY2MDlmOTIwOTdhYjgwODE5NDoxYTY0NDcxZjNlOTYzMDYwMjBmNTVmOGNmMTdhYjY5YmMyNjAzNzBkZmNjZjMyNjIwMDQyZmYyYzYwNjc2N2ZiOmY0ZDJiMjQ0ODQyZjA1ZjRiMWJlNzcwNjk0NjFlYmRjZTczOTQ1ZDQzMGIwNWY0OWFmOWM1NDBhN2FkNmZlZTE6YTcxZjAwZDI1OGFiZWU0MTBiYTkyMmI0YjU0YzMwZDdlYThkY2RjMDVhZTM0NWUzNWNlYjFlOGE3ZmIwZmRiOToyMTVhN2ViMGI0YWQ0ODRkNTk5Zjk0NWE1YWZiMzcwMDgxOGNiY2Y3OTc4N2M1OTMxY2IzM2UwYmQyZmE4ZGY1OmIxMWVjMjI5MDU5NzU5NzEzNWE5MWRmODQ4MTI4NzQ3YmE3NjhhZDNmY2FmMGJiNzUwYjI5MjE2ZTJlM2MyZDE6OWYxYTgyNDQ1OTAxMTU0Y2Y5OWVkNzZlMmIwMDc5N2FmYWZiZTJiMTQxMzYxNTFhYTBhN2RlYTU2YTVjOWY2MzoyNTRjNTMxNDg3M2MyN2E4ZGUzZGI1MzQ3ZjU2ZWJkOWViMmJmNDZjYzg4MTJhNDM2MTFmOThlMzhhYzM3YmEyIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJsb2NhbCIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAibG9jYWwiLAogICAgICAgICAgImZzdHlwZSI6ICJsb2NhbCIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIm1vZGU9MDc3NyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICJzaCIsCiAgICAgICAgICAgICItYyIsCiAgICAgICAgICAgICJmb3IgaSBpbiBgc2VxIDEgNjAwYDsgZG8gY2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggZG5zLXRlc3Qtc2VydmljZSBBKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL3doZWV6eV91ZHBAZG5zLXRlc3Qtc2VydmljZTtjaGVjaz1cIiQkKGRpZyArdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggZG5zLXRlc3Qtc2VydmljZSBBKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL3doZWV6eV90Y3BAZG5zLXRlc3Qtc2VydmljZTtjaGVjaz1cIiQkKGRpZyArbm90Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3VkcEBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3RjcEBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwO2NoZWNrPVwiJCQoZGlnICtub3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3VkcEBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwLnN2YztjaGVjaz1cIiQkKGRpZyArdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggZG5zLXRlc3Qtc2VydmljZS5kbnMtMTM3MC5zdmMgQSlcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy93aGVlenlfdGNwQGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICtub3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIF9odHRwLl90Y3AuZG5zLXRlc3Qtc2VydmljZS5kbnMtMTM3MC5zdmMgU1JWKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL3doZWV6eV91ZHBAX2h0dHAuX3RjcC5kbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwLnN2YztjaGVjaz1cIiQkKGRpZyArdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggX2h0dHAuX3RjcC5kbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwLnN2YyBTUlYpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3RjcEBfaHR0cC5fdGNwLmRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICtub3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIF9odHRwLl90Y3AudGVzdC1zZXJ2aWNlLTIuZG5zLTEzNzAuc3ZjIFNSVilcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy93aGVlenlfdWRwQF9odHRwLl90Y3AudGVzdC1zZXJ2aWNlLTIuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBfaHR0cC5fdGNwLnRlc3Qtc2VydmljZS0yLmRucy0xMzcwLnN2YyBTUlYpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3RjcEBfaHR0cC5fdGNwLnRlc3Qtc2VydmljZS0yLmRucy0xMzcwLnN2YztjaGVjaz1cIiQkKGRpZyArbm90Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCA3Ny42NS4wLjEwLmluLWFkZHIuYXJwYS4gUFRSKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzLzEwLjAuNjUuNzdfdWRwQFBUUjtjaGVjaz1cIiQkKGRpZyArdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggNzcuNjUuMC4xMC5pbi1hZGRyLmFycGEuIFBUUilcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy8xMC4wLjY1Ljc3X3RjcEBQVFI7c2xlZXAgMTsgZG9uZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgICAiSE9TVE5BTUU9JChob3N0LW5hbWUpIgogICAgICAgICAgXSwKICAgICAgICAgICJDd2QiOiAiLyIsCiAgICAgICAgICAiQ2FwYWJpbGl0aWVzIjogewogICAgICAgICAgICAiQW1iaWVudCI6IFtdLAogICAgICAgICAgICAiQm91bmRpbmciOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkVmZmVjdGl2ZSI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiSW5oZXJpdGFibGUiOiBbXSwKICAgICAgICAgICAgIlBlcm1pdHRlZCI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgIk5vTmV3UHJpdmlsZWdlcyI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cy9mcy9jZ3JvdXAiLAogICAgICAgICAgICAic291cmNlIjogImNncm91cCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJjZ3JvdXAiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJyZWxhdGltZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXJtaW5hdGlvbi1sb2ckIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0bmFtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0bmFtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClzZXJ2aWNlYWNjb3VudCQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2VucyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0b2tlbnMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Jlc3VsdHMiLAogICAgICAgICAgICAic291cmNlIjogIl4kKGNwYXRoKS8kKHNhbmRib3gtaWQpL2xvY2FsL3Jlc3VsdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImxvY2FsIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIkFubm90YXRpb25zIjogewogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiOiAiL3J1bi9jb250YWluZXJkL2lvLmNvbnRhaW5lcmQucnVudGltZS52Mi50YXNrL2s4cy5pby8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiOiAicG9kX2NvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiOiAicXVlcmllciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogInJlZ2lzdHJ5Lms4cy5pby9lMmUtdGVzdC1pbWFnZXMvYWduaG9zdDoyLjQzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiOiAiZG5zLXRlc3QtYTg0ODY1M2EtNWMxNy00ODViLWJlNDYtZmFhMGMwZGExMTkyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkbnMtMTM3MCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g3KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g4KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjgpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g5KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjkpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI1MWYxZDVkZjllNWI2NDYzMjc3OWM5OTZhM2FiYjliMzJjYzY5Yzc2ZTBjMTc2MjBlZDZjZWZmMTVkM2YyODFhOmJmNGQwMTQ3ZjNhYmVhNTU1NTBhOGE2MTJiZGMxMTQ0Yjk2OTY2ZDUyMGMyNjdlMTU1MTZkNTE1N2NiMzliYWI6YjFiYjU3YTNlNWQwNjJmOWEzZGU0ZmUxYzJhZDIzMjgyMzNhNjgxN2FhMDRiYjI4ZjgzYjg2ZDgxNDUyYWY1YjpkYWVkNzE3ZWYyMTAwNjc0MjJjOTI3YzRlZGYyMjBjNDMzYTgwNzBjZDdmMGFjMDljNDUwNzlkYTI0NzVjNGYzOmUxZjY5NzliODZjOGVhZTEwYzY4YzE5ZjNiMDUwMzJkZmFiMWQ3NzAxODI3MjlhZGIzZDgwOGM3MGY3YjlmN2Y6MTUzNWY3OGEwN2Q1MjQwNWFkNzMxN2NiZmNlZGYwNGQ2MDBkZTQwYjE3ZTMxZjVhYjI1NTY2MTEwMDRhNWI1YToxOTE4YTA1MmZmZDIwNmU0NTlhMmFkYjcxY2FiZWJlZjAwY2NmNzQ0YzIyZGE2NGE4ZDhhOTRlMDkzZDY4MDNiOjIwN2VhMDBiNWRhZDA0NDVhNmM0NjU4MjZmMmZiNTcxM2JiNGRjY2EzNjk1MzFlMmE3ZjU5NWY1MzczOTU1OTY6OTUwMGU0NjYxN2ZiNDU4MjgyNDkyMWNlMjFmNTVhZWFhOTVhMzE5YmIzNGViZmMxMTkwNDJiZGUxOTk5NmVkYjpkYTU5ODBhN2UzNDM0NDA5ZGExMjMyNDE3YTFkMWNjMDI5NjdiNjJhMDk5NTAyY2FjZDEzY2MyZTM0MjA2ZmE0IiwKICAgICAgICAgICAgImVjZTVlZjIxNmM0MDA0N2FjY2YzOGQzYThiMTY4OTlkMTNiMjcxMjA2N2RkNDc4YTIxNzgzNzhlYzdmY2JmYzY6MTdhODM4YjAyMzQ3ODJlYjdmNmJjYWEwZmIyOGJlZjlmNjMwMjY4ZDJlMTJjM2IyODAyMmRhYmYxY2RiYTgxMjo5MzEwZjRiN2M4ZDczMGJlMDU1MDk2ZmI5ZTBkYmI3OTY0OWIwMmQwOTc4MzdkNjYwOWY5MjA5N2FiODA4MTk0OjFhNjQ0NzFmM2U5NjMwNjAyMGY1NWY4Y2YxN2FiNjliYzI2MDM3MGRmY2NmMzI2MjAwNDJmZjJjNjA2NzY3ZmI6ZjRkMmIyNDQ4NDJmMDVmNGIxYmU3NzA2OTQ2MWViZGNlNzM5NDVkNDMwYjA1ZjQ5YWY5YzU0MGE3YWQ2ZmVlMTphNzFmMDBkMjU4YWJlZTQxMGJhOTIyYjRiNTRjMzBkN2VhOGRjZGMwNWFlMzQ1ZTM1Y2ViMWU4YTdmYjBmZGI5OjIxNWE3ZWIwYjRhZDQ4NGQ1OTlmOTQ1YTVhZmIzNzAwODE4Y2JjZjc5Nzg3YzU5MzFjYjMzZTBiZDJmYThkZjU6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMTo5ZjFhODI0NDU5MDExNTRjZjk5ZWQ3NmUyYjAwNzk3YWZhZmJlMmIxNDEzNjE1MWFhMGE3ZGVhNTZhNWM5ZjYzOjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImxvY2FsIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICJsb2NhbCIsCiAgICAgICAgICAiZnN0eXBlIjogImxvY2FsIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAibW9kZT0wNzc3IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICJeJChjcGF0aCkvJChzYW5kYm94LWlkKS9sb2NhbC9yZXN1bHRzJCIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgInNoIiwKICAgICAgICAgICAgIi1jIiwKICAgICAgICAgICAgImZvciBpIGluIGBzZXEgMSA2MDBgOyBkbyBjaGVjaz1cIiQkKGRpZyArbm90Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBkbnMtdGVzdC1zZXJ2aWNlIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvamVzc2llX3VkcEBkbnMtdGVzdC1zZXJ2aWNlO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBkbnMtdGVzdC1zZXJ2aWNlIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvamVzc2llX3RjcEBkbnMtdGVzdC1zZXJ2aWNlO2NoZWNrPVwiJCQoZGlnICtub3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAgQSlcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy9qZXNzaWVfdWRwQGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzA7Y2hlY2s9XCIkJChkaWcgK3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAgQSlcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy9qZXNzaWVfdGNwQGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzA7Y2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggZG5zLXRlc3Qtc2VydmljZS5kbnMtMTM3MC5zdmMgQSlcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy9qZXNzaWVfdWRwQGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwLnN2YyBBKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL2plc3NpZV90Y3BAZG5zLXRlc3Qtc2VydmljZS5kbnMtMTM3MC5zdmM7Y2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggX2h0dHAuX3RjcC5kbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwLnN2YyBTUlYpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvamVzc2llX3VkcEBfaHR0cC5fdGNwLmRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBfaHR0cC5fdGNwLmRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjIFNSVilcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy9qZXNzaWVfdGNwQF9odHRwLl90Y3AuZG5zLXRlc3Qtc2VydmljZS5kbnMtMTM3MC5zdmM7Y2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggX2h0dHAuX3RjcC50ZXN0LXNlcnZpY2UtMi5kbnMtMTM3MC5zdmMgU1JWKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL2plc3NpZV91ZHBAX2h0dHAuX3RjcC50ZXN0LXNlcnZpY2UtMi5kbnMtMTM3MC5zdmM7Y2hlY2s9XCIkJChkaWcgK3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIF9odHRwLl90Y3AudGVzdC1zZXJ2aWNlLTIuZG5zLTEzNzAuc3ZjIFNSVilcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy9qZXNzaWVfdGNwQF9odHRwLl90Y3AudGVzdC1zZXJ2aWNlLTIuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICtub3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIDc3LjY1LjAuMTAuaW4tYWRkci5hcnBhLiBQVFIpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvMTAuMC42NS43N191ZHBAUFRSO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCA3Ny42NS4wLjEwLmluLWFkZHIuYXJwYS4gUFRSKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzLzEwLjAuNjUuNzdfdGNwQFBUUjtzbGVlcCAxOyBkb25lIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcmVzdWx0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAibG9jYWwiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJqZXNzaWUtcXVlcmllciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogInJlZ2lzdHJ5Lms4cy5pby9lMmUtdGVzdC1pbWFnZXMvamVzc2llLWRuc3V0aWxzOjEuNyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogImRucy10ZXN0LWE4NDg2NTNhLTVjMTctNDg1Yi1iZTQ2LWZhYTBjMGRhMTE5MiIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZG5zLTEzNzAiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMTBiNTZjNzU2ODliMmQzZmQzNGRhYjU4NmUyODRjODkxN2JhYTdmMjQ0NWI2NDM5ZDc4YWI2ZDk2NDVhNjBiMzplNTAwMDQ5NjEzZWI0ZWYwMmUwM2U2NTgwZTgwYzVhODI2NzMwYTk0NDUyMWRhZmYxZWVmNzc2YjJmY2MwZjIwOmFjODNmNGEzNzJiMzQwMjE5M2VhMzE0ZWM3ZThhODdiOTFjNTljNzNlMjNiYTc5Y2VjOTJjMWE0MWM4YWFmNTQ6MGIyYzVjM2M0NjMzODIwYjViNGY2ZDc3ZWEyMmM1ZWQwZTNkM2MzMzIwOTE2NWMyYjE4MTU4N2IyZDhiZTMxMjo3M2ZhMGFhOTk2YTM3NGNjODQ2NzI4ZjcyNjM5M2NmY2ZmNDZjOTgyZGNmNjJkMmQyNTlmNjAwNmRlZTVlMmJkOjM1Zjc4YWYxMGI2MzQwMmJiODlkYTE2MTUxM2ZhNTYzNDY1YmNjMWQ0MzQzYzRmN2Q0OTgxMWZmOWI3MGRkYTkiLAogICAgICAgICAgICAiMmJkYzJmYWUzYzg3YWNjNmExODYzMzZmOGIzMDY1NTAyZDFiZTdiY2ZhYWMzMjE1N2RmYzQ4YzRiNGMxZDdmNjplYmU2MjM4NjZhYjM3MmM1MTAxYmFhZjc2N2IyODFkZTcxMDBiOTM0MjY5NmJjYzgyZmY0ZjA2MWY0YjE1OTY2OjIxM2Y4NDBiMTAwNjkwODA0YTc2YTFhOWQzY2UzYzA1MzEzODFiMGE3NjA3NjI1ODAzYTZmODY3MTM0NDEyZGI6Njc0NTAwODJhYjU2ZGExYWVjYzVlYWUyZjE4ZDk4MGNkOWU3MzA2ZTc5MzM0YTFhODI2YTkxY2ZkOTAxMTRhODowODU5ZTU1MzFmZDdmOGIxNzA3MTQxNGEwODJhZmI2NWIyYmU3MDJlY2RhZmEwMDdkZDA1NzdhZWE4NmY4NTkzOjA2Zjg5YzI3NWRjMzRmMjZiOWRiMGNmMDEwMmIyYTg5OWRlNjU1NTEwNTg1MmQwYWYyYmI5NWYzNzRmNzE0NGQiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImxvY2FsIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICJsb2NhbCIsCiAgICAgICAgICAiZnN0eXBlIjogImxvY2FsIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAibW9kZT0wNzc3IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICJeJChjcGF0aCkvJChzYW5kYm94LWlkKS9sb2NhbC9yZXN1bHRzJCIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= + io.katacontainers.config.agent.policy: IyBDb3B5cmlnaHQgKGMpIDIwMjMgTWljcm9zb2Z0IENvcnBvcmF0aW9uCiMKIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAojCnBhY2thZ2UgYWdlbnRfcG9saWN5CgppbXBvcnQgZnV0dXJlLmtleXdvcmRzLmluCmltcG9ydCBmdXR1cmUua2V5d29yZHMuZXZlcnkKCmltcG9ydCBpbnB1dAoKIyBEZWZhdWx0IHZhbHVlcywgcmV0dXJuZWQgYnkgT1BBIHdoZW4gcnVsZXMgY2Fubm90IGJlIGV2YWx1YXRlZCB0byB0cnVlLgpkZWZhdWx0IENvcHlGaWxlUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IENyZWF0ZUNvbnRhaW5lclJlcXVlc3QgOj0gZmFsc2UKZGVmYXVsdCBDcmVhdGVTYW5kYm94UmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IERlc3Ryb3lTYW5kYm94UmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgRXhlY1Byb2Nlc3NSZXF1ZXN0IDo9IGZhbHNlCmRlZmF1bHQgR2V0T09NRXZlbnRSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBHdWVzdERldGFpbHNSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBPbmxpbmVDUFVNZW1SZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBQdWxsSW1hZ2VSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBSZWFkU3RyZWFtUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFJlbW92ZUNvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFJlbW92ZVN0YWxlVmlydGlvZnNTaGFyZU1vdW50c1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFNpZ25hbFByb2Nlc3NSZXF1ZXN0IDo9IHRydWUKZGVmYXVsdCBTdGFydENvbnRhaW5lclJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFN0YXRzQ29udGFpbmVyUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVHR5V2luUmVzaXplUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA6PSBmYWxzZQpkZWZhdWx0IFVwZGF0ZUludGVyZmFjZVJlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFVwZGF0ZVJvdXRlc1JlcXVlc3QgOj0gdHJ1ZQpkZWZhdWx0IFdhaXRQcm9jZXNzUmVxdWVzdCA6PSB0cnVlCmRlZmF1bHQgV3JpdGVTdHJlYW1SZXF1ZXN0IDo9IGZhbHNlCgojIEFsbG93UmVxdWVzdHNGYWlsaW5nUG9saWN5IDo9IHRydWUgY29uZmlndXJlcyB0aGUgQWdlbnQgdG8gKmFsbG93IGFueQojIHJlcXVlc3RzIGNhdXNpbmcgYSBwb2xpY3kgZmFpbHVyZSouIFRoaXMgaXMgYW4gdW5zZWN1cmUgY29uZmlndXJhdGlvbgojIGJ1dCBpcyB1c2VmdWwgZm9yIGFsbG93aW5nIHVuc2VjdXJlIHBvZHMgdG8gc3RhcnQsIHRoZW4gY29ubmVjdCB0bwojIHRoZW0gYW5kIGluc3BlY3QgT1BBIGxvZ3MgZm9yIHRoZSByb290IGNhdXNlIG9mIGEgZmFpbHVyZS4KZGVmYXVsdCBBbGxvd1JlcXVlc3RzRmFpbGluZ1BvbGljeSA6PSBmYWxzZQoKQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCB7CiAgICBpX29jaSA6PSBpbnB1dC5PQ0kKICAgIGlfc3RvcmFnZXMgOj0gaW5wdXQuc3RvcmFnZXMKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuSG9va3MgPSIsIGlfb2NpLkhvb2tzKQogICAgaXNfbnVsbChpX29jaS5Ib29rcykKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogaV9vY2kuTGludXguU2VjY29tcCA9IiwgaV9vY2kuTGludXguU2VjY29tcCkKICAgIGlzX251bGwoaV9vY2kuTGludXguU2VjY29tcCkKCiAgICBzb21lIHBfY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHByaW50KCI9PT09PT09PSBDcmVhdGVDb250YWluZXJSZXF1ZXN0OiB0cnlpbmcgbmV4dCBwb2xpY3kgY29udGFpbmVyIikKCiAgICBwX3BpZG5zIDo9IHBfY29udGFpbmVyLnNhbmRib3hfcGlkbnMKICAgIGlfcGlkbnMgOj0gaW5wdXQuc2FuZGJveF9waWRucwogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHBfcGlkbnMgPSIsIHBfcGlkbnMsICJpX3BpZG5zID0iLCBpX3BpZG5zKQogICAgcF9waWRucyA9PSBpX3BpZG5zCgogICAgcF9vY2kgOj0gcF9jb250YWluZXIuT0NJCgogICAgcHJpbnQoIkNyZWF0ZUNvbnRhaW5lclJlcXVlc3Q6IHAgVmVyc2lvbiA9IiwgcF9vY2kuVmVyc2lvbiwgImkgVmVyc2lvbiA9IiwgaV9vY2kuVmVyc2lvbikKICAgIHBfb2NpLlZlcnNpb24gPT0gaV9vY2kuVmVyc2lvbgoKICAgIHByaW50KCJDcmVhdGVDb250YWluZXJSZXF1ZXN0OiBwIFJlYWRvbmx5ID0iLCBwX29jaS5Sb290LlJlYWRvbmx5LCAiaSBSZWFkb25seSA9IiwgaV9vY2kuUm9vdC5SZWFkb25seSkKICAgIHBfb2NpLlJvb3QuUmVhZG9ubHkgPT0gaV9vY2kuUm9vdC5SZWFkb25seQoKICAgIGFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKQoKICAgIHBfc3RvcmFnZXMgOj0gcF9jb250YWluZXIuc3RvcmFnZXMKICAgIGFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKQoKICAgIGFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkKCiAgICBwcmludCgiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdDogdHJ1ZSIpCn0KCiMgUmVqZWN0IHVuZXhwZWN0ZWQgYW5ub3RhdGlvbnMuCmFsbG93X2Fubm8ocF9vY2ksIGlfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ubyAxOiBzdGFydCIpCgogICAgbm90IGlfb2NpLkFubm90YXRpb25zCgogICAgcHJpbnQoImFsbG93X2Fubm8gMTogdHJ1ZSIpCn0KYWxsb3dfYW5ubyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19hbm5vIDI6IHAgQW5ub3RhdGlvbnMgPSIsIHBfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBBbm5vdGF0aW9ucyA9IiwgaV9vY2kuQW5ub3RhdGlvbnMpCgogICAgaV9rZXlzIDo9IG9iamVjdC5rZXlzKGlfb2NpLkFubm90YXRpb25zKQogICAgcHJpbnQoImFsbG93X2Fubm8gMjogaSBrZXlzID0iLCBpX2tleXMpCgogICAgZXZlcnkgaV9rZXkgaW4gaV9rZXlzIHsKICAgICAgICBhbGxvd19hbm5vX2tleShpX2tleSwgcF9vY2kpCiAgICB9CgogICAgcHJpbnQoImFsbG93X2Fubm8gMjogdHJ1ZSIpCn0KCmFsbG93X2Fubm9fa2V5KGlfa2V5LCBwX29jaSkgewogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDE6IGkga2V5ID0iLCBpX2tleSkKCiAgICBzdGFydHN3aXRoKGlfa2V5LCAiaW8ua3ViZXJuZXRlcy5jcmkuIikKCiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMTogdHJ1ZSIpCn0KYWxsb3dfYW5ub19rZXkoaV9rZXksIHBfb2NpKSB7CiAgICBwcmludCgiYWxsb3dfYW5ub19rZXkgMjogaSBrZXkgPSIsIGlfa2V5KQoKICAgIHNvbWUgcF9rZXksIF8gaW4gcF9vY2kuQW5ub3RhdGlvbnMKICAgIHBfa2V5ID09IGlfa2V5CgogICAgcHJpbnQoImFsbG93X2Fubm9fa2V5IDI6IHRydWUiKQp9CgojIEdldCB0aGUgdmFsdWUgb2YgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiIGFubm90YXRpb24gYW5kCiMgY29ycmVsYXRlIGl0IHdpdGggb3RoZXIgYW5ub3RhdGlvbnMgYW5kIHByb2Nlc3MgZmllbGRzLgphbGxvd19ieV9hbm5vKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcykgewogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogc3RhcnQiKQoKICAgIHNfbmFtZSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIgoKICAgIG5vdCBwX29jaS5Bbm5vdGF0aW9uc1tzX25hbWVdCgogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMTogaV9zX25hbWUgPSIsIGlfc19uYW1lKQoKICAgIGFsbG93X2J5X3NhbmRib3hfbmFtZShwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMsIGlfc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9hbm5vIDE6IHRydWUiKQp9CmFsbG93X2J5X2Fubm8ocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiBzdGFydCIpCgogICAgc19uYW1lIDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiCgogICAgcF9zX25hbWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgaV9zX25hbWUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lXQogICAgcHJpbnQoImFsbG93X2J5X2Fubm8gMjogaV9zX25hbWUgPSIsIGlfc19uYW1lLCAicF9zX25hbWUgPSIsIHBfc19uYW1lKQoKICAgIGFsbG93X3NhbmRib3hfbmFtZShwX3NfbmFtZSwgaV9zX25hbWUpCiAgICBhbGxvd19ieV9zYW5kYm94X25hbWUocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBpX3NfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfYnlfYW5ubyAyOiB0cnVlIikKfQoKYWxsb3dfYnlfc2FuZGJveF9uYW1lKHBfb2NpLCBpX29jaSwgcF9zdG9yYWdlcywgaV9zdG9yYWdlcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBzdGFydCIpCgogICAgc19uYW1lc3BhY2UgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIgoKICAgIHBfbmFtZXNwYWNlIDo9IHBfb2NpLkFubm90YXRpb25zW3NfbmFtZXNwYWNlXQogICAgaV9uYW1lc3BhY2UgOj0gaV9vY2kuQW5ub3RhdGlvbnNbc19uYW1lc3BhY2VdCiAgICBwcmludCgiYWxsb3dfYnlfc2FuZGJveF9uYW1lOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCiAgICBwX25hbWVzcGFjZSA9PSBpX25hbWVzcGFjZQoKICAgIGFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgcF9uYW1lc3BhY2UpCiAgICBhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZChwX29jaSwgaV9vY2ksIHBfc3RvcmFnZXMsIGlfc3RvcmFnZXMpCiAgICBhbGxvd19wcm9jZXNzKHBfb2NpLCBpX29jaSwgc19uYW1lKQoKICAgIHByaW50KCJhbGxvd19ieV9zYW5kYm94X25hbWU6IHRydWUiKQp9CgphbGxvd19zYW5kYm94X25hbWUocF9zX25hbWUsIGlfc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDE6IHN0YXJ0IikKCiAgICBwX3NfbmFtZSA9PSBpX3NfbmFtZQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25hbWUgMTogdHJ1ZSIpCn0KYWxsb3dfc2FuZGJveF9uYW1lKHBfc19uYW1lLCBpX3NfbmFtZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmFtZSAyOiBzdGFydCIpCgogICAgIyBUT0RPOiBzaG91bGQgZ2VuZXJhdGVkIG5hbWVzIGJlIGhhbmRsZWQgZGlmZmVyZW50bHk/CiAgICBjb250YWlucyhwX3NfbmFtZSwgIiQoZ2VuZXJhdGVkLW5hbWUpIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uYW1lIDI6IHRydWUiKQp9CgojIENoZWNrIHRoYXQgdGhlICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSIgYW5kCiMgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiIGFubm90YXRpb25zIGRlc2lnbmF0ZSB0aGUKIyBleHBlY3RlZCB0eXBlIC0gZWl0aGVyIGEgInNhbmRib3giIG9yIGEgImNvbnRhaW5lciIuIFRoZW4sIHZhbGlkYXRlCiMgb3RoZXIgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCAic2FuZGJveCIgb3IgImNvbnRhaW5lciIgdmFsdWUKIyBmcm9tIHRoZSBpbnB1dCBjb250YWluZXIuCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlcyhwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpIHsKICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZXM6IGNoZWNraW5nIGlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIikKCiAgICBjX3R5cGUgOj0gImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIgogICAgCiAgICBwX2NyaV90eXBlIDo9IHBfb2NpLkFubm90YXRpb25zW2NfdHlwZV0KICAgIGlfY3JpX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbY190eXBlXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogcF9jcmlfdHlwZSA9IiwgcF9jcmlfdHlwZSwgImlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBwX2NyaV90eXBlID09IGlfY3JpX3R5cGUKCiAgICBhbGxvd19ieV9jb250YWluZXJfdHlwZShpX2NyaV90eXBlLCBwX29jaSwgaV9vY2ksIHNfbmFtZSwgc19uYW1lc3BhY2UpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlczogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDE6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJzYW5kYm94IgoKICAgIGlfa2F0YV90eXBlIDo9IGlfb2NpLkFubm90YXRpb25zWyJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIl0KICAgIHByaW50KCJhbGxvd19ieV9jb250YWluZXJfdHlwZSAxOiBpX2thdGFfdHlwZSA9IiwgaV9rYXRhX3R5cGUpCiAgICBpX2thdGFfdHlwZSA9PSAicG9kX3NhbmRib3giCgogICAgYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZShwX29jaSwgaV9vY2kpCiAgICBhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkKCiAgICBwcmludCgiYWxsb3dfYnlfY29udGFpbmVyX3R5cGUgMTogdHJ1ZSIpCn0KCmFsbG93X2J5X2NvbnRhaW5lcl90eXBlKGlfY3JpX3R5cGUsIHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfY3JpX3R5cGUgPSIsIGlfY3JpX3R5cGUpCiAgICBpX2NyaV90eXBlID09ICJjb250YWluZXIiCgogICAgaV9rYXRhX3R5cGUgOj0gaV9vY2kuQW5ub3RhdGlvbnNbImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiXQogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IGlfa2F0YV90eXBlID0iLCBpX2thdGFfdHlwZSkKICAgIGlfa2F0YV90eXBlID09ICJwb2RfY29udGFpbmVyIgoKICAgIGFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkKICAgIGFsbG93X25ldF9uYW1lc3BhY2UocF9vY2ksIGlfb2NpKQogICAgYWxsb3dfbG9nX2RpcmVjdG9yeShwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2J5X2NvbnRhaW5lcl90eXBlIDI6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSIgYW5ub3RhdGlvbgphbGxvd19zYW5kYm94X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfY29udGFpbmVyX25hbWU6IHN0YXJ0IikKCiAgICBjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nKHBfb2NpLCBpX29jaSwgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci1uYW1lIikKCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9uYW1lKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2NvbnRhaW5lcl9uYW1lOiBzdGFydCIpCgogICAgYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb24ocF9vY2ksIGlfb2NpLCAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiKQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfbmFtZTogdHJ1ZSIpCn0KCmNvbnRhaW5lcl9hbm5vdGF0aW9uX21pc3NpbmcocF9vY2ksIGlfb2NpLCBrZXkpIHsKICAgIHByaW50KCJjb250YWluZXJfYW5ub3RhdGlvbl9taXNzaW5nOiIsIGtleSkKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiY29udGFpbmVyX2Fubm90YXRpb25fbWlzc2luZzogdHJ1ZSIpCn0KCmFsbG93X2NvbnRhaW5lcl9hbm5vdGF0aW9uKHBfb2NpLCBpX29jaSwga2V5KSB7CiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IGtleSA9Iiwga2V5KQoKICAgIHBfdmFsdWUgOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgaV92YWx1ZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfY29udGFpbmVyX2Fubm90YXRpb246IHBfdmFsdWUgPSIsIHBfdmFsdWUsICJpX3ZhbHVlID0iLCBpX3ZhbHVlKQoKICAgIHBfdmFsdWUgPT0gaV92YWx1ZQoKICAgIHByaW50KCJhbGxvd19jb250YWluZXJfYW5ub3RhdGlvbjogdHJ1ZSIpCn0KCiMgIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbmV0X25hbWVzcGFjZTogc3RhcnQiKQoKICAgIGtleSA6PSAibmVyZGN0bC9uZXR3b3JrLW5hbWVzcGFjZSIKCiAgICBwX25hbWVzcGFjZSA6PSBwX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBpX25hbWVzcGFjZSA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9uZXRfbmFtZXNwYWNlOiBwX25hbWVzcGFjZSA9IiwgcF9uYW1lc3BhY2UsICJpX25hbWVzcGFjZSA9IiwgaV9uYW1lc3BhY2UpCgogICAgcmVnZXgubWF0Y2gocF9uYW1lc3BhY2UsIGlfbmFtZXNwYWNlKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgphbGxvd19uZXRfbmFtZXNwYWNlKHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHN0YXJ0IikKCiAgICBrZXkgOj0gIm5lcmRjdGwvbmV0d29yay1uYW1lc3BhY2UiCgogICAgbm90IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIG5vdCBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X25ldF9uYW1lc3BhY2U6IHRydWUiKQp9CgojICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiIGFubm90YXRpb24KYWxsb3dfc2FuZGJveF9sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSwgc19uYW1lLCBzX25hbWVzcGFjZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfbG9nX2RpcmVjdG9yeTogc3RhcnQiKQoKICAgIGtleSA6PSAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1sb2ctZGlyZWN0b3J5IgoKICAgIHBfZGlyIDo9IHBfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHJlZ2V4MSA6PSByZXBsYWNlKHBfZGlyLCAiJChzYW5kYm94LW5hbWUpIiwgc19uYW1lKQogICAgcmVnZXgyIDo9IHJlcGxhY2UocmVnZXgxLCAiJChzYW5kYm94LW5hbWVzcGFjZSkiLCBzX25hbWVzcGFjZSkKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHJlZ2V4MiA9IiwgcmVnZXgyKQoKICAgIGlfZGlyIDo9IGlfb2NpLkFubm90YXRpb25zW2tleV0KICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IGlfZGlyID0iLCBpX2RpcikKCiAgICByZWdleC5tYXRjaChyZWdleDIsIGlfZGlyKQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X2xvZ19kaXJlY3Rvcnk6IHRydWUiKQp9CgphbGxvd19sb2dfZGlyZWN0b3J5KHBfb2NpLCBpX29jaSkgewogICAgcHJpbnQoImFsbG93X2xvZ19kaXJlY3Rvcnk6IHN0YXJ0IikKCiAgICBrZXkgOj0gImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbG9nLWRpcmVjdG9yeSIKCiAgICBub3QgcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgbm90IGlfb2NpLkFubm90YXRpb25zW2tleV0KCiAgICBwcmludCgiYWxsb3dfbG9nX2RpcmVjdG9yeTogdHJ1ZSIpCn0KCmFsbG93X2xpbnV4KHBfb2NpLCBpX29jaSkgewogICAgcF9uYW1lc3BhY2VzIDo9IHBfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogcCBuYW1lc3BhY2VzID0iLCBwX25hbWVzcGFjZXMpCgogICAgaV9uYW1lc3BhY2VzIDo9IGlfb2NpLkxpbnV4Lk5hbWVzcGFjZXMKICAgIHByaW50KCJhbGxvd19saW51eDogaSBuYW1lc3BhY2VzID0iLCBpX25hbWVzcGFjZXMpCgogICAgcF9uYW1lc3BhY2VzID09IGlfbmFtZXNwYWNlcwoKICAgIGFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpCiAgICBhbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpCgogICAgcHJpbnQoImFsbG93X2xpbnV4OiB0cnVlIikKfQoKYWxsb3dfbWFza2VkX3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAxOiBwX3BhdGhzID0iLCBwX3BhdGhzKQoKICAgIGlfcGF0aHMgOj0gaV9vY2kuTGludXguTWFza2VkUGF0aHMKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMTogaV9wYXRocyA9IiwgaV9wYXRocykKCiAgICBhbGxvd19tYXNrZWRfcGF0aHNfYXJyYXkocF9wYXRocywgaV9wYXRocykKCiAgICBwcmludCgiYWxsb3dfbWFza2VkX3BhdGhzIDE6IHRydWUiKQp9CmFsbG93X21hc2tlZF9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aHMgMjogc3RhcnQiKQoKICAgIG5vdCBwX29jaS5MaW51eC5NYXNrZWRQYXRocwogICAgbm90IGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzCgogICAgcHJpbnQoImFsbG93X21hc2tlZF9wYXRocyAyOiB0cnVlIikKfQoKIyBBbGwgdGhlIHBvbGljeSBtYXNrZWQgcGF0aHMgbXVzdCBiZSBtYXNrZWQgaW4gdGhlIGlucHV0IGRhdGEgdG9vLgojIElucHV0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtb3JlIG1hc2tlZCBwYXRocyB0aGFuIHRoZSBwb2xpY3kuCmFsbG93X21hc2tlZF9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5KSB7CiAgICBldmVyeSBwX2VsZW0gaW4gcF9hcnJheSB7CiAgICAgICAgYWxsb3dfbWFza2VkX3BhdGgocF9lbGVtLCBpX2FycmF5KQogICAgfQp9CgphbGxvd19tYXNrZWRfcGF0aChwX2VsZW0sIGlfYXJyYXkpIHsKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX2VsZW0gaW4gaV9hcnJheQogICAgcF9lbGVtID09IGlfZWxlbQoKICAgIHByaW50KCJhbGxvd19tYXNrZWRfcGF0aDogdHJ1ZSIpCn0KCmFsbG93X3JlYWRvbmx5X3BhdGhzKHBfb2NpLCBpX29jaSkgewogICAgcF9wYXRocyA6PSBwX29jaS5MaW51eC5SZWFkb25seVBhdGhzCiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aHMgMTogcF9wYXRocyA9IiwgcF9wYXRocykKCiAgICBpX3BhdGhzIDo9IGlfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiBpX3BhdGhzID0iLCBpX3BhdGhzKQoKICAgIGFsbG93X3JlYWRvbmx5X3BhdGhzX2FycmF5KHBfcGF0aHMsIGlfcGF0aHMsIGlfb2NpLkxpbnV4Lk1hc2tlZFBhdGhzKQoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAxOiB0cnVlIikKfQphbGxvd19yZWFkb25seV9wYXRocyhwX29jaSwgaV9vY2kpIHsKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRocyAyOiBzdGFydCIpCgogICAgbm90IHBfb2NpLkxpbnV4LlJlYWRvbmx5UGF0aHMKICAgIG5vdCBpX29jaS5MaW51eC5SZWFkb25seVBhdGhzCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGhzIDI6IHRydWUiKQp9CgojIEFsbCB0aGUgcG9saWN5IHJlYWRvbmx5IHBhdGhzIG11c3QgYmUgZWl0aGVyOgojIC0gUHJlc2VudCBpbiB0aGUgaW5wdXQgcmVhZG9ubHkgcGF0aHMsIG9yCiMgLSBQcmVzZW50IGluIHRoZSBpbnB1dCBtYXNrZWQgcGF0aHMuCiMgSW5wdXQgaXMgYWxsb3dlZCB0byBoYXZlIG1vcmUgcmVhZG9ubHkgcGF0aHMgdGhhbiB0aGUgcG9saWN5LgphbGxvd19yZWFkb25seV9wYXRoc19hcnJheShwX2FycmF5LCBpX2FycmF5LCBtYXNrZWRfcGF0aHMpIHsKICAgIGV2ZXJ5IHBfZWxlbSBpbiBwX2FycmF5IHsKICAgICAgICBhbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKQogICAgfQp9CgphbGxvd19yZWFkb25seV9wYXRoKHBfZWxlbSwgaV9hcnJheSwgbWFza2VkX3BhdGhzKSB7CiAgICBwcmludCgiYWxsb3dfcmVhZG9ubHlfcGF0aCAxOiBwX2VsZW0gPSIsIHBfZWxlbSkKCiAgICBzb21lIGlfZWxlbSBpbiBpX2FycmF5CiAgICBwX2VsZW0gPT0gaV9lbGVtCgogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMTogdHJ1ZSIpCn0KYWxsb3dfcmVhZG9ubHlfcGF0aChwX2VsZW0sIGlfYXJyYXksIG1hc2tlZF9wYXRocykgewogICAgcHJpbnQoImFsbG93X3JlYWRvbmx5X3BhdGggMjogcF9lbGVtID0iLCBwX2VsZW0pCgogICAgc29tZSBpX21hc2tlZCBpbiBtYXNrZWRfcGF0aHMKICAgIHBfZWxlbSA9PSBpX21hc2tlZAoKICAgIHByaW50KCJhbGxvd19yZWFkb25seV9wYXRoIDI6IHRydWUiKQp9CgojIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgaW5wdXQgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiCiMgYW5kIGlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtaWQiIHZhbHVlcyB3aXRoIG90aGVyIGZpZWxkcy4KYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQocF9vY2ksIGlfb2NpLCBwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfYnlfYnVuZGxlX29yX3NhbmRib3hfaWQ6IHN0YXJ0IikKCiAgICBidW5kbGVfcGF0aCA6PSBpX29jaS5Bbm5vdGF0aW9uc1siaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCJdCiAgICBidW5kbGVfaWQgOj0gcmVwbGFjZShidW5kbGVfcGF0aCwgIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vIiwgIiIpCgogICAga2V5IDo9ICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIgoKICAgIHBfcmVnZXggOj0gcF9vY2kuQW5ub3RhdGlvbnNba2V5XQogICAgc2FuZGJveF9pZCA6PSBpX29jaS5Bbm5vdGF0aW9uc1trZXldCgogICAgcHJpbnQoImFsbG93X2J5X2J1bmRsZV9vcl9zYW5kYm94X2lkOiBzYW5kYm94X2lkID0iLCBzYW5kYm94X2lkLCAicmVnZXggPSIsIHBfcmVnZXgpCiAgICByZWdleC5tYXRjaChwX3JlZ2V4LCBzYW5kYm94X2lkKQoKICAgIGFsbG93X3Jvb3RfcGF0aChwX29jaSwgaV9vY2ksIGJ1bmRsZV9pZCkKCiAgICBldmVyeSBpX21vdW50IGluIGlucHV0Lk9DSS5Nb3VudHMgewogICAgICAgIGFsbG93X21vdW50KHBfb2NpLCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCiAgICB9CgogICAgYWxsb3dfc3RvcmFnZXMocF9zdG9yYWdlcywgaV9zdG9yYWdlcywgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJhbGxvd19ieV9idW5kbGVfb3Jfc2FuZGJveF9pZDogdHJ1ZSIpCn0KCmFsbG93X3Byb2Nlc3MocF9vY2ksIGlfb2NpLCBzX25hbWUpIHsKICAgIHBfcHJvY2VzcyA6PSBwX29jaS5Qcm9jZXNzCiAgICBpX3Byb2Nlc3MgOj0gaV9vY2kuUHJvY2VzcwoKICAgIHByaW50KCJhbGxvd19wcm9jZXNzOiBpIHRlcm1pbmFsID0iLCBpX3Byb2Nlc3MuVGVybWluYWwsICJwIHRlcm1pbmFsID0iLCBwX3Byb2Nlc3MuVGVybWluYWwpCiAgICBwX3Byb2Nlc3MuVGVybWluYWwgPT0gaV9wcm9jZXNzLlRlcm1pbmFsCgogICAgcHJpbnQoImFsbG93X3Byb2Nlc3M6IGkgY3dkID0iLCBpX3Byb2Nlc3MuQ3dkLCAiaSBjd2QgPSIsIHBfcHJvY2Vzcy5Dd2QpCiAgICBwX3Byb2Nlc3MuQ3dkID09IGlfcHJvY2Vzcy5Dd2QKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogaSBub05ld1ByaXZpbGVnZXMgPSIsIGlfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMsICJwIG5vTmV3UHJpdmlsZWdlcyA9IiwgcF9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcykKICAgIHBfcHJvY2Vzcy5Ob05ld1ByaXZpbGVnZXMgPT0gaV9wcm9jZXNzLk5vTmV3UHJpdmlsZWdlcwoKICAgIGFsbG93X2NhcHMocF9wcm9jZXNzLkNhcGFiaWxpdGllcywgaV9wcm9jZXNzLkNhcGFiaWxpdGllcykKICAgIGFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpCiAgICBhbGxvd19hcmdzKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpCiAgICBhbGxvd19lbnYocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkKCiAgICBwcmludCgiYWxsb3dfcHJvY2VzczogdHJ1ZSIpCn0KCmFsbG93X3VzZXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MpIHsKICAgIHBfdXNlciA6PSBwX3Byb2Nlc3MuVXNlcgogICAgaV91c2VyIDo9IGlfcHJvY2Vzcy5Vc2VyCgogICAgcHJpbnQoImFsbG93X3VzZXI6IGlucHV0IHVpZCA9IiwgaV91c2VyLlVJRCwgInBvbGljeSB1aWQgPSIsIHBfdXNlci5VSUQpCiAgICBwX3VzZXIuVUlEID09IGlfdXNlci5VSUQKCiAgICAjIFRPRE86IHRyYWNrIGRvd24gdGhlIHJlYXNvbiBmb3IgcmVnaXN0cnkuazhzLmlvL3BhdXNlOjMuOSBiZWluZwogICAgIyAgICAgICBleGVjdXRlZCB3aXRoIGdpZCA9IDAgZGVzcGl0ZSBoYXZpbmcgIjY1NTM1OjY1NTM1IiBpbiBpdHMgY29udGFpbmVyIGltYWdlCiAgICAjICAgICAgIGNvbmZpZy4KICAgICNwcmludCgiYWxsb3dfdXNlcjogaW5wdXQgZ2lkID0iLCBpX3VzZXIuR0lELCAicG9saWN5IGdpZCA9IiwgcF91c2VyLkdJRCkKICAgICNwX3VzZXIuR0lEID09IGlfdXNlci5HSUQKCiAgICAjIFRPRE86IGNvbXBhcmUgdGhlIGFkZGl0aW9uYWxHaWRzIGZpZWxkIHRvbyBhZnRlciBjb21wdXRpbmcgaXRzIHZhbHVlCiAgICAjIGJhc2VkIG9uIC9ldGMvcGFzc3dkIGFuZCAvZXRjL2dyb3VwIGZyb20gdGhlIGNvbnRhaW5lciBpbWFnZS4KfQoKYWxsb3dfYXJncyhwX3Byb2Nlc3MsIGlfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfYXJncyAxOiBubyBhcmdzIikKCiAgICBub3QgcF9wcm9jZXNzLkFyZ3MKICAgIG5vdCBpX3Byb2Nlc3MuQXJncwoKICAgIHByaW50KCJhbGxvd19hcmdzIDE6IHRydWUiKQp9CmFsbG93X2FyZ3MocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogcG9saWN5IGFyZ3MgPSIsIHBfcHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoImFsbG93X2FyZ3MgMjogaW5wdXQgYXJncyA9IiwgaV9wcm9jZXNzLkFyZ3MpCgogICAgY291bnQocF9wcm9jZXNzLkFyZ3MpID09IGNvdW50KGlfcHJvY2Vzcy5BcmdzKQoKICAgIGV2ZXJ5IGksIGlfYXJnIGluIGlfcHJvY2Vzcy5BcmdzIHsKICAgICAgICBhbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19hcmdzIDI6IHRydWUiKQp9CmFsbG93X2FyZyhpLCBpX2FyZywgcF9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHBfYXJnIDo9IHBfcHJvY2Vzcy5BcmdzW2ldCiAgICBwcmludCgiYWxsb3dfYXJnIDE6IGkgPSIsIGksICJpX2FyZyA9IiwgaV9hcmcsICJwX2FyZyA9IiwgcF9hcmcpCgogICAgcF9hcmcyIDo9IHJlcGxhY2UocF9hcmcsICIkJCIsICIkIikKICAgIHBfYXJnMiA9PSBpX2FyZwoKICAgIHByaW50KCJhbGxvd19hcmcgMTogdHJ1ZSIpCn0KYWxsb3dfYXJnKGksIGlfYXJnLCBwX3Byb2Nlc3MsIHNfbmFtZSkgewogICAgcF9hcmcgOj0gcF9wcm9jZXNzLkFyZ3NbaV0KICAgIHByaW50KCJhbGxvd19hcmcgMjogaSA9IiwgaSwgImlfYXJnID0iLCBpX2FyZywgInBfYXJnID0iLCBwX2FyZykKCiAgICAjIFRPRE86IGNhbiAkKG5vZGUtbmFtZSkgYmUgaGFuZGxlZCBiZXR0ZXI/CiAgICBjb250YWlucyhwX2FyZywgIiQobm9kZS1uYW1lKSIpCgogICAgcHJpbnQoImFsbG93X2FyZyAyOiB0cnVlIikKfQphbGxvd19hcmcoaSwgaV9hcmcsIHBfcHJvY2Vzcywgc19uYW1lKSB7CiAgICBwX2FyZyA6PSBwX3Byb2Nlc3MuQXJnc1tpXQogICAgcHJpbnQoImFsbG93X2FyZyAzOiBpID0iLCBpLCAiaV9hcmcgPSIsIGlfYXJnLCAicF9hcmcgPSIsIHBfYXJnKQoKICAgIHBfYXJnMiA6PSByZXBsYWNlKHBfYXJnLCAiJCQiLCAiJCIpCiAgICBwX2FyZzMgOj0gcmVwbGFjZShwX2FyZzIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfYXJnIDM6IHBfYXJnMyA9IiwgcF9hcmczKQogICAgcF9hcmczID09IGlfYXJnCgogICAgcHJpbnQoImFsbG93X2FyZyAzOiB0cnVlIikKfQoKIyBPQ0kgcHJvY2Vzcy5FbnYgZmllbGQKYWxsb3dfZW52KHBfcHJvY2VzcywgaV9wcm9jZXNzLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd19lbnY6IHAgZW52ID0iLCBwX3Byb2Nlc3MuRW52KQogICAgcHJpbnQoImFsbG93X2VudjogaSBlbnYgPSIsIGlfcHJvY2Vzcy5FbnYpCgogICAgZXZlcnkgaV92YXIgaW4gaV9wcm9jZXNzLkVudiB7CiAgICAgICAgYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKQogICAgfQoKICAgIHByaW50KCJhbGxvd19lbnY6IHRydWUiKQp9CgojIEFsbG93IGlucHV0IGVudiB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcG9saWN5IGRhdGEgdG9vLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMTogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIgPT0gaV92YXIKCiAgICBwcmludCgiYWxsb3dfdmFyIDE6IHRydWUiKQp9CgojIE1hdGNoIGlucHV0IHdpdGggb25lIG9mIHRoZSBwb2xpY3kgdmFyaWFibGVzLCBhZnRlciBzdWJzdGl0dXRpbmcgJChzYW5kYm94LW5hbWUpLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMjogaV92YXIgPSIsIGlfdmFyKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgcF92YXIyIDo9IHJlcGxhY2UocF92YXIsICIkKHNhbmRib3gtbmFtZSkiLCBzX25hbWUpCiAgICBwcmludCgiYWxsb3dfdmFyIDI6IHBfdmFyMiA9IiwgcF92YXIyKQoKICAgIHBfdmFyMiA9PSBpX3ZhcgoKICAgIHByaW50KCJhbGxvd192YXIgMjogdHJ1ZSIpCn0KCiMgQWxsb3cgaW5wdXQgZW52IHZhcmlhYmxlcyB0aGF0IG1hdGNoIHdpdGggYSByZXF1ZXN0X2RlZmF1bHRzIHJlZ2V4LgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgMzogc3RhcnQiKQoKICAgIHNvbWUgcF9yZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5DcmVhdGVDb250YWluZXJSZXF1ZXN0LmFsbG93X2Vudl9yZWdleAogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MSA9IiwgcF9yZWdleDEpCgogICAgcF9yZWdleDIgOj0gcmVwbGFjZShwX3JlZ2V4MSwgIiQoaXB2NF9hKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcHY0X2EpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXgyID0iLCBwX3JlZ2V4MikKCiAgICBwX3JlZ2V4MyA6PSByZXBsYWNlKHBfcmVnZXgyLCAiJChpcF9wKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5pcF9wKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4MyA9IiwgcF9yZWdleDMpCgogICAgcF9yZWdleDQgOj0gcmVwbGFjZShwX3JlZ2V4MywgIiQoc3ZjX25hbWUpIiwgcG9saWN5X2RhdGEuY29tbW9uLnN2Y19uYW1lKQogICAgcHJpbnQoImFsbG93X3ZhciAzOiBwX3JlZ2V4NCA9IiwgcF9yZWdleDQpCgogICAgcF9yZWdleDUgOj0gcmVwbGFjZShwX3JlZ2V4NCwgIiQoZG5zX2xhYmVsKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5kbnNfbGFiZWwpCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHBfcmVnZXg1ID0iLCBwX3JlZ2V4NSkKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IGlfdmFyID0iLCBpX3ZhcikKICAgIHJlZ2V4Lm1hdGNoKHBfcmVnZXg1LCBpX3ZhcikKCiAgICBwcmludCgiYWxsb3dfdmFyIDM6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5wb2RJUCIgdmFsdWVzLgphbGxvd192YXIocF9wcm9jZXNzLCBpX3Byb2Nlc3MsIGlfdmFyLCBzX25hbWUpIHsKICAgIHByaW50KCJhbGxvd192YXIgNDogaV92YXIgPSIsIGlfdmFyKQoKICAgIG5hbWVfdmFsdWUgOj0gc3BsaXQoaV92YXIsICI9IikKICAgIGNvdW50KG5hbWVfdmFsdWUpID09IDIKICAgIGlzX2lwKG5hbWVfdmFsdWVbMV0pCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBhbGxvd19wb2RfaXBfdmFyKG5hbWVfdmFsdWVbMF0sIHBfdmFyKQoKICAgIHByaW50KCJhbGxvd192YXIgNDogdHJ1ZSIpCn0KCiMgQWxsb3cgY29tbW9uIGZpZWxkUmVmIHZhcmlhYmxlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDU6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA6PSBbIiQoaG9zdC1uYW1lKSIsICIkKG5vZGUtbmFtZSkiLCAiJChwb2QtdWlkKSJdCiAgICBzb21lIGFsbG93ZWQgaW4gYWx3YXlzX2FsbG93ZWQKICAgIGNvbnRhaW5zKHBfbmFtZV92YWx1ZVsxXSwgYWxsb3dlZCkKCiAgICBwcmludCgiYWxsb3dfdmFyIDU6IHRydWUiKQp9CgojIEFsbG93IGZpZWxkUmVmICJmaWVsZFBhdGg6IHN0YXR1cy5ob3N0SVAiIHZhbHVlcy4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDY6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCiAgICBpc19pcChuYW1lX3ZhbHVlWzFdKQoKICAgIHNvbWUgcF92YXIgaW4gcF9wcm9jZXNzLkVudgogICAgYWxsb3dfaG9zdF9pcF92YXIobmFtZV92YWx1ZVswXSwgcF92YXIpCgogICAgcHJpbnQoImFsbG93X3ZhciA2OiB0cnVlIikKfQoKIyBBbGxvdyByZXNvdXJjZUZpZWxkUmVmIHZhbHVlcyAoZS5nLiwgImxpbWl0cy5jcHUiKS4KYWxsb3dfdmFyKHBfcHJvY2VzcywgaV9wcm9jZXNzLCBpX3Zhciwgc19uYW1lKSB7CiAgICBwcmludCgiYWxsb3dfdmFyIDc6IGlfdmFyID0iLCBpX3ZhcikKCiAgICBuYW1lX3ZhbHVlIDo9IHNwbGl0KGlfdmFyLCAiPSIpCiAgICBjb3VudChuYW1lX3ZhbHVlKSA9PSAyCgogICAgc29tZSBwX3ZhciBpbiBwX3Byb2Nlc3MuRW52CiAgICBwX25hbWVfdmFsdWUgOj0gc3BsaXQocF92YXIsICI9IikKICAgIGNvdW50KHBfbmFtZV92YWx1ZSkgPT0gMgoKICAgIHBfbmFtZV92YWx1ZVswXSA9PSBuYW1lX3ZhbHVlWzBdCgogICAgIyBUT0RPOiBzaG91bGQgdGhlc2UgYmUgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCB3YXk/CiAgICBhbHdheXNfYWxsb3dlZCA9IFsiJChyZXNvdXJjZS1maWVsZCkiLCAiJCh0b2RvLWFubm90YXRpb24pIl0KICAgIHNvbWUgYWxsb3dlZCBpbiBhbHdheXNfYWxsb3dlZAogICAgY29udGFpbnMocF9uYW1lX3ZhbHVlWzFdLCBhbGxvd2VkKQoKICAgIHByaW50KCJhbGxvd192YXIgNzogdHJ1ZSIpCn0KCmFsbG93X3BvZF9pcF92YXIodmFyX25hbWUsIHBfdmFyKSB7CiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdmFyX25hbWUgPSIsIHZhcl9uYW1lLCAicF92YXIgPSIsIHBfdmFyKQoKICAgIHBfbmFtZV92YWx1ZSA6PSBzcGxpdChwX3ZhciwgIj0iKQogICAgY291bnQocF9uYW1lX3ZhbHVlKSA9PSAyCgogICAgcF9uYW1lX3ZhbHVlWzBdID09IHZhcl9uYW1lCiAgICBwX25hbWVfdmFsdWVbMV0gPT0gIiQocG9kLWlwKSIKCiAgICBwcmludCgiYWxsb3dfcG9kX2lwX3ZhcjogdHJ1ZSIpCn0KCmFsbG93X2hvc3RfaXBfdmFyKHZhcl9uYW1lLCBwX3ZhcikgewogICAgcHJpbnQoImFsbG93X2hvc3RfaXBfdmFyOiB2YXJfbmFtZSA9IiwgdmFyX25hbWUsICJwX3ZhciA9IiwgcF92YXIpCgogICAgcF9uYW1lX3ZhbHVlIDo9IHNwbGl0KHBfdmFyLCAiPSIpCiAgICBjb3VudChwX25hbWVfdmFsdWUpID09IDIKCiAgICBwX25hbWVfdmFsdWVbMF0gPT0gdmFyX25hbWUKICAgIHBfbmFtZV92YWx1ZVsxXSA9PSAiJChob3N0LWlwKSIKCiAgICBwcmludCgiYWxsb3dfaG9zdF9pcF92YXI6IHRydWUiKQp9Cgppc19pcCh2YWx1ZSkgewogICAgYnl0ZXMgPSBzcGxpdCh2YWx1ZSwgIi4iKQogICAgY291bnQoYnl0ZXMpID09IDQKCiAgICBpc19pcF9maXJzdF9ieXRlKGJ5dGVzWzBdKQogICAgaXNfaXBfb3RoZXJfYnl0ZShieXRlc1sxXSkKICAgIGlzX2lwX290aGVyX2J5dGUoYnl0ZXNbMl0pCiAgICBpc19pcF9vdGhlcl9ieXRlKGJ5dGVzWzNdKQp9CmlzX2lwX2ZpcnN0X2J5dGUoY29tcG9uZW50KSB7CiAgICBudW1iZXIgPSB0b19udW1iZXIoY29tcG9uZW50KQogICAgbnVtYmVyID49IDEKICAgIG51bWJlciA8PSAyNTUKfQppc19pcF9vdGhlcl9ieXRlKGNvbXBvbmVudCkgewogICAgbnVtYmVyID0gdG9fbnVtYmVyKGNvbXBvbmVudCkKICAgIG51bWJlciA+PSAwCiAgICBudW1iZXIgPD0gMjU1Cn0KCiMgT0NJIHJvb3QuUGF0aAphbGxvd19yb290X3BhdGgocF9vY2ksIGlfb2NpLCBidW5kbGVfaWQpIHsKICAgIGlfcGF0aCA6PSBpX29jaS5Sb290LlBhdGgKICAgIHBfcGF0aDEgOj0gcF9vY2kuUm9vdC5QYXRoCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBpX3BhdGggPSIsIGlfcGF0aCwgInBfcGF0aDEgPSIsIHBfcGF0aDEpCgogICAgcF9wYXRoMiA6PSByZXBsYWNlKHBfcGF0aDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19yb290X3BhdGg6IHBfcGF0aDIgPSIsIHBfcGF0aDIpCgogICAgcF9wYXRoMyA6PSByZXBsYWNlKHBfcGF0aDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfcm9vdF9wYXRoOiBwX3BhdGgzID0iLCBwX3BhdGgzKQoKICAgIHBfcGF0aDMgPT0gaV9wYXRoCgogICAgcHJpbnQoImFsbG93X3Jvb3RfcGF0aDogdHJ1ZSIpCn0KCiMgZGV2aWNlIG1vdW50cwphbGxvd19tb3VudChwX29jaSwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnQ6IHN0YXJ0IikKCiAgICBzb21lIHBfbW91bnQgaW4gcF9vY2kuTW91bnRzCiAgICBjaGVja19tb3VudChwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpCgogICAgIyBUT0RPOiBhcmUgdGhlcmUgYW55IG90aGVyIHJlcXVpcmVkIHBvbGljeSBjaGVja3MgZm9yIG1vdW50cyAtIGUuZy4sCiAgICAjICAgICAgIG11bHRpcGxlIG1vdW50cyB3aXRoIHNhbWUgc291cmNlIG9yIGRlc3RpbmF0aW9uPwoKICAgIHByaW50KCJhbGxvd19tb3VudDogdHJ1ZSIpCn0KCmNoZWNrX21vdW50KHBfbW91bnQsIGlfbW91bnQsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCkgewogICAgcHJpbnQoImNoZWNrX21vdW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogaV9tb3VudCA9IiwgaV9tb3VudCkKCiAgICBwX21vdW50ID09IGlfbW91bnQKCiAgICBwcmludCgiY2hlY2tfbW91bnQgMTogdHJ1ZSIpCn0KY2hlY2tfbW91bnQocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSBkZXN0aW5hdGlvbiA9IiwgaV9tb3VudC5kZXN0aW5hdGlvbiwgInAgZGVzdGluYXRpb24gPSIsIHBfbW91bnQuZGVzdGluYXRpb24pCiAgICBwX21vdW50LmRlc3RpbmF0aW9uID09IGlfbW91bnQuZGVzdGluYXRpb24KCiAgICBwcmludCgiY2hlY2tfbW91bnQgMjogaSB0eXBlID0iLCBpX21vdW50LnR5cGVfLCAicCB0eXBlID0iLCBwX21vdW50LnR5cGVfKQogICAgcF9tb3VudC50eXBlXyA9PSBpX21vdW50LnR5cGVfCgogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IGkgb3B0aW9ucyA9IiwgaV9tb3VudC5vcHRpb25zKQogICAgcHJpbnQoImNoZWNrX21vdW50IDI6IHAgb3B0aW9ucyA9IiwgcF9tb3VudC5vcHRpb25zKQogICAgcF9tb3VudC5vcHRpb25zID09IGlfbW91bnQub3B0aW9ucwoKICAgIG1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKQoKICAgIHByaW50KCJjaGVja19tb3VudCAyOiB0cnVlIikKfQoKbW91bnRfc291cmNlX2FsbG93cyhwX21vdW50LCBpX21vdW50LCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IGlfbW91bnQuc291cmNlID0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMTogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAxOiByZWdleDQgPSIsIHJlZ2V4NCkKCiAgICByZWdleC5tYXRjaChyZWdleDQsIGlfbW91bnQuc291cmNlKQoKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDE6IHRydWUiKQp9Cm1vdW50X3NvdXJjZV9hbGxvd3MocF9tb3VudCwgaV9tb3VudCwgYnVuZGxlX2lkLCBzYW5kYm94X2lkKSB7CiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiBpX21vdW50LnNvdXJjZT0iLCBpX21vdW50LnNvdXJjZSkKCiAgICByZWdleDEgOj0gcF9tb3VudC5zb3VyY2UKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4MSA9IiwgcmVnZXgxKQoKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogcmVnZXgyID0iLCByZWdleDIpCgogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBwcmludCgibW91bnRfc291cmNlX2FsbG93cyAyOiByZWdleDMgPSIsIHJlZ2V4MykKCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJtb3VudF9zb3VyY2VfYWxsb3dzIDI6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaV9tb3VudC5zb3VyY2UpCgogICAgcHJpbnQoIm1vdW50X3NvdXJjZV9hbGxvd3MgMjogdHJ1ZSIpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDcmVhdGUgY29udGFpbmVyIFN0b3JhZ2VzCgphbGxvd19zdG9yYWdlcyhwX3N0b3JhZ2VzLCBpX3N0b3JhZ2VzLCBidW5kbGVfaWQsIHNhbmRib3hfaWQpIHsKICAgIHBfY291bnQgOj0gY291bnQocF9zdG9yYWdlcykKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogcF9jb3VudCA9IiwgcF9jb3VudCwgImlfY291bnQgPSIsIGlfY291bnQpCgogICAgcF9jb3VudCA9PSBpX2NvdW50CgogICAgIyBHZXQgdGhlIGNvbnRhaW5lciBpbWFnZSBsYXllciBJRHMgYW5kIHZlcml0eSByb290IGhhc2hlcywgZnJvbSB0aGUgIm92ZXJsYXlmcyIgc3RvcmFnZS4KICAgIHNvbWUgb3ZlcmxheV9zdG9yYWdlIGluIHBfc3RvcmFnZXMKICAgIG92ZXJsYXlfc3RvcmFnZS5kcml2ZXIgPT0gIm92ZXJsYXlmcyIKICAgIHByaW50KCJhbGxvd19zdG9yYWdlczogb3ZlcmxheV9zdG9yYWdlID0iLCBvdmVybGF5X3N0b3JhZ2UpCiAgICBjb3VudChvdmVybGF5X3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIGxheWVyX2lkcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1swXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiBsYXllcl9pZHMgPSIsIGxheWVyX2lkcykKCiAgICByb290X2hhc2hlcyA6PSBzcGxpdChvdmVybGF5X3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiByb290X2hhc2hlcyA9Iiwgcm9vdF9oYXNoZXMpCgogICAgZXZlcnkgaV9zdG9yYWdlIGluIGlfc3RvcmFnZXMgewogICAgICAgIGFsbG93X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcywgcm9vdF9oYXNoZXMpCiAgICB9CgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZShwX3N0b3JhZ2VzLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBwX3N0b3JhZ2UgPSIsIHBfc3RvcmFnZSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiBpX3N0b3JhZ2UgPSIsIGlfc3RvcmFnZSkKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICAgICAgICAgICA9PSBpX3N0b3JhZ2UuZHJpdmVyCiAgICBwX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMgICA9PSBpX3N0b3JhZ2UuZHJpdmVyX29wdGlvbnMKICAgIHBfc3RvcmFnZS5mc19ncm91cCAgICAgICAgID09IGlfc3RvcmFnZS5mc19ncm91cAoKICAgIGFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykKICAgIGFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykKCiAgICAjIFRPRE86IHZhbGlkYXRlIHRoZSBzb3VyY2UgZmllbGQgdG9vLgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlOiB0cnVlIikKfQoKYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDE6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJibGsiCiAgICBwX3N0b3JhZ2UuZHJpdmVyICE9ICJvdmVybGF5ZnMiCiAgICBwX3N0b3JhZ2Uub3B0aW9ucyA9PSBpX3N0b3JhZ2Uub3B0aW9ucwoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMTogdHJ1ZSIpCn0KYWxsb3dfc3RvcmFnZV9vcHRpb25zKHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBsYXllcl9pZHMsIHJvb3RfaGFzaGVzKSB7CiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHN0YXJ0IikKCiAgICBwX3N0b3JhZ2UuZHJpdmVyID09ICJvdmVybGF5ZnMiCiAgICBjb3VudChwX3N0b3JhZ2Uub3B0aW9ucykgPT0gMgoKICAgIHBvbGljeV9pZHMgOj0gc3BsaXQocF9zdG9yYWdlLm9wdGlvbnNbMF0sICI6IikKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcG9saWN5X2lkcyA9IiwgcG9saWN5X2lkcykKICAgIHBvbGljeV9pZHMgPT0gbGF5ZXJfaWRzCgogICAgcG9saWN5X2hhc2hlcyA6PSBzcGxpdChwX3N0b3JhZ2Uub3B0aW9uc1sxXSwgIjoiKQogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBwb2xpY3lfaGFzaGVzID0iLCBwb2xpY3lfaGFzaGVzKQoKICAgIHBfY291bnQgOj0gY291bnQocG9saWN5X2lkcykKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogcF9jb3VudCA9IiwgcF9jb3VudCkKICAgIHBfY291bnQgPj0gMQogICAgcF9jb3VudCA9PSBjb3VudChwb2xpY3lfaGFzaGVzKQoKICAgIGlfY291bnQgOj0gY291bnQoaV9zdG9yYWdlLm9wdGlvbnMpCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IGlfY291bnQgPSIsIGlfY291bnQpCiAgICBpX2NvdW50ID09IHBfY291bnQgKyAzCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9IiwgaV9zdG9yYWdlLm9wdGlvbnNbMF0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1swXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyLXNyYy1wcmVmaXg9L3Zhci9saWIvY29udGFpbmVyZC9pby5jb250YWluZXJkLnNuYXBzaG90dGVyLnYxLnRhcmRldi9sYXllcnMiCgogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAyOiBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMl0gPSIsIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSkKICAgIGlfc3RvcmFnZS5vcHRpb25zW2lfY291bnQgLSAyXSA9PSAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0Lm92ZXJsYXktcnciCgogICAgbG93ZXJkaXIgOj0gY29uY2F0KCI9IiwgWyJsb3dlcmRpciIsIHBfc3RvcmFnZS5vcHRpb25zWzBdXSkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogbG93ZXJkaXIgPSIsIGxvd2VyZGlyKQoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMjogaV9zdG9yYWdlLm9wdGlvbnNbaV9jb3VudCAtIDFdID0iLCBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0pCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1tpX2NvdW50IC0gMV0gPT0gbG93ZXJkaXIKCiAgICBldmVyeSBpLCBwb2xpY3lfaWQgaW4gcG9saWN5X2lkcyB7CiAgICAgICAgYWxsb3dfb3ZlcmxheV9sYXllcihwb2xpY3lfaWQsIHBvbGljeV9oYXNoZXNbaV0sIGlfc3RvcmFnZS5vcHRpb25zW2kgKyAxXSkKICAgIH0KCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDI6IHRydWUiKQp9CmFsbG93X3N0b3JhZ2Vfb3B0aW9ucyhwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgbGF5ZXJfaWRzLCByb290X2hhc2hlcykgewogICAgcHJpbnQoImFsbG93X3N0b3JhZ2Vfb3B0aW9ucyAzOiBzdGFydCIpCgogICAgcF9zdG9yYWdlLmRyaXZlciA9PSAiYmxrIgogICAgY291bnQocF9zdG9yYWdlLm9wdGlvbnMpID09IDEKCiAgICBzdGFydHN3aXRoKHBfc3RvcmFnZS5vcHRpb25zWzBdLCAiJChoYXNoIikKICAgIGhhc2hfc3VmZml4IDo9IHRyaW1fbGVmdChwX3N0b3JhZ2Uub3B0aW9uc1swXSwgIiQoaGFzaCIpCgogICAgZW5kc3dpdGgoaGFzaF9zdWZmaXgsICIpIikKICAgIGhhc2hfaW5kZXggOj0gdHJpbV9yaWdodChoYXNoX3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIoaGFzaF9pbmRleCkKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogaSA9IiwgaSkKCiAgICBoYXNoX29wdGlvbiA6PSBjb25jYXQoIj0iLCBbImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5yb290LWhhc2giLCByb290X2hhc2hlc1tpXV0pCiAgICBwcmludCgiYWxsb3dfc3RvcmFnZV9vcHRpb25zIDM6IGhhc2hfb3B0aW9uID0iLCBoYXNoX29wdGlvbikKCiAgICBjb3VudChpX3N0b3JhZ2Uub3B0aW9ucykgPT0gNAogICAgaV9zdG9yYWdlLm9wdGlvbnNbMF0gPT0gInJvIgogICAgaV9zdG9yYWdlLm9wdGlvbnNbMV0gPT0gImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSIKICAgIGlfc3RvcmFnZS5vcHRpb25zWzJdID09ICJpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIiCiAgICBpX3N0b3JhZ2Uub3B0aW9uc1szXSA9PSBoYXNoX29wdGlvbgoKICAgIHByaW50KCJhbGxvd19zdG9yYWdlX29wdGlvbnMgMzogdHJ1ZSIpCn0KCmFsbG93X292ZXJsYXlfbGF5ZXIocG9saWN5X2lkLCBwb2xpY3lfaGFzaCwgaV9vcHRpb24pIHsKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBwb2xpY3lfaWQgPSIsIHBvbGljeV9pZCwgInBvbGljeV9oYXNoID0iLCBwb2xpY3lfaGFzaCkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX29wdGlvbiA9IiwgaV9vcHRpb24pCgogICAgc3RhcnRzd2l0aChpX29wdGlvbiwgImlvLmthdGFjb250YWluZXJzLmZzLW9wdC5sYXllcj0iKQogICAgaV92YWx1ZSA6PSByZXBsYWNlKGlfb3B0aW9uLCAiaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LmxheWVyPSIsICIiKQogICAgaV92YWx1ZV9kZWNvZGVkIDo9IGJhc2U2NC5kZWNvZGUoaV92YWx1ZSkKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiBpX3ZhbHVlX2RlY29kZWQgPSIsIGlfdmFsdWVfZGVjb2RlZCkKCiAgICBwb2xpY3lfc3VmZml4IDo9IGNvbmNhdCgiPSIsIFsidGFyLHJvLGlvLmthdGFjb250YWluZXJzLmZzLW9wdC5ibG9ja19kZXZpY2U9ZmlsZSxpby5rYXRhY29udGFpbmVycy5mcy1vcHQuaXMtbGF5ZXIsaW8ua2F0YWNvbnRhaW5lcnMuZnMtb3B0LnJvb3QtaGFzaCIsIHBvbGljeV9oYXNoXSkKICAgIHBfdmFsdWUgOj0gY29uY2F0KCIsIiwgW3BvbGljeV9pZCwgcG9saWN5X3N1ZmZpeF0pCiAgICBwcmludCgiYWxsb3dfb3ZlcmxheV9sYXllcjogcF92YWx1ZSA9IiwgcF92YWx1ZSkKCiAgICBwX3ZhbHVlID09IGlfdmFsdWVfZGVjb2RlZAoKICAgIHByaW50KCJhbGxvd19vdmVybGF5X2xheWVyOiB0cnVlIikKfQoKYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJ0YXIiCgogICAgc3RhcnRzd2l0aChwX3N0b3JhZ2UubW91bnRfcG9pbnQsICIkKGxheWVyIikKICAgIG1vdW50X3N1ZmZpeCA6PSB0cmltX2xlZnQocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChsYXllciIpCgogICAgZW5kc3dpdGgobW91bnRfc3VmZml4LCAiKSIpCiAgICBsYXllcl9pbmRleCA6PSB0cmltX3JpZ2h0KG1vdW50X3N1ZmZpeCwgIikiKQogICAgaSA6PSB0b19udW1iZXIobGF5ZXJfaW5kZXgpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogaSA9IiwgaSkKCiAgICBsYXllcl9pZCA6PSBsYXllcl9pZHNbaV0KICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAxOiBsYXllcl9pZCA9IiwgbGF5ZXJfaWQpCgogICAgcF9tb3VudCA6PSBjb25jYXQoIi8iLCBbIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvbGF5ZXJzIiwgbGF5ZXJfaWRdKQogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDE6IHBfbW91bnQgPSIsIHBfbW91bnQpCgogICAgcF9tb3VudCA9PSBpX3N0b3JhZ2UubW91bnRfcG9pbnQKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMTogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJmdXNlMy5rYXRhLW92ZXJsYXkiCgogICAgbW91bnQxIDo9IHJlcGxhY2UocF9zdG9yYWdlLm1vdW50X3BvaW50LCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMjogbW91bnQyID0iLCBtb3VudDIpCgogICAgbW91bnQyID09IGlfc3RvcmFnZS5tb3VudF9wb2ludAoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAyOiB0cnVlIikKfQphbGxvd19tb3VudF9wb2ludChwX3N0b3JhZ2UsIGlfc3RvcmFnZSwgYnVuZGxlX2lkLCBzYW5kYm94X2lkLCBsYXllcl9pZHMpIHsKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBpX3N0b3JhZ2UubW91bnRfcG9pbnQgPSIsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKICAgIHBfc3RvcmFnZS5mc3R5cGUgPT0gImxvY2FsIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKHNhbmRib3gtaWQpIiwgc2FuZGJveF9pZCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCAzOiBtb3VudDMgPSIsIG1vdW50MykKCiAgICByZWdleC5tYXRjaChtb3VudDMsIGlfc3RvcmFnZS5tb3VudF9wb2ludCkKCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgMzogdHJ1ZSIpCn0KYWxsb3dfbW91bnRfcG9pbnQocF9zdG9yYWdlLCBpX3N0b3JhZ2UsIGJ1bmRsZV9pZCwgc2FuZGJveF9pZCwgbGF5ZXJfaWRzKSB7CiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogaV9zdG9yYWdlLm1vdW50X3BvaW50ID0iLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCiAgICBwX3N0b3JhZ2UuZnN0eXBlID09ICJiaW5kIgoKICAgIG1vdW50MSA6PSBwX3N0b3JhZ2UubW91bnRfcG9pbnQKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDEgPSIsIG1vdW50MSkKCiAgICBtb3VudDIgOj0gcmVwbGFjZShtb3VudDEsICIkKGNwYXRoKSIsIHBvbGljeV9kYXRhLmNvbW1vbi5jcGF0aCkKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA0OiBtb3VudDIgPSIsIG1vdW50MikKCiAgICBtb3VudDMgOj0gcmVwbGFjZShtb3VudDIsICIkKGJ1bmRsZS1pZCkiLCBidW5kbGVfaWQpCiAgICBwcmludCgiYWxsb3dfbW91bnRfcG9pbnQgNDogbW91bnQzID0iLCBtb3VudDMpCgogICAgcmVnZXgubWF0Y2gobW91bnQzLCBpX3N0b3JhZ2UubW91bnRfcG9pbnQpCgogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDQ6IHRydWUiKQp9CmFsbG93X21vdW50X3BvaW50KHBfc3RvcmFnZSwgaV9zdG9yYWdlLCBidW5kbGVfaWQsIHNhbmRib3hfaWQsIGxheWVyX2lkcykgewogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IGlfc3RvcmFnZS5tb3VudF9wb2ludCA9IiwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQogICAgcF9zdG9yYWdlLmZzdHlwZSA9PSAidG1wZnMiCgogICAgbW91bnQxIDo9IHBfc3RvcmFnZS5tb3VudF9wb2ludAogICAgcHJpbnQoImFsbG93X21vdW50X3BvaW50IDU6IG1vdW50MSA9IiwgbW91bnQxKQoKICAgIHJlZ2V4Lm1hdGNoKG1vdW50MSwgaV9zdG9yYWdlLm1vdW50X3BvaW50KQoKICAgIHByaW50KCJhbGxvd19tb3VudF9wb2ludCA1OiB0cnVlIikKfQoKIyBwcm9jZXNzLkNhcGFiaWxpdGllcwphbGxvd19jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEFtYmllbnQgPSIsIHBfY2Fwcy5BbWJpZW50KQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEFtYmllbnQgPSIsIGlfY2Fwcy5BbWJpZW50KQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuQW1iaWVudCwgaV9jYXBzLkFtYmllbnQpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBCb3VuZGluZyA9IiwgcF9jYXBzLkJvdW5kaW5nKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEJvdW5kaW5nID0iLCBpX2NhcHMuQm91bmRpbmcpCiAgICBtYXRjaF9jYXBzKHBfY2Fwcy5Cb3VuZGluZywgaV9jYXBzLkJvdW5kaW5nKQoKICAgIHByaW50KCJhbGxvd19jYXBzOiBwb2xpY3kgRWZmZWN0aXZlID0iLCBwX2NhcHMuRWZmZWN0aXZlKQogICAgcHJpbnQoImFsbG93X2NhcHM6IGlucHV0IEVmZmVjdGl2ZSA9IiwgaV9jYXBzLkVmZmVjdGl2ZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkVmZmVjdGl2ZSwgaV9jYXBzLkVmZmVjdGl2ZSkKCiAgICBwcmludCgiYWxsb3dfY2FwczogcG9saWN5IEluaGVyaXRhYmxlID0iLCBwX2NhcHMuSW5oZXJpdGFibGUpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgSW5oZXJpdGFibGUgPSIsIGlfY2Fwcy5Jbmhlcml0YWJsZSkKICAgIG1hdGNoX2NhcHMocF9jYXBzLkluaGVyaXRhYmxlLCBpX2NhcHMuSW5oZXJpdGFibGUpCgogICAgcHJpbnQoImFsbG93X2NhcHM6IHBvbGljeSBQZXJtaXR0ZWQgPSIsIHBfY2Fwcy5QZXJtaXR0ZWQpCiAgICBwcmludCgiYWxsb3dfY2FwczogaW5wdXQgUGVybWl0dGVkID0iLCBpX2NhcHMuUGVybWl0dGVkKQogICAgbWF0Y2hfY2FwcyhwX2NhcHMuUGVybWl0dGVkLCBpX2NhcHMuUGVybWl0dGVkKQp9CgptYXRjaF9jYXBzKHBfY2FwcywgaV9jYXBzKSB7CiAgICBwcmludCgibWF0Y2hfY2FwcyAxOiBzdGFydCIpCgogICAgcF9jYXBzID09IGlfY2FwcwoKICAgIHByaW50KCJtYXRjaF9jYXBzIDE6IHRydWUiKQp9Cm1hdGNoX2NhcHMocF9jYXBzLCBpX2NhcHMpIHsKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IHN0YXJ0IikKCiAgICBjb3VudChwX2NhcHMpID09IDEKICAgIHBfY2Fwc1swXSA9PSAiJChkZWZhdWx0X2NhcHMpIgoKICAgIHByaW50KCJtYXRjaF9jYXBzIDI6IGRlZmF1bHRfY2FwcyA9IiwgcG9saWN5X2RhdGEuY29tbW9uLmRlZmF1bHRfY2FwcykKICAgIHBvbGljeV9kYXRhLmNvbW1vbi5kZWZhdWx0X2NhcHMgPT0gaV9jYXBzCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMjogdHJ1ZSIpCn0KbWF0Y2hfY2FwcyhwX2NhcHMsIGlfY2FwcykgewogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogc3RhcnQiKQoKICAgIGNvdW50KHBfY2FwcykgPT0gMQogICAgcF9jYXBzWzBdID09ICIkKHByaXZpbGVnZWRfY2FwcykiCgogICAgcHJpbnQoIm1hdGNoX2NhcHMgMzogcHJpdmlsZWdlZF9jYXBzID0iLCBwb2xpY3lfZGF0YS5jb21tb24ucHJpdmlsZWdlZF9jYXBzKQogICAgcG9saWN5X2RhdGEuY29tbW9uLnByaXZpbGVnZWRfY2FwcyA9PSBpX2NhcHMKCiAgICBwcmludCgibWF0Y2hfY2FwcyAzOiB0cnVlIikKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlfcGF0aCkgewogICAgY29udGFpbnMoaV9wYXRoLCAiLi4vIikgPT0gZmFsc2UKICAgIGVuZHN3aXRoKGlfcGF0aCwgIi8uLiIpID09IGZhbHNlCiAgICBpX3BhdGggIT0gIi4uIgp9CgpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICAjIFRPRE86IGRlbGV0ZSB0aGlzIHJ1bGUgb25jZSB0aGUgc3ltbGlua19zcmMgZmllbGQgZ2V0cyBpbXBsZW1lbnRlZAogICAgIyBieSBhbGwvbW9zdCBHdWVzdCBWTXMuCiAgICBub3QgaW5wdXQuc3ltbGlua19zcmMKfQpjaGVja19zeW1saW5rX3NvdXJjZSB7CiAgICBpX3NyYyA6PSBpbnB1dC5zeW1saW5rX3NyYwogICAgcHJpbnQoImNoZWNrX3N5bWxpbmtfc291cmNlOiBpX3NyYyA9IiwgaV9zcmMpCgogICAgc3RhcnRzd2l0aChpX3NyYywgIi8iKSA9PSBmYWxzZQogICAgY2hlY2tfZGlyZWN0b3J5X3RyYXZlcnNhbChpX3NyYykKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlcyhpX3N0b3JhZ2VzKSB7CiAgICBwcmludCgiYWxsb3dfc2FuZGJveF9zdG9yYWdlczogaV9zdG9yYWdlcyA9IiwgaV9zdG9yYWdlcykKCiAgICBwX3N0b3JhZ2VzIDo9IHBvbGljeV9kYXRhLnNhbmRib3guc3RvcmFnZXMKICAgIGV2ZXJ5IGlfc3RvcmFnZSBpbiBpX3N0b3JhZ2VzIHsKICAgICAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2UocF9zdG9yYWdlcywgaV9zdG9yYWdlKQogICAgfQoKICAgIHByaW50KCJhbGxvd19zYW5kYm94X3N0b3JhZ2VzOiB0cnVlIikKfQoKYWxsb3dfc2FuZGJveF9zdG9yYWdlKHBfc3RvcmFnZXMsIGlfc3RvcmFnZSkgewogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogaV9zdG9yYWdlID0iLCBpX3N0b3JhZ2UpCgogICAgc29tZSBwX3N0b3JhZ2UgaW4gcF9zdG9yYWdlcwogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogcF9zdG9yYWdlID0iLCBwX3N0b3JhZ2UpCiAgICBpX3N0b3JhZ2UgPT0gcF9zdG9yYWdlCgogICAgcHJpbnQoImFsbG93X3NhbmRib3hfc3RvcmFnZTogdHJ1ZSIpCn0KCkNvcHlGaWxlUmVxdWVzdCB7CiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiBpbnB1dC5wYXRoID0iLCBpbnB1dC5wYXRoKQoKICAgIGNoZWNrX3N5bWxpbmtfc291cmNlCiAgICBjaGVja19kaXJlY3RvcnlfdHJhdmVyc2FsKGlucHV0LnBhdGgpCgogICAgc29tZSByZWdleDEgaW4gcG9saWN5X2RhdGEucmVxdWVzdF9kZWZhdWx0cy5Db3B5RmlsZVJlcXVlc3QKICAgIHJlZ2V4MiA6PSByZXBsYWNlKHJlZ2V4MSwgIiQoc2ZwcmVmaXgpIiwgcG9saWN5X2RhdGEuY29tbW9uLnNmcHJlZml4KQogICAgcmVnZXgzIDo9IHJlcGxhY2UocmVnZXgyLCAiJChjcGF0aCkiLCBwb2xpY3lfZGF0YS5jb21tb24uY3BhdGgpCiAgICByZWdleDQgOj0gcmVwbGFjZShyZWdleDMsICIkKGJ1bmRsZS1pZCkiLCAiW2EtejAtOV17NjR9IikKICAgIHByaW50KCJDb3B5RmlsZVJlcXVlc3Q6IHJlZ2V4NCA9IiwgcmVnZXg0KQoKICAgIHJlZ2V4Lm1hdGNoKHJlZ2V4NCwgaW5wdXQucGF0aCkKCiAgICBwcmludCgiQ29weUZpbGVSZXF1ZXN0OiB0cnVlIikKfQoKQ3JlYXRlU2FuZGJveFJlcXVlc3QgewogICAgcHJpbnQoIkNyZWF0ZVNhbmRib3hSZXF1ZXN0OiBpbnB1dC5ndWVzdF9ob29rX3BhdGggPSIsIGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkKICAgIGNvdW50KGlucHV0Lmd1ZXN0X2hvb2tfcGF0aCkgPT0gMAoKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaW5wdXQua2VybmVsX21vZHVsZXMgPSIsIGlucHV0Lmtlcm5lbF9tb2R1bGVzKQogICAgY291bnQoaW5wdXQua2VybmVsX21vZHVsZXMpID09IDAKCiAgICBpX3BpZG5zIDo9IGlucHV0LnNhbmRib3hfcGlkbnMKICAgIHByaW50KCJDcmVhdGVTYW5kYm94UmVxdWVzdDogaV9waWRucyA9IiwgaV9waWRucykKICAgIGlfcGlkbnMgPT0gZmFsc2UKCiAgICBhbGxvd19zYW5kYm94X3N0b3JhZ2VzKGlucHV0LnN0b3JhZ2VzKQp9CgpFeGVjUHJvY2Vzc1JlcXVlc3QgewogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAxOiBpbnB1dCA9IiwgaW5wdXQpCgogICAgaV9jb21tYW5kID0gY29uY2F0KCIgIiwgaW5wdXQucHJvY2Vzcy5BcmdzKQogICAgcHJpbnQoIkV4ZWNQcm9jZXNzUmVxdWVzdCAzOiBpX2NvbW1hbmQgPSIsIGlfY29tbWFuZCkKCiAgICBzb21lIHBfY29tbWFuZCBpbiBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLkV4ZWNQcm9jZXNzUmVxdWVzdC5jb21tYW5kcwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMTogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogaW5wdXQgPSIsIGlucHV0KQoKICAgICMgVE9ETzogbWF0Y2ggaW5wdXQgY29udGFpbmVyIElEIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyLmV4ZWNfY29tbWFuZHMuCiAgICBpX2NvbW1hbmQgPSBjb25jYXQoIiAiLCBpbnB1dC5wcm9jZXNzLkFyZ3MpCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IGlfY29tbWFuZCA9IiwgaV9jb21tYW5kKQoKICAgIHNvbWUgY29udGFpbmVyIGluIHBvbGljeV9kYXRhLmNvbnRhaW5lcnMKICAgIHNvbWUgcF9jb21tYW5kIGluIGNvbnRhaW5lci5leGVjX2NvbW1hbmRzCiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDI6IHBfY29tbWFuZCA9IiwgcF9jb21tYW5kKQoKICAgICMgVE9ETzogc2hvdWxkIG90aGVyIGlucHV0IGRhdGEgZmllbGRzIGJlIHZhbGlkYXRlZCBhcyB3ZWxsPwogICAgcF9jb21tYW5kID09IGlfY29tbWFuZAoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMjogdHJ1ZSIpCn0KRXhlY1Byb2Nlc3NSZXF1ZXN0IHsKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaW5wdXQgPSIsIGlucHV0KQoKICAgIGlfY29tbWFuZCA9IGNvbmNhdCgiICIsIGlucHV0LnByb2Nlc3MuQXJncykKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogaV9jb21tYW5kID0iLCBpX2NvbW1hbmQpCgogICAgc29tZSBwX3JlZ2V4IGluIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuRXhlY1Byb2Nlc3NSZXF1ZXN0LnJlZ2V4CiAgICBwcmludCgiRXhlY1Byb2Nlc3NSZXF1ZXN0IDM6IHBfcmVnZXggPSIsIHBfcmVnZXgpCgogICAgcmVnZXgubWF0Y2gocF9yZWdleCwgaV9jb21tYW5kKQoKICAgIHByaW50KCJFeGVjUHJvY2Vzc1JlcXVlc3QgMzogdHJ1ZSIpCn0KClJlYWRTdHJlYW1SZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuUmVhZFN0cmVhbVJlcXVlc3QgPT0gdHJ1ZQp9CgpVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IHsKICAgIHBvbGljeV9kYXRhLnJlcXVlc3RfZGVmYXVsdHMuVXBkYXRlRXBoZW1lcmFsTW91bnRzUmVxdWVzdCA9PSB0cnVlCn0KCldyaXRlU3RyZWFtUmVxdWVzdCB7CiAgICBwb2xpY3lfZGF0YS5yZXF1ZXN0X2RlZmF1bHRzLldyaXRlU3RyZWFtUmVxdWVzdCA9PSB0cnVlCn0KCnBvbGljeV9kYXRhIDo9IHsKICAiY29udGFpbmVycyI6IFsKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiA2NTUzNSwKICAgICAgICAgICAgIkdJRCI6IDY1NTM1LAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9wYXVzZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIlJvb3QiOiB7CiAgICAgICAgICAiUGF0aCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgIlJlYWRvbmx5IjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9yZXNvbHYuY29uZiIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClyZXNvbHYuY29uZiQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJvIiwKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJub2V4ZWMiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJBbm5vdGF0aW9ucyI6IHsKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmJ1bmRsZV9wYXRoIjogIi9ydW4vY29udGFpbmVyZC9pby5jb250YWluZXJkLnJ1bnRpbWUudjIudGFzay9rOHMuaW8vJChidW5kbGUtaWQpIiwKICAgICAgICAgICJpby5rYXRhY29udGFpbmVycy5wa2cub2NpLmNvbnRhaW5lcl90eXBlIjogInBvZF9zYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItdHlwZSI6ICJzYW5kYm94IiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWxvZy1kaXJlY3RvcnkiOiAiXi92YXIvbG9nL3BvZHMvJChzYW5kYm94LW5hbWVzcGFjZSlfJChzYW5kYm94LW5hbWUpX1swLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZSI6ICJkbnMtdGVzdC1hODQ4NjUzYS01YzE3LTQ4NWItYmU0Ni1mYWEwYzBkYTExOTIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLnNhbmRib3gtbmFtZXNwYWNlIjogImRucy0xMzcwIiwKICAgICAgICAgICJuZXJkY3RsL25ldHdvcmstbmFtZXNwYWNlIjogIl4vdmFyL3J1bi9uZXRucy9jbmktWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvc3lzL2Zpcm13YXJlIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI1YTVhYWQ4MDA1NWZmMjAwMTJhNTBkYzI1ZjhkZjdhMjk5MjQ0NzQzMjRkNjVmN2Q1MzA2ZWU4ZWUyN2ZmNzFkIiwKICAgICAgICAgICAgIjgxNzI1MGYxYTNlMzM2ZGE3NmY1YmQzZmE3ODRlMWIyNmQ5NTliOWMxMzE4NzY4MTViYTI2MDQwNDhiNzBjMTgiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgIi9hZ25ob3N0IiwKICAgICAgICAgICAgInRlc3Qtd2Vic2VydmVyIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcmVzdWx0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAibG9jYWwiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJ3ZWJzZXJ2ZXIiLAogICAgICAgICAgImlvLmt1YmVybmV0ZXMuY3JpLmNvbnRhaW5lci10eXBlIjogImNvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuaW1hZ2UtbmFtZSI6ICJyZWdpc3RyeS5rOHMuaW8vZTJlLXRlc3QtaW1hZ2VzL2Fnbmhvc3Q6Mi40MyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogImRucy10ZXN0LWE4NDg2NTNhLTVjMTctNDg1Yi1iZTQ2LWZhYTBjMGRhMTE5MiIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZG5zLTEzNzAiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI2KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI3KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI4KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoOSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI5KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiNTFmMWQ1ZGY5ZTViNjQ2MzI3NzljOTk2YTNhYmI5YjMyY2M2OWM3NmUwYzE3NjIwZWQ2Y2VmZjE1ZDNmMjgxYTpiZjRkMDE0N2YzYWJlYTU1NTUwYThhNjEyYmRjMTE0NGI5Njk2NmQ1MjBjMjY3ZTE1NTE2ZDUxNTdjYjM5YmFiOmIxYmI1N2EzZTVkMDYyZjlhM2RlNGZlMWMyYWQyMzI4MjMzYTY4MTdhYTA0YmIyOGY4M2I4NmQ4MTQ1MmFmNWI6ZGFlZDcxN2VmMjEwMDY3NDIyYzkyN2M0ZWRmMjIwYzQzM2E4MDcwY2Q3ZjBhYzA5YzQ1MDc5ZGEyNDc1YzRmMzplMWY2OTc5Yjg2YzhlYWUxMGM2OGMxOWYzYjA1MDMyZGZhYjFkNzcwMTgyNzI5YWRiM2Q4MDhjNzBmN2I5ZjdmOjE1MzVmNzhhMDdkNTI0MDVhZDczMTdjYmZjZWRmMDRkNjAwZGU0MGIxN2UzMWY1YWIyNTU2NjExMDA0YTViNWE6MTkxOGEwNTJmZmQyMDZlNDU5YTJhZGI3MWNhYmViZWYwMGNjZjc0NGMyMmRhNjRhOGQ4YTk0ZTA5M2Q2ODAzYjoyMDdlYTAwYjVkYWQwNDQ1YTZjNDY1ODI2ZjJmYjU3MTNiYjRkY2NhMzY5NTMxZTJhN2Y1OTVmNTM3Mzk1NTk2Ojk1MDBlNDY2MTdmYjQ1ODI4MjQ5MjFjZTIxZjU1YWVhYTk1YTMxOWJiMzRlYmZjMTE5MDQyYmRlMTk5OTZlZGI6ZGE1OTgwYTdlMzQzNDQwOWRhMTIzMjQxN2ExZDFjYzAyOTY3YjYyYTA5OTUwMmNhY2QxM2NjMmUzNDIwNmZhNCIsCiAgICAgICAgICAgICJlY2U1ZWYyMTZjNDAwNDdhY2NmMzhkM2E4YjE2ODk5ZDEzYjI3MTIwNjdkZDQ3OGEyMTc4Mzc4ZWM3ZmNiZmM2OjE3YTgzOGIwMjM0NzgyZWI3ZjZiY2FhMGZiMjhiZWY5ZjYzMDI2OGQyZTEyYzNiMjgwMjJkYWJmMWNkYmE4MTI6OTMxMGY0YjdjOGQ3MzBiZTA1NTA5NmZiOWUwZGJiNzk2NDliMDJkMDk3ODM3ZDY2MDlmOTIwOTdhYjgwODE5NDoxYTY0NDcxZjNlOTYzMDYwMjBmNTVmOGNmMTdhYjY5YmMyNjAzNzBkZmNjZjMyNjIwMDQyZmYyYzYwNjc2N2ZiOmY0ZDJiMjQ0ODQyZjA1ZjRiMWJlNzcwNjk0NjFlYmRjZTczOTQ1ZDQzMGIwNWY0OWFmOWM1NDBhN2FkNmZlZTE6YTcxZjAwZDI1OGFiZWU0MTBiYTkyMmI0YjU0YzMwZDdlYThkY2RjMDVhZTM0NWUzNWNlYjFlOGE3ZmIwZmRiOToyMTVhN2ViMGI0YWQ0ODRkNTk5Zjk0NWE1YWZiMzcwMDgxOGNiY2Y3OTc4N2M1OTMxY2IzM2UwYmQyZmE4ZGY1OmIxMWVjMjI5MDU5NzU5NzEzNWE5MWRmODQ4MTI4NzQ3YmE3NjhhZDNmY2FmMGJiNzUwYjI5MjE2ZTJlM2MyZDE6MzRlMzdjM2E2YTAxMTA5OThjMTMyMzZmZGJjNzFlOTBmMzhjOGRmZTlhMGZkYmQwM2RiODc0NjY5NTYxNThmOToyNTRjNTMxNDg3M2MyN2E4ZGUzZGI1MzQ3ZjU2ZWJkOWViMmJmNDZjYzg4MTJhNDM2MTFmOThlMzhhYzM3YmEyIgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICIkKGNwYXRoKS8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImRyaXZlciI6ICJsb2NhbCIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAibG9jYWwiLAogICAgICAgICAgImZzdHlwZSI6ICJsb2NhbCIsCiAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgIm1vZGU9MDc3NyIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgImZzX2dyb3VwIjogbnVsbAogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbmRib3hfcGlkbnMiOiBmYWxzZSwKICAgICAgImV4ZWNfY29tbWFuZHMiOiBbXQogICAgfSwKICAgIHsKICAgICAgIk9DSSI6IHsKICAgICAgICAiVmVyc2lvbiI6ICIxLjEuMC1yYy4xIiwKICAgICAgICAiUHJvY2VzcyI6IHsKICAgICAgICAgICJUZXJtaW5hbCI6IGZhbHNlLAogICAgICAgICAgIlVzZXIiOiB7CiAgICAgICAgICAgICJVSUQiOiAwLAogICAgICAgICAgICAiR0lEIjogMCwKICAgICAgICAgICAgIkFkZGl0aW9uYWxHaWRzIjogW10sCiAgICAgICAgICAgICJVc2VybmFtZSI6ICIiCiAgICAgICAgICB9LAogICAgICAgICAgIkFyZ3MiOiBbCiAgICAgICAgICAgICJzaCIsCiAgICAgICAgICAgICItYyIsCiAgICAgICAgICAgICJmb3IgaSBpbiBgc2VxIDEgNjAwYDsgZG8gY2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggZG5zLXRlc3Qtc2VydmljZSBBKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL3doZWV6eV91ZHBAZG5zLXRlc3Qtc2VydmljZTtjaGVjaz1cIiQkKGRpZyArdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggZG5zLXRlc3Qtc2VydmljZSBBKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL3doZWV6eV90Y3BAZG5zLXRlc3Qtc2VydmljZTtjaGVjaz1cIiQkKGRpZyArbm90Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3VkcEBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3RjcEBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwO2NoZWNrPVwiJCQoZGlnICtub3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3VkcEBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwLnN2YztjaGVjaz1cIiQkKGRpZyArdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggZG5zLXRlc3Qtc2VydmljZS5kbnMtMTM3MC5zdmMgQSlcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy93aGVlenlfdGNwQGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICtub3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIF9odHRwLl90Y3AuZG5zLXRlc3Qtc2VydmljZS5kbnMtMTM3MC5zdmMgU1JWKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL3doZWV6eV91ZHBAX2h0dHAuX3RjcC5kbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwLnN2YztjaGVjaz1cIiQkKGRpZyArdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggX2h0dHAuX3RjcC5kbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwLnN2YyBTUlYpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3RjcEBfaHR0cC5fdGNwLmRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICtub3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIF9odHRwLl90Y3AudGVzdC1zZXJ2aWNlLTIuZG5zLTEzNzAuc3ZjIFNSVilcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy93aGVlenlfdWRwQF9odHRwLl90Y3AudGVzdC1zZXJ2aWNlLTIuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBfaHR0cC5fdGNwLnRlc3Qtc2VydmljZS0yLmRucy0xMzcwLnN2YyBTUlYpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvd2hlZXp5X3RjcEBfaHR0cC5fdGNwLnRlc3Qtc2VydmljZS0yLmRucy0xMzcwLnN2YztjaGVjaz1cIiQkKGRpZyArbm90Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCA3Ny42NS4wLjEwLmluLWFkZHIuYXJwYS4gUFRSKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzLzEwLjAuNjUuNzdfdWRwQFBUUjtjaGVjaz1cIiQkKGRpZyArdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggNzcuNjUuMC4xMC5pbi1hZGRyLmFycGEuIFBUUilcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy8xMC4wLjY1Ljc3X3RjcEBQVFI7c2xlZXAgMTsgZG9uZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiRW52IjogWwogICAgICAgICAgICAiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLAogICAgICAgICAgICAiSE9TVE5BTUU9JChob3N0LW5hbWUpIgogICAgICAgICAgXSwKICAgICAgICAgICJDd2QiOiAiLyIsCiAgICAgICAgICAiQ2FwYWJpbGl0aWVzIjogewogICAgICAgICAgICAiQW1iaWVudCI6IFtdLAogICAgICAgICAgICAiQm91bmRpbmciOiBbCiAgICAgICAgICAgICAgIiQoZGVmYXVsdF9jYXBzKSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIkVmZmVjdGl2ZSI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiSW5oZXJpdGFibGUiOiBbXSwKICAgICAgICAgICAgIlBlcm1pdHRlZCI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgIk5vTmV3UHJpdmlsZWdlcyI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiUm9vdCI6IHsKICAgICAgICAgICJQYXRoIjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiUmVhZG9ubHkiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIk1vdW50cyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9wcm9jIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJwcm9jIiwKICAgICAgICAgICAgInR5cGVfIjogInByb2MiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2IiwKICAgICAgICAgICAgInNvdXJjZSI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJ0bXBmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJzdHJpY3RhdGltZSIsCiAgICAgICAgICAgICAgIm1vZGU9NzU1IiwKICAgICAgICAgICAgICAic2l6ZT02NTUzNmsiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3B0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiZGV2cHRzIiwKICAgICAgICAgICAgInR5cGVfIjogImRldnB0cyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJuZXdpbnN0YW5jZSIsCiAgICAgICAgICAgICAgInB0bXhtb2RlPTA2NjYiLAogICAgICAgICAgICAgICJtb2RlPTA2MjAiLAogICAgICAgICAgICAgICJnaWQ9NSIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvc2htIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIvcnVuL2thdGEtY29udGFpbmVycy9zYW5kYm94L3NobSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9tcXVldWUiLAogICAgICAgICAgICAic291cmNlIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJtcXVldWUiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJzeXNmcyIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJzeXNmcyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3N5cy9mcy9jZ3JvdXAiLAogICAgICAgICAgICAic291cmNlIjogImNncm91cCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJjZ3JvdXAiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAibm9zdWlkIiwKICAgICAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICAgICAibm9kZXYiLAogICAgICAgICAgICAgICJyZWxhdGltZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L3Rlcm1pbmF0aW9uLWxvZyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0ZXJtaW5hdGlvbi1sb2ckIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2V0Yy9ob3N0bmFtZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClob3N0bmFtZSQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL3Jlc29sdi5jb25mIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXJlc29sdi5jb25mJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeClzZXJ2aWNlYWNjb3VudCQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvdmFyL3J1bi9zZWNyZXRzL2F6dXJlL3Rva2VucyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiJChzZnByZWZpeCl0b2tlbnMkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJvIgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Jlc3VsdHMiLAogICAgICAgICAgICAic291cmNlIjogIl4kKGNwYXRoKS8kKHNhbmRib3gtaWQpL2xvY2FsL3Jlc3VsdHMkIiwKICAgICAgICAgICAgInR5cGVfIjogImxvY2FsIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIkFubm90YXRpb25zIjogewogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuYnVuZGxlX3BhdGgiOiAiL3J1bi9jb250YWluZXJkL2lvLmNvbnRhaW5lcmQucnVudGltZS52Mi50YXNrL2s4cy5pby8kKGJ1bmRsZS1pZCkiLAogICAgICAgICAgImlvLmthdGFjb250YWluZXJzLnBrZy5vY2kuY29udGFpbmVyX3R5cGUiOiAicG9kX2NvbnRhaW5lciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLW5hbWUiOiAicXVlcmllciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogInJlZ2lzdHJ5Lms4cy5pby9lMmUtdGVzdC1pbWFnZXMvYWduaG9zdDoyLjQzIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LWlkIjogIl5bYS16MC05XXs2NH0kIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWUiOiAiZG5zLXRlc3QtYTg0ODY1M2EtNWMxNy00ODViLWJlNDYtZmFhMGMwZGExMTkyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5zYW5kYm94LW5hbWVzcGFjZSI6ICJkbnMtMTM3MCIKICAgICAgICB9LAogICAgICAgICJMaW51eCI6IHsKICAgICAgICAgICJOYW1lc3BhY2VzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAiaXBjIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJ1dHMiLAogICAgICAgICAgICAgICJQYXRoIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogIm1vdW50IiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiTWFza2VkUGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hY3BpIiwKICAgICAgICAgICAgIi9wcm9jL2tjb3JlIiwKICAgICAgICAgICAgIi9wcm9jL2tleXMiLAogICAgICAgICAgICAiL3Byb2MvbGF0ZW5jeV9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9saXN0IiwKICAgICAgICAgICAgIi9wcm9jL3RpbWVyX3N0YXRzIiwKICAgICAgICAgICAgIi9wcm9jL3NjaGVkX2RlYnVnIiwKICAgICAgICAgICAgIi9wcm9jL3Njc2kiLAogICAgICAgICAgICAiL3N5cy9maXJtd2FyZSIKICAgICAgICAgIF0sCiAgICAgICAgICAiUmVhZG9ubHlQYXRocyI6IFsKICAgICAgICAgICAgIi9wcm9jL2Fzb3VuZCIsCiAgICAgICAgICAgICIvcHJvYy9idXMiLAogICAgICAgICAgICAiL3Byb2MvZnMiLAogICAgICAgICAgICAiL3Byb2MvaXJxIiwKICAgICAgICAgICAgIi9wcm9jL3N5cyIsCiAgICAgICAgICAgICIvcHJvYy9zeXNycS10cmlnZ2VyIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0b3JhZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gwKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjApIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gxKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjEpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gyKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjIpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2gzKSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjMpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g0KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjQpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g1KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjUpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g2KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjYpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g3KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjcpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g4KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjgpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAiYmxrIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJ0YXIiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICIkKGhhc2g5KSIKICAgICAgICAgIF0sCiAgICAgICAgICAibW91bnRfcG9pbnQiOiAiJChsYXllcjkpIiwKICAgICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJkcml2ZXIiOiAib3ZlcmxheWZzIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICIiLAogICAgICAgICAgImZzdHlwZSI6ICJmdXNlMy5rYXRhLW92ZXJsYXkiLAogICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICI1MWYxZDVkZjllNWI2NDYzMjc3OWM5OTZhM2FiYjliMzJjYzY5Yzc2ZTBjMTc2MjBlZDZjZWZmMTVkM2YyODFhOmJmNGQwMTQ3ZjNhYmVhNTU1NTBhOGE2MTJiZGMxMTQ0Yjk2OTY2ZDUyMGMyNjdlMTU1MTZkNTE1N2NiMzliYWI6YjFiYjU3YTNlNWQwNjJmOWEzZGU0ZmUxYzJhZDIzMjgyMzNhNjgxN2FhMDRiYjI4ZjgzYjg2ZDgxNDUyYWY1YjpkYWVkNzE3ZWYyMTAwNjc0MjJjOTI3YzRlZGYyMjBjNDMzYTgwNzBjZDdmMGFjMDljNDUwNzlkYTI0NzVjNGYzOmUxZjY5NzliODZjOGVhZTEwYzY4YzE5ZjNiMDUwMzJkZmFiMWQ3NzAxODI3MjlhZGIzZDgwOGM3MGY3YjlmN2Y6MTUzNWY3OGEwN2Q1MjQwNWFkNzMxN2NiZmNlZGYwNGQ2MDBkZTQwYjE3ZTMxZjVhYjI1NTY2MTEwMDRhNWI1YToxOTE4YTA1MmZmZDIwNmU0NTlhMmFkYjcxY2FiZWJlZjAwY2NmNzQ0YzIyZGE2NGE4ZDhhOTRlMDkzZDY4MDNiOjIwN2VhMDBiNWRhZDA0NDVhNmM0NjU4MjZmMmZiNTcxM2JiNGRjY2EzNjk1MzFlMmE3ZjU5NWY1MzczOTU1OTY6OTUwMGU0NjYxN2ZiNDU4MjgyNDkyMWNlMjFmNTVhZWFhOTVhMzE5YmIzNGViZmMxMTkwNDJiZGUxOTk5NmVkYjpkYTU5ODBhN2UzNDM0NDA5ZGExMjMyNDE3YTFkMWNjMDI5NjdiNjJhMDk5NTAyY2FjZDEzY2MyZTM0MjA2ZmE0IiwKICAgICAgICAgICAgImVjZTVlZjIxNmM0MDA0N2FjY2YzOGQzYThiMTY4OTlkMTNiMjcxMjA2N2RkNDc4YTIxNzgzNzhlYzdmY2JmYzY6MTdhODM4YjAyMzQ3ODJlYjdmNmJjYWEwZmIyOGJlZjlmNjMwMjY4ZDJlMTJjM2IyODAyMmRhYmYxY2RiYTgxMjo5MzEwZjRiN2M4ZDczMGJlMDU1MDk2ZmI5ZTBkYmI3OTY0OWIwMmQwOTc4MzdkNjYwOWY5MjA5N2FiODA4MTk0OjFhNjQ0NzFmM2U5NjMwNjAyMGY1NWY4Y2YxN2FiNjliYzI2MDM3MGRmY2NmMzI2MjAwNDJmZjJjNjA2NzY3ZmI6ZjRkMmIyNDQ4NDJmMDVmNGIxYmU3NzA2OTQ2MWViZGNlNzM5NDVkNDMwYjA1ZjQ5YWY5YzU0MGE3YWQ2ZmVlMTphNzFmMDBkMjU4YWJlZTQxMGJhOTIyYjRiNTRjMzBkN2VhOGRjZGMwNWFlMzQ1ZTM1Y2ViMWU4YTdmYjBmZGI5OjIxNWE3ZWIwYjRhZDQ4NGQ1OTlmOTQ1YTVhZmIzNzAwODE4Y2JjZjc5Nzg3YzU5MzFjYjMzZTBiZDJmYThkZjU6YjExZWMyMjkwNTk3NTk3MTM1YTkxZGY4NDgxMjg3NDdiYTc2OGFkM2ZjYWYwYmI3NTBiMjkyMTZlMmUzYzJkMTozNGUzN2MzYTZhMDExMDk5OGMxMzIzNmZkYmM3MWU5MGYzOGM4ZGZlOWEwZmRiZDAzZGI4NzQ2Njk1NjE1OGY5OjI1NGM1MzE0ODczYzI3YThkZTNkYjUzNDdmNTZlYmQ5ZWIyYmY0NmNjODgxMmE0MzYxMWY5OGUzOGFjMzdiYTIiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImxvY2FsIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICJsb2NhbCIsCiAgICAgICAgICAiZnN0eXBlIjogImxvY2FsIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAibW9kZT0wNzc3IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICJeJChjcGF0aCkvJChzYW5kYm94LWlkKS9sb2NhbC9yZXN1bHRzJCIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiT0NJIjogewogICAgICAgICJWZXJzaW9uIjogIjEuMS4wLXJjLjEiLAogICAgICAgICJQcm9jZXNzIjogewogICAgICAgICAgIlRlcm1pbmFsIjogZmFsc2UsCiAgICAgICAgICAiVXNlciI6IHsKICAgICAgICAgICAgIlVJRCI6IDAsCiAgICAgICAgICAgICJHSUQiOiAwLAogICAgICAgICAgICAiQWRkaXRpb25hbEdpZHMiOiBbXSwKICAgICAgICAgICAgIlVzZXJuYW1lIjogIiIKICAgICAgICAgIH0sCiAgICAgICAgICAiQXJncyI6IFsKICAgICAgICAgICAgInNoIiwKICAgICAgICAgICAgIi1jIiwKICAgICAgICAgICAgImZvciBpIGluIGBzZXEgMSA2MDBgOyBkbyBjaGVjaz1cIiQkKGRpZyArbm90Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBkbnMtdGVzdC1zZXJ2aWNlIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvamVzc2llX3VkcEBkbnMtdGVzdC1zZXJ2aWNlO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBkbnMtdGVzdC1zZXJ2aWNlIEEpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvamVzc2llX3RjcEBkbnMtdGVzdC1zZXJ2aWNlO2NoZWNrPVwiJCQoZGlnICtub3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAgQSlcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy9qZXNzaWVfdWRwQGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzA7Y2hlY2s9XCIkJChkaWcgK3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAgQSlcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy9qZXNzaWVfdGNwQGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzA7Y2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggZG5zLXRlc3Qtc2VydmljZS5kbnMtMTM3MC5zdmMgQSlcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy9qZXNzaWVfdWRwQGRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBkbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwLnN2YyBBKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL2plc3NpZV90Y3BAZG5zLXRlc3Qtc2VydmljZS5kbnMtMTM3MC5zdmM7Y2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggX2h0dHAuX3RjcC5kbnMtdGVzdC1zZXJ2aWNlLmRucy0xMzcwLnN2YyBTUlYpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvamVzc2llX3VkcEBfaHR0cC5fdGNwLmRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCBfaHR0cC5fdGNwLmRucy10ZXN0LXNlcnZpY2UuZG5zLTEzNzAuc3ZjIFNSVilcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy9qZXNzaWVfdGNwQF9odHRwLl90Y3AuZG5zLXRlc3Qtc2VydmljZS5kbnMtMTM3MC5zdmM7Y2hlY2s9XCIkJChkaWcgK25vdGNwICtub2FsbCArYW5zd2VyICtzZWFyY2ggX2h0dHAuX3RjcC50ZXN0LXNlcnZpY2UtMi5kbnMtMTM3MC5zdmMgU1JWKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzL2plc3NpZV91ZHBAX2h0dHAuX3RjcC50ZXN0LXNlcnZpY2UtMi5kbnMtMTM3MC5zdmM7Y2hlY2s9XCIkJChkaWcgK3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIF9odHRwLl90Y3AudGVzdC1zZXJ2aWNlLTIuZG5zLTEzNzAuc3ZjIFNSVilcIiAmJiB0ZXN0IC1uIFwiJCRjaGVja1wiICYmIGVjaG8gT0sgPiAvcmVzdWx0cy9qZXNzaWVfdGNwQF9odHRwLl90Y3AudGVzdC1zZXJ2aWNlLTIuZG5zLTEzNzAuc3ZjO2NoZWNrPVwiJCQoZGlnICtub3RjcCArbm9hbGwgK2Fuc3dlciArc2VhcmNoIDc3LjY1LjAuMTAuaW4tYWRkci5hcnBhLiBQVFIpXCIgJiYgdGVzdCAtbiBcIiQkY2hlY2tcIiAmJiBlY2hvIE9LID4gL3Jlc3VsdHMvMTAuMC42NS43N191ZHBAUFRSO2NoZWNrPVwiJCQoZGlnICt0Y3AgK25vYWxsICthbnN3ZXIgK3NlYXJjaCA3Ny42NS4wLjEwLmluLWFkZHIuYXJwYS4gUFRSKVwiICYmIHRlc3QgLW4gXCIkJGNoZWNrXCIgJiYgZWNobyBPSyA+IC9yZXN1bHRzLzEwLjAuNjUuNzdfdGNwQFBUUjtzbGVlcCAxOyBkb25lIgogICAgICAgICAgXSwKICAgICAgICAgICJFbnYiOiBbCiAgICAgICAgICAgICJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsCiAgICAgICAgICAgICJIT1NUTkFNRT0kKGhvc3QtbmFtZSkiCiAgICAgICAgICBdLAogICAgICAgICAgIkN3ZCI6ICIvIiwKICAgICAgICAgICJDYXBhYmlsaXRpZXMiOiB7CiAgICAgICAgICAgICJBbWJpZW50IjogW10sCiAgICAgICAgICAgICJCb3VuZGluZyI6IFsKICAgICAgICAgICAgICAiJChkZWZhdWx0X2NhcHMpIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiRWZmZWN0aXZlIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJJbmhlcml0YWJsZSI6IFtdLAogICAgICAgICAgICAiUGVybWl0dGVkIjogWwogICAgICAgICAgICAgICIkKGRlZmF1bHRfY2FwcykiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICAiTm9OZXdQcml2aWxlZ2VzIjogZmFsc2UKICAgICAgICB9LAogICAgICAgICJSb290IjogewogICAgICAgICAgIlBhdGgiOiAiJChjcGF0aCkvJChidW5kbGUtaWQpIiwKICAgICAgICAgICJSZWFkb25seSI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiTW91bnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Byb2MiLAogICAgICAgICAgICAic291cmNlIjogInByb2MiLAogICAgICAgICAgICAidHlwZV8iOiAicHJvYyIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYiLAogICAgICAgICAgICAic291cmNlIjogInRtcGZzIiwKICAgICAgICAgICAgInR5cGVfIjogInRtcGZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgInN0cmljdGF0aW1lIiwKICAgICAgICAgICAgICAibW9kZT03NTUiLAogICAgICAgICAgICAgICJzaXplPTY1NTM2ayIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvcHRzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICJkZXZwdHMiLAogICAgICAgICAgICAidHlwZV8iOiAiZGV2cHRzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5ld2luc3RhbmNlIiwKICAgICAgICAgICAgICAicHRteG1vZGU9MDY2NiIsCiAgICAgICAgICAgICAgIm1vZGU9MDYyMCIsCiAgICAgICAgICAgICAgImdpZD01IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL2Rldi9zaG0iLAogICAgICAgICAgICAic291cmNlIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NhbmRib3gvc2htIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZGV2L21xdWV1ZSIsCiAgICAgICAgICAgICJzb3VyY2UiOiAibXF1ZXVlIiwKICAgICAgICAgICAgInR5cGVfIjogIm1xdWV1ZSIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9zeXMiLAogICAgICAgICAgICAic291cmNlIjogInN5c2ZzIiwKICAgICAgICAgICAgInR5cGVfIjogInN5c2ZzIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgIm5vc3VpZCIsCiAgICAgICAgICAgICAgIm5vZXhlYyIsCiAgICAgICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvc3lzL2ZzL2Nncm91cCIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiY2dyb3VwIiwKICAgICAgICAgICAgInR5cGVfIjogImNncm91cCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgICAgICJub2V4ZWMiLAogICAgICAgICAgICAgICJub2RldiIsCiAgICAgICAgICAgICAgInJlbGF0aW1lIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RzIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RzJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9kZXYvdGVybWluYXRpb24tbG9nIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRlcm1pbmF0aW9uLWxvZyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicnciCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvZXRjL2hvc3RuYW1lIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KWhvc3RuYW1lJCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJydyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi9ldGMvcmVzb2x2LmNvbmYiLAogICAgICAgICAgICAic291cmNlIjogIiQoc2ZwcmVmaXgpcmVzb2x2LmNvbmYkIiwKICAgICAgICAgICAgInR5cGVfIjogImJpbmQiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiZGVzdGluYXRpb24iOiAiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50IiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXNlcnZpY2VhY2NvdW50JCIsCiAgICAgICAgICAgICJ0eXBlXyI6ICJiaW5kIiwKICAgICAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAgICAgInJiaW5kIiwKICAgICAgICAgICAgICAicnByaXZhdGUiLAogICAgICAgICAgICAgICJybyIKICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogIi92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zIiwKICAgICAgICAgICAgInNvdXJjZSI6ICIkKHNmcHJlZml4KXRva2VucyQiLAogICAgICAgICAgICAidHlwZV8iOiAiYmluZCIsCiAgICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAgICJyYmluZCIsCiAgICAgICAgICAgICAgInJwcml2YXRlIiwKICAgICAgICAgICAgICAicm8iCiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXN0aW5hdGlvbiI6ICIvcmVzdWx0cyIsCiAgICAgICAgICAgICJzb3VyY2UiOiAiXiQoY3BhdGgpLyQoc2FuZGJveC1pZCkvbG9jYWwvcmVzdWx0cyQiLAogICAgICAgICAgICAidHlwZV8iOiAibG9jYWwiLAogICAgICAgICAgICAib3B0aW9ucyI6IFsKICAgICAgICAgICAgICAicmJpbmQiLAogICAgICAgICAgICAgICJycHJpdmF0ZSIsCiAgICAgICAgICAgICAgInJ3IgogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiQW5ub3RhdGlvbnMiOiB7CiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5idW5kbGVfcGF0aCI6ICIvcnVuL2NvbnRhaW5lcmQvaW8uY29udGFpbmVyZC5ydW50aW1lLnYyLnRhc2svazhzLmlvLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiaW8ua2F0YWNvbnRhaW5lcnMucGtnLm9jaS5jb250YWluZXJfdHlwZSI6ICJwb2RfY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5jb250YWluZXItbmFtZSI6ICJqZXNzaWUtcXVlcmllciIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuY29udGFpbmVyLXR5cGUiOiAiY29udGFpbmVyIiwKICAgICAgICAgICJpby5rdWJlcm5ldGVzLmNyaS5pbWFnZS1uYW1lIjogInJlZ2lzdHJ5Lms4cy5pby9lMmUtdGVzdC1pbWFnZXMvamVzc2llLWRuc3V0aWxzOjEuNyIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1pZCI6ICJeW2EtejAtOV17NjR9JCIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lIjogImRucy10ZXN0LWE4NDg2NTNhLTVjMTctNDg1Yi1iZTQ2LWZhYTBjMGRhMTE5MiIsCiAgICAgICAgICAiaW8ua3ViZXJuZXRlcy5jcmkuc2FuZGJveC1uYW1lc3BhY2UiOiAiZG5zLTEzNzAiCiAgICAgICAgfSwKICAgICAgICAiTGludXgiOiB7CiAgICAgICAgICAiTmFtZXNwYWNlcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJUeXBlIjogImlwYyIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIlR5cGUiOiAidXRzIiwKICAgICAgICAgICAgICAiUGF0aCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAiVHlwZSI6ICJtb3VudCIsCiAgICAgICAgICAgICAgIlBhdGgiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgICBdLAogICAgICAgICAgIk1hc2tlZFBhdGhzIjogWwogICAgICAgICAgICAiL3Byb2MvYWNwaSIsCiAgICAgICAgICAgICIvcHJvYy9rY29yZSIsCiAgICAgICAgICAgICIvcHJvYy9rZXlzIiwKICAgICAgICAgICAgIi9wcm9jL2xhdGVuY3lfc3RhdHMiLAogICAgICAgICAgICAiL3Byb2MvdGltZXJfbGlzdCIsCiAgICAgICAgICAgICIvcHJvYy90aW1lcl9zdGF0cyIsCiAgICAgICAgICAgICIvcHJvYy9zY2hlZF9kZWJ1ZyIsCiAgICAgICAgICAgICIvcHJvYy9zY3NpIiwKICAgICAgICAgICAgIi9zeXMvZmlybXdhcmUiCiAgICAgICAgICBdLAogICAgICAgICAgIlJlYWRvbmx5UGF0aHMiOiBbCiAgICAgICAgICAgICIvcHJvYy9hc291bmQiLAogICAgICAgICAgICAiL3Byb2MvYnVzIiwKICAgICAgICAgICAgIi9wcm9jL2ZzIiwKICAgICAgICAgICAgIi9wcm9jL2lycSIsCiAgICAgICAgICAgICIvcHJvYy9zeXMiLAogICAgICAgICAgICAiL3Byb2Mvc3lzcnEtdHJpZ2dlciIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJzdG9yYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIwKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIxKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMikiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIyKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoMykiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXIzKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNCkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI0KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImJsayIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAidGFyIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiJChoYXNoNSkiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQobGF5ZXI1KSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogIm92ZXJsYXlmcyIsCiAgICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAgICJzb3VyY2UiOiAiIiwKICAgICAgICAgICJmc3R5cGUiOiAiZnVzZTMua2F0YS1vdmVybGF5IiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAiMTBiNTZjNzU2ODliMmQzZmQzNGRhYjU4NmUyODRjODkxN2JhYTdmMjQ0NWI2NDM5ZDc4YWI2ZDk2NDVhNjBiMzplNTAwMDQ5NjEzZWI0ZWYwMmUwM2U2NTgwZTgwYzVhODI2NzMwYTk0NDUyMWRhZmYxZWVmNzc2YjJmY2MwZjIwOmFjODNmNGEzNzJiMzQwMjE5M2VhMzE0ZWM3ZThhODdiOTFjNTljNzNlMjNiYTc5Y2VjOTJjMWE0MWM4YWFmNTQ6MGIyYzVjM2M0NjMzODIwYjViNGY2ZDc3ZWEyMmM1ZWQwZTNkM2MzMzIwOTE2NWMyYjE4MTU4N2IyZDhiZTMxMjo3M2ZhMGFhOTk2YTM3NGNjODQ2NzI4ZjcyNjM5M2NmY2ZmNDZjOTgyZGNmNjJkMmQyNTlmNjAwNmRlZTVlMmJkOjM1Zjc4YWYxMGI2MzQwMmJiODlkYTE2MTUxM2ZhNTYzNDY1YmNjMWQ0MzQzYzRmN2Q0OTgxMWZmOWI3MGRkYTkiLAogICAgICAgICAgICAiMmJkYzJmYWUzYzg3YWNjNmExODYzMzZmOGIzMDY1NTAyZDFiZTdiY2ZhYWMzMjE1N2RmYzQ4YzRiNGMxZDdmNjplYmU2MjM4NjZhYjM3MmM1MTAxYmFhZjc2N2IyODFkZTcxMDBiOTM0MjY5NmJjYzgyZmY0ZjA2MWY0YjE1OTY2OjIxM2Y4NDBiMTAwNjkwODA0YTc2YTFhOWQzY2UzYzA1MzEzODFiMGE3NjA3NjI1ODAzYTZmODY3MTM0NDEyZGI6Njc0NTAwODJhYjU2ZGExYWVjYzVlYWUyZjE4ZDk4MGNkOWU3MzA2ZTc5MzM0YTFhODI2YTkxY2ZkOTAxMTRhODowODU5ZTU1MzFmZDdmOGIxNzA3MTQxNGEwODJhZmI2NWIyYmU3MDJlY2RhZmEwMDdkZDA1NzdhZWE4NmY4NTkzOjA2Zjg5YzI3NWRjMzRmMjZiOWRiMGNmMDEwMmIyYTg5OWRlNjU1NTEwNTg1MmQwYWYyYmI5NWYzNzRmNzE0NGQiCiAgICAgICAgICBdLAogICAgICAgICAgIm1vdW50X3BvaW50IjogIiQoY3BhdGgpLyQoYnVuZGxlLWlkKSIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiZHJpdmVyIjogImxvY2FsIiwKICAgICAgICAgICJkcml2ZXJfb3B0aW9ucyI6IFtdLAogICAgICAgICAgInNvdXJjZSI6ICJsb2NhbCIsCiAgICAgICAgICAiZnN0eXBlIjogImxvY2FsIiwKICAgICAgICAgICJvcHRpb25zIjogWwogICAgICAgICAgICAibW9kZT0wNzc3IgogICAgICAgICAgXSwKICAgICAgICAgICJtb3VudF9wb2ludCI6ICJeJChjcGF0aCkvJChzYW5kYm94LWlkKS9sb2NhbC9yZXN1bHRzJCIsCiAgICAgICAgICAiZnNfZ3JvdXAiOiBudWxsCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FuZGJveF9waWRucyI6IGZhbHNlLAogICAgICAiZXhlY19jb21tYW5kcyI6IFtdCiAgICB9CiAgXSwKICAiY29tbW9uIjogewogICAgImNwYXRoIjogIi9ydW4va2F0YS1jb250YWluZXJzL3NoYXJlZC9jb250YWluZXJzIiwKICAgICJzZnByZWZpeCI6ICJeJChjcGF0aCkvJChidW5kbGUtaWQpLVthLXowLTldezE2fS0iLAogICAgImlwdjRfYSI6ICIoKDI1WzAtNV18KDJbMC00XXwxXFxkfFsxLTldfClcXGQpXFwuP1xcYil7NH0iLAogICAgImlwX3AiOiAiWzAtOV17MSw1fSIsCiAgICAic3ZjX25hbWUiOiAiW0EtWjAtOV9cXC5cXC1dKyIsCiAgICAiZG5zX2xhYmVsIjogIlthLXpBLVowLTlfXFwuXFwtXSsiLAogICAgImRlZmF1bHRfY2FwcyI6IFsKICAgICAgIkNBUF9DSE9XTiIsCiAgICAgICJDQVBfREFDX09WRVJSSURFIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0ZPV05FUiIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX05FVF9SQVciLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRGQ0FQIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9ORVRfQklORF9TRVJWSUNFIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9LSUxMIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIKICAgIF0sCiAgICAicHJpdmlsZWdlZF9jYXBzIjogWwogICAgICAiQ0FQX0NIT1dOIiwKICAgICAgIkNBUF9EQUNfT1ZFUlJJREUiLAogICAgICAiQ0FQX0RBQ19SRUFEX1NFQVJDSCIsCiAgICAgICJDQVBfRk9XTkVSIiwKICAgICAgIkNBUF9GU0VUSUQiLAogICAgICAiQ0FQX0tJTEwiLAogICAgICAiQ0FQX1NFVEdJRCIsCiAgICAgICJDQVBfU0VUVUlEIiwKICAgICAgIkNBUF9TRVRQQ0FQIiwKICAgICAgIkNBUF9MSU5VWF9JTU1VVEFCTEUiLAogICAgICAiQ0FQX05FVF9CSU5EX1NFUlZJQ0UiLAogICAgICAiQ0FQX05FVF9CUk9BRENBU1QiLAogICAgICAiQ0FQX05FVF9BRE1JTiIsCiAgICAgICJDQVBfTkVUX1JBVyIsCiAgICAgICJDQVBfSVBDX0xPQ0siLAogICAgICAiQ0FQX0lQQ19PV05FUiIsCiAgICAgICJDQVBfU1lTX01PRFVMRSIsCiAgICAgICJDQVBfU1lTX1JBV0lPIiwKICAgICAgIkNBUF9TWVNfQ0hST09UIiwKICAgICAgIkNBUF9TWVNfUFRSQUNFIiwKICAgICAgIkNBUF9TWVNfUEFDQ1QiLAogICAgICAiQ0FQX1NZU19BRE1JTiIsCiAgICAgICJDQVBfU1lTX0JPT1QiLAogICAgICAiQ0FQX1NZU19OSUNFIiwKICAgICAgIkNBUF9TWVNfUkVTT1VSQ0UiLAogICAgICAiQ0FQX1NZU19USU1FIiwKICAgICAgIkNBUF9TWVNfVFRZX0NPTkZJRyIsCiAgICAgICJDQVBfTUtOT0QiLAogICAgICAiQ0FQX0xFQVNFIiwKICAgICAgIkNBUF9BVURJVF9XUklURSIsCiAgICAgICJDQVBfQVVESVRfQ09OVFJPTCIsCiAgICAgICJDQVBfU0VURkNBUCIsCiAgICAgICJDQVBfTUFDX09WRVJSSURFIiwKICAgICAgIkNBUF9NQUNfQURNSU4iLAogICAgICAiQ0FQX1NZU0xPRyIsCiAgICAgICJDQVBfV0FLRV9BTEFSTSIsCiAgICAgICJDQVBfQkxPQ0tfU1VTUEVORCIsCiAgICAgICJDQVBfQVVESVRfUkVBRCIsCiAgICAgICJDQVBfUEVSRk1PTiIsCiAgICAgICJDQVBfQlBGIiwKICAgICAgIkNBUF9DSEVDS1BPSU5UX1JFU1RPUkUiCiAgICBdCiAgfSwKICAic2FuZGJveCI6IHsKICAgICJzdG9yYWdlcyI6IFsKICAgICAgewogICAgICAgICJkcml2ZXIiOiAiZXBoZW1lcmFsIiwKICAgICAgICAiZHJpdmVyX29wdGlvbnMiOiBbXSwKICAgICAgICAic291cmNlIjogInNobSIsCiAgICAgICAgImZzdHlwZSI6ICJ0bXBmcyIsCiAgICAgICAgIm9wdGlvbnMiOiBbCiAgICAgICAgICAibm9leGVjIiwKICAgICAgICAgICJub3N1aWQiLAogICAgICAgICAgIm5vZGV2IiwKICAgICAgICAgICJtb2RlPTE3NzciLAogICAgICAgICAgInNpemU9NjcxMDg4NjQiCiAgICAgICAgXSwKICAgICAgICAibW91bnRfcG9pbnQiOiAiL3J1bi9rYXRhLWNvbnRhaW5lcnMvc2FuZGJveC9zaG0iLAogICAgICAgICJmc19ncm91cCI6IG51bGwKICAgICAgfQogICAgXQogIH0sCiAgInJlcXVlc3RfZGVmYXVsdHMiOiB7CiAgICAiQ3JlYXRlQ29udGFpbmVyUmVxdWVzdCI6IHsKICAgICAgImFsbG93X2Vudl9yZWdleCI6IFsKICAgICAgICAiXkhPU1ROQU1FPSQoZG5zX2xhYmVsKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUD10Y3A6Ly8kKGlwdjRfYSk6JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfUE9SVF8kKGlwX3ApX1RDUF9QUk9UTz10Y3AkIiwKICAgICAgICAiXiQoc3ZjX25hbWUpX1BPUlRfJChpcF9wKV9UQ1BfUE9SVD0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUXyQoaXBfcClfVENQX0FERFI9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX0hPU1Q9JChpcHY0X2EpJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9TRVJWSUNFX1BPUlQ9JChpcF9wKSQiLAogICAgICAgICJeJChzdmNfbmFtZSlfU0VSVklDRV9QT1JUXyQoZG5zX2xhYmVsKT0kKGlwX3ApJCIsCiAgICAgICAgIl4kKHN2Y19uYW1lKV9QT1JUPXRjcDovLyQoaXB2NF9hKTokKGlwX3ApJCIsCiAgICAgICAgIl5BWlVSRV9DTElFTlRfSUQ9W0EtRmEtZjAtOS1dKiQiLAogICAgICAgICJeQVpVUkVfVEVOQU5UX0lEPVtBLUZhLWYwLTktXSokIiwKICAgICAgICAiXkFaVVJFX0ZFREVSQVRFRF9UT0tFTl9GSUxFPS92YXIvcnVuL3NlY3JldHMvYXp1cmUvdG9rZW5zL2F6dXJlLWlkZW50aXR5LXRva2VuJCIsCiAgICAgICAgIl5BWlVSRV9BVVRIT1JJVFlfSE9TVD1odHRwczovL2xvZ2luXFwubWljcm9zb2Z0b25saW5lXFwuY29tLyQiCiAgICAgIF0KICAgIH0sCiAgICAiQ29weUZpbGVSZXF1ZXN0IjogWwogICAgICAiJChzZnByZWZpeCkiCiAgICBdLAogICAgIkV4ZWNQcm9jZXNzUmVxdWVzdCI6IHsKICAgICAgImNvbW1hbmRzIjogW10sCiAgICAgICJyZWdleCI6IFtdCiAgICB9LAogICAgIlJlYWRTdHJlYW1SZXF1ZXN0IjogdHJ1ZSwKICAgICJVcGRhdGVFcGhlbWVyYWxNb3VudHNSZXF1ZXN0IjogZmFsc2UsCiAgICAiV3JpdGVTdHJlYW1SZXF1ZXN0IjogZmFsc2UKICB9Cn0= spec: containers: - args: