How to deploy
Alternatively, create a Compose service, go to Advanced → Import from Base64, and paste this payload:
ewogICJjb21wb3NlIjogIiMgVXNhZ2VcbiMgICBTdGFydDogICAgICAgICAgICAgIGRvY2tlciBjb21wb3NlIHVwIC1kXG4jICAgU3RvcDogICAgICAgICAgICAgICBkb2NrZXIgY29tcG9zZSBkb3duXG4jICAgUmVzZXQgZXZlcnl0aGluZzogICAuL3Jlc2V0LnNoXG4jXG4jIERva3Bsb3k6IHRoZSBFbnZveSBBUEkgZ2F0ZXdheSAoYXBpLWd3KSBpcyBleHBvc2VkIG9uIHBvcnQgODAwMCBmb3IgZG9tYWluIHJvdXRpbmcuXG4jIFN0b3JhZ2UgdXNlcyB0aGUgbG9jYWwgZmlsZSBiYWNrZW5kIGJ5IGRlZmF1bHQ7IGVkaXQgdGhlIHN0b3JhZ2Ugc2VydmljZSBlbnYgaW5cbiMgdGhpcyBmaWxlIHRvIHN3aXRjaCB0byBTMy9NaW5JTy5cblxubmFtZTogc3VwYWJhc2Vcblxuc2VydmljZXM6XG5cbiAgc3R1ZGlvOlxuICAgIGltYWdlOiBzdXBhYmFzZS9zdHVkaW86MjAyNi4wOC4wMy1zaGEtMDIyYjM3NFxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICBbXG4gICAgICAgICAgXCJDTUQtU0hFTExcIixcbiAgICAgICAgICBcIm5vZGUgLWUgXFxcImZldGNoKCdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3BsYXRmb3JtL3Byb2ZpbGUnKS50aGVuKChyKSA9PiB7aWYgKHIuc3RhdHVzICE9PSAyMDApIHRocm93IG5ldyBFcnJvcihyLnN0YXR1cyl9KVxcXCJcIlxuICAgICAgICBdXG4gICAgICB0aW1lb3V0OiAxMHNcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgcmV0cmllczogNVxuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIEhPU1ROQU1FOiBcIjAuMC4wLjBcIlxuXG4gICAgICBTVFVESU9fUEdfTUVUQV9VUkw6IGh0dHA6Ly9tZXRhOjgwODBcbiAgICAgIFBPU1RHUkVTX1BPUlQ6ICR7UE9TVEdSRVNfUE9SVH1cbiAgICAgIFBPU1RHUkVTX0hPU1Q6ICR7UE9TVEdSRVNfSE9TVH1cbiAgICAgIFBPU1RHUkVTX0RCOiAke1BPU1RHUkVTX0RCfVxuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7UE9TVEdSRVNfUEFTU1dPUkR9XG5cbiAgICAgICMgU2VlOiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL2d1aWRlcy9zZWxmLWhvc3RpbmcvcmVtb3ZlLXN1cGVydXNlci1hY2Nlc3NcbiAgICAgIFBPU1RHUkVTX1VTRVJfUkVBRF9XUklURTogcG9zdGdyZXNcblxuICAgICAgUEdfTUVUQV9DUllQVE9fS0VZOiAke1BHX01FVEFfQ1JZUFRPX0tFWX1cbiAgICAgIFBHUlNUX0RCX1NDSEVNQVM6ICR7UEdSU1RfREJfU0NIRU1BU31cbiAgICAgIFBHUlNUX0RCX01BWF9ST1dTOiAke1BHUlNUX0RCX01BWF9ST1dTOi0xMDAwfVxuICAgICAgUEdSU1RfREJfRVhUUkFfU0VBUkNIX1BBVEg6ICR7UEdSU1RfREJfRVhUUkFfU0VBUkNIX1BBVEg6LXB1YmxpY31cblxuICAgICAgREVGQVVMVF9PUkdBTklaQVRJT05fTkFNRTogJHtTVFVESU9fREVGQVVMVF9PUkdBTklaQVRJT059XG4gICAgICBERUZBVUxUX1BST0pFQ1RfTkFNRTogJHtTVFVESU9fREVGQVVMVF9QUk9KRUNUfVxuICAgICAgT1BFTkFJX0FQSV9LRVk6ICR7T1BFTkFJX0FQSV9LRVk6LX1cblxuICAgICAgU1VQQUJBU0VfVVJMOiBodHRwOi8vYXBpLWd3OjgwMDBcbiAgICAgIFNVUEFCQVNFX1BVQkxJQ19VUkw6ICR7U1VQQUJBU0VfUFVCTElDX1VSTH1cbiAgICAgIFNVUEFCQVNFX0FOT05fS0VZOiAke0FOT05fS0VZOi0ke0FOT05fS0VZX0FTWU1NRVRSSUN9fVxuICAgICAgU1VQQUJBU0VfU0VSVklDRV9LRVk6ICR7U0VSVklDRV9ST0xFX0tFWTotJHtTRVJWSUNFX1JPTEVfS0VZX0FTWU1NRVRSSUN9fVxuICAgICAgQVVUSF9KV1RfU0VDUkVUOiAke0pXVF9TRUNSRVR9XG4gICAgICBTVVBBQkFTRV9QVUJMSVNIQUJMRV9LRVk6ICR7U1VQQUJBU0VfUFVCTElTSEFCTEVfS0VZOi19XG4gICAgICBTVVBBQkFTRV9TRUNSRVRfS0VZOiAke1NVUEFCQVNFX1NFQ1JFVF9LRVk6LX1cblxuICAgICAgIyBBbmFseXRpY3MgKExvZ2ZsYXJlKSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSB1cHN0cmVhbSBzZWxmLWhvc3RlZCBzdGFja1xuICAgICAgRU5BQkxFRF9GRUFUVVJFU19MT0dTX0FMTDogXCJmYWxzZVwiXG5cbiAgICAgIFNOSVBQRVRTX01BTkFHRU1FTlRfRk9MREVSOiAvYXBwL3NuaXBwZXRzXG4gICAgICBFREdFX0ZVTkNUSU9OU19NQU5BR0VNRU5UX0ZPTERFUjogL2FwcC9lZGdlLWZ1bmN0aW9uc1xuICAgIHZvbHVtZXM6XG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvc25pcHBldHM6L2FwcC9zbmlwcGV0czp6XG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvZnVuY3Rpb25zOi9hcHAvZWRnZS1mdW5jdGlvbnM6cm8selxuXG4gIGFwaS1ndzpcbiAgICBpbWFnZTogZW52b3lwcm94eS9lbnZveTp2MS4zOS4wXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgICMgVXNpbmcgYSBUQ1AgcG9ydCBjaGVjayBiZWNhdXNlIHRoaXMgaW1hZ2UgZG9lcyBub3QgaW5jbHVkZSBjdXJsIG9yIHdnZXQuXG4gICAgICB0ZXN0OiBbXCJDTUQtU0hFTExcIiwgXCJ0aW1lb3V0IDEgYmFzaCAtYyAnPC9kZXYvdGNwLzEyNy4wLjAuMS84MDAwJ1wiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDNcbiAgICBkZXBlbmRzX29uOlxuICAgICAgc3R1ZGlvOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIGV4cG9zZTpcbiAgICAgIC0gODAwMFxuICAgIHZvbHVtZXM6XG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvYXBpL2Vudm95L2Vudm95LnlhbWw6L2V0Yy9lbnZveS9lbnZveS55YW1sOnJvLHpcbiAgICAgIC0gLi4vZmlsZXMvdm9sdW1lcy9hcGkvZW52b3kvY2RzLnlhbWw6L2V0Yy9lbnZveS9jZHMueWFtbDpybyx6XG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvYXBpL2Vudm95L2xkcy50ZW1wbGF0ZS55YW1sOi9ldGMvZW52b3kvbGRzLnRlbXBsYXRlLnlhbWw6cm8selxuICAgICAgLSAuLi9maWxlcy92b2x1bWVzL2FwaS9lbnZveS9kb2NrZXItZW50cnlwb2ludC5zaDovZG9ja2VyLWVudHJ5cG9pbnQuc2g6cm8selxuICAgIGVudmlyb25tZW50OlxuICAgICAgQU5PTl9LRVk6ICR7QU5PTl9LRVl9XG4gICAgICBTRVJWSUNFX1JPTEVfS0VZOiAke1NFUlZJQ0VfUk9MRV9LRVl9XG4gICAgICBTVVBBQkFTRV9QVUJMSVNIQUJMRV9LRVk6ICR7U1VQQUJBU0VfUFVCTElTSEFCTEVfS0VZOi19XG4gICAgICBTVVBBQkFTRV9TRUNSRVRfS0VZOiAke1NVUEFCQVNFX1NFQ1JFVF9LRVk6LX1cbiAgICAgIEFOT05fS0VZX0FTWU1NRVRSSUM6ICR7QU5PTl9LRVlfQVNZTU1FVFJJQzotfVxuICAgICAgU0VSVklDRV9ST0xFX0tFWV9BU1lNTUVUUklDOiAke1NFUlZJQ0VfUk9MRV9LRVlfQVNZTU1FVFJJQzotfVxuICAgICAgU1VQQUJBU0VfUFVCTElDX1VSTDogJHtTVVBBQkFTRV9QVUJMSUNfVVJMfVxuICAgICAgREFTSEJPQVJEX1VTRVJOQU1FOiAke0RBU0hCT0FSRF9VU0VSTkFNRX1cbiAgICAgIERBU0hCT0FSRF9QQVNTV09SRDogJHtEQVNIQk9BUkRfUEFTU1dPUkR9XG4gICAgZW50cnlwb2ludDogW1wiL2Jpbi9zaFwiLCBcIi9kb2NrZXItZW50cnlwb2ludC5zaFwiXVxuXG4gIGF1dGg6XG4gICAgaW1hZ2U6IHN1cGFiYXNlL2dvdHJ1ZTp2Mi4xODkuMFxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICBbXG4gICAgICAgICAgXCJDTURcIixcbiAgICAgICAgICBcIndnZXRcIixcbiAgICAgICAgICBcIi0tbm8tdmVyYm9zZVwiLFxuICAgICAgICAgIFwiLS10cmllcz0xXCIsXG4gICAgICAgICAgXCItLXNwaWRlclwiLFxuICAgICAgICAgIFwiaHR0cDovL2xvY2FsaG9zdDo5OTk5L2hlYWx0aFwiXG4gICAgICAgIF1cbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICBpbnRlcnZhbDogNXNcbiAgICAgIHJldHJpZXM6IDNcbiAgICBkZXBlbmRzX29uOlxuICAgICAgZGI6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBHT1RSVUVfTUFJTEVSX0VYVEVSTkFMX0hPU1RTOiBhcGktZ3csJHtTVVBBQkFTRV9IT1NUfVxuICAgICAgR09UUlVFX0FQSV9IT1NUOiAwLjAuMC4wXG4gICAgICBHT1RSVUVfQVBJX1BPUlQ6IDk5OTlcbiAgICAgIEFQSV9FWFRFUk5BTF9VUkw6ICR7QVBJX0VYVEVSTkFMX1VSTH1cblxuICAgICAgR09UUlVFX0RCX0RSSVZFUjogcG9zdGdyZXNcbiAgICAgIEdPVFJVRV9EQl9EQVRBQkFTRV9VUkw6IHBvc3RncmVzOi8vc3VwYWJhc2VfYXV0aF9hZG1pbjoke1BPU1RHUkVTX1BBU1NXT1JEfUAke1BPU1RHUkVTX0hPU1R9OiR7UE9TVEdSRVNfUE9SVH0vJHtQT1NUR1JFU19EQn1cblxuICAgICAgR09UUlVFX1NJVEVfVVJMOiAke1NJVEVfVVJMfVxuICAgICAgR09UUlVFX1VSSV9BTExPV19MSVNUOiAke0FERElUSU9OQUxfUkVESVJFQ1RfVVJMU31cbiAgICAgIEdPVFJVRV9ESVNBQkxFX1NJR05VUDogJHtESVNBQkxFX1NJR05VUH1cblxuICAgICAgR09UUlVFX0pXVF9BRE1JTl9ST0xFUzogc2VydmljZV9yb2xlXG4gICAgICBHT1RSVUVfSldUX0FVRDogYXV0aGVudGljYXRlZFxuICAgICAgR09UUlVFX0pXVF9ERUZBVUxUX0dST1VQX05BTUU6IGF1dGhlbnRpY2F0ZWRcbiAgICAgIEdPVFJVRV9KV1RfRVhQOiAke0pXVF9FWFBJUll9XG4gICAgICBHT1RSVUVfSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuICAgICAgR09UUlVFX0pXVF9LRVlTOiAke0pXVF9LRVlTOi1bXX1cbiAgICAgIEdPVFJVRV9KV1RfSVNTVUVSOiAke0FQSV9FWFRFUk5BTF9VUkx9XG5cbiAgICAgIEdPVFJVRV9FWFRFUk5BTF9FTUFJTF9FTkFCTEVEOiAke0VOQUJMRV9FTUFJTF9TSUdOVVB9XG4gICAgICBHT1RSVUVfRVhURVJOQUxfQU5PTllNT1VTX1VTRVJTX0VOQUJMRUQ6ICR7RU5BQkxFX0FOT05ZTU9VU19VU0VSU31cbiAgICAgIEdPVFJVRV9NQUlMRVJfQVVUT0NPTkZJUk06ICR7RU5BQkxFX0VNQUlMX0FVVE9DT05GSVJNfVxuXG4gICAgICBHT1RSVUVfU01UUF9BRE1JTl9FTUFJTDogJHtTTVRQX0FETUlOX0VNQUlMfVxuICAgICAgR09UUlVFX1NNVFBfSE9TVDogJHtTTVRQX0hPU1R9XG4gICAgICBHT1RSVUVfU01UUF9QT1JUOiAke1NNVFBfUE9SVH1cbiAgICAgIEdPVFJVRV9TTVRQX1VTRVI6ICR7U01UUF9VU0VSfVxuICAgICAgR09UUlVFX1NNVFBfUEFTUzogJHtTTVRQX1BBU1N9XG4gICAgICBHT1RSVUVfU01UUF9TRU5ERVJfTkFNRTogJHtTTVRQX1NFTkRFUl9OQU1FfVxuICAgICAgR09UUlVFX01BSUxFUl9VUkxQQVRIU19JTlZJVEU6ICR7TUFJTEVSX1VSTFBBVEhTX0lOVklURX1cbiAgICAgIEdPVFJVRV9NQUlMRVJfVVJMUEFUSFNfQ09ORklSTUFUSU9OOiAke01BSUxFUl9VUkxQQVRIU19DT05GSVJNQVRJT059XG4gICAgICBHT1RSVUVfTUFJTEVSX1VSTFBBVEhTX1JFQ09WRVJZOiAke01BSUxFUl9VUkxQQVRIU19SRUNPVkVSWX1cbiAgICAgIEdPVFJVRV9NQUlMRVJfVVJMUEFUSFNfRU1BSUxfQ0hBTkdFOiAke01BSUxFUl9VUkxQQVRIU19FTUFJTF9DSEFOR0V9XG5cbiAgICAgIEdPVFJVRV9FWFRFUk5BTF9QSE9ORV9FTkFCTEVEOiAke0VOQUJMRV9QSE9ORV9TSUdOVVB9XG4gICAgICBHT1RSVUVfU01TX0FVVE9DT05GSVJNOiAke0VOQUJMRV9QSE9ORV9BVVRPQ09ORklSTX1cblxuICByZXN0OlxuICAgIGltYWdlOiBwb3N0Z3Jlc3QvcG9zdGdyZXN0OnYxNC4xMlxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGRiOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogWyBcIkNNRFwiLCBcInBvc3RncmVzdFwiLCBcIi0tcmVhZHlcIiBdXG4gICAgICBpbnRlcnZhbDogNXNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiAzXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBQR1JTVF9EQl9VUkk6IHBvc3RncmVzOi8vYXV0aGVudGljYXRvcjoke1BPU1RHUkVTX1BBU1NXT1JEfUAke1BPU1RHUkVTX0hPU1R9OiR7UE9TVEdSRVNfUE9SVH0vJHtQT1NUR1JFU19EQn1cbiAgICAgIFBHUlNUX0RCX1NDSEVNQVM6ICR7UEdSU1RfREJfU0NIRU1BU31cbiAgICAgIFBHUlNUX0RCX01BWF9ST1dTOiAke1BHUlNUX0RCX01BWF9ST1dTOi0xMDAwfVxuICAgICAgUEdSU1RfREJfRVhUUkFfU0VBUkNIX1BBVEg6ICR7UEdSU1RfREJfRVhUUkFfU0VBUkNIX1BBVEg6LXB1YmxpY31cbiAgICAgIFBHUlNUX0RCX0FOT05fUk9MRTogYW5vblxuICAgICAgUEdSU1RfQURNSU5fU0VSVkVSX1BPUlQ6IDMwMDFcbiAgICAgIFBHUlNUX0FETUlOX1NFUlZFUl9IT1NUOiBsb2NhbGhvc3RcbiAgICAgICMgQWNjZXB0cyBhIHBsYWluLXRleHQgc3ltbWV0cmljIHNlY3JldCwgYSBzaW5nbGUgSldLLCBvciBhIEpXS1MuXG4gICAgICBQR1JTVF9KV1RfU0VDUkVUOiAke0pXVF9KV0tTOi0ke0pXVF9TRUNSRVR9fVxuICAgICAgUEdSU1RfREJfVVNFX0xFR0FDWV9HVUNTOiBcImZhbHNlXCJcbiAgICAgIFBHUlNUX0FQUF9TRVRUSU5HU19KV1RfU0VDUkVUOiAke0pXVF9TRUNSRVR9XG4gICAgICBQR1JTVF9BUFBfU0VUVElOR1NfSldUX0VYUDogJHtKV1RfRVhQSVJZfVxuICAgIGNvbW1hbmQ6XG4gICAgICBbXG4gICAgICAgIFwicG9zdGdyZXN0XCJcbiAgICAgIF1cblxuICByZWFsdGltZTpcbiAgICBpbWFnZTogc3VwYWJhc2UvcmVhbHRpbWU6djIuMTAyLjNcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGRlcGVuZHNfb246XG4gICAgICBkYjpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6XG4gICAgICAgIFtcbiAgICAgICAgICBcIkNNRC1TSEVMTFwiLFxuICAgICAgICAgIFwiY3VybCAtc1NmTCAtLWhlYWQgLW8gL2Rldi9udWxsIC1IIFxcXCJBdXRob3JpemF0aW9uOiBCZWFyZXIgJHtBTk9OX0tFWTotJHtBTk9OX0tFWV9BU1lNTUVUUklDfX1cXFwiIGh0dHA6Ly9sb2NhbGhvc3Q6NDAwMC9hcGkvdGVuYW50cy9yZWFsdGltZS1kZXYvaGVhbHRoXCJcbiAgICAgICAgXVxuICAgICAgdGltZW91dDogNXNcbiAgICAgIGludGVydmFsOiAzMHNcbiAgICAgIHJldHJpZXM6IDNcbiAgICAgIHN0YXJ0X3BlcmlvZDogMTBzXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBQT1JUOiA0MDAwXG4gICAgICBEQl9IT1NUOiAke1BPU1RHUkVTX0hPU1R9XG4gICAgICBEQl9QT1JUOiAke1BPU1RHUkVTX1BPUlR9XG4gICAgICBEQl9VU0VSOiBzdXBhYmFzZV9hZG1pblxuICAgICAgREJfUEFTU1dPUkQ6ICR7UE9TVEdSRVNfUEFTU1dPUkR9XG4gICAgICBEQl9OQU1FOiAke1BPU1RHUkVTX0RCfVxuICAgICAgREJfQUZURVJfQ09OTkVDVF9RVUVSWTogJ1NFVCBzZWFyY2hfcGF0aCBUTyBfcmVhbHRpbWUnXG4gICAgICBEQl9FTkNfS0VZOiAke1JFQUxUSU1FX0RCX0VOQ19LRVk6LXN1cGFiYXNlcmVhbHRpbWV9XG4gICAgICAjIExlZ2FjeSBzeW1tZXRyaWMgSFMyNTYga2V5XG4gICAgICBBUElfSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuICAgICAgIyBKV0tTIGZvciB0b2tlbiB2ZXJpZmljYXRpb24gKEVDIHB1YmxpYyArIGxlZ2FjeSBzeW1tZXRyaWMpXG4gICAgICBBUElfSldUX0pXS1M6ICR7SldUX0pXS1M6LXtcImtleXNcIjpbXX19XG4gICAgICBTRUNSRVRfS0VZX0JBU0U6ICR7U0VDUkVUX0tFWV9CQVNFfVxuICAgICAgTUVUUklDU19KV1RfU0VDUkVUOiAke0pXVF9TRUNSRVR9XG4gICAgICBFUkxfQUZMQUdTOiAtcHJvdG9fZGlzdCBpbmV0X3RjcFxuICAgICAgRE5TX05PREVTOiBcIicnXCJcbiAgICAgIFJMSU1JVF9OT0ZJTEU6IFwiMTAwMDBcIlxuICAgICAgQVBQX05BTUU6IHJlYWx0aW1lXG4gICAgICBTRUVEX1NFTEZfSE9TVDogXCJ0cnVlXCJcbiAgICAgIFJVTl9KQU5JVE9SOiBcInRydWVcIlxuICAgICAgRElTQUJMRV9IRUFMVEhDSEVDS19MT0dHSU5HOiBcInRydWVcIlxuXG4gIHN0b3JhZ2U6XG4gICAgaW1hZ2U6IHN1cGFiYXNlL3N0b3JhZ2UtYXBpOnYxLjYwLjRcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGRlcGVuZHNfb246XG4gICAgICBkYjpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICAgIHJlc3Q6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9zdGFydGVkXG4gICAgICBpbWdwcm94eTpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX3N0YXJ0ZWRcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6XG4gICAgICAgIFtcbiAgICAgICAgICBcIkNNRFwiLFxuICAgICAgICAgIFwid2dldFwiLFxuICAgICAgICAgIFwiLS1uby12ZXJib3NlXCIsXG4gICAgICAgICAgXCItLXRyaWVzPTFcIixcbiAgICAgICAgICBcIi0tc3BpZGVyXCIsXG4gICAgICAgICAgXCJodHRwOi8vc3RvcmFnZTo1MDAwL3N0YXR1c1wiXG4gICAgICAgIF1cbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICBpbnRlcnZhbDogNXNcbiAgICAgIHJldHJpZXM6IDNcbiAgICAgIHN0YXJ0X3BlcmlvZDogMTBzXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvdm9sdW1lcy9zdG9yYWdlOi92YXIvbGliL3N0b3JhZ2U6elxuICAgIGVudmlyb25tZW50OlxuICAgICAgQU5PTl9LRVk6ICR7QU5PTl9LRVk6LSR7QU5PTl9LRVlfQVNZTU1FVFJJQ319XG4gICAgICBTRVJWSUNFX0tFWTogJHtTRVJWSUNFX1JPTEVfS0VZOi0ke1NFUlZJQ0VfUk9MRV9LRVlfQVNZTU1FVFJJQ319XG4gICAgICBQT1NUR1JFU1RfVVJMOiBodHRwOi8vcmVzdDozMDAwXG4gICAgICAjIExlZ2FjeSBzeW1tZXRyaWMgSFMyNTYga2V5XG4gICAgICBBVVRIX0pXVF9TRUNSRVQ6ICR7SldUX1NFQ1JFVH1cbiAgICAgICMgSldLUyBmb3IgdG9rZW4gdmVyaWZpY2F0aW9uIChFQyBwdWJsaWMgKyBsZWdhY3kgc3ltbWV0cmljKVxuICAgICAgSldUX0pXS1M6ICR7SldUX0pXS1M6LXtcImtleXNcIjpbXX19XG4gICAgICBEQVRBQkFTRV9VUkw6IHBvc3RncmVzOi8vc3VwYWJhc2Vfc3RvcmFnZV9hZG1pbjoke1BPU1RHUkVTX1BBU1NXT1JEfUAke1BPU1RHUkVTX0hPU1R9OiR7UE9TVEdSRVNfUE9SVH0vJHtQT1NUR1JFU19EQn1cbiAgICAgIFNUT1JBR0VfUFVCTElDX1VSTDogJHtTVVBBQkFTRV9QVUJMSUNfVVJMfVxuICAgICAgUkVRVUVTVF9BTExPV19YX0ZPUldBUkRFRF9QQVRIOiBcInRydWVcIlxuICAgICAgRklMRV9TSVpFX0xJTUlUOiA1MjQyODgwMFxuICAgICAgU1RPUkFHRV9CQUNLRU5EOiBmaWxlXG4gICAgICAjIFMzIGJ1Y2tldCB3aGVuIHVzaW5nIHRoZSBzMyBiYWNrZW5kLCBkaXJlY3RvcnkgbmFtZSB3aGVuIHVzaW5nICdmaWxlJy5cbiAgICAgIEdMT0JBTF9TM19CVUNLRVQ6ICR7R0xPQkFMX1MzX0JVQ0tFVH1cbiAgICAgICMg4pSA4pSAIFMzLWNvbXBhdGlibGUgYmFja2VuZCAoQ2xvdWRmbGFyZSBSMiwgTWluSU8sIEFXUyBTMykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICAjIFNldCBTVE9SQUdFX0JBQ0tFTkQgdG8gczMgYW5kIHVuY29tbWVudCB0aGVzZS4gU2VlIGluc3RydWN0aW9ucy5tZC5cbiAgICAgICNHTE9CQUxfUzNfRU5EUE9JTlQ6ICR7R0xPQkFMX1MzX0VORFBPSU5UfVxuICAgICAgI0dMT0JBTF9TM19GT1JDRV9QQVRIX1NUWUxFOiBcInRydWVcIlxuICAgICAgIyDim5QgTk9UIGBSRUdJT05gLiBzdG9yYWdlLWFwaSByZWFkcyBTVE9SQUdFX1MzX1JFR0lPTiBmaXJzdCBhbmQgZmFsbHMgYmFja1xuICAgICAgIyB0byBSRUdJT04sIHdoaWNoIHRoaXMgdGVtcGxhdGUgc2hpcHMgYXMgXCJzdHViXCIg4oCUIGEgdmFsdWUgdGhlIFNESyB3aWxsXG4gICAgICAjIHNpZ24gd2l0aCBhbmQgdGhlIHByb3ZpZGVyIHdpbGwgcmVqZWN0LiBSMiB3YW50cyBcImF1dG9cIi5cbiAgICAgICNTVE9SQUdFX1MzX1JFR0lPTjogJHtTVE9SQUdFX1MzX1JFR0lPTn1cbiAgICAgICMgQVdTIFNESyB2MyBhZGRzIGEgQ1JDMzIgdG8gZXZlcnkgUHV0T2JqZWN0OyBTMy1jb21wYXRpYmxlIHByb3ZpZGVycyBoYXZlXG4gICAgICAjIHJlamVjdGVkIGl0LiBUaGlzIHJldmVydHMgdG8gdGhlIHByZS0yMDI1IFdIRU5fUkVRVUlSRUQgYmVoYXZpb3VyLlxuICAgICAgI1NUT1JBR0VfUzNfRElTQUJMRV9DSEVDS1NVTTogXCJ0cnVlXCJcbiAgICAgICNBV1NfQUNDRVNTX0tFWV9JRDogJHtBV1NfQUNDRVNTX0tFWV9JRH1cbiAgICAgICNBV1NfU0VDUkVUX0FDQ0VTU19LRVk6ICR7QVdTX1NFQ1JFVF9BQ0NFU1NfS0VZfVxuICAgICAgIyDim5QgR0xPQkFMX1MzX1BST1RPQ09MIGFwcGVhcnMgaW4gdGhlIG9mZmljaWFsIGNvbXBvc2UgYW5kIGlzIHJlYWQgTk9XSEVSRVxuICAgICAgIyBpbiBzdXBhYmFzZS9zdG9yYWdlLiBTZXR0aW5nIGl0IGRvZXMgbm90aGluZy5cbiAgICAgICMg4pyFIGltZ3Byb3h5IG5lZWRzIG5vIFMzIGNvbmZpZ3VyYXRpb24gb24gdGhlIHMzIGJhY2tlbmQ6IHN0b3JhZ2UgaGFuZHMgaXQgYVxuICAgICAgIyBwcmVzaWduZWQgSFRUUFMgVVJMIChnZXRTaWduZWRVcmwsIDYwMHMpLCBub3QgYW4gczM6Ly8gcGF0aC4gVGhlIHNoYXJlZFxuICAgICAgIyB2b2x1bWUgYmVsb3cgc2ltcGx5IGdvZXMgdW51c2VkLlxuICAgICAgIyDilIDilIAgZW5kIFMzIGJsb2NrIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgIyBSZWFkIG9ubHkgYnkgdGhlIGBmaWxlYCBiYWNrZW5kOyBpbmVydCBvbmNlIFNUT1JBR0VfQkFDS0VORCBpcyBzMy5cbiAgICAgIEZJTEVfU1RPUkFHRV9CQUNLRU5EX1BBVEg6IC92YXIvbGliL3N0b3JhZ2VcbiAgICAgIFRFTkFOVF9JRDogJHtTVE9SQUdFX1RFTkFOVF9JRH1cbiAgICAgIFJFR0lPTjogJHtSRUdJT059XG4gICAgICBFTkFCTEVfSU1BR0VfVFJBTlNGT1JNQVRJT046IFwidHJ1ZVwiXG4gICAgICBJTUdQUk9YWV9VUkw6IGh0dHA6Ly9pbWdwcm94eTo1MDAxXG4gICAgICBTM19QUk9UT0NPTF9BQ0NFU1NfS0VZX0lEOiAke1MzX1BST1RPQ09MX0FDQ0VTU19LRVlfSUR9XG4gICAgICBTM19QUk9UT0NPTF9BQ0NFU1NfS0VZX1NFQ1JFVDogJHtTM19QUk9UT0NPTF9BQ0NFU1NfS0VZX1NFQ1JFVH1cblxuICBpbWdwcm94eTpcbiAgICBpbWFnZTogZGFydGhzaW0vaW1ncHJveHk6djMuMzAuMVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvdm9sdW1lcy9zdG9yYWdlOi92YXIvbGliL3N0b3JhZ2U6elxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgW1xuICAgICAgICAgIFwiQ01EXCIsXG4gICAgICAgICAgXCJpbWdwcm94eVwiLFxuICAgICAgICAgIFwiaGVhbHRoXCJcbiAgICAgICAgXVxuICAgICAgdGltZW91dDogNXNcbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgcmV0cmllczogM1xuICAgIGVudmlyb25tZW50OlxuICAgICAgSU1HUFJPWFlfQklORDogXCI6NTAwMVwiXG4gICAgICBJTUdQUk9YWV9MT0NBTF9GSUxFU1lTVEVNX1JPT1Q6IC9cbiAgICAgIElNR1BST1hZX1VTRV9FVEFHOiBcInRydWVcIlxuICAgICAgSU1HUFJPWFlfQVVUT19XRUJQOiAke0lNR1BST1hZX0FVVE9fV0VCUH1cbiAgICAgIElNR1BST1hZX01BWF9TUkNfUkVTT0xVVElPTjogMTYuOFxuXG4gIG1ldGE6XG4gICAgaW1hZ2U6IHN1cGFiYXNlL3Bvc3RncmVzLW1ldGE6djAuOTYuNlxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGRiOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIGVudmlyb25tZW50OlxuICAgICAgUEdfTUVUQV9QT1JUOiA4MDgwXG4gICAgICBQR19NRVRBX0RCX0hPU1Q6ICR7UE9TVEdSRVNfSE9TVH1cbiAgICAgIFBHX01FVEFfREJfUE9SVDogJHtQT1NUR1JFU19QT1JUfVxuICAgICAgUEdfTUVUQV9EQl9OQU1FOiAke1BPU1RHUkVTX0RCfVxuICAgICAgIyBTZWU6IGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvZ3VpZGVzL3NlbGYtaG9zdGluZy9yZW1vdmUtc3VwZXJ1c2VyLWFjY2Vzc1xuICAgICAgUEdfTUVUQV9EQl9VU0VSOiBwb3N0Z3Jlc1xuICAgICAgUEdfTUVUQV9EQl9QQVNTV09SRDogJHtQT1NUR1JFU19QQVNTV09SRH1cbiAgICAgIENSWVBUT19LRVk6ICR7UEdfTUVUQV9DUllQVE9fS0VZfVxuXG4gIGZ1bmN0aW9uczpcbiAgICBpbWFnZTogc3VwYWJhc2UvZWRnZS1ydW50aW1lOnYxLjc0LjBcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvZnVuY3Rpb25zOi9ob21lL2Rlbm8vZnVuY3Rpb25zOnpcbiAgICAgIC0gZGVuby1jYWNoZTovcm9vdC8uY2FjaGUvZGVub1xuICAgIGRlcGVuZHNfb246XG4gICAgICBhcGktZ3c6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTUQtU0hFTExcIiwgXCJ0aW1lb3V0IDEgYmFzaCAtYyAnPC9kZXYvdGNwLzEyNy4wLjAuMS85MDAwJ1wiXVxuICAgICAgaW50ZXJ2YWw6IDVzXG4gICAgICB0aW1lb3V0OiA1c1xuICAgICAgcmV0cmllczogM1xuICAgIGVudmlyb25tZW50OlxuICAgICAgIyBMZWdhY3kgc3ltbWV0cmljIEhTMjU2IGtleVxuICAgICAgSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuICAgICAgIyBKV0tTIGZvciB0b2tlbiB2ZXJpZmljYXRpb24gKEVDIHB1YmxpYyArIGxlZ2FjeSBzeW1tZXRyaWMpXG4gICAgICBTVVBBQkFTRV9KV0tTOiAke0pXVF9KV0tTOi17XCJrZXlzXCI6W119fVxuICAgICAgU1VQQUJBU0VfVVJMOiBodHRwOi8vYXBpLWd3OjgwMDBcbiAgICAgICMgQXV0aCBzaWducyB0b2tlbnMgd2l0aCBBUElfRVhURVJOQUxfVVJMIGFzIHRoZSBpc3N1ZXIsIGJ1dCBTVVBBQkFTRV9VUkxcbiAgICAgICMgYWJvdmUgaXMgdGhlIElOVEVSTkFMIGdhdGV3YXkgYWRkcmVzcy4gQSBmdW5jdGlvbiB0aGF0IGRlcml2ZXMgaXRzXG4gICAgICAjIGV4cGVjdGVkIGlzc3VlciBmcm9tIFNVUEFCQVNFX1VSTCAtIHdoaWNoIGlzIHdoYXQgdGhlIG9mZmljaWFsXG4gICAgICAjIF9zaGFyZWQvand0L2RlZmF1bHQudHMgZXhhbXBsZSBkb2VzIC0gdGhlcmVmb3JlIHJlamVjdHMgZXZlcnkgdmFsaWRcbiAgICAgICMgdG9rZW4uIFNCX0pXVF9JU1NVRVIgaXMgdGhlIG92ZXJyaWRlIHRoYXQgZXhhbXBsZSBhbHJlYWR5IHByZWZlcnMuXG4gICAgICBTQl9KV1RfSVNTVUVSOiAke0FQSV9FWFRFUk5BTF9VUkx9XG4gICAgICBTVVBBQkFTRV9QVUJMSUNfVVJMOiAke1NVUEFCQVNFX1BVQkxJQ19VUkx9XG4gICAgICBTVVBBQkFTRV9BTk9OX0tFWTogJHtBTk9OX0tFWTotJHtBTk9OX0tFWV9BU1lNTUVUUklDfX1cbiAgICAgIFNVUEFCQVNFX1NFUlZJQ0VfUk9MRV9LRVk6ICR7U0VSVklDRV9ST0xFX0tFWTotJHtTRVJWSUNFX1JPTEVfS0VZX0FTWU1NRVRSSUN9fVxuICAgICAgU1VQQUJBU0VfUFVCTElTSEFCTEVfS0VZUzogXCJ7XFxcImRlZmF1bHRcXFwiOlxcXCIke1NVUEFCQVNFX1BVQkxJU0hBQkxFX0tFWTotfVxcXCJ9XCJcbiAgICAgIFNVUEFCQVNFX1NFQ1JFVF9LRVlTOiBcIntcXFwiZGVmYXVsdFxcXCI6XFxcIiR7U1VQQUJBU0VfU0VDUkVUX0tFWTotfVxcXCJ9XCJcbiAgICAgIFNVUEFCQVNFX0RCX1VSTDogcG9zdGdyZXNxbDovL3Bvc3RncmVzOiR7UE9TVEdSRVNfUEFTU1dPUkR9QCR7UE9TVEdSRVNfSE9TVH06JHtQT1NUR1JFU19QT1JUfS8ke1BPU1RHUkVTX0RCfVxuICAgICAgVkVSSUZZX0pXVDogXCIke0ZVTkNUSU9OU19WRVJJRllfSldUfVwiXG4gICAgY29tbWFuZDpcbiAgICAgIFtcbiAgICAgICAgXCJzdGFydFwiLFxuICAgICAgICBcIi0tbWFpbi1zZXJ2aWNlXCIsXG4gICAgICAgIFwiL2hvbWUvZGVuby9mdW5jdGlvbnMvbWFpblwiXG4gICAgICBdXG5cbiAgZGI6XG4gICAgIyBNYWpvciB1cGdyYWRlIGZyb20gUG9zdGdyZXMgMTUgcmVxdWlyZXMgYSBkdW1wL3Jlc3RvcmUgZm9yIGV4aXN0aW5nIGluc3RhbGxzLlxuICAgICMgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vb3Jncy9zdXBhYmFzZS9kaXNjdXNzaW9ucy80NjA4MFxuICAgIGltYWdlOiBzdXBhYmFzZS9wb3N0Z3JlczoxNy42LjEuMTM2XG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICB2b2x1bWVzOlxuICAgICAgLSAuLi9maWxlcy92b2x1bWVzL2RiL3JlYWx0aW1lLnNxbDovZG9ja2VyLWVudHJ5cG9pbnQtaW5pdGRiLmQvbWlncmF0aW9ucy85OS1yZWFsdGltZS5zcWw6WlxuICAgICAgLSAuLi9maWxlcy92b2x1bWVzL2RiL3dlYmhvb2tzLnNxbDovZG9ja2VyLWVudHJ5cG9pbnQtaW5pdGRiLmQvaW5pdC1zY3JpcHRzLzk4LXdlYmhvb2tzLnNxbDpaXG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvZGIvcm9sZXMuc3FsOi9kb2NrZXItZW50cnlwb2ludC1pbml0ZGIuZC9pbml0LXNjcmlwdHMvOTktcm9sZXMuc3FsOlpcbiAgICAgIC0gLi4vZmlsZXMvdm9sdW1lcy9kYi9qd3Quc3FsOi9kb2NrZXItZW50cnlwb2ludC1pbml0ZGIuZC9pbml0LXNjcmlwdHMvOTktand0LnNxbDpaXG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvZGIvZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGE6WlxuICAgICAgLSAuLi9maWxlcy92b2x1bWVzL2RiL19zdXBhYmFzZS5zcWw6L2RvY2tlci1lbnRyeXBvaW50LWluaXRkYi5kL21pZ3JhdGlvbnMvOTctX3N1cGFiYXNlLnNxbDpaXG4gICAgICAtIC4uL2ZpbGVzL3ZvbHVtZXMvZGIvbG9ncy5zcWw6L2RvY2tlci1lbnRyeXBvaW50LWluaXRkYi5kL21pZ3JhdGlvbnMvOTktbG9ncy5zcWw6WlxuICAgICAgLSAuLi9maWxlcy92b2x1bWVzL2RiL3Bvb2xlci5zcWw6L2RvY2tlci1lbnRyeXBvaW50LWluaXRkYi5kL21pZ3JhdGlvbnMvOTktcG9vbGVyLnNxbDpaXG4gICAgICAtIGRiLWNvbmZpZzovZXRjL3Bvc3RncmVzcWwtY3VzdG9tXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICBbXG4gICAgICAgICAgXCJDTURcIixcbiAgICAgICAgICBcInBnX2lzcmVhZHlcIixcbiAgICAgICAgICBcIi1VXCIsXG4gICAgICAgICAgXCJwb3N0Z3Jlc1wiLFxuICAgICAgICAgIFwiLWhcIixcbiAgICAgICAgICBcImxvY2FsaG9zdFwiXG4gICAgICAgIF1cbiAgICAgIGludGVydmFsOiA1c1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDE1XG4gICAgICBzdGFydF9wZXJpb2Q6IDYwc1xuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfSE9TVDogL3Zhci9ydW4vcG9zdGdyZXNxbFxuICAgICAgUEdQT1JUOiAke1BPU1RHUkVTX1BPUlR9XG4gICAgICBQT1NUR1JFU19QT1JUOiAke1BPU1RHUkVTX1BPUlR9XG4gICAgICBQR1BBU1NXT1JEOiAke1BPU1RHUkVTX1BBU1NXT1JEfVxuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7UE9TVEdSRVNfUEFTU1dPUkR9XG4gICAgICBQR0RBVEFCQVNFOiAke1BPU1RHUkVTX0RCfVxuICAgICAgUE9TVEdSRVNfREI6ICR7UE9TVEdSRVNfREJ9XG4gICAgICBKV1RfU0VDUkVUOiAke0pXVF9TRUNSRVR9XG4gICAgICBKV1RfRVhQOiAke0pXVF9FWFBJUll9XG4gICAgY29tbWFuZDpcbiAgICAgIFtcbiAgICAgICAgXCJwb3N0Z3Jlc1wiLFxuICAgICAgICBcIi1jXCIsXG4gICAgICAgIFwiY29uZmlnX2ZpbGU9L2V0Yy9wb3N0Z3Jlc3FsL3Bvc3RncmVzcWwuY29uZlwiLFxuICAgICAgICBcIi1jXCIsXG4gICAgICAgIFwibG9nX21pbl9tZXNzYWdlcz1mYXRhbFwiXG4gICAgICBdXG5cbiAgc3VwYXZpc29yOlxuICAgIGltYWdlOiBzdXBhYmFzZS9zdXBhdmlzb3I6Mi45LjVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGV4cG9zZTpcbiAgICAgIC0gXCI1NDMyXCJcbiAgICAgIC0gXCI2NTQzXCJcbiAgICB2b2x1bWVzOlxuICAgICAgLSAuLi9maWxlcy92b2x1bWVzL3Bvb2xlci9wb29sZXIuZXhzOi9ldGMvcG9vbGVyL3Bvb2xlci5leHM6cm8selxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgW1xuICAgICAgICAgIFwiQ01EXCIsXG4gICAgICAgICAgXCJjdXJsXCIsXG4gICAgICAgICAgXCItc1NmTFwiLFxuICAgICAgICAgIFwiLS1oZWFkXCIsXG4gICAgICAgICAgXCItb1wiLFxuICAgICAgICAgIFwiL2Rldi9udWxsXCIsXG4gICAgICAgICAgXCJodHRwOi8vMTI3LjAuMC4xOjQwMDAvYXBpL2hlYWx0aFwiXG4gICAgICAgIF1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiAxMFxuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcbiAgICBkZXBlbmRzX29uOlxuICAgICAgZGI6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBQT1JUOiA0MDAwXG4gICAgICBQT1NUR1JFU19QT1JUOiAke1BPU1RHUkVTX1BPUlR9XG4gICAgICBQT1NUR1JFU19IT1NUOiAke1BPU1RHUkVTX0hPU1R9XG4gICAgICBQT1NUR1JFU19EQjogJHtQT1NUR1JFU19EQn1cbiAgICAgIFBPU1RHUkVTX1BBU1NXT1JEOiAke1BPU1RHUkVTX1BBU1NXT1JEfVxuICAgICAgREFUQUJBU0VfVVJMOiBlY3RvOi8vc3VwYWJhc2VfYWRtaW46JHtQT1NUR1JFU19QQVNTV09SRH1AJHtQT1NUR1JFU19IT1NUfToke1BPU1RHUkVTX1BPUlR9L19zdXBhYmFzZVxuICAgICAgQ0xVU1RFUl9QT1NUR1JFUzogXCJ0cnVlXCJcbiAgICAgIFNFQ1JFVF9LRVlfQkFTRTogJHtTRUNSRVRfS0VZX0JBU0V9XG4gICAgICBWQVVMVF9FTkNfS0VZOiAke1ZBVUxUX0VOQ19LRVl9XG4gICAgICBBUElfSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuICAgICAgTUVUUklDU19KV1RfU0VDUkVUOiAke0pXVF9TRUNSRVR9XG4gICAgICBSRUdJT046IGxvY2FsXG4gICAgICBFUkxfQUZMQUdTOiAtcHJvdG9fZGlzdCBpbmV0X3RjcFxuICAgICAgUE9PTEVSX1RFTkFOVF9JRDogJHtQT09MRVJfVEVOQU5UX0lEfVxuICAgICAgUE9PTEVSX0RFRkFVTFRfUE9PTF9TSVpFOiAke1BPT0xFUl9ERUZBVUxUX1BPT0xfU0laRX1cbiAgICAgIFBPT0xFUl9NQVhfQ0xJRU5UX0NPTk46ICR7UE9PTEVSX01BWF9DTElFTlRfQ09OTn1cbiAgICAgIFBPT0xFUl9QT09MX01PREU6IHRyYW5zYWN0aW9uXG4gICAgICBEQl9QT09MX1NJWkU6ICR7UE9PTEVSX0RCX1BPT0xfU0laRX1cbiAgICBjb21tYW5kOlxuICAgICAgW1xuICAgICAgICBcIi9iaW4vc2hcIixcbiAgICAgICAgXCItY1wiLFxuICAgICAgICBcIi9hcHAvYmluL21pZ3JhdGUgJiYgL2FwcC9iaW4vc3VwYXZpc29yIGV2YWwgXFxcIiQkKGNhdCAvZXRjL3Bvb2xlci9wb29sZXIuZXhzKVxcXCIgJiYgL2FwcC9iaW4vc2VydmVyXCJcbiAgICAgIF1cblxudm9sdW1lczpcbiAgZGItY29uZmlnOlxuICBkZW5vLWNhY2hlOiIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5wb3N0Z3Jlc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxuZGFzaGJvYXJkX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5wZ19tZXRhX2NyeXB0b19rZXkgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbnMzX3Byb3RvY29sX2FjY2Vzc19rZXlfaWQgPSBcIiR7cGFzc3dvcmQ6MjR9XCJcbnMzX3Byb3RvY29sX2FjY2Vzc19rZXlfc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjQ4fVwiXG5zZWNyZXRfa2V5X2Jhc2UgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcbnZhdWx0X2VuY19rZXkgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbiMgUmVhbHRpbWUgcmVxdWlyZXMgdGhpcyB0byBiZSBleGFjdGx5IDE2IGNoYXJhY3RlcnMgKGRva3Bsb3kncyBoYXNoIGhlbHBlclxuIyBlbWl0cyBvbmUgaGV4IGNoYXJhY3RlciBwZXIgdW5pdCBvZiBsZW5ndGgpLlxucmVhbHRpbWVfZGJfZW5jX2tleSA9IFwiJHtoYXNoOjE2fVwiXG5qd3Rfc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5wb29sZXJfdGVuYW50X2lkID0gXCIke3V1aWR9XCJcbmFub25fa2V5X3BheWxvYWQgPSBcIlwiXCJ7XG4gIFwicm9sZVwiOiBcImFub25cIixcbiAgXCJpc3NcIjogXCJzdXBhYmFzZVwiLFxuICBcImV4cFwiOiAke3RpbWVzdGFtcHM6MjAzMC0wMS0wMVQwMDowMDowMFp9XG59XG5cIlwiXCJcbnNlcnZpY2Vfcm9sZV9rZXlfcGF5bG9hZCA9IFwiXCJcIntcbiAgXCJyb2xlXCI6IFwic2VydmljZV9yb2xlXCIsXG4gIFwiaXNzXCI6IFwic3VwYWJhc2VcIixcbiAgXCJleHBcIjogJHt0aW1lc3RhbXBzOjIwMzAtMDEtMDFUMDA6MDA6MDBafVxufVxuXCJcIlwiXG4jIERlZmluZWQgaGVyZSAobm90IGlubGluZSBpbiBlbnYpIHNvIGVhY2ggSldUIGlzIGdlbmVyYXRlZCBvbmNlIGFuZCBjYW4gYmVcbiMgcmV1c2VkOiB0aGUgZ2F0ZXdheSBzd2FwcyB0aGUgb3BhcXVlIEFQSSBrZXlzIGJlbG93IGZvciB0aGVzZSBleGFjdCB0b2tlbnMuXG5hbm9uX2tleSA9IFwiJHtqd3Q6and0X3NlY3JldDphbm9uX2tleV9wYXlsb2FkfVwiXG5zZXJ2aWNlX3JvbGVfa2V5ID0gXCIke2p3dDpqd3Rfc2VjcmV0OnNlcnZpY2Vfcm9sZV9rZXlfcGF5bG9hZH1cIlxuIyBPcGFxdWUgQVBJIGtleXMsIHNoYXBlZCBsaWtlIFN1cGFiYXNlJ3M6IHNiXzxyb2xlPl88MjIgY2hhcnM+Xzw4IGNoYXIgc3VmZml4Pi5cbnB1Ymxpc2hhYmxlX2tleSA9IFwic2JfcHVibGlzaGFibGVfJHtoYXNoOjIyfV8ke2hhc2g6OH1cIlxuc2VjcmV0X2tleSA9IFwic2Jfc2VjcmV0XyR7aGFzaDoyMn1fJHtoYXNoOjh9XCJcblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwiYXBpLWd3XCJcbnBvcnQgPSA4XzAwMFxuaG9zdCA9IFwiJHttYWluX2RvbWFpbn1cIlxuXG5bY29uZmlnXVxuZW52ID0gW1xuJyMjIyMjIyMjIyMjIycsXG4nIyBUbyBnZXQgYSBwcm9wZXIgd29ya2luZyBjb25maWd1cmF0aW9uIHlvdSBzaG91bGQgYXQgbGVhc3QgdGFrZSBhIGxvb2sgYXQ6JyxcbicjIC0gU1VQQUJBU0VfUFVCTElDX1VSTCwgQVBJX0VYVEVSTkFMX1VSTCBzaG91bGQgcG9pbnQgdG8geW91ciBzdXBhYmFzZSBkb21haW4gd2l0aCBjb3JyZWN0IGh0dHAvaHR0cHMgc2NoZW1lJyxcbicjIC0gU01UUF8qIGFyZSByZXF1aXJlZCBmb3IgYXV0aCBtYWlsIHNlbmRpbmcnLFxuJyMgLSBBRERJVElPTkFMX1JFRElSRUNUX1VSTFMsIFNJVEVfVVJMIHNob3VsZCBwb2ludCB0byBhcHBsaWNhdGlvbiB1c2luZyBzdXBhYmFzZSBmb3IgYXV0aGVudGljYXRpb24nLFxuJyMgICBUaGV5IGFyZSB1c2VkIGZvciByZWRpcmVjdGluZyBhZnRlciBsb2dpbi9zaWdudXAgYW5kIGdvdHJ1ZSB3aWxsIGNoZWNrIHRoZW0gYmVmb3JlIHNlbmRpbmcgZW1haWxzJyxcbicjIC0gUE9TVEdSRVNfUE9SVCwgUE9PTEVSX1BST1hZX1BPUlRfVFJBTlNBQ1RJT04gc2hvdWxkIGJlIGNoYW5nZWQgaWYgeW91IGFyZSBhbHJlYWR5IHJ1bm5pbmcgb3RoZXIgaW5zdGFuY2VzIG9mIHN1cGFiYXNlJyxcbicjIyMjIyMjIyMjIyMnLFxuJycsXG4nIyMjIyMjIyMjIyMjJyxcbicjIFNlY3JldHMnLFxuJyMgWU9VIE1VU1QgQ0hBTkdFIFRIRVNFIEJFRk9SRSBHT0lORyBJTlRPIFBST0RVQ1RJT04nLFxuJyMgaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9ndWlkZXMvc2VsZi1ob3N0aW5nL2RvY2tlciNzZWN1cmluZy15b3VyLXNlcnZpY2VzJyxcbicjIEluIHRoaXMgdmVyc2lvbiBvZiB0aGUgdGVtcGxhdGUgdGhleSBhcmUgZ2VuZXJhdGVkIHJhbmRvbWx5IGJ5IGRva3Bsb3kgaGVscGVycycsXG4nIyBzbyB5b3UgZG8gbm90IG5lZWQgdG8gY2hhbmdlIHRoZW0gbWFudWFsbHknLFxuJyMgR28gdG8gaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9ndWlkZXMvc2VsZi1ob3N0aW5nIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbicjIyMjIyMjIyMjIyMnLFxuJycsXG4nU1VQQUJBU0VfSE9TVD0ke21haW5fZG9tYWlufScsXG4nUE9TVEdSRVNfUEFTU1dPUkQ9JHtwb3N0Z3Jlc19wYXNzd29yZH0nLFxuJycsXG4nIyBTeW1tZXRyaWMgSFMyNTYga2V5IGFuZCB0aGUgbGVnYWN5IEFQSSBrZXlzIGRlcml2ZWQgZnJvbSBpdC4nLFxuJ0pXVF9TRUNSRVQ9JHtqd3Rfc2VjcmV0fScsXG4nQU5PTl9LRVk9JHthbm9uX2tleX0nLFxuJ1NFUlZJQ0VfUk9MRV9LRVk9JHtzZXJ2aWNlX3JvbGVfa2V5fScsXG4nJyxcbicjIyMjIyMjIyMjIyMnLFxuJyMgTmV3IEFQSSBrZXlzLiBUaGVzZSBhcmUgb3BhcXVlIHN0cmluZ3M6IGNsaWVudHMgbmV2ZXIgc2VlIGEgZGVjb2RhYmxlIEpXVCwnLFxuJyMgRW52b3kgc3dhcHMgdGhlbSBmb3IgdGhlICpfQVNZTU1FVFJJQyB0b2tlbnMgYmVsb3cgYmVmb3JlIHByb3h5aW5nLicsXG4nIycsXG4nIyBUaG9zZSB0b2tlbnMgYXJlIEhTMjU2LCBzaWduZWQgd2l0aCBKV1RfU0VDUkVULCBzbyB0aGV5IHZlcmlmeSBhZ2FpbnN0IHRoZScsXG4nIyBzYW1lIGtleSBldmVyeXRoaW5nIGVsc2UgYWxyZWFkeSB1c2VzLiBSZWFsIEVTMjU2IGtleXMgd291bGQgbmVlZCBhbiBFQyBQLTI1NicsXG4nIyBrZXlwYWlyLCB3aGljaCB0aGUgZG9rcGxveSB2YXJpYWJsZSBoZWxwZXJzIGNhbm5vdCBnZW5lcmF0ZSAtIHNlZSBKV1RfS0VZUyAvJyxcbicjIEpXVF9KV0tTIGJlbG93IGlmIHlvdSB3YW50IHRvIHN3aXRjaCB0byB0aGVtLicsXG4nIyMjIyMjIyMjIyMjJyxcbidTVVBBQkFTRV9QVUJMSVNIQUJMRV9LRVk9JHtwdWJsaXNoYWJsZV9rZXl9JyxcbidTVVBBQkFTRV9TRUNSRVRfS0VZPSR7c2VjcmV0X2tleX0nLFxuJ0FOT05fS0VZX0FTWU1NRVRSSUM9JHthbm9uX2tleX0nLFxuJ1NFUlZJQ0VfUk9MRV9LRVlfQVNZTU1FVFJJQz0ke3NlcnZpY2Vfcm9sZV9rZXl9JyxcbicnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyBPcHRpb25hbDogbW92ZSBzaWduaW5nIHRvIGFuIEVTMjU2IGtleSBwYWlyLiBMZWF2ZSBib3RoIGVtcHR5IHRvIHN0YXkgb24nLFxuJyMgSFMyNTYgKHRoZSBkZWZhdWx0LCBhbmQgd2hhdCB0aGUga2V5cyBhYm92ZSBhcmUgc2lnbmVkIHdpdGgpLicsXG4nIycsXG4nIyBUbyBzd2l0Y2gsIGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS9zdXBhYmFzZSwgcHV0IHRoaXMgZGVwbG95bWVudCcsXG4nIyBKV1RfU0VDUkVUIGluIGRvY2tlci8uZW52LCBydW4gYHNoIHV0aWxzL2FkZC1uZXctYXV0aC1rZXlzLnNoYCwgdGhlbiByZXBsYWNlJyxcbicjIGFsbCBzaXggdmFsdWVzIGFib3ZlIGFuZCBiZWxvdyB3aXRoIHRoZSBvbmVzIGl0IHByaW50cy4gU2V0IHRoZW0gdG9nZXRoZXI6JyxcbicjIEpXVF9LRVlTIG1ha2VzIEF1dGggc2lnbiB3aXRoIEVTMjU2LCBKV1RfSldLUyBpcyBob3cgZXZlcnl0aGluZyBlbHNlJyxcbicjIHZlcmlmaWVzIHRob3NlIHRva2Vucywgc28gZmlsbGluZyBpbiBvbmUgd2l0aG91dCB0aGUgb3RoZXIgYnJlYWtzIGF1dGguJyxcbicjIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvZ3VpZGVzL3NlbGYtaG9zdGluZy9zZWxmLWhvc3RlZC1hdXRoLWtleXMnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyDim5QgUmVwbGFjaW5nIHRoZSBzaXggRVMyNTYgdmFsdWVzIGRvZXMgTk9UIHRvdWNoIEFOT05fS0VZIG9yIFNFUlZJQ0VfUk9MRV9LRVkuJyxcbicjIFRoZSBsZWdhY3kgSFMyNTYgcGFpciBzdGF5cyB2YWxpZCwgc28gdGhlIGRlcGxveW1lbnQgcnVucyBpbiBkdWFsIG1vZGUgdW50aWwnLFxuJyMgeW91IGNsZWFyIGl0IGRlbGliZXJhdGVseS4gU2VlIFwiUnVubmluZyBvbiB0aGUgbmV3IGtleXMgb25seVwiIGluIGluc3RydWN0aW9ucy5tZC4nLFxuJyMgSlNPTiBhcnJheSBvZiBzaWduaW5nIEpXS3MgKEVDIHByaXZhdGUgKyBsZWdhY3kgc3ltbWV0cmljKSwgdXNlZCBieSBBdXRoLicsXG4nSldUX0tFWVM9W10nLFxuJyMgSldLUyBmb3IgdG9rZW4gdmVyaWZpY2F0aW9uIChFQyBwdWJsaWMgKyBsZWdhY3kgc3ltbWV0cmljKSwgdXNlZCBieScsXG4nIyBQb3N0Z1JFU1QsIFJlYWx0aW1lLCBTdG9yYWdlIGFuZCBFZGdlIEZ1bmN0aW9ucy4nLFxuJ0pXVF9KV0tTPScsXG4nJyxcbidEQVNIQk9BUkRfVVNFUk5BTUU9c3VwYWJhc2UnLFxuJ0RBU0hCT0FSRF9QQVNTV09SRD0ke2Rhc2hib2FyZF9wYXNzd29yZH0nLFxuJ1NFQ1JFVF9LRVlfQkFTRT0ke3NlY3JldF9rZXlfYmFzZX0nLFxuJ1ZBVUxUX0VOQ19LRVk9JHt2YXVsdF9lbmNfa2V5fScsXG4nUkVBTFRJTUVfREJfRU5DX0tFWT0ke3JlYWx0aW1lX2RiX2VuY19rZXl9JyxcbidQR19NRVRBX0NSWVBUT19LRVk9JHtwZ19tZXRhX2NyeXB0b19rZXl9JyxcbicnLFxuJycsXG4nIyMjIyMjIyMjIyMjJyxcbicjIERhdGFiYXNlIC0gWW91IGNhbiBjaGFuZ2UgdGhlc2UgdG8gYW55IFBvc3RncmVTUUwgZGF0YWJhc2UgdGhhdCBoYXMgbG9naWNhbCByZXBsaWNhdGlvbiBlbmFibGVkLicsXG4nIyMjIyMjIyMjIyMjJyxcbicnLFxuJ1BPU1RHUkVTX0hPU1Q9ZGInLFxuJ1BPU1RHUkVTX0RCPXBvc3RncmVzJyxcbidQT1NUR1JFU19QT1JUPTU0MzInLFxuJ1BPU1RHUkVTX1VTRVI9cG9zdGdyZXMnLFxuJycsXG4nJyxcbicjIyMjIyMjIyMjIyMnLFxuJyMgU3VwYXZpc29yIC0tIERhdGFiYXNlIHBvb2xlcicsXG4nIyMjIyMjIyMjIyMjJyxcbidQT09MRVJfUFJPWFlfUE9SVF9UUkFOU0FDVElPTj02NTQzJyxcbidQT09MRVJfREVGQVVMVF9QT09MX1NJWkU9MjAnLFxuJ1BPT0xFUl9NQVhfQ0xJRU5UX0NPTk49MTAwJyxcbidQT09MRVJfVEVOQU5UX0lEPSR7cG9vbGVyX3RlbmFudF9pZH0nLFxuJ1BPT0xFUl9EQl9QT09MX1NJWkU9NScsXG4nJyxcbicnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyBBUEkgUHJveHkgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgRW52b3kgcmV2ZXJzZSBwcm94eS4nLFxuJyMgVGhlIGdhdGV3YXkgcG9ydCBpcyBmaXhlZCBhdCA4MDAwIGJ5IHRoZSBjb21wb3NlIGV4cG9zZSBsaXN0IGFuZCBieSB0aGUgZG9tYWluJyxcbicjIGJsb2NrIG9mIHRoaXMgdGVtcGxhdGUsIHNvIGVkaXRpbmcgQVBJX0dXX0hUVFBfUE9SVCBoYXMgbm8gZWZmZWN0LiBJdCBpcyBrZXB0JyxcbicjIG9ubHkgZm9yIHBhcml0eSB3aXRoIHRoZSB1cHN0cmVhbSBTdXBhYmFzZSAuZW52LicsXG4nIyMjIyMjIyMjIyMjJyxcbicnLFxuJ0FQSV9HV19IVFRQX1BPUlQ9ODAwMCcsXG4nJyxcbicnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyBBUEkgLSBDb25maWd1cmF0aW9uIGZvciBQb3N0Z1JFU1QuJyxcbicjIyMjIyMjIyMjIyMnLFxuJycsXG4nUEdSU1RfREJfU0NIRU1BUz1wdWJsaWMsc3RvcmFnZSxncmFwaHFsX3B1YmxpYycsXG4nUEdSU1RfREJfTUFYX1JPV1M9MTAwMCcsXG4nUEdSU1RfREJfRVhUUkFfU0VBUkNIX1BBVEg9cHVibGljJyxcbicnLFxuJycsXG4nIyMjIyMjIyMjIyMjJyxcbicjIEF1dGggLSBDb25maWd1cmF0aW9uIGZvciB0aGUgR29UcnVlIGF1dGhlbnRpY2F0aW9uIHNlcnZlci4nLFxuJyMjIyMjIyMjIyMjIycsXG4nJyxcbicjIyBHZW5lcmFsJyxcbidTSVRFX1VSTD1odHRwOi8vbG9jYWxob3N0OjMwMDAnLFxuJ0FERElUSU9OQUxfUkVESVJFQ1RfVVJMUz1odHRwczovLyR7bWFpbl9kb21haW59LyosaHR0cDovL2xvY2FsaG9zdDozMDAwLyonLFxuJ0pXVF9FWFBJUlk9MzYwMCcsXG4nRElTQUJMRV9TSUdOVVA9ZmFsc2UnLFxuJ0FQSV9FWFRFUk5BTF9VUkw9aHR0cHM6Ly8ke21haW5fZG9tYWlufS9hdXRoL3YxJyxcbicnLFxuJyMjIE1haWxlciBDb25maWcnLFxuJ01BSUxFUl9VUkxQQVRIU19DT05GSVJNQVRJT049XCIvYXV0aC92MS92ZXJpZnlcIicsXG4nTUFJTEVSX1VSTFBBVEhTX0lOVklURT1cIi9hdXRoL3YxL3ZlcmlmeVwiJyxcbidNQUlMRVJfVVJMUEFUSFNfUkVDT1ZFUlk9XCIvYXV0aC92MS92ZXJpZnlcIicsXG4nTUFJTEVSX1VSTFBBVEhTX0VNQUlMX0NIQU5HRT1cIi9hdXRoL3YxL3ZlcmlmeVwiJyxcbicnLFxuJyMjIEVtYWlsIGF1dGgnLFxuJ0VOQUJMRV9FTUFJTF9TSUdOVVA9dHJ1ZScsXG4nRU5BQkxFX0VNQUlMX0FVVE9DT05GSVJNPWZhbHNlJyxcbidTTVRQX0FETUlOX0VNQUlMPWFkbWluQGV4YW1wbGUuY29tJyxcbidTTVRQX0hPU1Q9c3VwYWJhc2UtbWFpbCcsXG4nU01UUF9QT1JUPTI1MDAnLFxuJ1NNVFBfVVNFUj1mYWtlX21haWxfdXNlcicsXG4nU01UUF9QQVNTPWZha2VfbWFpbF9wYXNzd29yZCcsXG4nU01UUF9TRU5ERVJfTkFNRT1mYWtlX3NlbmRlcicsXG4nRU5BQkxFX0FOT05ZTU9VU19VU0VSUz1mYWxzZScsXG4nJyxcbicjIyBQaG9uZSBhdXRoJyxcbidFTkFCTEVfUEhPTkVfU0lHTlVQPXRydWUnLFxuJ0VOQUJMRV9QSE9ORV9BVVRPQ09ORklSTT10cnVlJyxcbicnLFxuJycsXG4nIyMjIyMjIyMjIyMjJyxcbicjIFN0dWRpbyAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBEYXNoYm9hcmQnLFxuJyMjIyMjIyMjIyMjIycsXG4nJyxcbidTVFVESU9fREVGQVVMVF9PUkdBTklaQVRJT049RGVmYXVsdCBPcmdhbml6YXRpb24nLFxuJ1NUVURJT19ERUZBVUxUX1BST0pFQ1Q9RGVmYXVsdCBQcm9qZWN0JyxcbicnLFxuJ1NVUEFCQVNFX1BVQkxJQ19VUkw9aHR0cHM6Ly8ke21haW5fZG9tYWlufScsXG4nJyxcbicjIyMjIyMjIyMjIyMnLFxuJyMgU3RvcmFnZSAtIGxvY2FsIGZpbGUgYmFja2VuZCAoZGVmYXVsdCkuJyxcbicjIEZvciBhbiBTMy1jb21wYXRpYmxlIGJhY2tlbmQgKENsb3VkZmxhcmUgUjIsIE1pbklPLCBBV1MgUzMpOiBzZXQgU1RPUkFHRV9CQUNLRU5EJyxcbicjIHRvIHMzIGluIGRvY2tlci1jb21wb3NlLnltbCwgdW5jb21tZW50IHRoZSBTMyBibG9jayB0aGVyZSwgYW5kIGZpbGwgaW4nLFxuJyMgR0xPQkFMX1MzX0JVQ0tFVCwgR0xPQkFMX1MzX0VORFBPSU5ULCBTVE9SQUdFX1MzX1JFR0lPTiBhbmQgdGhlIHR3byBBV1NfKiBrZXlzLicsXG4nIyBGdWxsIHJlY2lwZSwgaW5jbHVkaW5nIHRoZSB0d28gc2V0dGluZ3MgdGhhdCBhcmUgZWFzeSB0byBtaXNzLCBpbiBpbnN0cnVjdGlvbnMubWQuJyxcbicjIyMjIyMjIyMjIyMnLFxuJycsXG4nR0xPQkFMX1MzX0JVQ0tFVD1zdHViJyxcbicnLFxuJyMg4puUIFJFR0lPTiBpcyByZWFkIFRXSUNFIGJ5IHN0b3JhZ2UtYXBpOiBhcyB0aGUgcmVwb3J0ZWQgc2VydmVyIHJlZ2lvbiwgYW5kIGFzJyxcbicjIHRoZSBTMyBzaWduaW5nIHJlZ2lvbiB3aGVuIFNUT1JBR0VfUzNfUkVHSU9OIGlzIHVuc2V0LiBMZWF2ZSBpdCBhbG9uZSBhbmQgc2V0JyxcbicjIFNUT1JBR0VfUzNfUkVHSU9OIGJlbG93LCBzbyBzd2l0Y2hpbmcgdG8gUzMgbW92ZXMgb25seSB0aGUgc2lnbmluZyByZWdpb24uJyxcbidSRUdJT049c3R1YicsXG4nIyBUaGUgUzMgc2lnbmluZyByZWdpb24uIENsb3VkZmxhcmUgUjIgdXNlcyBcImF1dG9cIi4gSW5lcnQgb24gdGhlIGZpbGUgYmFja2VuZC4nLFxuJ1NUT1JBR0VfUzNfUkVHSU9OPWF1dG8nLFxuJycsXG4nIyDim5QgUEVSTUFORU5ULiBUaGlzIGJlY29tZXMgdGhlIHRvcC1sZXZlbCBwcmVmaXggaW5zaWRlIHRoZSBidWNrZXQ6JyxcbicjICAgICAgPHRlbmFudC1pZD4vPGJ1Y2tldD4vPHBhdGg+JyxcbicjIENoYW5nZSBpdCBiZWZvcmUgdGhlIGZpcnN0IHVwbG9hZC4gQ2hhbmdpbmcgaXQgYWZ0ZXJ3YXJkcyBvcnBoYW5zIGV2ZXJ5JyxcbicjIG9iamVjdCDigJQgdGhlIGJ5dGVzIHN0YXkgYW5kIG5vIHBhdGggcmVzb2x2ZXMgdG8gdGhlbS4nLFxuJ1NUT1JBR0VfVEVOQU5UX0lEPXN0dWInLFxuJ1MzX1BST1RPQ09MX0FDQ0VTU19LRVlfSUQ9JHtzM19wcm90b2NvbF9hY2Nlc3Nfa2V5X2lkfScsXG4nUzNfUFJPVE9DT0xfQUNDRVNTX0tFWV9TRUNSRVQ9JHtzM19wcm90b2NvbF9hY2Nlc3Nfa2V5X3NlY3JldH0nLFxuJycsXG4nSU1HUFJPWFlfQVVUT19XRUJQPXRydWUnLFxuJycsXG4nIyBBZGQgeW91ciBPcGVuQUkgQVBJIGtleSB0byBlbmFibGUgU1FMIEVkaXRvciBBc3Npc3RhbnQnLFxuJ09QRU5BSV9BUElfS0VZPScsXG4nJyxcbicnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyBGdW5jdGlvbnMgLSBDb25maWd1cmF0aW9uIGZvciBGdW5jdGlvbnMnLFxuJyMjIyMjIyMjIyMjIycsXG4nIyBOT1RFOiBWRVJJRllfSldUIGFwcGxpZXMgdG8gYWxsIGZ1bmN0aW9ucy4gUGVyLWZ1bmN0aW9uIFZFUklGWV9KV1QgaXMgbm90IHN1cHBvcnRlZCB5ZXQuJyxcbidGVU5DVElPTlNfVkVSSUZZX0pXVD1mYWxzZSddXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvYXBpL2Vudm95L2Vudm95LnlhbWxcIlxuY29udGVudCA9ICcnJ2R5bmFtaWNfcmVzb3VyY2VzOlxuICBjZHNfY29uZmlnOlxuICAgIHBhdGhfY29uZmlnX3NvdXJjZTpcbiAgICAgIHBhdGg6IC9ldGMvZW52b3kvY2RzLnlhbWxcbiAgICByZXNvdXJjZV9hcGlfdmVyc2lvbjogVjNcbiAgbGRzX2NvbmZpZzpcbiAgICBwYXRoX2NvbmZpZ19zb3VyY2U6XG4gICAgICBwYXRoOiAvZXRjL2Vudm95L2xkcy55YW1sXG4gICAgcmVzb3VyY2VfYXBpX3ZlcnNpb246IFYzXG5cbm5vZGU6XG4gIGNsdXN0ZXI6IHN1cGFiYXNlX2NsdXN0ZXJcbiAgaWQ6IHN1cGFiYXNlX25vZGVcblxub3ZlcmxvYWRfbWFuYWdlcjpcbiAgcmVzb3VyY2VfbW9uaXRvcnM6XG4gICAgLSBuYW1lOiBlbnZveS5yZXNvdXJjZV9tb25pdG9ycy5nbG9iYWxfZG93bnN0cmVhbV9tYXhfY29ubmVjdGlvbnNcbiAgICAgIHR5cGVkX2NvbmZpZzpcbiAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmV4dGVuc2lvbnMucmVzb3VyY2VfbW9uaXRvcnMuZG93bnN0cmVhbV9jb25uZWN0aW9ucy52My5Eb3duc3RyZWFtQ29ubmVjdGlvbnNDb25maWdcbiAgICAgICAgbWF4X2FjdGl2ZV9kb3duc3RyZWFtX2Nvbm5lY3Rpb25zOiAzMDAwMFxuXG5hZG1pbjpcbiAgYWRkcmVzczpcbiAgICBzb2NrZXRfYWRkcmVzczpcbiAgICAgIGFkZHJlc3M6IDEyNy4wLjAuMVxuICAgICAgcG9ydF92YWx1ZTogOTkwMVxuJycnXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvYXBpL2Vudm95L2Nkcy55YW1sXCJcbmNvbnRlbnQgPSAnJydyZXNvdXJjZXM6XG4gIC0gJ0B0eXBlJzogdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5jb25maWcuY2x1c3Rlci52My5DbHVzdGVyXG4gICAgbmFtZTogYXV0aFxuICAgIGNvbm5lY3RfdGltZW91dDogNXNcbiAgICB0eXBlOiBTVFJJQ1RfRE5TXG4gICAgZG5zX3JlZnJlc2hfcmF0ZTogNXNcbiAgICBkbnNfZmFpbHVyZV9yZWZyZXNoX3JhdGU6XG4gICAgICBiYXNlX2ludGVydmFsOiAxc1xuICAgICAgbWF4X2ludGVydmFsOiAxc1xuICAgIGxiX3BvbGljeTogUk9VTkRfUk9CSU5cbiAgICBsb2FkX2Fzc2lnbm1lbnQ6XG4gICAgICBjbHVzdGVyX25hbWU6IGF1dGhcbiAgICAgIGVuZHBvaW50czpcbiAgICAgICAgLSBsYl9lbmRwb2ludHM6XG4gICAgICAgICAgICAtIGVuZHBvaW50OlxuICAgICAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICAgICBzb2NrZXRfYWRkcmVzczpcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogYXV0aFxuICAgICAgICAgICAgICAgICAgICBwb3J0X3ZhbHVlOiA5OTk5XG4gICAgaGVhbHRoX2NoZWNrczpcbiAgICAgIC0gdGltZW91dDogMnNcbiAgICAgICAgaW50ZXJ2YWw6IDVzXG4gICAgICAgIHVuaGVhbHRoeV90aHJlc2hvbGQ6IDNcbiAgICAgICAgaGVhbHRoeV90aHJlc2hvbGQ6IDJcbiAgICAgICAgaHR0cF9oZWFsdGhfY2hlY2s6XG4gICAgICAgICAgcGF0aDogL2hlYWx0aFxuICAgIGNpcmN1aXRfYnJlYWtlcnM6XG4gICAgICB0aHJlc2hvbGRzOlxuICAgICAgICAtIHByaW9yaXR5OiBERUZBVUxUXG4gICAgICAgICAgbWF4X2Nvbm5lY3Rpb25zOiAxMDAwMFxuICAgICAgICAgIG1heF9wZW5kaW5nX3JlcXVlc3RzOiAxMDAwMFxuICAgICAgICAgIG1heF9yZXF1ZXN0czogMTAwMDBcblxuICAtICdAdHlwZSc6IHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuY29uZmlnLmNsdXN0ZXIudjMuQ2x1c3RlclxuICAgIG5hbWU6IHJlc3RcbiAgICBjb25uZWN0X3RpbWVvdXQ6IDVzXG4gICAgdHlwZTogU1RSSUNUX0ROU1xuICAgIGRuc19yZWZyZXNoX3JhdGU6IDVzXG4gICAgZG5zX2ZhaWx1cmVfcmVmcmVzaF9yYXRlOlxuICAgICAgYmFzZV9pbnRlcnZhbDogMXNcbiAgICAgIG1heF9pbnRlcnZhbDogMXNcbiAgICBsYl9wb2xpY3k6IFJPVU5EX1JPQklOXG4gICAgbG9hZF9hc3NpZ25tZW50OlxuICAgICAgY2x1c3Rlcl9uYW1lOiByZXN0XG4gICAgICBlbmRwb2ludHM6XG4gICAgICAgIC0gbGJfZW5kcG9pbnRzOlxuICAgICAgICAgICAgLSBlbmRwb2ludDpcbiAgICAgICAgICAgICAgICBhZGRyZXNzOlxuICAgICAgICAgICAgICAgICAgc29ja2V0X2FkZHJlc3M6XG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IHJlc3RcbiAgICAgICAgICAgICAgICAgICAgcG9ydF92YWx1ZTogMzAwMFxuICAgIGhlYWx0aF9jaGVja3M6XG4gICAgICAtIHRpbWVvdXQ6IDJzXG4gICAgICAgIGludGVydmFsOiA1c1xuICAgICAgICB1bmhlYWx0aHlfdGhyZXNob2xkOiAzXG4gICAgICAgIGhlYWx0aHlfdGhyZXNob2xkOiAyXG4gICAgICAgIGh0dHBfaGVhbHRoX2NoZWNrOlxuICAgICAgICAgIHBhdGg6IC9cbiAgICBjaXJjdWl0X2JyZWFrZXJzOlxuICAgICAgdGhyZXNob2xkczpcbiAgICAgICAgLSBwcmlvcml0eTogREVGQVVMVFxuICAgICAgICAgIG1heF9jb25uZWN0aW9uczogMTAwMDBcbiAgICAgICAgICBtYXhfcGVuZGluZ19yZXF1ZXN0czogMTAwMDBcbiAgICAgICAgICBtYXhfcmVxdWVzdHM6IDEwMDAwXG5cbiAgLSAnQHR5cGUnOiB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5jbHVzdGVyLnYzLkNsdXN0ZXJcbiAgICBuYW1lOiByZWFsdGltZVxuICAgIGNvbm5lY3RfdGltZW91dDogNXNcbiAgICB0eXBlOiBTVFJJQ1RfRE5TXG4gICAgZG5zX3JlZnJlc2hfcmF0ZTogNXNcbiAgICBkbnNfZmFpbHVyZV9yZWZyZXNoX3JhdGU6XG4gICAgICBiYXNlX2ludGVydmFsOiAxc1xuICAgICAgbWF4X2ludGVydmFsOiAxc1xuICAgIGxiX3BvbGljeTogUk9VTkRfUk9CSU5cbiAgICBsb2FkX2Fzc2lnbm1lbnQ6XG4gICAgICBjbHVzdGVyX25hbWU6IHJlYWx0aW1lXG4gICAgICBlbmRwb2ludHM6XG4gICAgICAgIC0gbGJfZW5kcG9pbnRzOlxuICAgICAgICAgICAgLSBlbmRwb2ludDpcbiAgICAgICAgICAgICAgICBhZGRyZXNzOlxuICAgICAgICAgICAgICAgICAgc29ja2V0X2FkZHJlc3M6XG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IHJlYWx0aW1lXG4gICAgICAgICAgICAgICAgICAgIHBvcnRfdmFsdWU6IDQwMDBcbiAgICBoZWFsdGhfY2hlY2tzOlxuICAgICAgLSB0aW1lb3V0OiAyc1xuICAgICAgICBpbnRlcnZhbDogNXNcbiAgICAgICAgdW5oZWFsdGh5X3RocmVzaG9sZDogM1xuICAgICAgICBoZWFsdGh5X3RocmVzaG9sZDogMlxuICAgICAgICBodHRwX2hlYWx0aF9jaGVjazpcbiAgICAgICAgICBwYXRoOiAvXG4gICAgY2lyY3VpdF9icmVha2VyczpcbiAgICAgIHRocmVzaG9sZHM6XG4gICAgICAgIC0gcHJpb3JpdHk6IERFRkFVTFRcbiAgICAgICAgICBtYXhfY29ubmVjdGlvbnM6IDEwMDAwXG4gICAgICAgICAgbWF4X3BlbmRpbmdfcmVxdWVzdHM6IDEwMDAwXG4gICAgICAgICAgbWF4X3JlcXVlc3RzOiAxMDAwMFxuXG4gIC0gJ0B0eXBlJzogdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5jb25maWcuY2x1c3Rlci52My5DbHVzdGVyXG4gICAgbmFtZTogc3RvcmFnZVxuICAgIGNvbm5lY3RfdGltZW91dDogNXNcbiAgICB0eXBlOiBTVFJJQ1RfRE5TXG4gICAgZG5zX3JlZnJlc2hfcmF0ZTogNXNcbiAgICBkbnNfZmFpbHVyZV9yZWZyZXNoX3JhdGU6XG4gICAgICBiYXNlX2ludGVydmFsOiAxc1xuICAgICAgbWF4X2ludGVydmFsOiAxc1xuICAgIGxiX3BvbGljeTogUk9VTkRfUk9CSU5cbiAgICBsb2FkX2Fzc2lnbm1lbnQ6XG4gICAgICBjbHVzdGVyX25hbWU6IHN0b3JhZ2VcbiAgICAgIGVuZHBvaW50czpcbiAgICAgICAgLSBsYl9lbmRwb2ludHM6XG4gICAgICAgICAgICAtIGVuZHBvaW50OlxuICAgICAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICAgICBzb2NrZXRfYWRkcmVzczpcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICBwb3J0X3ZhbHVlOiA1MDAwXG4gICAgaGVhbHRoX2NoZWNrczpcbiAgICAgIC0gdGltZW91dDogMnNcbiAgICAgICAgaW50ZXJ2YWw6IDVzXG4gICAgICAgIHVuaGVhbHRoeV90aHJlc2hvbGQ6IDNcbiAgICAgICAgaGVhbHRoeV90aHJlc2hvbGQ6IDJcbiAgICAgICAgaHR0cF9oZWFsdGhfY2hlY2s6XG4gICAgICAgICAgcGF0aDogL3N0YXR1c1xuICAgIGNpcmN1aXRfYnJlYWtlcnM6XG4gICAgICB0aHJlc2hvbGRzOlxuICAgICAgICAtIHByaW9yaXR5OiBERUZBVUxUXG4gICAgICAgICAgbWF4X2Nvbm5lY3Rpb25zOiAxMDAwMFxuICAgICAgICAgIG1heF9wZW5kaW5nX3JlcXVlc3RzOiAxMDAwMFxuICAgICAgICAgIG1heF9yZXF1ZXN0czogMTAwMDBcblxuICAtICdAdHlwZSc6IHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuY29uZmlnLmNsdXN0ZXIudjMuQ2x1c3RlclxuICAgIG5hbWU6IGZ1bmN0aW9uc1xuICAgIGNvbm5lY3RfdGltZW91dDogNXNcbiAgICB0eXBlOiBTVFJJQ1RfRE5TXG4gICAgZG5zX3JlZnJlc2hfcmF0ZTogNXNcbiAgICBkbnNfZmFpbHVyZV9yZWZyZXNoX3JhdGU6XG4gICAgICBiYXNlX2ludGVydmFsOiAxc1xuICAgICAgbWF4X2ludGVydmFsOiAxc1xuICAgIGxiX3BvbGljeTogUk9VTkRfUk9CSU5cbiAgICBsb2FkX2Fzc2lnbm1lbnQ6XG4gICAgICBjbHVzdGVyX25hbWU6IGZ1bmN0aW9uc1xuICAgICAgZW5kcG9pbnRzOlxuICAgICAgICAtIGxiX2VuZHBvaW50czpcbiAgICAgICAgICAgIC0gZW5kcG9pbnQ6XG4gICAgICAgICAgICAgICAgYWRkcmVzczpcbiAgICAgICAgICAgICAgICAgIHNvY2tldF9hZGRyZXNzOlxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgcG9ydF92YWx1ZTogOTAwMFxuICAgIGhlYWx0aF9jaGVja3M6XG4gICAgICAtIHRpbWVvdXQ6IDJzXG4gICAgICAgIGludGVydmFsOiA1c1xuICAgICAgICB1bmhlYWx0aHlfdGhyZXNob2xkOiAzXG4gICAgICAgIGhlYWx0aHlfdGhyZXNob2xkOiAyXG4gICAgICAgIHRjcF9oZWFsdGhfY2hlY2s6IHt9XG4gICAgY2lyY3VpdF9icmVha2VyczpcbiAgICAgIHRocmVzaG9sZHM6XG4gICAgICAgIC0gcHJpb3JpdHk6IERFRkFVTFRcbiAgICAgICAgICBtYXhfY29ubmVjdGlvbnM6IDEwMDAwXG4gICAgICAgICAgbWF4X3BlbmRpbmdfcmVxdWVzdHM6IDEwMDAwXG4gICAgICAgICAgbWF4X3JlcXVlc3RzOiAxMDAwMFxuXG4gIC0gJ0B0eXBlJzogdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5jb25maWcuY2x1c3Rlci52My5DbHVzdGVyXG4gICAgbmFtZTogbWV0YVxuICAgIGNvbm5lY3RfdGltZW91dDogNXNcbiAgICB0eXBlOiBTVFJJQ1RfRE5TXG4gICAgZG5zX3JlZnJlc2hfcmF0ZTogNXNcbiAgICBkbnNfZmFpbHVyZV9yZWZyZXNoX3JhdGU6XG4gICAgICBiYXNlX2ludGVydmFsOiAxc1xuICAgICAgbWF4X2ludGVydmFsOiAxc1xuICAgIGxiX3BvbGljeTogUk9VTkRfUk9CSU5cbiAgICBsb2FkX2Fzc2lnbm1lbnQ6XG4gICAgICBjbHVzdGVyX25hbWU6IG1ldGFcbiAgICAgIGVuZHBvaW50czpcbiAgICAgICAgLSBsYl9lbmRwb2ludHM6XG4gICAgICAgICAgICAtIGVuZHBvaW50OlxuICAgICAgICAgICAgICAgIGFkZHJlc3M6XG4gICAgICAgICAgICAgICAgICBzb2NrZXRfYWRkcmVzczpcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogbWV0YVxuICAgICAgICAgICAgICAgICAgICBwb3J0X3ZhbHVlOiA4MDgwXG4gICAgaGVhbHRoX2NoZWNrczpcbiAgICAgIC0gdGltZW91dDogMnNcbiAgICAgICAgaW50ZXJ2YWw6IDVzXG4gICAgICAgIHVuaGVhbHRoeV90aHJlc2hvbGQ6IDNcbiAgICAgICAgaGVhbHRoeV90aHJlc2hvbGQ6IDJcbiAgICAgICAgaHR0cF9oZWFsdGhfY2hlY2s6XG4gICAgICAgICAgcGF0aDogL2hlYWx0aFxuICAgIGNpcmN1aXRfYnJlYWtlcnM6XG4gICAgICB0aHJlc2hvbGRzOlxuICAgICAgICAtIHByaW9yaXR5OiBERUZBVUxUXG4gICAgICAgICAgbWF4X2Nvbm5lY3Rpb25zOiAxMDAwMFxuICAgICAgICAgIG1heF9wZW5kaW5nX3JlcXVlc3RzOiAxMDAwMFxuICAgICAgICAgIG1heF9yZXF1ZXN0czogMTAwMDBcblxuICAtICdAdHlwZSc6IHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuY29uZmlnLmNsdXN0ZXIudjMuQ2x1c3RlclxuICAgIG5hbWU6IHN0dWRpb1xuICAgIGNvbm5lY3RfdGltZW91dDogNXNcbiAgICB0eXBlOiBTVFJJQ1RfRE5TXG4gICAgZG5zX3JlZnJlc2hfcmF0ZTogNXNcbiAgICBkbnNfZmFpbHVyZV9yZWZyZXNoX3JhdGU6XG4gICAgICBiYXNlX2ludGVydmFsOiAxc1xuICAgICAgbWF4X2ludGVydmFsOiAxc1xuICAgIGxiX3BvbGljeTogUk9VTkRfUk9CSU5cbiAgICBsb2FkX2Fzc2lnbm1lbnQ6XG4gICAgICBjbHVzdGVyX25hbWU6IHN0dWRpb1xuICAgICAgZW5kcG9pbnRzOlxuICAgICAgICAtIGxiX2VuZHBvaW50czpcbiAgICAgICAgICAgIC0gZW5kcG9pbnQ6XG4gICAgICAgICAgICAgICAgYWRkcmVzczpcbiAgICAgICAgICAgICAgICAgIHNvY2tldF9hZGRyZXNzOlxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBzdHVkaW9cbiAgICAgICAgICAgICAgICAgICAgcG9ydF92YWx1ZTogMzAwMFxuICAgIGhlYWx0aF9jaGVja3M6XG4gICAgICAtIHRpbWVvdXQ6IDJzXG4gICAgICAgIGludGVydmFsOiA1c1xuICAgICAgICB1bmhlYWx0aHlfdGhyZXNob2xkOiAzXG4gICAgICAgIGhlYWx0aHlfdGhyZXNob2xkOiAyXG4gICAgICAgIGh0dHBfaGVhbHRoX2NoZWNrOlxuICAgICAgICAgIHBhdGg6IC9wcm9qZWN0L2RlZmF1bHRcbiAgICBjaXJjdWl0X2JyZWFrZXJzOlxuICAgICAgdGhyZXNob2xkczpcbiAgICAgICAgLSBwcmlvcml0eTogREVGQVVMVFxuICAgICAgICAgIG1heF9jb25uZWN0aW9uczogMTAwMDBcbiAgICAgICAgICBtYXhfcGVuZGluZ19yZXF1ZXN0czogMTAwMDBcbiAgICAgICAgICBtYXhfcmVxdWVzdHM6IDEwMDAwXG4nJydcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9hcGkvZW52b3kvbGRzLnRlbXBsYXRlLnlhbWxcIlxuY29udGVudCA9ICcnJ3Jlc291cmNlczpcbiAgLSAnQHR5cGUnOiB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5saXN0ZW5lci52My5MaXN0ZW5lclxuICAgIG5hbWU6IHN1cGFiYXNlXG4gICAgcGVyX2Nvbm5lY3Rpb25fYnVmZmVyX2xpbWl0X2J5dGVzOiAzMjc2OCAgIyAzMiBLaUJcblxuICAgIGFkZHJlc3M6XG4gICAgICBzb2NrZXRfYWRkcmVzczpcbiAgICAgICAgYWRkcmVzczogMC4wLjAuMFxuICAgICAgICBwb3J0X3ZhbHVlOiA4MDAwXG5cbiAgICBmaWx0ZXJfY2hhaW5zOlxuICAgICAgLSBmaWx0ZXJzOlxuICAgICAgICAgIC0gbmFtZTogZW52b3kuZmlsdGVycy5uZXR3b3JrLmh0dHBfY29ubmVjdGlvbl9tYW5hZ2VyXG4gICAgICAgICAgICB0eXBlZF9jb25maWc6XG4gICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMubmV0d29yay5odHRwX2Nvbm5lY3Rpb25fbWFuYWdlci52My5IdHRwQ29ubmVjdGlvbk1hbmFnZXJcbiAgICAgICAgICAgICAgc3RhdF9wcmVmaXg6IGluZ3Jlc3NfaHR0cFxuICAgICAgICAgICAgICBub3JtYWxpemVfcGF0aDogdHJ1ZVxuICAgICAgICAgICAgICBtZXJnZV9zbGFzaGVzOiB0cnVlXG4gICAgICAgICAgICAgIHBhdGhfd2l0aF9lc2NhcGVkX3NsYXNoZXNfYWN0aW9uOiBSRUpFQ1RfUkVRVUVTVFxuICAgICAgICAgICAgICB1c2VfcmVtb3RlX2FkZHJlc3M6IHRydWVcbiAgICAgICAgICAgICAgY29tbW9uX2h0dHBfcHJvdG9jb2xfb3B0aW9uczpcbiAgICAgICAgICAgICAgICBoZWFkZXJzX3dpdGhfdW5kZXJzY29yZXNfYWN0aW9uOiBSRUpFQ1RfUkVRVUVTVFxuICAgICAgICAgICAgICB1cGdyYWRlX2NvbmZpZ3M6XG4gICAgICAgICAgICAgICAgLSB1cGdyYWRlX3R5cGU6IHdlYnNvY2tldFxuICAgICAgICAgICAgICBhY2Nlc3NfbG9nOlxuICAgICAgICAgICAgICAgIC0gbmFtZTogZW52b3kuYWNjZXNzX2xvZ2dlcnMuc3Rkb3V0XG4gICAgICAgICAgICAgICAgICB0eXBlZF9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmFjY2Vzc19sb2dnZXJzLnN0cmVhbS52My5TdGRvdXRBY2Nlc3NMb2dcbiAgICAgICAgICAgICAgICAgICAgbG9nX2Zvcm1hdDpcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2Zvcm1hdF9zb3VyY2U6XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVfc3RyaW5nOiBcIiVET1dOU1RSRUFNX1JFTU9URV9BRERSRVNTX1dJVEhPVVRfUE9SVCUgLSAtIFslU1RBUlRfVElNRSglZC8lYi8lWTolSDolTTolUyAleiklXSBcXFwiJVJFUSg6TUVUSE9EKSUgJVJFUShYLUVOVk9ZLU9SSUdJTkFMLVBBVEg/OlBBVEgpJSAlUFJPVE9DT0wlXFxcIiAlUkVTUE9OU0VfQ09ERSUgJUJZVEVTX1NFTlQlIFxcXCIlUkVRKFJFRkVSRVIpJVxcXCIgXFxcIiVSRVEoVVNFUi1BR0VOVCklXFxcIlxcblwiXG5cbiAgICAgICAgICAgICAgcm91dGVfY29uZmlnOlxuICAgICAgICAgICAgICAgIG5hbWU6IHN1cGFiYXNlX3JvdXRlXG4gICAgICAgICAgICAgICAgdmlydHVhbF9ob3N0czpcbiAgICAgICAgICAgICAgICAgIC0gbmFtZTogc3VwYWJhc2VfaG9zdFxuICAgICAgICAgICAgICAgICAgICBkb21haW5zOlxuICAgICAgICAgICAgICAgICAgICAgIC0gJyonXG4gICAgICAgICAgICAgICAgICAgIGNvcnM6XG4gICAgICAgICAgICAgICAgICAgICAgYWxsb3dfb3JpZ2luX3N0cmluZ19tYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgICAgIC0gc2FmZV9yZWdleDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleDogXCIuKlwiXG4gICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbWV0aG9kczogXCJHRVQsUE9TVCxQVVQsUEFUQ0gsREVMRVRFLE9QVElPTlMsSEVBRCxDT05ORUNULFRSQUNFXCJcbiAgICAgICAgICAgICAgICAgICAgICBhbGxvd19oZWFkZXJzOiBcIipcIlxuICAgICAgICAgICAgICAgICAgICAgIGV4cG9zZV9oZWFkZXJzOiBcIipcIlxuICAgICAgICAgICAgICAgICAgICAgIG1heF9hZ2U6IFwiMzYwMFwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfaGVhZGVyc190b19hZGQ6XG4gICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtSG9zdFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCIlUkVRKDpBVVRIT1JJVFkpJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfYWN0aW9uOiBBRERfSUZfQUJTRU5UXG4gICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtUG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCIlRE9XTlNUUkVBTV9MT0NBTF9QT1JUJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfYWN0aW9uOiBBRERfSUZfQUJTRU5UXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlczpcbiAgICAgICAgICAgICAgICAgICAgICAtIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9hdXRoL3YxL3ZlcmlmeVxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXI6IGF1dGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X3Jld3JpdGU6IC92ZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzBzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hlYWRlcnNfdG9fYWRkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogL2F1dGgvdjEvdmVyaWZ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAucmJhYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMuaHR0cC5yYmFjLnYzLlJCQUNQZXJSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBTExPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAtIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9hdXRoL3YxL2NhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlcjogYXV0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfcmV3cml0ZTogL2NhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oZWFkZXJzX3RvX2FkZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFgtRm9yd2FyZGVkLVByZWZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IC9hdXRoL3YxL2NhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAucmJhYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMuaHR0cC5yYmFjLnYzLlJCQUNQZXJSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBTExPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAtIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9hdXRoL3YxL2F1dGhvcml6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXI6IGF1dGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X3Jld3JpdGU6IC9hdXRob3JpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzBzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hlYWRlcnNfdG9fYWRkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogL2F1dGgvdjEvYXV0aG9yaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAucmJhYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMuaHR0cC5yYmFjLnYzLlJCQUNQZXJSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBTExPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAtIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9hdXRoL3YxLy53ZWxsLWtub3duL2p3a3MuanNvblxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXI6IGF1dGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X3Jld3JpdGU6IC8ud2VsbC1rbm93bi9qd2tzLmpzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzBzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hlYWRlcnNfdG9fYWRkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogL2F1dGgvdjEvLndlbGwta25vd24vandrcy5qc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAucmJhYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMuaHR0cC5yYmFjLnYzLlJCQUNQZXJSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBTExPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAtIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC8ud2VsbC1rbm93bi9vYXV0aC1hdXRob3JpemF0aW9uLXNlcnZlclxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXI6IGF1dGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzBzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hlYWRlcnNfdG9fYWRkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogLy53ZWxsLWtub3duL29hdXRoLWF1dGhvcml6YXRpb24tc2VydmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAucmJhYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMuaHR0cC5yYmFjLnYzLlJCQUNQZXJSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBTExPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAtIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9hdXRoL3YxL3Nzby9zYW1sL2Fjc1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXI6IGF1dGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X3Jld3JpdGU6IC9zc28vc2FtbC9hY3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzBzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hlYWRlcnNfdG9fYWRkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogL2F1dGgvdjEvc3NvL3NhbWwvYWNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAucmJhYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMuaHR0cC5yYmFjLnYzLlJCQUNQZXJSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBTExPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAtIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9hdXRoL3YxL3Nzby9zYW1sL21ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlcjogYXV0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfcmV3cml0ZTogL3Nzby9zYW1sL21ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oZWFkZXJzX3RvX2FkZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFgtRm9yd2FyZGVkLVByZWZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IC9hdXRoL3YxL3Nzby9zYW1sL21ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAucmJhYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMuaHR0cC5yYmFjLnYzLlJCQUNQZXJSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBTExPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAtIG5hbWU6IGZ1bmN0aW9ucy12MS1hbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9mdW5jdGlvbnMvdjEvXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlcjogZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9yZXdyaXRlOiAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDE1MHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfaGVhZGVyc190b19hZGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC0gaGVhZGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBYLUZvcndhcmRlZC1QcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAvZnVuY3Rpb25zL3YxL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9hY3Rpb246IEFERF9JRl9BQlNFTlRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkX3Blcl9maWx0ZXJfY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAuYmFzaWNfYXV0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5jb25maWcucm91dGUudjMuRmlsdGVyQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW52b3kuZmlsdGVycy5odHRwLnJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuZXh0ZW5zaW9ucy5maWx0ZXJzLmh0dHAucmJhYy52My5SQkFDUGVyUm91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYmFjOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogQUxMT1dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWNpZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmluY2lwYWxzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGFueTogdHJ1ZVxuXG4gICAgICAgICAgICAgICAgICAgICAgLSBtYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAvc3RvcmFnZS92MS9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyOiBzdG9yYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9yZXdyaXRlOiAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oZWFkZXJzX3RvX2FkZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFgtRm9yd2FyZGVkLVByZWZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IC9zdG9yYWdlL3YxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAucmJhYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMuaHR0cC5yYmFjLnYzLlJCQUNQZXJSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBTExPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAtIG5hbWU6IGF1dGgtdjEtcHJvdGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAvYXV0aC92MS9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyOiBhdXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9yZXdyaXRlOiAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oZWFkZXJzX3RvX2FkZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFgtRm9yd2FyZGVkLVByZWZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IC9hdXRoL3YxL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9hY3Rpb246IEFERF9JRl9BQlNFTlRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkX3Blcl9maWx0ZXJfY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAuYmFzaWNfYXV0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5jb25maWcucm91dGUudjMuRmlsdGVyQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWVcblxuICAgICAgICAgICAgICAgICAgICAgIC0gbmFtZTogcmVzdC12MS1vcGVuYXBpLXByb3RlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IC9yZXN0L3YxL1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXI6IHJlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X3Jld3JpdGU6IC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzBzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hlYWRlcnNfdG9fYWRkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogL3Jlc3QvdjEvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6IHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuY29uZmlnLnJvdXRlLnYzLkZpbHRlckNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5yYmFjOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6IHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuZXh0ZW5zaW9ucy5maWx0ZXJzLmh0dHAucmJhYy52My5SQkFDUGVyUm91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYmFjOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogQUxMT1dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWNpZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW46XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaGVhZGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXBpa2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfbWF0Y2g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiAnJHtTRVJWSUNFX1JPTEVfS0VZfSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBhcGlrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19tYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6ICcke1NFUlZJQ0VfUk9MRV9LRVlfQVNZTU1FVFJJQ30nXG5cbiAgICAgICAgICAgICAgICAgICAgICAtIG5hbWU6IHJlc3QtdjEtcHJvdGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAvcmVzdC92MS9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyOiByZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9yZXdyaXRlOiAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oZWFkZXJzX3RvX2FkZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFgtRm9yd2FyZGVkLVByZWZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IC9yZXN0L3YxL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9hY3Rpb246IEFERF9JRl9BQlNFTlRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkX3Blcl9maWx0ZXJfY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAuYmFzaWNfYXV0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5jb25maWcucm91dGUudjMuRmlsdGVyQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWVcblxuICAgICAgICAgICAgICAgICAgICAgIC0gbmFtZTogZ3JhcGhxbC12MS1wcm90ZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9ncmFwaHFsL3YxXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlcjogcmVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfcmV3cml0ZTogL3JwYy9ncmFwaHFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oZWFkZXJzX3RvX2FkZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFgtRm9yd2FyZGVkLVByZWZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IC9ncmFwaHFsL3YxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogQ29udGVudC1Qcm9maWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZ3JhcGhxbF9wdWJsaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfYWN0aW9uOiBBRERfSUZfQUJTRU5UXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlZF9wZXJfZmlsdGVyX2NvbmZpZzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW52b3kuZmlsdGVycy5odHRwLmJhc2ljX2F1dGg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuY29uZmlnLnJvdXRlLnYzLkZpbHRlckNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAtIG5hbWU6IHJlYWx0aW1lLXYxLWFwaS1vcGVuYXBpLWJsb2NrZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9yZWFsdGltZS92MS9hcGkvb3BlbmFwaVxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXI6IHJlYWx0aW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oZWFkZXJzX3RvX2FkZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFgtRm9yd2FyZGVkLVByZWZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IC9yZWFsdGltZS92MS9hcGkvb3BlbmFwaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9hY3Rpb246IEFERF9JRl9BQlNFTlRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkX3Blcl9maWx0ZXJfY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAuYmFzaWNfYXV0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5jb25maWcucm91dGUudjMuRmlsdGVyQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW52b3kuZmlsdGVycy5odHRwLnJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuZXh0ZW5zaW9ucy5maWx0ZXJzLmh0dHAucmJhYy52My5SQkFDUGVyUm91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYmFjOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogREVOWVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW55X2FsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGFueTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbmNpcGFsczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcblxuICAgICAgICAgICAgICAgICAgICAgIC0gbmFtZTogcmVhbHRpbWUtdjEtYXBpLXRlbmFudHMtYmxvY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeDogL3JlYWx0aW1lL3YxL2FwaS90ZW5hbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlcjogcmVhbHRpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzBzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hlYWRlcnNfdG9fYWRkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogL3JlYWx0aW1lL3YxL2FwaS90ZW5hbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAucmJhYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMuaHR0cC5yYmFjLnYzLlJCQUNQZXJSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBERU5ZXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljaWVzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbnlfYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmluY2lwYWxzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGFueTogdHJ1ZVxuXG4gICAgICAgICAgICAgICAgICAgICAgLSBuYW1lOiByZWFsdGltZS12MS1hcGktcHJvdGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAvcmVhbHRpbWUvdjEvYXBpXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlcjogcmVhbHRpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X3Jld3JpdGU6IC9hcGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzBzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfcmV3cml0ZV9saXRlcmFsOiByZWFsdGltZS1kZXYuc3VwYWJhc2UtcmVhbHRpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfaGVhZGVyc190b19hZGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC0gaGVhZGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBYLUZvcndhcmRlZC1QcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAvcmVhbHRpbWUvdjEvYXBpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuXG4gICAgICAgICAgICAgICAgICAgICAgLSBuYW1lOiByZWFsdGltZS12MS13cy1wcm90ZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9yZWFsdGltZS92MS9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyOiByZWFsdGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfcmV3cml0ZTogL3NvY2tldC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzBzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfcmV3cml0ZV9saXRlcmFsOiByZWFsdGltZS1kZXYuc3VwYWJhc2UtcmVhbHRpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfaGVhZGVyc190b19hZGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC0gaGVhZGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBYLUZvcndhcmRlZC1QcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAvcmVhbHRpbWUvdjEvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX2FjdGlvbjogQUREX0lGX0FCU0VOVFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRfcGVyX2ZpbHRlcl9jb25maWc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5iYXNpY19hdXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmNvbmZpZy5yb3V0ZS52My5GaWx0ZXJDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuXG4gICAgICAgICAgICAgICAgICAgICAgLSBuYW1lOiBwZy1wcm90ZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9wZy9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyOiBtZXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9yZXdyaXRlOiAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oZWFkZXJzX3RvX2FkZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFgtRm9yd2FyZGVkLVByZWZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IC9wZy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfYWN0aW9uOiBBRERfSUZfQUJTRU5UXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlZF9wZXJfZmlsdGVyX2NvbmZpZzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW52b3kuZmlsdGVycy5odHRwLmJhc2ljX2F1dGg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuY29uZmlnLnJvdXRlLnYzLkZpbHRlckNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVudm95LmZpbHRlcnMuaHR0cC5jb3JzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ID4tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmV4dGVuc2lvbnMuZmlsdGVycy5odHRwLmNvcnMudjMuQ29yc1BvbGljeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X29yaWdpbl9zdHJpbmdfbWF0Y2g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGV4YWN0OiAnJHtTVVBBQkFTRV9QVUJMSUNfVVJMfSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2FmZV9yZWdleDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleDogJ2h0dHBzPzovLyhsb2NhbGhvc3R8MTI3XFwuMFxcLjBcXC4xKSg6WzAtOV0rKT8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbWV0aG9kczogXCJHRVQsUE9TVCxQVVQsUEFUQ0gsREVMRVRFLE9QVElPTlMsSEVBRFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfaGVhZGVyczogXCIqXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvc2VfaGVhZGVyczogXCIqXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfYWdlOiBcIjM2MDBcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgLSBtYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAvYXBpL21jcFxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXI6IHN0dWRpb1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiAzMHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfaGVhZGVyc190b19hZGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC0gaGVhZGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBYLUZvcndhcmRlZC1QcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAvYXBpL21jcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9hY3Rpb246IEFERF9JRl9BQlNFTlRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkX3Blcl9maWx0ZXJfY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAuYmFzaWNfYXV0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5jb25maWcucm91dGUudjMuRmlsdGVyQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW52b3kuZmlsdGVycy5odHRwLnJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuZXh0ZW5zaW9ucy5maWx0ZXJzLmh0dHAucmJhYy52My5SQkFDUGVyUm91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYmFjOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogREVOWVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW55X2FsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGFueTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbmNpcGFsczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcblxuICAgICAgICAgICAgICAgICAgICAgIC0gbWF0Y2g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeDogL21jcFxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXI6IHN0dWRpb1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfcmV3cml0ZTogL2FwaS9tY3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMzBzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hlYWRlcnNfdG9fYWRkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogL21jcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9hY3Rpb246IEFERF9JRl9BQlNFTlRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkX3Blcl9maWx0ZXJfY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAuYmFzaWNfYXV0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5jb25maWcucm91dGUudjMuRmlsdGVyQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW52b3kuZmlsdGVycy5odHRwLnJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuZXh0ZW5zaW9ucy5maWx0ZXJzLmh0dHAucmJhYy52My5SQkFDUGVyUm91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJsb2NrIGFjY2VzcyB0byAvbWNwIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYmFjOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogREVOWVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW55X2FsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGFueTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbmNpcGFsczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEVuYWJsZSBsb2NhbCBhY2Nlc3MgKGRhbmdlciB6b25lISlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDEuIENvbW1lbnQgb3V0IHRoZSAncmJhYycgYmxvY2sgYWJvdmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyLiBVbmNvbW1lbnQgYW5kIGFkanVzdCB0aGUgJ3JiYWMnIGJsb2NrIGJlbG93LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMy4gQWRkIG9yIGFkanVzdCB5b3VyIGxvY2FsIElQcyBpbiAncHJpbmNpcGFscycuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI3JiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgcnVsZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICBhY3Rpb246IEFMTE9XXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgYWxsb3dfbG9jYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgcGVybWlzc2lvbnM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAtIGFueTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAtIGRpcmVjdF9yZW1vdGVfaXA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgYWRkcmVzc19wcmVmaXg6IDEyNy4wLjAuMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgIHByZWZpeF9sZW46IDMyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAtIGRpcmVjdF9yZW1vdGVfaXA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgYWRkcmVzc19wcmVmaXg6IDo6MVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgIHByZWZpeF9sZW46IDEyOFxuXG4gICAgICAgICAgICAgICAgICAgICAgLSBtYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAvXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlcjogc3R1ZGlvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oZWFkZXJzX3RvX3JlbW92ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhdXRob3JpemF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hlYWRlcnNfdG9fYWRkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogWC1Gb3J3YXJkZWQtUHJlZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9hY3Rpb246IEFERF9JRl9BQlNFTlRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVkX3Blcl9maWx0ZXJfY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZveS5maWx0ZXJzLmh0dHAucmJhYzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nb29nbGVhcGlzLmNvbS9lbnZveS5leHRlbnNpb25zLmZpbHRlcnMuaHR0cC5yYmFjLnYzLlJCQUNQZXJSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiYWM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBTExPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY2llczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBhbnk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW55OiB0cnVlXG5cbiAgICAgICAgICAgICAgaHR0cF9maWx0ZXJzOlxuICAgICAgICAgICAgICAgIC0gbmFtZTogZW52b3kuZmlsdGVycy5odHRwLmNvcnNcbiAgICAgICAgICAgICAgICAgIHR5cGVkX2NvbmZpZzpcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmV4dGVuc2lvbnMuZmlsdGVycy5odHRwLmNvcnMudjMuQ29yc1xuXG4gICAgICAgICAgICAgICAgLSBuYW1lOiBlbnZveS5maWx0ZXJzLmh0dHAuYmFzaWNfYXV0aFxuICAgICAgICAgICAgICAgICAgdHlwZWRfY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuZXh0ZW5zaW9ucy5maWx0ZXJzLmh0dHAuYmFzaWNfYXV0aC52My5CYXNpY0F1dGhcbiAgICAgICAgICAgICAgICAgICAgdXNlcnM6XG4gICAgICAgICAgICAgICAgICAgICAgaW5saW5lX3N0cmluZzogJyR7REFTSEJPQVJEX0JBU0lDX0FVVEh9J1xuXG4gICAgICAgICAgICAgICAgIyBDb3BpZXMgP2FwaWtleT0uLi4gZnJvbSB0aGUgVVJMIGludG8gdGhlIGFwaWtleSBoZWFkZXIgd2hlbiBjbGllbnRzIG9taXQgdGhlIGhlYWRlci5cbiAgICAgICAgICAgICAgICAtIG5hbWU6IGVudm95LmZpbHRlcnMuaHR0cC5sdWFcbiAgICAgICAgICAgICAgICAgIHR5cGVkX2NvbmZpZzpcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmV4dGVuc2lvbnMuZmlsdGVycy5odHRwLmx1YS52My5MdWFcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lX2NvZGU6IHxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBGVU5DVElPTlNfUk9VVEUgPSBcImZ1bmN0aW9ucy12MS1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIEZVTkNUSU9OU19QUkVGSVggPSBcIi9mdW5jdGlvbnMvdjEvXCJcblxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGZ1bmN0aW9uIGlzX2Z1bmN0aW9uc19yZXF1ZXN0KHJlcXVlc3RfaGFuZGxlLCBoZWFkZXJzKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxdWVzdF9oYW5kbGU6c3RyZWFtSW5mbygpOnJvdXRlTmFtZSgpID09IEZVTkNUSU9OU19ST1VURSB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgcGF0aCA9IGhlYWRlcnM6Z2V0KFwiOnBhdGhcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhdGggPT0gbmlsIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5zdWIocGF0aCwgMSwgc3RyaW5nLmxlbihGVU5DVElPTlNfUFJFRklYKSkgPT0gRlVOQ1RJT05TX1BSRUZJWFxuICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZW52b3lfb25fcmVxdWVzdChyZXF1ZXN0X2hhbmRsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGhlYWRlcnMgPSByZXF1ZXN0X2hhbmRsZTpoZWFkZXJzKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzX2Z1bmN0aW9uc19yZXF1ZXN0KHJlcXVlc3RfaGFuZGxlLCBoZWFkZXJzKSB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhlYWRlcnM6Z2V0KFwiYXBpa2V5XCIpIH49IG5pbCB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHBhdGggPSBoZWFkZXJzOmdldChcIjpwYXRoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBxdWVyeV9zdGFydCA9IHN0cmluZy5maW5kKHBhdGgsIFwiP1wiLCAxLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgcXVlcnlfc3RhcnQgPT0gbmlsIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgcXVlcnkgPSBzdHJpbmcuc3ViKHBhdGgsIHF1ZXJ5X3N0YXJ0ICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHN0cmluZy5nbWF0Y2gocXVlcnksIFwiKFteJl0rKT0oW14mXSopXCIpIGRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleSA9PSBcImFwaWtleVwiIGFuZCB2YWx1ZSB+PSBcIlwiIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOmFkZChcImFwaWtleVwiLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcbiAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICMgUmV0dXJucyA0MDEgZm9yIG1pc3NpbmcvaW52YWxpZCBBUEkga2V5cyBvbiBwcm90ZWN0ZWQgQVBJIHJvdXRlcy5cbiAgICAgICAgICAgICAgICAtIG5hbWU6IGVudm95LmZpbHRlcnMuaHR0cC5sdWFcbiAgICAgICAgICAgICAgICAgIHR5cGVkX2NvbmZpZzpcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmV4dGVuc2lvbnMuZmlsdGVycy5odHRwLmx1YS52My5MdWFcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lX2NvZGU6IHxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBBTk9OX0tFWSA9IFwiJHtBTk9OX0tFWX1cIlxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIFNFUlZJQ0VfUk9MRV9LRVkgPSBcIiR7U0VSVklDRV9ST0xFX0tFWX1cIlxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIFNVUEFCQVNFX1BVQkxJU0hBQkxFX0tFWSA9IFwiJHtTVVBBQkFTRV9QVUJMSVNIQUJMRV9LRVl9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBTVVBBQkFTRV9TRUNSRVRfS0VZID0gXCIke1NVUEFCQVNFX1NFQ1JFVF9LRVl9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBBTk9OX0tFWV9BU1lNTUVUUklDID0gXCIke0FOT05fS0VZX0FTWU1NRVRSSUN9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBTRVJWSUNFX1JPTEVfS0VZX0FTWU1NRVRSSUMgPSBcIiR7U0VSVklDRV9ST0xFX0tFWV9BU1lNTUVUUklDfVwiXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWwgVFJBTlNMQVRJT05fRU5BQkxFRCA9IFNVUEFCQVNFX1NFQ1JFVF9LRVkgfj0gXCJcIiBhbmQgU1VQQUJBU0VfUFVCTElTSEFCTEVfS0VZIH49IFwiXCIgYW5kIFNFUlZJQ0VfUk9MRV9LRVlfQVNZTU1FVFJJQyB+PSBcIlwiIGFuZCBBTk9OX0tFWV9BU1lNTUVUUklDIH49IFwiXCJcblxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIFBST1RFQ1RFRF9ST1VURVMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJhdXRoLXYxLXByb3RlY3RlZFwiXSA9IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJyZXN0LXYxLW9wZW5hcGktcHJvdGVjdGVkXCJdID0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcInJlc3QtdjEtcHJvdGVjdGVkXCJdID0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcImdyYXBocWwtdjEtcHJvdGVjdGVkXCJdID0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcInJlYWx0aW1lLXYxLWFwaS1wcm90ZWN0ZWRcIl0gPSB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1wicmVhbHRpbWUtdjEtd3MtcHJvdGVjdGVkXCJdID0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcInBnLXByb3RlY3RlZFwiXSA9IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZnVuY3Rpb24gaXNfcHJvdGVjdGVkX3JvdXRlKHJvdXRlX25hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiByb3V0ZV9uYW1lID09IG5pbCBvciByb3V0ZV9uYW1lID09IFwiXCIgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFJPVEVDVEVEX1JPVVRFU1tyb3V0ZV9uYW1lXSA9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBmdW5jdGlvbiBpc192YWxpZF9hcGlrZXkoYXBpa2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXBpa2V5ID09IG5pbCBvciBhcGlrZXkgPT0gXCJcIiB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIFNFUlZJQ0VfUk9MRV9LRVkgfj0gXCJcIiBhbmQgYXBpa2V5ID09IFNFUlZJQ0VfUk9MRV9LRVkgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIEFOT05fS0VZIH49IFwiXCIgYW5kIGFwaWtleSA9PSBBTk9OX0tFWSB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgVFJBTlNMQVRJT05fRU5BQkxFRCBhbmQgYXBpa2V5ID09IFNVUEFCQVNFX1NFQ1JFVF9LRVkgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIFRSQU5TTEFUSU9OX0VOQUJMRUQgYW5kIGFwaWtleSA9PSBTVVBBQkFTRV9QVUJMSVNIQUJMRV9LRVkgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZW52b3lfb25fcmVxdWVzdChyZXF1ZXN0X2hhbmRsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGhlYWRlcnMgPSByZXF1ZXN0X2hhbmRsZTpoZWFkZXJzKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHJvdXRlX25hbWUgPSByZXF1ZXN0X2hhbmRsZTpzdHJlYW1JbmZvKCk6cm91dGVOYW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc19wcm90ZWN0ZWRfcm91dGUocm91dGVfbmFtZSkgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBpc192YWxpZF9hcGlrZXkoaGVhZGVyczpnZXQoXCJhcGlrZXlcIikpIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oYW5kbGU6cmVzcG9uZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcIjpzdGF0dXNcIl0gPSBcIjQwMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXCJjb250ZW50LXR5cGVcIl0gPSBcInRleHQvcGxhaW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFwiVW5hdXRob3JpemVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAjIFRyYW5zbGF0ZXMgdGhlIHF1ZXJ5IHBhcmFtZXRlciBhcGlrZXkgaW50byB0aGUgbWF0Y2hpbmcgaW50ZXJuYWwgSldUIGFuZCByZXdyaXRlcyB0aGUgVVJMIHNvIG9ubHkgSldUcyBwcm9wYWdhdGUgZG93bnN0cmVhbS5cbiAgICAgICAgICAgICAgICAtIG5hbWU6IGVudm95LmZpbHRlcnMuaHR0cC5sdWFcbiAgICAgICAgICAgICAgICAgIHR5cGVkX2NvbmZpZzpcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmV4dGVuc2lvbnMuZmlsdGVycy5odHRwLmx1YS52My5MdWFcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lX2NvZGU6IHxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBGVU5DVElPTlNfUk9VVEUgPSBcImZ1bmN0aW9ucy12MS1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIEZVTkNUSU9OU19QUkVGSVggPSBcIi9mdW5jdGlvbnMvdjEvXCJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBTRUNSRVRfS0VZID0gXCIke1NVUEFCQVNFX1NFQ1JFVF9LRVl9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBQVUJMSVNIQUJMRV9LRVkgPSBcIiR7U1VQQUJBU0VfUFVCTElTSEFCTEVfS0VZfVwiXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWwgU0VSVklDRV9ST0xFX0pXVCA9IFwiJHtTRVJWSUNFX1JPTEVfS0VZX0FTWU1NRVRSSUN9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBBTk9OX0pXVCA9IFwiJHtBTk9OX0tFWV9BU1lNTUVUUklDfVwiXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWwgVFJBTlNMQVRJT05fRU5BQkxFRCA9IFNFQ1JFVF9LRVkgfj0gXCJcIiBhbmQgUFVCTElTSEFCTEVfS0VZIH49IFwiXCIgYW5kIFNFUlZJQ0VfUk9MRV9KV1Qgfj0gXCJcIiBhbmQgQU5PTl9KV1Qgfj0gXCJcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZnVuY3Rpb24gaXNfZnVuY3Rpb25zX3JlcXVlc3QocmVxdWVzdF9oYW5kbGUsIGhlYWRlcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiByZXF1ZXN0X2hhbmRsZTpzdHJlYW1JbmZvKCk6cm91dGVOYW1lKCkgPT0gRlVOQ1RJT05TX1JPVVRFIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBwYXRoID0gaGVhZGVyczpnZXQoXCI6cGF0aFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGF0aCA9PSBuaWwgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLnN1YihwYXRoLCAxLCBzdHJpbmcubGVuKEZVTkNUSU9OU19QUkVGSVgpKSA9PSBGVU5DVElPTlNfUFJFRklYXG4gICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBmdW5jdGlvbiB0cmFuc2xhdGVfYXBpa2V5KGFwaWtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFwaWtleSA9PSBuaWwgb3IgYXBpa2V5ID09IFwiXCIgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmlsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IFRSQU5TTEFUSU9OX0VOQUJMRUQgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmlsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXBpa2V5ID09IFNFQ1JFVF9LRVkgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU0VSVklDRV9ST0xFX0pXVFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFwaWtleSA9PSBQVUJMSVNIQUJMRV9LRVkgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQU5PTl9KV1RcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmlsXG4gICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBmdW5jdGlvbiBleHRyYWN0X3F1ZXJ5X2FwaWtleShwYXRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGF0aCA9PSBuaWwgb3IgcGF0aCA9PSBcIlwiIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHF1ZXJ5X3N0YXJ0ID0gc3RyaW5nLmZpbmQocGF0aCwgXCI/XCIsIDEsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBxdWVyeV9zdGFydCA9PSBuaWwgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmlsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgcXVlcnkgPSBzdHJpbmcuc3ViKHBhdGgsIHF1ZXJ5X3N0YXJ0ICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHN0cmluZy5nbWF0Y2gocXVlcnksIFwiKFteJl0rKT0oW14mXSopXCIpIGRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleSA9PSBcImFwaWtleVwiIGFuZCB2YWx1ZSB+PSBcIlwiIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbFxuICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZnVuY3Rpb24gcmVwbGFjZV9xdWVyeV9hcGlrZXkocGF0aCwgbmV3X3ZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGF0aCA9PSBuaWwgb3IgcGF0aCA9PSBcIlwiIG9yIG5ld192YWx1ZSA9PSBuaWwgb3IgbmV3X3ZhbHVlID09IFwiXCIgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmlsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgcXVlcnlfc3RhcnQgPSBzdHJpbmcuZmluZChwYXRoLCBcIj9cIiwgMSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHF1ZXJ5X3N0YXJ0ID09IG5pbCB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuaWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBiYXNlID0gc3RyaW5nLnN1YihwYXRoLCAxLCBxdWVyeV9zdGFydClcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHF1ZXJ5ID0gc3RyaW5nLnN1YihwYXRoLCBxdWVyeV9zdGFydCArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCB1cGRhdGVkID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHJlcGxhY2VkID0gZmFsc2VcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gc3RyaW5nLmdtYXRjaChxdWVyeSwgXCIoW14mXSspXCIpIGRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGtleSwgdmFsdWUgPSBzdHJpbmcubWF0Y2gocGFydCwgXCIoW149XSspPSguKilcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09IFwiYXBpa2V5XCIgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBrZXkgLi4gXCI9XCIgLi4gbmV3X3ZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS5pbnNlcnQodXBkYXRlZCwgcGFydClcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVwbGFjZWQgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmlsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UgLi4gdGFibGUuY29uY2F0KHVwZGF0ZWQsIFwiJlwiKVxuICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZW52b3lfb25fcmVxdWVzdChyZXF1ZXN0X2hhbmRsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGhlYWRlcnMgPSByZXF1ZXN0X2hhbmRsZTpoZWFkZXJzKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzX2Z1bmN0aW9uc19yZXF1ZXN0KHJlcXVlc3RfaGFuZGxlLCBoZWFkZXJzKSB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHBhdGggPSBoZWFkZXJzOmdldChcIjpwYXRoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBhcGlrZXkgPSBleHRyYWN0X3F1ZXJ5X2FwaWtleShwYXRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgdHJhbnNsYXRlZCA9IHRyYW5zbGF0ZV9hcGlrZXkoYXBpa2V5KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiB0cmFuc2xhdGVkID09IG5pbCB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6cmVwbGFjZShcImFwaWtleVwiLCB0cmFuc2xhdGVkKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCByZXdyaXR0ZW5fcGF0aCA9IHJlcGxhY2VfcXVlcnlfYXBpa2V5KHBhdGgsIHRyYW5zbGF0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiByZXdyaXR0ZW5fcGF0aCB+PSBuaWwgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOnJlcGxhY2UoXCI6cGF0aFwiLCByZXdyaXR0ZW5fcGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgIyBUcmFuc2xhdGVzIGFuIGFwaWtleSBoZWFkZXIgaW50byB0aGUgYXBwcm9wcmlhdGUgaW50ZXJuYWwgSldUIGZvciBkb3duc3RyZWFtIFJCQUMgY2hlY2tzLlxuICAgICAgICAgICAgICAgIC0gbmFtZTogZW52b3kuZmlsdGVycy5odHRwLmx1YVxuICAgICAgICAgICAgICAgICAgdHlwZWRfY29uZmlnOlxuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiA+LVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ29vZ2xlYXBpcy5jb20vZW52b3kuZXh0ZW5zaW9ucy5maWx0ZXJzLmh0dHAubHVhLnYzLkx1YVxuICAgICAgICAgICAgICAgICAgICBpbmxpbmVfY29kZTogfFxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIEZVTkNUSU9OU19ST1VURSA9IFwiZnVuY3Rpb25zLXYxLWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWwgRlVOQ1RJT05TX1BSRUZJWCA9IFwiL2Z1bmN0aW9ucy92MS9cIlxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIFNFQ1JFVF9LRVkgPSBcIiR7U1VQQUJBU0VfU0VDUkVUX0tFWX1cIlxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIFBVQkxJU0hBQkxFX0tFWSA9IFwiJHtTVVBBQkFTRV9QVUJMSVNIQUJMRV9LRVl9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBTRVJWSUNFX1JPTEVfSldUID0gXCIke1NFUlZJQ0VfUk9MRV9LRVlfQVNZTU1FVFJJQ31cIlxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIEFOT05fSldUID0gXCIke0FOT05fS0VZX0FTWU1NRVRSSUN9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBUUkFOU0xBVElPTl9FTkFCTEVEID0gU0VDUkVUX0tFWSB+PSBcIlwiIGFuZCBQVUJMSVNIQUJMRV9LRVkgfj0gXCJcIiBhbmQgU0VSVklDRV9ST0xFX0pXVCB+PSBcIlwiIGFuZCBBTk9OX0pXVCB+PSBcIlwiXG5cbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBmdW5jdGlvbiBpc19mdW5jdGlvbnNfcmVxdWVzdChyZXF1ZXN0X2hhbmRsZSwgaGVhZGVycylcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXVlc3RfaGFuZGxlOnN0cmVhbUluZm8oKTpyb3V0ZU5hbWUoKSA9PSBGVU5DVElPTlNfUk9VVEUgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHBhdGggPSBoZWFkZXJzOmdldChcIjpwYXRoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXRoID09IG5pbCB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc3ViKHBhdGgsIDEsIHN0cmluZy5sZW4oRlVOQ1RJT05TX1BSRUZJWCkpID09IEZVTkNUSU9OU19QUkVGSVhcbiAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGZ1bmN0aW9uIHRyYW5zbGF0ZV9hcGlrZXkoYXBpa2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXBpa2V5ID09IG5pbCBvciBhcGlrZXkgPT0gXCJcIiB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuaWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgVFJBTlNMQVRJT05fRU5BQkxFRCB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuaWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBhcGlrZXkgPT0gU0VDUkVUX0tFWSB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTRVJWSUNFX1JPTEVfSldUXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXBpa2V5ID09IFBVQkxJU0hBQkxFX0tFWSB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBTk9OX0pXVFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuaWxcbiAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVudm95X29uX3JlcXVlc3QocmVxdWVzdF9oYW5kbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBoZWFkZXJzID0gcmVxdWVzdF9oYW5kbGU6aGVhZGVycygpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBpc19mdW5jdGlvbnNfcmVxdWVzdChyZXF1ZXN0X2hhbmRsZSwgaGVhZGVycykgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCB0cmFuc2xhdGVkID0gdHJhbnNsYXRlX2FwaWtleShoZWFkZXJzOmdldChcImFwaWtleVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRyYW5zbGF0ZWQgfj0gbmlsIGFuZCB0cmFuc2xhdGVkIH49IFwiXCIgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOnJlcGxhY2UoXCJhcGlrZXlcIiwgdHJhbnNsYXRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgIyBNaXJyb3JzIGFwaWtleSBpbnRvIHgtYXBpLWtleSBmb3IgcmVhbHRpbWUgV1MgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgICAgICAgICAtIG5hbWU6IGVudm95LmZpbHRlcnMuaHR0cC5sdWFcbiAgICAgICAgICAgICAgICAgIHR5cGVkX2NvbmZpZzpcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmV4dGVuc2lvbnMuZmlsdGVycy5odHRwLmx1YS52My5MdWFcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lX2NvZGU6IHxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBSRUFMVElNRV9XU19ST1VURSA9IFwicmVhbHRpbWUtdjEtd3MtcHJvdGVjdGVkXCJcblxuICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVudm95X29uX3JlcXVlc3QocmVxdWVzdF9oYW5kbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCByb3V0ZV9uYW1lID0gcmVxdWVzdF9oYW5kbGU6c3RyZWFtSW5mbygpOnJvdXRlTmFtZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiByb3V0ZV9uYW1lIH49IFJFQUxUSU1FX1dTX1JPVVRFIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgaGVhZGVycyA9IHJlcXVlc3RfaGFuZGxlOmhlYWRlcnMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgYXBpa2V5ID0gaGVhZGVyczpnZXQoXCJhcGlrZXlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFwaWtleSA9PSBuaWwgb3IgYXBpa2V5ID09IFwiXCIgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOnJlcGxhY2UoXCJ4LWFwaS1rZXlcIiwgYXBpa2V5KVxuICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgIyBTeW50aGVzaXplcyBhbiBBdXRob3JpemF0aW9uIGhlYWRlciAoQmVhcmVyIOKApikgZnJvbSBhcGlrZXkgd2hlbiBjYWxsZXJzIGRvbuKAmXQgcHJvdmlkZSBhIHJlYWwgSldUIGhlYWRlci5cbiAgICAgICAgICAgICAgICAtIG5hbWU6IGVudm95LmZpbHRlcnMuaHR0cC5sdWFcbiAgICAgICAgICAgICAgICAgIHR5cGVkX2NvbmZpZzpcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmV4dGVuc2lvbnMuZmlsdGVycy5odHRwLmx1YS52My5MdWFcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lX2NvZGU6IHxcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBGVU5DVElPTlNfUk9VVEUgPSBcImZ1bmN0aW9ucy12MS1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIEZVTkNUSU9OU19QUkVGSVggPSBcIi9mdW5jdGlvbnMvdjEvXCJcbiAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBSRUFMVElNRV9XU19ST1VURSA9IFwicmVhbHRpbWUtdjEtd3MtcHJvdGVjdGVkXCJcblxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGZ1bmN0aW9uIGlzX2Z1bmN0aW9uc19yZXF1ZXN0KHJlcXVlc3RfaGFuZGxlLCBoZWFkZXJzKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxdWVzdF9oYW5kbGU6c3RyZWFtSW5mbygpOnJvdXRlTmFtZSgpID09IEZVTkNUSU9OU19ST1VURSB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgcGF0aCA9IGhlYWRlcnM6Z2V0KFwiOnBhdGhcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhdGggPT0gbmlsIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5zdWIocGF0aCwgMSwgc3RyaW5nLmxlbihGVU5DVElPTlNfUFJFRklYKSkgPT0gRlVOQ1RJT05TX1BSRUZJWFxuICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYWwgZnVuY3Rpb24gaGFzX3JlYWxfand0KGF1dGhfaGVhZGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXV0aF9oZWFkZXIgPT0gbmlsIG9yIGF1dGhfaGVhZGVyID09IFwiXCIgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBzdHJpbmcuc3ViKGF1dGhfaGVhZGVyLCAxLCA3KSB+PSBcIkJlYXJlciBcIiB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc3ViKGF1dGhfaGVhZGVyLCAxLCAxMCkgfj0gXCJCZWFyZXIgc2JfXCJcbiAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGZ1bmN0aW9uIGZvcm1hdF9hdXRob3JpemF0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgPT0gbmlsIG9yIHZhbHVlID09IFwiXCIgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmlsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RyaW5nLnN1Yih2YWx1ZSwgMSwgNykgPT0gXCJCZWFyZXIgXCIgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJCZWFyZXIgXCIgLi4gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVudm95X29uX3JlcXVlc3QocmVxdWVzdF9oYW5kbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBoZWFkZXJzID0gcmVxdWVzdF9oYW5kbGU6aGVhZGVycygpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiByZXF1ZXN0X2hhbmRsZTpzdHJlYW1JbmZvKCk6cm91dGVOYW1lKCkgPT0gUkVBTFRJTUVfV1NfUk9VVEUgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBpc19mdW5jdGlvbnNfcmVxdWVzdChyZXF1ZXN0X2hhbmRsZSwgaGVhZGVycykgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNfcmVhbF9qd3QoaGVhZGVyczpnZXQoXCJhdXRob3JpemF0aW9uXCIpKSB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGFwaWtleSA9IGhlYWRlcnM6Z2V0KFwiYXBpa2V5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBhdXRob3JpemF0aW9uX3ZhbHVlID0gZm9ybWF0X2F1dGhvcml6YXRpb24oYXBpa2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXV0aG9yaXphdGlvbl92YWx1ZSB+PSBuaWwgdGhlblxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOnJlcGxhY2UoXCJhdXRob3JpemF0aW9uXCIsIGF1dGhvcml6YXRpb25fdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRcbiAgICAgICAgICAgICAgICAgICAgICBlbmRcblxuICAgICAgICAgICAgICAgIC0gbmFtZTogZW52b3kuZmlsdGVycy5odHRwLnJiYWNcbiAgICAgICAgICAgICAgICAgIHR5cGVkX2NvbmZpZzpcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmV4dGVuc2lvbnMuZmlsdGVycy5odHRwLnJiYWMudjMuUkJBQ1xuICAgICAgICAgICAgICAgICAgICBydWxlczpcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IEFMTE9XXG4gICAgICAgICAgICAgICAgICAgICAgcG9saWNpZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICBhZG1pbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB1cmxfcGF0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9wZy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbmNpcGFsczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXBpa2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19tYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogJyR7U0VSVklDRV9ST0xFX0tFWX0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBoZWFkZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGFwaWtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfbWF0Y2g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6ICcke1NFUlZJQ0VfUk9MRV9LRVlfQVNZTU1FVFJJQ30nXG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlrZXk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gdXJsX3BhdGg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAvYXV0aC92MS9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHVybF9wYXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeDogL3Jlc3QvdjEvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB1cmxfcGF0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IC9yZWFsdGltZS92MS9hcGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHVybF9wYXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeDogL3JlYWx0aW1lL3YxL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gdXJsX3BhdGg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAvZ3JhcGhxbC92MVxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmluY2lwYWxzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaGVhZGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBhcGlrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX21hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiAnJHtTRVJWSUNFX1JPTEVfS0VZfSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGhlYWRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXBpa2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19tYXRjaDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogJyR7QU5PTl9LRVl9J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaGVhZGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBhcGlrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX21hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiAnJHtTRVJWSUNFX1JPTEVfS0VZX0FTWU1NRVRSSUN9J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gaGVhZGVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBhcGlrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX21hdGNoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiAnJHtBTk9OX0tFWV9BU1lNTUVUUklDfSdcbiAgICAgICAgICAgICAgICAtIG5hbWU6IGVudm95LmZpbHRlcnMuaHR0cC5yb3V0ZXJcbiAgICAgICAgICAgICAgICAgIHR5cGVkX2NvbmZpZzpcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogPi1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdvb2dsZWFwaXMuY29tL2Vudm95LmV4dGVuc2lvbnMuZmlsdGVycy5odHRwLnJvdXRlci52My5Sb3V0ZXJcbicnJ1xuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi92b2x1bWVzL2FwaS9lbnZveS9kb2NrZXItZW50cnlwb2ludC5zaFwiXG5jb250ZW50ID0gJycnIyEvYmluL3NoXG5zZXQgLWVcblxuIyBHZW5lcmF0ZSBTSEExIGJhc2U2NCBoYXNoIGZvciBFbnZveSBiYXNpYyBhdXRoIHVzZXIgbGlzdFxuUEFTU1dPUkRfSEFTSD0kKHByaW50ZiAnJXMnIFwiJHtEQVNIQk9BUkRfUEFTU1dPUkR9XCIgfCBvcGVuc3NsIHNoYTEgLWJpbmFyeSB8IG9wZW5zc2wgYmFzZTY0KVxuREFTSEJPQVJEX0JBU0lDX0FVVEg9XCIke0RBU0hCT0FSRF9VU0VSTkFNRX06e1NIQX0ke1BBU1NXT1JEX0hBU0h9XCJcblxuZWNobyBcIkdlbmVyYXRpbmcgRW52b3kgY29uZmlndXJhdGlvbi4uLlwiXG5cbiMgUHJvY2VzcyB0aGUgbGRzLnlhbWwgdGVtcGxhdGUgd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNpbmcgc2VkXG4jIFVzaW5nIHwgYXMgZGVsaW1pdGVyIHNpbmNlIEpXVCB0b2tlbnMgY29udGFpbiAvXG5zZWQgLWUgXCJzfFxcJHtBTk9OX0tFWX18JHtBTk9OX0tFWX18Z1wiIFxcXG4gICAgLWUgXCJzfFxcJHtBTk9OX0tFWV9BU1lNTUVUUklDfXwke0FOT05fS0VZX0FTWU1NRVRSSUN9fGdcIiBcXFxuICAgIC1lIFwic3xcXCR7U0VSVklDRV9ST0xFX0tFWX18JHtTRVJWSUNFX1JPTEVfS0VZfXxnXCIgXFxcbiAgICAtZSBcInN8XFwke1NFUlZJQ0VfUk9MRV9LRVlfQVNZTU1FVFJJQ318JHtTRVJWSUNFX1JPTEVfS0VZX0FTWU1NRVRSSUN9fGdcIiBcXFxuICAgIC1lIFwic3xcXCR7U1VQQUJBU0VfUFVCTElTSEFCTEVfS0VZfXwke1NVUEFCQVNFX1BVQkxJU0hBQkxFX0tFWX18Z1wiIFxcXG4gICAgLWUgXCJzfFxcJHtTVVBBQkFTRV9TRUNSRVRfS0VZfXwke1NVUEFCQVNFX1NFQ1JFVF9LRVl9fGdcIiBcXFxuICAgIC1lIFwic3xcXCR7U1VQQUJBU0VfUFVCTElDX1VSTH18JHtTVVBBQkFTRV9QVUJMSUNfVVJMfXxnXCIgXFxcbiAgICAtZSBcInN8XFwke0RBU0hCT0FSRF9CQVNJQ19BVVRIfXwke0RBU0hCT0FSRF9CQVNJQ19BVVRIfXxnXCIgXFxcbiAgICAvZXRjL2Vudm95L2xkcy50ZW1wbGF0ZS55YW1sID4gL2V0Yy9lbnZveS9sZHMueWFtbFxuXG5pZiBbIC1uIFwiJFNVUEFCQVNFX1NFQ1JFVF9LRVlcIiBdICYmIFxcXG4gICBbIC1uIFwiJFNVUEFCQVNFX1BVQkxJU0hBQkxFX0tFWVwiIF0gJiYgXFxcbiAgIFsgLW4gXCIkU0VSVklDRV9ST0xFX0tFWV9BU1lNTUVUUklDXCIgXSAmJiBcXFxuICAgWyAtbiBcIiRBTk9OX0tFWV9BU1lNTUVUUklDXCIgXTsgdGhlblxuICBlY2hvIFwiRW52b3kgc2JfIGtleSB0cmFuc2xhdGlvbiBlbmFibGVkXCJcbmVsc2VcbiAgZWNobyBcIkVudm95IHJ1bm5pbmcgaW4gbGVnYWN5IEFQSSBrZXkgbW9kZSAoc2JfIGtleXMgZGlzYWJsZWQpXCJcbmZpXG5cbmVjaG8gXCJFbnZveSBjb25maWd1cmF0aW9uIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHlcIlxuZWNobyBcIlN0YXJ0aW5nIEVudm95Li4uXCJcblxuIyBTdGFydCBFbnZveVxuZXhlYyBlbnZveSAtYyAvZXRjL2Vudm95L2Vudm95LnlhbWwgXCIkQFwiXG4nJydcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9zbmlwcGV0cy8uZ2l0a2VlcFwiXG5jb250ZW50ID0gXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi92b2x1bWVzL2RiL2luaXQvZGF0YS5zcWxcIlxuY29udGVudCA9IFwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9kYi9fc3VwYWJhc2Uuc3FsXCJcbmNvbnRlbnQgPSBcIlwiXCJcXFxcc2V0IHBndXNlciBgZWNobyBcIiRQT1NUR1JFU19VU0VSXCJgXG5cbkNSRUFURSBEQVRBQkFTRSBfc3VwYWJhc2UgV0lUSCBPV05FUiA6cGd1c2VyO1xuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvZGIvand0LnNxbFwiXG5jb250ZW50ID0gXCJcIlwiXG5cXFxcc2V0IGp3dF9zZWNyZXQgYGVjaG8gXCIkSldUX1NFQ1JFVFwiYFxuXFxcXHNldCBqd3RfZXhwIGBlY2hvIFwiJEpXVF9FWFBcImBcblxuQUxURVIgREFUQUJBU0UgcG9zdGdyZXMgU0VUIFwiYXBwLnNldHRpbmdzLmp3dF9zZWNyZXRcIiBUTyA6J2p3dF9zZWNyZXQnO1xuQUxURVIgREFUQUJBU0UgcG9zdGdyZXMgU0VUIFwiYXBwLnNldHRpbmdzLmp3dF9leHBcIiBUTyA6J2p3dF9leHAnO1xuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvZGIvbG9ncy5zcWxcIlxuY29udGVudCA9IFwiXCJcIlxuXFxcXHNldCBwZ3VzZXIgYGVjaG8gXCIkUE9TVEdSRVNfVVNFUlwiYFxuXG5cXFxcYyBfc3VwYWJhc2VcbmNyZWF0ZSBzY2hlbWEgaWYgbm90IGV4aXN0cyBfYW5hbHl0aWNzO1xuYWx0ZXIgc2NoZW1hIF9hbmFseXRpY3Mgb3duZXIgdG8gOnBndXNlcjtcblxcXFxjIHBvc3RncmVzXG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9kYi9wb29sZXIuc3FsXCJcbmNvbnRlbnQgPSBcIlwiXCJcblxcXFxzZXQgcGd1c2VyIGBlY2hvIFwiJFBPU1RHUkVTX1VTRVJcImBcblxuXFxcXGMgX3N1cGFiYXNlXG5jcmVhdGUgc2NoZW1hIGlmIG5vdCBleGlzdHMgX3N1cGF2aXNvcjtcbmFsdGVyIHNjaGVtYSBfc3VwYXZpc29yIG93bmVyIHRvIDpwZ3VzZXI7XG5cXFxcYyBwb3N0Z3Jlc1xuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvZGIvcmVhbHRpbWUuc3FsXCJcbmNvbnRlbnQgPSBcIlwiXCJcblxcXFxzZXQgcGd1c2VyIGBlY2hvIFwiJFBPU1RHUkVTX1VTRVJcImBcblxuY3JlYXRlIHNjaGVtYSBpZiBub3QgZXhpc3RzIF9yZWFsdGltZTtcbmFsdGVyIHNjaGVtYSBfcmVhbHRpbWUgb3duZXIgdG8gOnBndXNlcjtcblwiXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi92b2x1bWVzL2RiL3JvbGVzLnNxbFwiXG5jb250ZW50ID0gXCJcIlwiXG4tLSBOT1RFOiBjaGFuZ2UgdG8geW91ciBvd24gcGFzc3dvcmRzIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50c1xuXFxcXHNldCBwZ3Bhc3MgYGVjaG8gXCIkUE9TVEdSRVNfUEFTU1dPUkRcImBcblxuQUxURVIgVVNFUiBhdXRoZW50aWNhdG9yIFdJVEggUEFTU1dPUkQgOidwZ3Bhc3MnO1xuQUxURVIgVVNFUiBwZ2JvdW5jZXIgV0lUSCBQQVNTV09SRCA6J3BncGFzcyc7XG5BTFRFUiBVU0VSIHN1cGFiYXNlX2F1dGhfYWRtaW4gV0lUSCBQQVNTV09SRCA6J3BncGFzcyc7XG5BTFRFUiBVU0VSIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbiBXSVRIIFBBU1NXT1JEIDoncGdwYXNzJztcbkFMVEVSIFVTRVIgc3VwYWJhc2Vfc3RvcmFnZV9hZG1pbiBXSVRIIFBBU1NXT1JEIDoncGdwYXNzJztcblwiXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi92b2x1bWVzL2RiL3dlYmhvb2tzLnNxbFwiXG5jb250ZW50ID0gXCJcIlwiXG5CRUdJTjtcbiAgLS0gQ3JlYXRlIHBnX25ldCBleHRlbnNpb25cbiAgQ1JFQVRFIEVYVEVOU0lPTiBJRiBOT1QgRVhJU1RTIHBnX25ldCBTQ0hFTUEgZXh0ZW5zaW9ucztcbiAgLS0gQ3JlYXRlIHN1cGFiYXNlX2Z1bmN0aW9ucyBzY2hlbWFcbiAgQ1JFQVRFIFNDSEVNQSBzdXBhYmFzZV9mdW5jdGlvbnMgQVVUSE9SSVpBVElPTiBzdXBhYmFzZV9hZG1pbjtcbiAgR1JBTlQgVVNBR0UgT04gU0NIRU1BIHN1cGFiYXNlX2Z1bmN0aW9ucyBUTyBwb3N0Z3JlcywgYW5vbiwgYXV0aGVudGljYXRlZCwgc2VydmljZV9yb2xlO1xuICBBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMgSU4gU0NIRU1BIHN1cGFiYXNlX2Z1bmN0aW9ucyBHUkFOVCBBTEwgT04gVEFCTEVTIFRPIHBvc3RncmVzLCBhbm9uLCBhdXRoZW50aWNhdGVkLCBzZXJ2aWNlX3JvbGU7XG4gIEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyBJTiBTQ0hFTUEgc3VwYWJhc2VfZnVuY3Rpb25zIEdSQU5UIEFMTCBPTiBGVU5DVElPTlMgVE8gcG9zdGdyZXMsIGFub24sIGF1dGhlbnRpY2F0ZWQsIHNlcnZpY2Vfcm9sZTtcbiAgQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIElOIFNDSEVNQSBzdXBhYmFzZV9mdW5jdGlvbnMgR1JBTlQgQUxMIE9OIFNFUVVFTkNFUyBUTyBwb3N0Z3JlcywgYW5vbiwgYXV0aGVudGljYXRlZCwgc2VydmljZV9yb2xlO1xuICAtLSBzdXBhYmFzZV9mdW5jdGlvbnMubWlncmF0aW9ucyBkZWZpbml0aW9uXG4gIENSRUFURSBUQUJMRSBzdXBhYmFzZV9mdW5jdGlvbnMubWlncmF0aW9ucyAoXG4gICAgdmVyc2lvbiB0ZXh0IFBSSU1BUlkgS0VZLFxuICAgIGluc2VydGVkX2F0IHRpbWVzdGFtcHR6IE5PVCBOVUxMIERFRkFVTFQgTk9XKClcbiAgKTtcbiAgLS0gSW5pdGlhbCBzdXBhYmFzZV9mdW5jdGlvbnMgbWlncmF0aW9uXG4gIElOU0VSVCBJTlRPIHN1cGFiYXNlX2Z1bmN0aW9ucy5taWdyYXRpb25zICh2ZXJzaW9uKSBWQUxVRVMgKCdpbml0aWFsJyk7XG4gIC0tIHN1cGFiYXNlX2Z1bmN0aW9ucy5ob29rcyBkZWZpbml0aW9uXG4gIENSRUFURSBUQUJMRSBzdXBhYmFzZV9mdW5jdGlvbnMuaG9va3MgKFxuICAgIGlkIGJpZ3NlcmlhbCBQUklNQVJZIEtFWSxcbiAgICBob29rX3RhYmxlX2lkIGludGVnZXIgTk9UIE5VTEwsXG4gICAgaG9va19uYW1lIHRleHQgTk9UIE5VTEwsXG4gICAgY3JlYXRlZF9hdCB0aW1lc3RhbXB0eiBOT1QgTlVMTCBERUZBVUxUIE5PVygpLFxuICAgIHJlcXVlc3RfaWQgYmlnaW50XG4gICk7XG4gIENSRUFURSBJTkRFWCBzdXBhYmFzZV9mdW5jdGlvbnNfaG9va3NfcmVxdWVzdF9pZF9pZHggT04gc3VwYWJhc2VfZnVuY3Rpb25zLmhvb2tzIFVTSU5HIGJ0cmVlIChyZXF1ZXN0X2lkKTtcbiAgQ1JFQVRFIElOREVYIHN1cGFiYXNlX2Z1bmN0aW9uc19ob29rc19oX3RhYmxlX2lkX2hfbmFtZV9pZHggT04gc3VwYWJhc2VfZnVuY3Rpb25zLmhvb2tzIFVTSU5HIGJ0cmVlIChob29rX3RhYmxlX2lkLCBob29rX25hbWUpO1xuICBDT01NRU5UIE9OIFRBQkxFIHN1cGFiYXNlX2Z1bmN0aW9ucy5ob29rcyBJUyAnU3VwYWJhc2UgRnVuY3Rpb25zIEhvb2tzOiBBdWRpdCB0cmFpbCBmb3IgdHJpZ2dlcmVkIGhvb2tzLic7XG4gIENSRUFURSBGVU5DVElPTiBzdXBhYmFzZV9mdW5jdGlvbnMuaHR0cF9yZXF1ZXN0KClcbiAgICBSRVRVUk5TIHRyaWdnZXJcbiAgICBMQU5HVUFHRSBwbHBnc3FsXG4gICAgQVMgJGZ1bmN0aW9uJFxuICAgIERFQ0xBUkVcbiAgICAgIHJlcXVlc3RfaWQgYmlnaW50O1xuICAgICAgcGF5bG9hZCBqc29uYjtcbiAgICAgIHVybCB0ZXh0IDo9IFRHX0FSR1ZbMF06OnRleHQ7XG4gICAgICBtZXRob2QgdGV4dCA6PSBUR19BUkdWWzFdOjp0ZXh0O1xuICAgICAgaGVhZGVycyBqc29uYiBERUZBVUxUICd7fSc6Ompzb25iO1xuICAgICAgcGFyYW1zIGpzb25iIERFRkFVTFQgJ3t9Jzo6anNvbmI7XG4gICAgICB0aW1lb3V0X21zIGludGVnZXIgREVGQVVMVCAxMDAwO1xuICAgIEJFR0lOXG4gICAgICBJRiB1cmwgSVMgTlVMTCBPUiB1cmwgPSAnbnVsbCcgVEhFTlxuICAgICAgICBSQUlTRSBFWENFUFRJT04gJ3VybCBhcmd1bWVudCBpcyBtaXNzaW5nJztcbiAgICAgIEVORCBJRjtcblxuICAgICAgSUYgbWV0aG9kIElTIE5VTEwgT1IgbWV0aG9kID0gJ251bGwnIFRIRU5cbiAgICAgICAgUkFJU0UgRVhDRVBUSU9OICdtZXRob2QgYXJndW1lbnQgaXMgbWlzc2luZyc7XG4gICAgICBFTkQgSUY7XG5cbiAgICAgIElGIFRHX0FSR1ZbMl0gSVMgTlVMTCBPUiBUR19BUkdWWzJdID0gJ251bGwnIFRIRU5cbiAgICAgICAgaGVhZGVycyA9ICd7XCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJ9Jzo6anNvbmI7XG4gICAgICBFTFNFXG4gICAgICAgIGhlYWRlcnMgPSBUR19BUkdWWzJdOjpqc29uYjtcbiAgICAgIEVORCBJRjtcblxuICAgICAgSUYgVEdfQVJHVlszXSBJUyBOVUxMIE9SIFRHX0FSR1ZbM10gPSAnbnVsbCcgVEhFTlxuICAgICAgICBwYXJhbXMgPSAne30nOjpqc29uYjtcbiAgICAgIEVMU0VcbiAgICAgICAgcGFyYW1zID0gVEdfQVJHVlszXTo6anNvbmI7XG4gICAgICBFTkQgSUY7XG5cbiAgICAgIElGIFRHX0FSR1ZbNF0gSVMgTlVMTCBPUiBUR19BUkdWWzRdID0gJ251bGwnIFRIRU5cbiAgICAgICAgdGltZW91dF9tcyA9IDEwMDA7XG4gICAgICBFTFNFXG4gICAgICAgIHRpbWVvdXRfbXMgPSBUR19BUkdWWzRdOjppbnRlZ2VyO1xuICAgICAgRU5EIElGO1xuXG4gICAgICBDQVNFXG4gICAgICAgIFdIRU4gbWV0aG9kID0gJ0dFVCcgVEhFTlxuICAgICAgICAgIFNFTEVDVCBodHRwX2dldCBJTlRPIHJlcXVlc3RfaWQgRlJPTSBuZXQuaHR0cF9nZXQoXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgdGltZW91dF9tc1xuICAgICAgICAgICk7XG4gICAgICAgIFdIRU4gbWV0aG9kID0gJ1BPU1QnIFRIRU5cbiAgICAgICAgICBwYXlsb2FkID0ganNvbmJfYnVpbGRfb2JqZWN0KFxuICAgICAgICAgICAgJ29sZF9yZWNvcmQnLCBPTEQsXG4gICAgICAgICAgICAncmVjb3JkJywgTkVXLFxuICAgICAgICAgICAgJ3R5cGUnLCBUR19PUCxcbiAgICAgICAgICAgICd0YWJsZScsIFRHX1RBQkxFX05BTUUsXG4gICAgICAgICAgICAnc2NoZW1hJywgVEdfVEFCTEVfU0NIRU1BXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIFNFTEVDVCBodHRwX3Bvc3QgSU5UTyByZXF1ZXN0X2lkIEZST00gbmV0Lmh0dHBfcG9zdChcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgdGltZW91dF9tc1xuICAgICAgICAgICk7XG4gICAgICAgIEVMU0VcbiAgICAgICAgICBSQUlTRSBFWENFUFRJT04gJ21ldGhvZCBhcmd1bWVudCAlIGlzIGludmFsaWQnLCBtZXRob2Q7XG4gICAgICBFTkQgQ0FTRTtcblxuICAgICAgSU5TRVJUIElOVE8gc3VwYWJhc2VfZnVuY3Rpb25zLmhvb2tzXG4gICAgICAgIChob29rX3RhYmxlX2lkLCBob29rX25hbWUsIHJlcXVlc3RfaWQpXG4gICAgICBWQUxVRVNcbiAgICAgICAgKFRHX1JFTElELCBUR19OQU1FLCByZXF1ZXN0X2lkKTtcblxuICAgICAgUkVUVVJOIE5FVztcbiAgICBFTkRcbiAgJGZ1bmN0aW9uJDtcbiAgLS0gU3VwYWJhc2Ugc3VwZXIgYWRtaW5cbiAgRE9cbiAgJCRcbiAgQkVHSU5cbiAgICBJRiBOT1QgRVhJU1RTIChcbiAgICAgIFNFTEVDVCAxXG4gICAgICBGUk9NIHBnX3JvbGVzXG4gICAgICBXSEVSRSByb2xuYW1lID0gJ3N1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbidcbiAgICApXG4gICAgVEhFTlxuICAgICAgQ1JFQVRFIFVTRVIgc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluIE5PSU5IRVJJVCBDUkVBVEVST0xFIExPR0lOIE5PUkVQTElDQVRJT047XG4gICAgRU5EIElGO1xuICBFTkRcbiAgJCQ7XG4gIEdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIFNDSEVNQSBzdXBhYmFzZV9mdW5jdGlvbnMgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluO1xuICBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBBTEwgVEFCTEVTIElOIFNDSEVNQSBzdXBhYmFzZV9mdW5jdGlvbnMgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluO1xuICBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBBTEwgU0VRVUVOQ0VTIElOIFNDSEVNQSBzdXBhYmFzZV9mdW5jdGlvbnMgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluO1xuICBBTFRFUiBVU0VSIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbiBTRVQgc2VhcmNoX3BhdGggPSBcInN1cGFiYXNlX2Z1bmN0aW9uc1wiO1xuICBBTFRFUiB0YWJsZSBcInN1cGFiYXNlX2Z1bmN0aW9uc1wiLm1pZ3JhdGlvbnMgT1dORVIgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluO1xuICBBTFRFUiB0YWJsZSBcInN1cGFiYXNlX2Z1bmN0aW9uc1wiLmhvb2tzIE9XTkVSIFRPIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbjtcbiAgQUxURVIgZnVuY3Rpb24gXCJzdXBhYmFzZV9mdW5jdGlvbnNcIi5odHRwX3JlcXVlc3QoKSBPV05FUiBUTyBzdXBhYmFzZV9mdW5jdGlvbnNfYWRtaW47XG4gIEdSQU5UIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbiBUTyBwb3N0Z3JlcztcbiAgLS0gUmVtb3ZlIHVudXNlZCBzdXBhYmFzZV9wZ19uZXRfYWRtaW4gcm9sZVxuICBET1xuICAkJFxuICBCRUdJTlxuICAgIElGIEVYSVNUUyAoXG4gICAgICBTRUxFQ1QgMVxuICAgICAgRlJPTSBwZ19yb2xlc1xuICAgICAgV0hFUkUgcm9sbmFtZSA9ICdzdXBhYmFzZV9wZ19uZXRfYWRtaW4nXG4gICAgKVxuICAgIFRIRU5cbiAgICAgIFJFQVNTSUdOIE9XTkVEIEJZIHN1cGFiYXNlX3BnX25ldF9hZG1pbiBUTyBzdXBhYmFzZV9hZG1pbjtcbiAgICAgIERST1AgT1dORUQgQlkgc3VwYWJhc2VfcGdfbmV0X2FkbWluO1xuICAgICAgRFJPUCBST0xFIHN1cGFiYXNlX3BnX25ldF9hZG1pbjtcbiAgICBFTkQgSUY7XG4gIEVORFxuICAkJDtcbiAgLS0gcGdfbmV0IGdyYW50cyB3aGVuIGV4dGVuc2lvbiBpcyBhbHJlYWR5IGVuYWJsZWRcbiAgRE9cbiAgJCRcbiAgQkVHSU5cbiAgICBJRiBFWElTVFMgKFxuICAgICAgU0VMRUNUIDFcbiAgICAgIEZST00gcGdfZXh0ZW5zaW9uXG4gICAgICBXSEVSRSBleHRuYW1lID0gJ3BnX25ldCdcbiAgICApXG4gICAgVEhFTlxuICAgICAgR1JBTlQgVVNBR0UgT04gU0NIRU1BIG5ldCBUTyBzdXBhYmFzZV9mdW5jdGlvbnNfYWRtaW4sIHBvc3RncmVzLCBhbm9uLCBhdXRoZW50aWNhdGVkLCBzZXJ2aWNlX3JvbGU7XG4gICAgICBBTFRFUiBmdW5jdGlvbiBuZXQuaHR0cF9nZXQodXJsIHRleHQsIHBhcmFtcyBqc29uYiwgaGVhZGVycyBqc29uYiwgdGltZW91dF9taWxsaXNlY29uZHMgaW50ZWdlcikgU0VDVVJJVFkgREVGSU5FUjtcbiAgICAgIEFMVEVSIGZ1bmN0aW9uIG5ldC5odHRwX3Bvc3QodXJsIHRleHQsIGJvZHkganNvbmIsIHBhcmFtcyBqc29uYiwgaGVhZGVycyBqc29uYiwgdGltZW91dF9taWxsaXNlY29uZHMgaW50ZWdlcikgU0VDVVJJVFkgREVGSU5FUjtcbiAgICAgIEFMVEVSIGZ1bmN0aW9uIG5ldC5odHRwX2dldCh1cmwgdGV4dCwgcGFyYW1zIGpzb25iLCBoZWFkZXJzIGpzb25iLCB0aW1lb3V0X21pbGxpc2Vjb25kcyBpbnRlZ2VyKSBTRVQgc2VhcmNoX3BhdGggPSBuZXQ7XG4gICAgICBBTFRFUiBmdW5jdGlvbiBuZXQuaHR0cF9wb3N0KHVybCB0ZXh0LCBib2R5IGpzb25iLCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIFNFVCBzZWFyY2hfcGF0aCA9IG5ldDtcbiAgICAgIFJFVk9LRSBBTEwgT04gRlVOQ1RJT04gbmV0Lmh0dHBfZ2V0KHVybCB0ZXh0LCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIEZST00gUFVCTElDO1xuICAgICAgUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBuZXQuaHR0cF9wb3N0KHVybCB0ZXh0LCBib2R5IGpzb25iLCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIEZST00gUFVCTElDO1xuICAgICAgR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBuZXQuaHR0cF9nZXQodXJsIHRleHQsIHBhcmFtcyBqc29uYiwgaGVhZGVycyBqc29uYiwgdGltZW91dF9taWxsaXNlY29uZHMgaW50ZWdlcikgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluLCBwb3N0Z3JlcywgYW5vbiwgYXV0aGVudGljYXRlZCwgc2VydmljZV9yb2xlO1xuICAgICAgR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBuZXQuaHR0cF9wb3N0KHVybCB0ZXh0LCBib2R5IGpzb25iLCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIFRPIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbiwgcG9zdGdyZXMsIGFub24sIGF1dGhlbnRpY2F0ZWQsIHNlcnZpY2Vfcm9sZTtcbiAgICBFTkQgSUY7XG4gIEVORFxuICAkJDtcbiAgLS0gRXZlbnQgdHJpZ2dlciBmb3IgcGdfbmV0XG4gIENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGV4dGVuc2lvbnMuZ3JhbnRfcGdfbmV0X2FjY2VzcygpXG4gIFJFVFVSTlMgZXZlbnRfdHJpZ2dlclxuICBMQU5HVUFHRSBwbHBnc3FsXG4gIEFTICQkXG4gIEJFR0lOXG4gICAgSUYgRVhJU1RTIChcbiAgICAgIFNFTEVDVCAxXG4gICAgICBGUk9NIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkgQVMgZXZcbiAgICAgIEpPSU4gcGdfZXh0ZW5zaW9uIEFTIGV4dFxuICAgICAgT04gZXYub2JqaWQgPSBleHQub2lkXG4gICAgICBXSEVSRSBleHQuZXh0bmFtZSA9ICdwZ19uZXQnXG4gICAgKVxuICAgIFRIRU5cbiAgICAgIEdSQU5UIFVTQUdFIE9OIFNDSEVNQSBuZXQgVE8gc3VwYWJhc2VfZnVuY3Rpb25zX2FkbWluLCBwb3N0Z3JlcywgYW5vbiwgYXV0aGVudGljYXRlZCwgc2VydmljZV9yb2xlO1xuICAgICAgQUxURVIgZnVuY3Rpb24gbmV0Lmh0dHBfZ2V0KHVybCB0ZXh0LCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIFNFQ1VSSVRZIERFRklORVI7XG4gICAgICBBTFRFUiBmdW5jdGlvbiBuZXQuaHR0cF9wb3N0KHVybCB0ZXh0LCBib2R5IGpzb25iLCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIFNFQ1VSSVRZIERFRklORVI7XG4gICAgICBBTFRFUiBmdW5jdGlvbiBuZXQuaHR0cF9nZXQodXJsIHRleHQsIHBhcmFtcyBqc29uYiwgaGVhZGVycyBqc29uYiwgdGltZW91dF9taWxsaXNlY29uZHMgaW50ZWdlcikgU0VUIHNlYXJjaF9wYXRoID0gbmV0O1xuICAgICAgQUxURVIgZnVuY3Rpb24gbmV0Lmh0dHBfcG9zdCh1cmwgdGV4dCwgYm9keSBqc29uYiwgcGFyYW1zIGpzb25iLCBoZWFkZXJzIGpzb25iLCB0aW1lb3V0X21pbGxpc2Vjb25kcyBpbnRlZ2VyKSBTRVQgc2VhcmNoX3BhdGggPSBuZXQ7XG4gICAgICBSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIG5ldC5odHRwX2dldCh1cmwgdGV4dCwgcGFyYW1zIGpzb25iLCBoZWFkZXJzIGpzb25iLCB0aW1lb3V0X21pbGxpc2Vjb25kcyBpbnRlZ2VyKSBGUk9NIFBVQkxJQztcbiAgICAgIFJFVk9LRSBBTEwgT04gRlVOQ1RJT04gbmV0Lmh0dHBfcG9zdCh1cmwgdGV4dCwgYm9keSBqc29uYiwgcGFyYW1zIGpzb25iLCBoZWFkZXJzIGpzb25iLCB0aW1lb3V0X21pbGxpc2Vjb25kcyBpbnRlZ2VyKSBGUk9NIFBVQkxJQztcbiAgICAgIEdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gbmV0Lmh0dHBfZ2V0KHVybCB0ZXh0LCBwYXJhbXMganNvbmIsIGhlYWRlcnMganNvbmIsIHRpbWVvdXRfbWlsbGlzZWNvbmRzIGludGVnZXIpIFRPIHN1cGFiYXNlX2Z1bmN0aW9uc19hZG1pbiwgcG9zdGdyZXMsIGFub24sIGF1dGhlbnRpY2F0ZWQsIHNlcnZpY2Vfcm9sZTtcbiAgICAgIEdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gbmV0Lmh0dHBfcG9zdCh1cmwgdGV4dCwgYm9keSBqc29uYiwgcGFyYW1zIGpzb25iLCBoZWFkZXJzIGpzb25iLCB0aW1lb3V0X21pbGxpc2Vjb25kcyBpbnRlZ2VyKSBUTyBzdXBhYmFzZV9mdW5jdGlvbnNfYWRtaW4sIHBvc3RncmVzLCBhbm9uLCBhdXRoZW50aWNhdGVkLCBzZXJ2aWNlX3JvbGU7XG4gICAgRU5EIElGO1xuICBFTkQ7XG4gICQkO1xuICBDT01NRU5UIE9OIEZVTkNUSU9OIGV4dGVuc2lvbnMuZ3JhbnRfcGdfbmV0X2FjY2VzcyBJUyAnR3JhbnRzIGFjY2VzcyB0byBwZ19uZXQnO1xuICBET1xuICAkJFxuICBCRUdJTlxuICAgIElGIE5PVCBFWElTVFMgKFxuICAgICAgU0VMRUNUIDFcbiAgICAgIEZST00gcGdfZXZlbnRfdHJpZ2dlclxuICAgICAgV0hFUkUgZXZ0bmFtZSA9ICdpc3N1ZV9wZ19uZXRfYWNjZXNzJ1xuICAgICkgVEhFTlxuICAgICAgQ1JFQVRFIEVWRU5UIFRSSUdHRVIgaXNzdWVfcGdfbmV0X2FjY2VzcyBPTiBkZGxfY29tbWFuZF9lbmQgV0hFTiBUQUcgSU4gKCdDUkVBVEUgRVhURU5TSU9OJylcbiAgICAgIEVYRUNVVEUgUFJPQ0VEVVJFIGV4dGVuc2lvbnMuZ3JhbnRfcGdfbmV0X2FjY2VzcygpO1xuICAgIEVORCBJRjtcbiAgRU5EXG4gICQkO1xuICBJTlNFUlQgSU5UTyBzdXBhYmFzZV9mdW5jdGlvbnMubWlncmF0aW9ucyAodmVyc2lvbikgVkFMVUVTICgnMjAyMTA4MDkxODM0MjNfdXBkYXRlX2dyYW50cycpO1xuICBBTFRFUiBmdW5jdGlvbiBzdXBhYmFzZV9mdW5jdGlvbnMuaHR0cF9yZXF1ZXN0KCkgU0VDVVJJVFkgREVGSU5FUjtcbiAgQUxURVIgZnVuY3Rpb24gc3VwYWJhc2VfZnVuY3Rpb25zLmh0dHBfcmVxdWVzdCgpIFNFVCBzZWFyY2hfcGF0aCA9IHN1cGFiYXNlX2Z1bmN0aW9ucztcbiAgUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBzdXBhYmFzZV9mdW5jdGlvbnMuaHR0cF9yZXF1ZXN0KCkgRlJPTSBQVUJMSUM7XG4gIEdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gc3VwYWJhc2VfZnVuY3Rpb25zLmh0dHBfcmVxdWVzdCgpIFRPIHBvc3RncmVzLCBhbm9uLCBhdXRoZW50aWNhdGVkLCBzZXJ2aWNlX3JvbGU7XG5DT01NSVQ7XG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9mdW5jdGlvbnMvaGVsbG8vaW5kZXgudHNcIlxuY29udGVudCA9ICcnJy8vIEZvbGxvdyB0aGlzIHNldHVwIGd1aWRlIHRvIGludGVncmF0ZSB0aGUgRGVubyBsYW5ndWFnZSBzZXJ2ZXIgd2l0aCB5b3VyIGVkaXRvcjpcbi8vIGh0dHBzOi8vZGVuby5sYW5kL21hbnVhbC9nZXR0aW5nX3N0YXJ0ZWQvc2V0dXBfeW91cl9lbnZpcm9ubWVudFxuLy8gVGhpcyBlbmFibGVzIGF1dG9jb21wbGV0ZSwgZ28gdG8gZGVmaW5pdGlvbiwgZXRjLlxuXG4vLyBTZXR1cCB0eXBlIGRlZmluaXRpb25zIGZvciBidWlsdC1pbiBTdXBhYmFzZSBSdW50aW1lIEFQSXNcbmltcG9ydCBcIkBzdXBhYmFzZS9mdW5jdGlvbnMtanMvZWRnZS1ydW50aW1lLmQudHNcIlxuaW1wb3J0IHsgd2l0aFN1cGFiYXNlIH0gZnJvbSBcIkBzdXBhYmFzZS9zZXJ2ZXJcIlxuXG4vLyBMb2dzIGFyZSB2aXNpYmxlIGZyb20gJ2Z1bmN0aW9ucycgY29udGFpbmVyIGluc3BlY3RvclxuY29uc29sZS5sb2coXCJIZWxsbyBmcm9tIEZ1bmN0aW9ucyFcIik7XG5cbi8vIFRoaXMgZW5kcG9pbnQgdXNlcyAncHVibGlzaGFibGUnIHwgJ3NlY3JldCcgYWNjZXNzLCBhcGlLZXkgaXMgcmVxdWlyZWQuXG4vLyBVc2UgcHVibGlzaGFibGUgZm9yIENsaWVudC1mYWNpbmcsIGtleS12YWxpZGF0ZWQgZW5kcG9pbnRzXG4vLyBVc2Ugc2VjcmV0IGZvciBTZXJ2ZXItdG8tc2VydmVyLCBpbnRlcm5hbCBjYWxsc1xuZXhwb3J0IGRlZmF1bHQge1xuICBmZXRjaDogd2l0aFN1cGFiYXNlKHsgYXV0aDogW1wicHVibGlzaGFibGVcIiwgXCJzZWNyZXRcIl0gfSwgYXN5bmMgKHJlcSwgY3R4KSA9PiB7XG4gICAgLy8gQ2FsbGVkIGJ5IGFub3RoZXIgc2VydmljZSB3aXRoIGEgc2VjcmV0IGtleVxuICAgIC8vIGN0eC5zdXBhYmFzZUFkbWluIGJ5cGFzc2VzIFJMUyDigJQgdXNlIGZvciBwcml2aWxlZ2VkIG9wZXJhdGlvbnNcbiAgICAvKlxuICAgIGlmIChjdHguYXV0aE1vZGUgPT09IFwic2VjcmV0XCIpIHtcbiAgICAgIGNvbnN0IHsgdXNlcl9pZCB9ID0gYXdhaXQgcmVxLmpzb24oKTtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgY3R4LnN1cGFiYXNlQWRtaW4uYXV0aC5hZG1pbi5nZXRVc2VyQnlJZCh1c2VyX2lkKTtcblxuICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oe1xuICAgICAgICBlbWFpbDogZGF0YT8udXNlcj8uZW1haWwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgKi9cblxuICAgIHJldHVybiBSZXNwb25zZS5qc29uKHsgbWVzc2FnZTogXCJIZWxsbyBmcm9tIEVkZ2UgRnVuY3Rpb25zIVwiIH0pO1xuICB9KSxcbn07XG5cbi8vIFRvIGludm9rZTpcbi8vIGN1cmwgJ2h0dHA6Ly9sb2NhbGhvc3Q6PEFQSV9HV19IVFRQX1BPUlQ+L2Z1bmN0aW9ucy92MS9oZWxsbycgXFxcbi8vICAgLS1oZWFkZXIgJ2FwaUtleTogPHNiX3B1Ymxpc2hhYmxlL3NiX3NlY3JldCBrZXk+J1xuXG4nJydcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9mdW5jdGlvbnMvZGVuby5qc29uY1wiXG5jb250ZW50ID0gJycne1xuICBcImltcG9ydHNcIjoge1xuICAgIFwiQHN1cGFiYXNlL2Z1bmN0aW9ucy1qc1wiOiBcImpzcjpAc3VwYWJhc2UvZnVuY3Rpb25zLWpzQF4yXCIsXG4gICAgXCJAc3VwYWJhc2Uvc2VydmVyXCI6IFwibnBtOkBzdXBhYmFzZS9zZXJ2ZXJAXjFcIlxuICB9XG59XG4nJydcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvdm9sdW1lcy9mdW5jdGlvbnMvbWFpbi9pbmRleC50c1wiXG5jb250ZW50ID0gXCJcIlwiaW1wb3J0ICogYXMgam9zZSBmcm9tICdqc3I6QHBhbnZhL2pvc2VANidcblxuY29uc29sZS5sb2coJ21haW4gZnVuY3Rpb24gc3RhcnRlZCcpXG5cbmNvbnN0IEpXVF9TRUNSRVQgPSBEZW5vLmVudi5nZXQoJ0pXVF9TRUNSRVQnKVxuY29uc3QgU1VQQUJBU0VfSldLUyA9IHBhcnNlSndrcyhEZW5vLmVudi5nZXQoJ1NVUEFCQVNFX0pXS1MnKSlcbmNvbnN0IFZFUklGWV9KV1QgPSBEZW5vLmVudi5nZXQoJ1ZFUklGWV9KV1QnKSA9PT0gJ3RydWUnXG5cbi8vIE9ubHkgdGhlIGJhcmUgYXJyYXkgcGFyc2luZyBpcyBjaGVja2VkIGhlcmUsICdqb3NlJyBkb2VzIHRoZSBrZXkgdmFsaWRhdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUp3a3MocmF3OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBqb3NlLkpTT05XZWJLZXlTZXQgfCBudWxsIHtcbiAgaWYgKCFyYXcpIHJldHVybiBudWxsXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpXG4gICAgaWYgKHBhcnNlZD8ua2V5cyAmJiBBcnJheS5pc0FycmF5KHBhcnNlZC5rZXlzKSkge1xuICAgICAgcmV0dXJuIHBhcnNlZCBhcyBqb3NlLkpTT05XZWJLZXlTZXRcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBdXRoVG9rZW4ocmVxOiBSZXF1ZXN0KSB7XG4gIGNvbnN0IGF1dGhIZWFkZXIgPSByZXEuaGVhZGVycy5nZXQoJ2F1dGhvcml6YXRpb24nKVxuICBpZiAoIWF1dGhIZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXV0aG9yaXphdGlvbiBoZWFkZXInKVxuICB9XG4gIGNvbnN0IFtiZWFyZXIsIHRva2VuXSA9IGF1dGhIZWFkZXIuc3BsaXQoJyAnKVxuICBpZiAoYmVhcmVyICE9PSAnQmVhcmVyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXV0aCBoZWFkZXIgaXMgbm90ICdCZWFyZXIge3Rva2VufSdgKVxuICB9XG4gIHJldHVybiB0b2tlblxufVxuXG5hc3luYyBmdW5jdGlvbiBpc1ZhbGlkTGVnYWN5SldUKGp3dDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmICghSldUX1NFQ1JFVCkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0pXVF9TRUNSRVQgbm90IGF2YWlsYWJsZSBmb3IgSFMyNTYgdG9rZW4gdmVyaWZpY2F0aW9uJylcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbiAgY29uc3Qgc2VjcmV0S2V5ID0gZW5jb2Rlci5lbmNvZGUoSldUX1NFQ1JFVClcbiAgdHJ5IHtcbiAgICBhd2FpdCBqb3NlLmp3dFZlcmlmeShqd3QsIHNlY3JldEtleSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1N5bW1ldHJpYyBMZWdhY3kgSldUIHZlcmlmaWNhdGlvbiBlcnJvcicsIGUpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNWYWxpZEpXVChqd3Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIVNVUEFCQVNFX0pXS1MpIHtcbiAgICBjb25zb2xlLmVycm9yKCdKV0tTIG5vdCBhdmFpbGFibGUgZm9yIEVTMjU2L1JTMjU2IHRva2VuIHZlcmlmaWNhdGlvbicpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBsb2NhbEp3a3MgPSBqb3NlLmNyZWF0ZUxvY2FsSldLU2V0KFNVUEFCQVNFX0pXS1MpXG4gICAgYXdhaXQgam9zZS5qd3RWZXJpZnkoand0LCBsb2NhbEp3a3MpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKCdBc3ltbWV0cmljIEpXVCB2ZXJpZmljYXRpb24gZXJyb3InLCBlKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzVmFsaWRIeWJyaWRKV1Qoand0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBhbGc6IGp3dEFsZ29yaXRobSB9ID0gam9zZS5kZWNvZGVQcm90ZWN0ZWRIZWFkZXIoand0KVxuICBpZiAoand0QWxnb3JpdGhtID09PSAnSFMyNTYnKSB7XG4gICAgcmV0dXJuIGF3YWl0IGlzVmFsaWRMZWdhY3lKV1Qoand0KVxuICB9XG4gIGlmIChqd3RBbGdvcml0aG0gPT09ICdFUzI1NicgfHwgand0QWxnb3JpdGhtID09PSAnUlMyNTYnKSB7XG4gICAgcmV0dXJuIGF3YWl0IGlzVmFsaWRKV1Qoand0KVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5EZW5vLnNlcnZlKGFzeW5jIChyZXE6IFJlcXVlc3QpID0+IHtcbiAgaWYgKHJlcS5tZXRob2QgIT09ICdPUFRJT05TJyAmJiBWRVJJRllfSldUKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuID0gZ2V0QXV0aFRva2VuKHJlcSlcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCBpc1ZhbGlkSHlicmlkSldUKHRva2VuKVxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkoeyBtc2c6ICdJbnZhbGlkIEpXVCcgfSksIHtcbiAgICAgICAgICBzdGF0dXM6IDQwMSxcbiAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KHsgbXNnOiBlLnRvU3RyaW5nKCkgfSksIHtcbiAgICAgICAgc3RhdHVzOiA0MDEsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpXG4gIGNvbnN0IHsgcGF0aG5hbWUgfSA9IHVybFxuICBjb25zdCBwYXRoX3BhcnRzID0gcGF0aG5hbWUuc3BsaXQoJy8nKVxuICBjb25zdCBzZXJ2aWNlX25hbWUgPSBwYXRoX3BhcnRzWzFdXG5cbiAgaWYgKCFzZXJ2aWNlX25hbWUgfHwgc2VydmljZV9uYW1lID09PSAnJykge1xuICAgIGNvbnN0IGVycm9yID0geyBtc2c6ICdtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgaW4gcmVxdWVzdCcgfVxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkoZXJyb3IpLCB7XG4gICAgICBzdGF0dXM6IDQwMCxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBzZXJ2aWNlUGF0aCA9IGAvaG9tZS9kZW5vL2Z1bmN0aW9ucy8ke3NlcnZpY2VfbmFtZX1gXG4gIGNvbnNvbGUuZXJyb3IoYHNlcnZpbmcgdGhlIHJlcXVlc3Qgd2l0aCAke3NlcnZpY2VQYXRofWApXG5cbiAgY29uc3QgbWVtb3J5TGltaXRNYiA9IDE1MFxuICBjb25zdCB3b3JrZXJUaW1lb3V0TXMgPSAxICogNjAgKiAxMDAwXG4gIGNvbnN0IG5vTW9kdWxlQ2FjaGUgPSBmYWxzZVxuICAvLyBBIGNvbW1vbiBpbXBvcnQgbWFwIGZvciBhbGwgZnVuY3Rpb25zOyBhIHBlci1mdW5jdGlvbiBzY29wZSB3b3VsZCBoYXZlIHRvIGJlXG4gIC8vIHJlc29sdmVkIGR5bmFtaWNhbGx5IGZyb20gc2VydmljZV9uYW1lLlxuICBjb25zdCBpbXBvcnRNYXBQYXRoID0gYC9ob21lL2Rlbm8vZnVuY3Rpb25zL2Rlbm8uanNvbmNgXG4gIC8vIFNVUEFCQVNFX0ZVTkNUSU9OX1NMVUcgaXMgcGVyLXJlcXVlc3QsIGJlY2F1c2Ugb25seSB0aGlzIHdvcmtlciBrbm93cyB3aGljaFxuICAvLyBmdW5jdGlvbiB0aGUgcmVxdWVzdCByZXNvbHZlZCB0by5cbiAgY29uc3QgZW52VmFyc09iaiA9IHsgLi4uRGVuby5lbnYudG9PYmplY3QoKSwgU1VQQUJBU0VfRlVOQ1RJT05fU0xVRzogc2VydmljZV9uYW1lIH1cbiAgY29uc3QgZW52VmFycyA9IE9iamVjdC5rZXlzKGVudlZhcnNPYmopLm1hcCgoaykgPT4gW2ssIGVudlZhcnNPYmpba11dKVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgd29ya2VyID0gYXdhaXQgRWRnZVJ1bnRpbWUudXNlcldvcmtlcnMuY3JlYXRlKHtcbiAgICAgIHNlcnZpY2VQYXRoLFxuICAgICAgbWVtb3J5TGltaXRNYixcbiAgICAgIHdvcmtlclRpbWVvdXRNcyxcbiAgICAgIG5vTW9kdWxlQ2FjaGUsXG4gICAgICBpbXBvcnRNYXBQYXRoLFxuICAgICAgZW52VmFycyxcbiAgICB9KVxuICAgIHJldHVybiBhd2FpdCB3b3JrZXIuZmV0Y2gocmVxKVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgZXJyb3IgPSB7IG1zZzogZS50b1N0cmluZygpIH1cbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KGVycm9yKSwge1xuICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KVxuICB9XG59KVxuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3ZvbHVtZXMvcG9vbGVyL3Bvb2xlci5leHNcIlxuY29udGVudCA9IFwiXCJcIns6b2ssIF99ID0gQXBwbGljYXRpb24uZW5zdXJlX2FsbF9zdGFydGVkKDpzdXBhdmlzb3IpXG5cbns6b2ssIHZlcnNpb259ID1cbiAgY2FzZSBTdXBhdmlzb3IuUmVwby5xdWVyeSEoXCJzZWxlY3QgdmVyc2lvbigpXCIpIGRvXG4gICAgJXtyb3dzOiBbW3Zlcl1dfSAtPiBTdXBhdmlzb3IuSGVscGVycy5wYXJzZV9wZ192ZXJzaW9uKHZlcilcbiAgICBfIC0+IG5pbFxuICBlbmRcblxucGFyYW1zID0gJXtcbiAgXCJleHRlcm5hbF9pZFwiID0+IFN5c3RlbS5nZXRfZW52KFwiUE9PTEVSX1RFTkFOVF9JRFwiKSxcbiAgXCJkYl9ob3N0XCIgPT4gU3lzdGVtLmdldF9lbnYoXCJQT1NUR1JFU19IT1NUXCIpIHx8IFwiZGJcIixcbiAgXCJkYl9wb3J0XCIgPT4gU3lzdGVtLmdldF9lbnYoXCJQT1NUR1JFU19QT1JUXCIpLFxuICBcImRiX2RhdGFiYXNlXCIgPT4gU3lzdGVtLmdldF9lbnYoXCJQT1NUR1JFU19EQlwiKSxcbiAgXCJyZXF1aXJlX3VzZXJcIiA9PiBmYWxzZSxcbiAgXCJhdXRoX3F1ZXJ5XCIgPT4gXCJTRUxFQ1QgKiBGUk9NIHBnYm91bmNlci5nZXRfYXV0aCgkMSlcIixcbiAgXCJkZWZhdWx0X21heF9jbGllbnRzXCIgPT4gU3lzdGVtLmdldF9lbnYoXCJQT09MRVJfTUFYX0NMSUVOVF9DT05OXCIpLFxuICBcImRlZmF1bHRfcG9vbF9zaXplXCIgPT4gU3lzdGVtLmdldF9lbnYoXCJQT09MRVJfREVGQVVMVF9QT09MX1NJWkVcIiksXG4gIFwiZGVmYXVsdF9wYXJhbWV0ZXJfc3RhdHVzXCIgPT4gJXtcInNlcnZlcl92ZXJzaW9uXCIgPT4gdmVyc2lvbn0sXG4gIFwidXNlcnNcIiA9PiBbJXtcbiAgICBcImRiX3VzZXJcIiA9PiBcInBnYm91bmNlclwiLFxuICAgIFwiZGJfcGFzc3dvcmRcIiA9PiBTeXN0ZW0uZ2V0X2VudihcIlBPU1RHUkVTX1BBU1NXT1JEXCIpLFxuICAgIFwibW9kZV90eXBlXCIgPT4gU3lzdGVtLmdldF9lbnYoXCJQT09MRVJfUE9PTF9NT0RFXCIpLFxuICAgIFwicG9vbF9zaXplXCIgPT4gU3lzdGVtLmdldF9lbnYoXCJQT09MRVJfREVGQVVMVF9QT09MX1NJWkVcIiksXG4gICAgXCJpc19tYW5hZ2VyXCIgPT4gdHJ1ZVxuICB9XVxufVxuXG5pZiAhU3VwYXZpc29yLlRlbmFudHMuZ2V0X3RlbmFudF9ieV9leHRlcm5hbF9pZChwYXJhbXNbXCJleHRlcm5hbF9pZFwiXSkgZG9cbiAgezpvaywgX30gPSBTdXBhdmlzb3IuVGVuYW50cy5jcmVhdGVfdGVuYW50KHBhcmFtcylcbmVuZFxuXCJcIlwiIgp9
Reference files
The exact Docker Compose and template configuration this template deploys.
Usage guide
>= 0.22.5).POSTGRES_PASSWORD, JWT_SECRET, ANON_KEY, SERVICE_ROLE_KEY, DASHBOARD_PASSWORD, etc.). You can review them in the Environment tab of the service.The main domain of the template points to the api-gw API gateway — Envoy, on port 8000 — which protects Supabase Studio with basic authentication:
DASHBOARD_USERNAME (default: supabase)DASHBOARD_PASSWORDBoth values are in the Environment tab of the service in Dokploy. Envoy computes
the basic-auth credential at startup, as a SHA1 hash of DASHBOARD_PASSWORD encoded in
base64, so the password itself still comes from the Environment tab and nothing else
needs to change when you edit it.
To connect an application (for example with supabase-js):
https://<your-domain> (requests are routed through Envoy)ANON_KEY in the Environment tabSERVICE_ROLE_KEY in the Environment tab (server-side only, never expose it to browsers)sb_publishable_… / sb_secret_…)Dokploy also generates the newer opaque API keys, so you can use either style:
SUPABASE_PUBLISHABLE_KEY (browser-safe, replaces the anon key)SUPABASE_SECRET_KEY (server-side only, replaces the service_role key)Envoy exchanges these for the matching JWT before the request reaches Supabase, so
clients never hold a decodable token. Its docker-entrypoint.sh substitutes the six key
values into lds.yaml when the container starts, and the listener does the translation
on every request. Both styles stay valid at the same time — existing apps on ANON_KEY /
SERVICE_ROLE_KEY keep working.
You can drop the legacy pair entirely: clear ANON_KEY and SERVICE_ROLE_KEY
in the Environment tab and redeploy. Envoy is built for it — every legacy branch
in lds.template.yaml is guarded (if ANON_KEY ~= "" and ...), and the
entrypoint prints which mode it chose:
Envoy sb_ key translation enabled ← sb_-only or dual
Envoy running in legacy API key mode ← sb_ keys not configured
Translation needs all four of SUPABASE_PUBLISHABLE_KEY,
SUPABASE_SECRET_KEY, ANON_KEY_ASYMMETRIC and SERVICE_ROLE_KEY_ASYMMETRIC
to be non-empty. Set the ES256 keys first (see below), then clear the legacy pair.
⛔ A raw ANON_KEY_ASYMMETRIC is not an API key. It is the ES256 JWT Envoy
substitutes internally after it has accepted an sb_ key; sent as an apikey
header it is rejected with 401. Clients present the opaque sb_ strings only.
The services that never traverse Envoy still need a real JWT. storage calls
PostgREST directly at http://rest:3000, so it can never use an sb_ key. This
blueprint handles that for you — storage, studio, functions and the
realtime healthcheck all resolve their key as
${ANON_KEY:-${ANON_KEY_ASYMMETRIC}}, so clearing the legacy pair moves them onto
the asymmetric tokens automatically.
⚠️ In sb_-only mode realtime may still report unhealthy while working
correctly: its tenant-health endpoint validates against the tenant row's own
jwt_secret/jwt_jwks, not the container environment. Check the websocket and
postgres_changes behaviour before treating it as broken — a healthcheck is not
the service.
httpThe template generates SUPABASE_PUBLIC_URL, API_EXTERNAL_URL and
ADDITIONAL_REDIRECT_URLS with an https:// scheme, because that is right for the
usual case — a public domain with a Let's Encrypt certificate.
Dokploy creates the template's domain with no certificate. Until you enable one, the
domain answers on http only, and those three values point at a scheme that does not
respond. The stack comes up healthy and the gateway answers, so nothing looks broken — but:
SUPABASE_PUBLIC_URL and fail.Origin against SUPABASE_PUBLIC_URL, so CORS refuses every
cross-origin call, including /pg/.API_EXTERNAL_URL as the issuer and builds OAuth redirects and
email links from it, so all of them point at the dead scheme.Two ways out:
sslip.io name pointing at a Tailscale 100.x.y.z or a LAN 192.168.x.y
cannot be validated, because Let's Encrypt cannot connect to it.http:// in the Environment tab, then redeploy. This is the
right choice for a private or tailnet-only instance.SUPABASE_PUBLIC_URL=http://<your-domain>
API_EXTERNAL_URL=http://<your-domain>/auth/v1
ADDITIONAL_REDIRECT_URLS=http://<your-domain>/*,http://localhost:3000/*
Keep API_EXTERNAL_URL ending in /auth/v1. Without that path GoTrue advertises
<domain>/callback as its OAuth redirect_uri, and the gateway routes a bare /callback to
Studio rather than to auth, so every social sign-in dead-ends on the dashboard login prompt.
main_domain is interpolated when the service is created, into four
variables: SUPABASE_HOST, API_EXTERNAL_URL, SUPABASE_PUBLIC_URL and
ADDITIONAL_REDIRECT_URLS. Editing the Domains tab afterwards changes
routing and nothing else — those four keep the name the service was created with.
Fix them by hand in the Environment tab before the first deploy. It matters more
than it looks: API_EXTERNAL_URL becomes GOTRUE_JWT_ISSUER, which is the iss
claim of every access token and the value SB_JWT_ISSUER gives Edge Functions.
Change it after tokens are in circulation and they all fail verification.
⚠️ Only if you already run this template on its Kong version. A fresh install can skip this.
The API gateway service is renamed kong → api-gw. Dokploy checks the domain's service
name against the compose file, so a redeploy fails with
Domain ... is attached to service "kong" which does not exist in the compose until you
fix the domain first.
kong to api-gw.
Leave the port at 8000.kong container is removed automatically (--remove-orphans).No data is lost by the rename — the database lives in a separate volume.
The Postgres data directory is a bind mount (files/volumes/db/data), not a named
Docker volume. Two consequences:
db-config and
deno-cache volumes, neither of which holds your data.db-config and
deno-cache only. A true reset means deleting the service.Back up with pg_dump through the pooler, or copy
/etc/dokploy/compose/<appName>/files/volumes/db/data off the host.
Everything is signed with the symmetric JWT_SECRET (HS256) by default. Moving
to an asymmetric key pair needs an EC P-256 key, which Dokploy's variable
helpers cannot generate, so JWT_KEYS and JWT_JWKS ship empty. To switch:
Fetch Supabase's key generator. Only this one script is needed — cloning the
whole repository pulls a very large monorepo for a 7 KB file. It needs node
(>= 16), or Docker as a fallback:
bash
Put this deployment's JWT_SECRET (from the Environment tab) into a local .env:
bash
Generate the keys. --update-env is required: without it the script prints
only four of the six values, and writes ANON_KEY_ASYMMETRIC and
SERVICE_ROLE_KEY_ASYMMETRIC to .env alone.
bash
It exits with status 1 after writing the keys, because it then looks for a
docker-compose.yml to patch and there is none in this directory. That is
expected here — this blueprint already wires GOTRUE_JWT_KEYS,
API_JWT_JWKS, JWT_JWKS and SUPABASE_JWKS. Check .env for the six
values rather than the exit code.
Copy all six values from .env into the Environment tab, then redeploy:
SUPABASE_PUBLISHABLE_KEY, SUPABASE_SECRET_KEY, ANON_KEY_ASYMMETRIC,
SERVICE_ROLE_KEY_ASYMMETRIC, JWT_KEYS, JWT_JWKS.
⚠️ Those six do not include ANON_KEY or SERVICE_ROLE_KEY. The legacy
HS256 pair is untouched and still valid, so the deployment stays in dual mode
until you clear it deliberately — see Running on the new keys only above. If
you clear it by accident, every service that needed a key gets an empty string
and answers 401, which reads as a platform fault rather than a configuration one.
Set them all together. JWT_KEYS makes Auth sign tokens with ES256, while
JWT_JWKS is what PostgREST, Realtime, Storage and Edge Functions use to verify
them — filling in one without the other makes every authenticated request fail.
See https://supabase.com/docs/guides/self-hosting/self-hosted-auth-keys.
Review these variables in the Environment tab before using Supabase in production:
SUPABASE_PUBLIC_URL and API_EXTERNAL_URL: must point to your Supabase domain with the correct http/https scheme (the template sets them from your domain automatically).SITE_URL and ADDITIONAL_REDIRECT_URLS: must point to the application that uses Supabase for authentication.SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_ADMIN_EMAIL, SMTP_SENDER_NAME: required for auth emails (sign-up confirmations, password resets). The template ships with placeholder values, so no real emails are sent until you configure a real SMTP provider.Enable pg_graphql if you use the GraphQL endpoint. /graphql/v1 is routed by
the gateway, but the extension is not installed on a fresh database, so the endpoint
answers pg_graphql extension is not enabled. Supabase's hosted platform ships it
enabled, so code that works there needs one statement here — run it once from
Studio's SQL editor:
sql
The file backend keeps uploads on the server's disk. To put them in an
S3-compatible bucket, uncomment the S3 block in the storage service, set
STORAGE_BACKEND: s3, and fill these in the Environment tab:
GLOBAL_S3_BUCKET=<bucket name> # replaces the default "stub"
GLOBAL_S3_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com
STORAGE_S3_REGION=auto # R2 uses "auto"
AWS_ACCESS_KEY_ID=<access key id>
AWS_SECRET_ACCESS_KEY=<secret>
Four things are easy to get wrong, and none of them is obvious from the official
docker-compose.yml:
S3_PROTOCOL_ACCESS_KEY_ID / _SECRET are not the backend credentials.
They gate Supabase Storage's own S3-compatible API. The backend reads
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY.REGION=auto. REGION is read twice — as the reported server
region and as the S3 signing region. Set STORAGE_S3_REGION instead, so
only the signing region moves.STORAGE_S3_DISABLE_CHECKSUM: "true" is usually required. AWS SDK v3
adds a CRC32 to every PutObject; S3-compatible providers have rejected it.
It is in neither the official compose nor the SDK docs, and the symptom is
uploads failing for no visible reason.GLOBAL_S3_PROTOCOL is dead. The official compose lists it; it appears
nowhere in supabase/storage.✅ imgproxy needs no S3 configuration. Storage hands it a presigned HTTPS URL
rather than an s3:// path, so image transformation keeps working and the shared
volumes/storage mount simply goes unused.
STORAGE_TENANT_ID is permanentIt becomes the top-level prefix inside the bucket — objects live at
<tenant-id>/<bucket>/<path>. The template ships stub, which works and means
every object sits under stub/ forever. Change it before the first upload;
changing it afterwards orphans every object — the bytes stay and no path
resolves to them.
The Postgres data directory (mounted at files/volumes/db/data) is initialized once, on the first deploy, using the value of POSTGRES_PASSWORD at that moment. The same password is also assigned to the internal Supabase roles (authenticator, pgbouncer, supabase_auth_admin, supabase_functions_admin, supabase_storage_admin) by an init script that only runs on first boot.
If you later change POSTGRES_PASSWORD in the Environment tab and redeploy, the password stored inside the database does not change. The other services will start using the new password while the database still expects the old one, and you will see errors such as invalid_password or password authentication failed.
To actually change the password, use one of these options:
db container (in Dokploy: your Supabase service, db container, Terminal) and run psql -U postgres.sql
POSTGRES_PASSWORD in the Environment tab to the same value and redeploy.Only if the instance has no data you care about: stop the service, delete the files/volumes/db/data directory of the service, set the new POSTGRES_PASSWORD, and deploy again. The database will be initialized from scratch with the new password.
More like this
Version 1.25.04 / dokploy < 0.22.5
The open source Firebase alternative. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications. This is for dokploy version < 0.22.5.
Version 2.5.0
Appwrite is an end-to-end platform for building Web, Mobile, Native, or Backend apps, packaged as a set of Docker microservices. It includes both a backend server and a fully integrated hosting solution for deploying static and server-side rendered frontends. Appwrite abstracts the complexity and repetitiveness required to build modern apps from scratch and allows you to build secure, full-stack applications faster. Using Appwrite, you can easily integrate your app with user authentication and multiple sign-in methods, a database for storing and querying users and team data, storage and file management, image manipulation, Cloud Functions, messaging, and more services.
Version 2.11.0
Autobase for PostgreSQL® is an open-source alternative to cloud-managed databases (self-hosted DBaaS).
Version 1.8.4
Self-hosted database backup manager with a web UI. Schedule, backup, and restore MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, MongoDB, SQLite, Firebird and Redis to S3, SFTP, Samba or local storage. SSH tunnel support.
Version 8.3
pgAdmin is an administration and management tool for PostgreSQL databases. Self-host it on your own server with Dokploy, which deploys pgAdmin as a Docker Compose service in a few clicks.
Version 18-alpine
PostgreSQL 18 Alpine with pgAdmin 4 web UI, persistent volumes and healthchecks for easy database administration.
Free and open source
Notploy is a free, open source deployment platform. Deploy SupaBase and 571+ other templates on your own infrastructure with a single click.