diff --git a/lightspeed-catalog-4.16/bundle-v1.0.13.yaml b/lightspeed-catalog-4.16/bundle-v1.0.13.yaml new file mode 100644 index 000000000..04b4570c0 --- /dev/null +++ b/lightspeed-catalog-4.16/bundle-v1.0.13.yaml @@ -0,0 +1,69 @@ +--- +image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +name: lightspeed-operator.v1.0.13 +package: lightspeed-operator +properties: + - type: olm.gvk + value: + group: ols.openshift.io + kind: OLSConfig + version: v1alpha1 + - type: olm.package + value: + packageName: lightspeed-operator + version: 1.0.13 + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjE5LjAifSwiY3JlYXRpb25UaW1lc3RhbXAiOm51bGwsIm5hbWUiOiJvbHNjb25maWdzLm9scy5vcGVuc2hpZnQuaW8ifSwic3BlYyI6eyJncm91cCI6Im9scy5vcGVuc2hpZnQuaW8iLCJuYW1lcyI6eyJraW5kIjoiT0xTQ29uZmlnIiwibGlzdEtpbmQiOiJPTFNDb25maWdMaXN0IiwicGx1cmFsIjoib2xzY29uZmlncyIsInNpbmd1bGFyIjoib2xzY29uZmlnIn0sInNjb3BlIjoiQ2x1c3RlciIsInZlcnNpb25zIjpbeyJuYW1lIjoidjFhbHBoYTEiLCJzY2hlbWEiOnsib3BlbkFQSVYzU2NoZW1hIjp7ImRlc2NyaXB0aW9uIjoiUmVkIEhhdCBPcGVuU2hpZnQgTGlnaHRzcGVlZCBpbnN0YW5jZS4gT0xTQ29uZmlnIGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBvbHNjb25maWdzIEFQSSIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbmVkIHNjaGVtYSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC5cblNlcnZlcnMgc2hvdWxkIGNvbnZlcnQgcmVjb2duaXplZCBzY2hlbWFzIHRvIHRoZSBsYXRlc3QgaW50ZXJuYWwgdmFsdWUsIGFuZFxubWF5IHJlamVjdCB1bnJlY29nbml6ZWQgdmFsdWVzLlxuTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXMiLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgUkVTVCByZXNvdXJjZSB0aGlzIG9iamVjdCByZXByZXNlbnRzLlxuU2VydmVycyBtYXkgaW5mZXIgdGhpcyBmcm9tIHRoZSBlbmRwb2ludCB0aGUgY2xpZW50IHN1Ym1pdHMgcmVxdWVzdHMgdG8uXG5DYW5ub3QgYmUgdXBkYXRlZC5cbkluIENhbWVsQ2FzZS5cbk1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhIjp7InR5cGUiOiJvYmplY3QifSwic3BlYyI6eyJkZXNjcmlwdGlvbiI6Ik9MU0NvbmZpZ1NwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBPTFNDb25maWciLCJwcm9wZXJ0aWVzIjp7ImZlYXR1cmVHYXRlcyI6eyJkZXNjcmlwdGlvbiI6IkZlYXR1cmUgR2F0ZXMgaG9sZHMgbGlzdCBvZiBmZWF0dXJlcyB0byBiZSBlbmFibGVkIGV4cGxpY2l0bHksIG90aGVyd2lzZSB0aGV5IGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LlxucG9zc2libGUgdmFsdWVzOiBNQ1BTZXJ2ZXIsIFRvb2xGaWx0ZXJpbmciLCJpdGVtcyI6eyJlbnVtIjpbIk1DUFNlcnZlciIsIlRvb2xGaWx0ZXJpbmciXSwidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwibGxtIjp7ImRlc2NyaXB0aW9uIjoiTExNU3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIHN0YXRlIG9mIHRoZSBsYXJnZSBsYW5ndWFnZSBtb2RlbCAoTExNKS4iLCJwcm9wZXJ0aWVzIjp7InByb3ZpZGVycyI6eyJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlByb3ZpZGVyU3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIHN0YXRlIG9mIExMTSBwcm92aWRlci4iLCJwcm9wZXJ0aWVzIjp7ImFwaVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJBUEkgVmVyc2lvbiBmb3IgQXp1cmUgT3BlbkFJIHByb3ZpZGVyIiwidHlwZSI6InN0cmluZyJ9LCJjb25maWciOnsiZGVzY3JpcHRpb24iOiJBcmJpdHJhcnkgY29uZmlndXJhdGlvbiBmb3IgdGhlIHByb3ZpZGVyIChMbGFtYSBTdGFjayBHZW5lcmljIG1vZGUgb25seSlcblRoaXMgbWFwIGlzIHBhc3NlZCBkaXJlY3RseSB0byBMbGFtYSBTdGFjayBwcm92aWRlciBjb25maWd1cmF0aW9uLlxuQ3JlZGVudGlhbHMgYXJlIGF1dG9tYXRpY2FsbHkgaW5qZWN0ZWQgYXMgZW52aXJvbm1lbnQgdmFyaWFibGUgc3Vic3RpdHV0aW9ucy5cbkV4YW1wbGU6IHtcInVybFwiOiBcImh0dHBzOi8vLi4uXCIsIFwiY3VzdG9tX2ZpZWxkXCI6IFwidmFsdWVcIn0iLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLXByZXNlcnZlLXVua25vd24tZmllbGRzIjp0cnVlfSwiY3JlZGVudGlhbEtleSI6eyJkZXNjcmlwdGlvbiI6IlNlY3JldCBrZXkgbmFtZSBmb3IgcHJvdmlkZXIgY3JlZGVudGlhbHMgKGRlZmF1bHRzIHRvIFwiYXBpdG9rZW5cIiBpZiBub3Qgc2V0KS5cblNwZWNpZmllcyB3aGljaCBrZXkgaW5zaWRlIGNyZWRlbnRpYWxzU2VjcmV0UmVmIHRvIHJlYWQgdGhlIGNyZWRlbnRpYWwgdmFsdWUgZnJvbS5cblRoZSBjcmVkZW50aWFsIHZhbHVlIGlzIGFsd2F5cyBleHBvc2VkIHRvIHRoZSBjb250YWluZXIgYXMgZW52IHZhciB7UFJPVklERVJfTkFNRX1fQVBJX0tFWVxuKGRlcml2ZWQgZnJvbSB0aGUgcHJvdmlkZXIgbmFtZSwgbm90IHRoaXMgZmllbGQpLCBhbmQgcmVmZXJlbmNlZCBpbiB0aGUgTGxhbWEgU3RhY2sgY29uZmlnXG5ZQU1MIGFzICR7ZW52LlBST1ZJREVSX05BTUVfQVBJX0tFWX0uIFRoaXMgZmllbGQgb25seSBjb250cm9scyB3aGljaCBzZWNyZXQgZGF0YSBrZXkgaXMgcmVhZC4iLCJ0eXBlIjoic3RyaW5nIn0sImNyZWRlbnRpYWxzU2VjcmV0UmVmIjp7ImRlc2NyaXB0aW9uIjoiVGhlIG5hbWUgb2YgdGhlIHNlY3JldCBvYmplY3QgdGhhdCBzdG9yZXMgQVBJIHByb3ZpZGVyIGNyZWRlbnRpYWxzIiwicHJvcGVydGllcyI6eyJuYW1lIjp7ImRlZmF1bHQiOiIiLCJkZXNjcmlwdGlvbiI6Ik5hbWUgb2YgdGhlIHJlZmVyZW50LlxuVGhpcyBmaWVsZCBpcyBlZmZlY3RpdmVseSByZXF1aXJlZCwgYnV0IGR1ZSB0byBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpc1xuYWxsb3dlZCB0byBiZSBlbXB0eS4gSW5zdGFuY2VzIG9mIHRoaXMgdHlwZSB3aXRoIGFuIGVtcHR5IHZhbHVlIGhlcmUgYXJlXG5hbG1vc3QgY2VydGFpbmx5IHdyb25nLlxuTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lcy8jbmFtZXMiLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sImRlcGxveW1lbnROYW1lIjp7ImRlc2NyaXB0aW9uIjoiRGVwbG95bWVudCBuYW1lIGZvciBBenVyZSBPcGVuQUkgcHJvdmlkZXIiLCJ0eXBlIjoic3RyaW5nIn0sImZha2VQcm92aWRlck1DUFRvb2xDYWxsIjp7ImRlc2NyaXB0aW9uIjoiRmFrZSBQcm92aWRlciBNQ1AgVG9vbCBDYWxsIiwidHlwZSI6ImJvb2xlYW4ifSwiZ29vZ2xlVmVydGV4QW50aHJvcGljQ29uZmlnIjp7ImRlc2NyaXB0aW9uIjoiR29vZ2xlIFZlcnRleCBBbnRocm9waWMgQ29uZmlnIiwicHJvcGVydGllcyI6eyJsb2NhdGlvbiI6eyJkZXNjcmlwdGlvbiI6IlNlcnZlciByZWdpb24gbG9jYXRpb24iLCJ0eXBlIjoic3RyaW5nIn0sInByb2plY3RJRCI6eyJkZXNjcmlwdGlvbiI6Ikdvb2dsZSBDbG91ZCBwcm9qZWN0IElEIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJnb29nbGVWZXJ0ZXhDb25maWciOnsiZGVzY3JpcHRpb24iOiJHb29nbGUgVmVydGV4IENvbmZpZyIsInByb3BlcnRpZXMiOnsibG9jYXRpb24iOnsiZGVzY3JpcHRpb24iOiJTZXJ2ZXIgcmVnaW9uIGxvY2F0aW9uIiwidHlwZSI6InN0cmluZyJ9LCJwcm9qZWN0SUQiOnsiZGVzY3JpcHRpb24iOiJHb29nbGUgQ2xvdWQgcHJvamVjdCBJRCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwibW9kZWxzIjp7ImRlc2NyaXB0aW9uIjoiTGlzdCBvZiBtb2RlbHMgZnJvbSB0aGUgcHJvdmlkZXIiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6Ik1vZGVsU3BlYyBkZWZpbmVzIHRoZSBMTE0gbW9kZWwgdG8gdXNlIGFuZCBpdHMgcGFyYW1ldGVycy4iLCJwcm9wZXJ0aWVzIjp7ImNvbnRleHRXaW5kb3dTaXplIjp7ImRlc2NyaXB0aW9uIjoiRGVmaW5lcyB0aGUgbW9kZWwncyBjb250ZXh0IHdpbmRvdyBzaXplLCBpbiB0b2tlbnMuIFRoZSBkZWZhdWx0IGlzIDEyOGsgdG9rZW5zLiIsIm1pbmltdW0iOjEwMjQsInR5cGUiOiJpbnRlZ2VyIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJNb2RlbCBuYW1lIiwidHlwZSI6InN0cmluZyJ9LCJwYXJhbWV0ZXJzIjp7ImRlc2NyaXB0aW9uIjoiTW9kZWwgQVBJIHBhcmFtZXRlcnMiLCJwcm9wZXJ0aWVzIjp7Im1heFRva2Vuc0ZvclJlc3BvbnNlIjp7ImRlc2NyaXB0aW9uIjoiTWF4IHRva2VucyBmb3IgcmVzcG9uc2UuIFRoZSBkZWZhdWx0IGlzIDIwNDggdG9rZW5zLiIsInR5cGUiOiJpbnRlZ2VyIn0sInRvb2xCdWRnZXRSYXRpbyI6eyJkZWZhdWx0IjowLjUsImRlc2NyaXB0aW9uIjoiUmF0aW8gb2YgY29udGV4dCB3aW5kb3cgc2l6ZSBhbGxvY2F0ZWQgZm9yIHRvb2wgdG9rZW4gYnVkZ2V0LiBNdXN0IGJlIGJldHdlZW4gMC4xIGFuZCAwLjUuIFRoZSBkZWZhdWx0IGlzIDAuNS4iLCJtYXhpbXVtIjowLjUsIm1pbmltdW0iOjAuMSwidHlwZSI6Im51bWJlciJ9fSwidHlwZSI6Im9iamVjdCJ9LCJ1cmwiOnsiZGVzY3JpcHRpb24iOiJNb2RlbCBBUEkgVVJMIiwicGF0dGVybiI6Il5odHRwcz86Ly8uKiQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwibWF4SXRlbXMiOjUwLCJ0eXBlIjoiYXJyYXkifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6IlByb3ZpZGVyIG5hbWUiLCJ0eXBlIjoic3RyaW5nIn0sInByb2plY3RJRCI6eyJkZXNjcmlwdGlvbiI6IldhdHNvbnggUHJvamVjdCBJRCIsInR5cGUiOiJzdHJpbmcifSwicHJvdmlkZXJUeXBlIjp7ImRlc2NyaXB0aW9uIjoiTGxhbWEgU3RhY2sgR2VuZXJpYyBwcm92aWRlciB0eXBlIGZvciBwcm92aWRlciBjb25maWd1cmF0aW9uIChlLmcuLCBcInJlbW90ZTo6b3BlbmFpXCIsIFwiaW5saW5lOjpzZW50ZW5jZS10cmFuc2Zvcm1lcnNcIilcbldoZW4gc2V0LCB0aGlzIHByb3ZpZGVyIHVzZXMgTGxhbWEgU3RhY2sgR2VuZXJpYyBtb2RlIGluc3RlYWQgb2YgbGVnYWN5IG1vZGUuXG5NdXN0IGZvbGxvdyBwYXR0ZXJuOiAoaW5saW5lfHJlbW90ZSk6Olx1MDAzY3Byb3ZpZGVyLW5hbWVcdTAwM2UiLCJwYXR0ZXJuIjoiXihpbmxpbmV8cmVtb3RlKTo6W2EtejAtOV1bYS16MC05Xy1dKiQiLCJ0eXBlIjoic3RyaW5nIn0sInRsc1NlY3VyaXR5UHJvZmlsZSI6eyJkZXNjcmlwdGlvbiI6IlRMUyBTZWN1cml0eSBQcm9maWxlIHVzZWQgYnkgY29ubmVjdGlvbiB0byBwcm92aWRlciIsInByb3BlcnRpZXMiOnsiY3VzdG9tIjp7ImRlc2NyaXB0aW9uIjoiY3VzdG9tIGlzIGEgdXNlci1kZWZpbmVkIFRMUyBzZWN1cml0eSBwcm9maWxlLiBCZSBleHRyZW1lbHkgY2FyZWZ1bCB1c2luZyBhIGN1c3RvbVxucHJvZmlsZSBhcyBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBjYXRhc3Ryb3BoaWMuIEFuIGV4YW1wbGUgY3VzdG9tIHByb2ZpbGVcbmxvb2tzIGxpa2UgdGhpczpcblxuICBtaW5UTFNWZXJzaW9uOiBWZXJzaW9uVExTMTFcbiAgY2lwaGVyczpcbiAgICAtIEVDREhFLUVDRFNBLUNIQUNIQTIwLVBPTFkxMzA1XG4gICAgLSBFQ0RIRS1SU0EtQ0hBQ0hBMjAtUE9MWTEzMDVcbiAgICAtIEVDREhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NlxuICAgIC0gRUNESEUtRUNEU0EtQUVTMTI4LUdDTS1TSEEyNTYiLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJjaXBoZXJzIjp7ImRlc2NyaXB0aW9uIjoiY2lwaGVycyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGNpcGhlciBhbGdvcml0aG1zIHRoYXQgYXJlIG5lZ290aWF0ZWRcbmR1cmluZyB0aGUgVExTIGhhbmRzaGFrZS4gT3BlcmF0b3JzIG1heSByZW1vdmUgZW50cmllcyB0aGF0IHRoZWlyIG9wZXJhbmRzXG5kbyBub3Qgc3VwcG9ydC4gRm9yIGV4YW1wbGUsIHRvIHVzZSBvbmx5IEVDREhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NiAoeWFtbCk6XG5cbiAgY2lwaGVyczpcbiAgICAtIEVDREhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NlxuXG5UTFMgMS4zIGNpcGhlciBzdWl0ZXMgKGUuZy4gVExTX0FFU18xMjhfR0NNX1NIQTI1NikgYXJlIG5vdCBjb25maWd1cmFibGVcbmFuZCBhcmUgYWx3YXlzIGVuYWJsZWQgd2hlbiBUTFMgMS4zIGlzIG5lZ290aWF0ZWQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pblRMU1ZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJtaW5UTFNWZXJzaW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbWluaW1hbCB2ZXJzaW9uIG9mIHRoZSBUTFMgcHJvdG9jb2xcbnRoYXQgaXMgbmVnb3RpYXRlZCBkdXJpbmcgdGhlIFRMUyBoYW5kc2hha2UuIEZvciBleGFtcGxlLCB0byB1c2UgVExTXG52ZXJzaW9ucyAxLjEsIDEuMiBhbmQgMS4zICh5YW1sKTpcblxuICBtaW5UTFNWZXJzaW9uOiBWZXJzaW9uVExTMTEiLCJlbnVtIjpbIlZlcnNpb25UTFMxMCIsIlZlcnNpb25UTFMxMSIsIlZlcnNpb25UTFMxMiIsIlZlcnNpb25UTFMxMyJdLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sImludGVybWVkaWF0ZSI6eyJkZXNjcmlwdGlvbiI6ImludGVybWVkaWF0ZSBpcyBhIFRMUyBwcm9maWxlIGZvciB1c2Ugd2hlbiB5b3UgZG8gbm90IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoXG5sZWdhY3kgY2xpZW50cyBhbmQgd2FudCB0byByZW1haW4gaGlnaGx5IHNlY3VyZSB3aGlsZSBiZWluZyBjb21wYXRpYmxlIHdpdGhcbm1vc3QgY2xpZW50cyBjdXJyZW50bHkgaW4gdXNlLlxuXG5UaGlzIHByb2ZpbGUgaXMgZXF1aXZhbGVudCB0byBhIEN1c3RvbSBwcm9maWxlIHNwZWNpZmllZCBhczpcbiAgbWluVExTVmVyc2lvbjogVmVyc2lvblRMUzEyXG4gIGNpcGhlcnM6XG4gICAgLSBUTFNfQUVTXzEyOF9HQ01fU0hBMjU2XG4gICAgLSBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0XG4gICAgLSBUTFNfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2XG4gICAgLSBFQ0RIRS1FQ0RTQS1BRVMxMjgtR0NNLVNIQTI1NlxuICAgIC0gRUNESEUtUlNBLUFFUzEyOC1HQ00tU0hBMjU2XG4gICAgLSBFQ0RIRS1FQ0RTQS1BRVMyNTYtR0NNLVNIQTM4NFxuICAgIC0gRUNESEUtUlNBLUFFUzI1Ni1HQ00tU0hBMzg0XG4gICAgLSBFQ0RIRS1FQ0RTQS1DSEFDSEEyMC1QT0xZMTMwNVxuICAgIC0gRUNESEUtUlNBLUNIQUNIQTIwLVBPTFkxMzA1IiwibnVsbGFibGUiOnRydWUsInR5cGUiOiJvYmplY3QifSwibW9kZXJuIjp7ImRlc2NyaXB0aW9uIjoibW9kZXJuIGlzIGEgVExTIHNlY3VyaXR5IHByb2ZpbGUgZm9yIHVzZSB3aXRoIGNsaWVudHMgdGhhdCBzdXBwb3J0IFRMUyAxLjMgYW5kXG5kbyBub3QgbmVlZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBvbGRlciBjbGllbnRzLlxuXG5UaGlzIHByb2ZpbGUgaXMgZXF1aXZhbGVudCB0byBhIEN1c3RvbSBwcm9maWxlIHNwZWNpZmllZCBhczpcbiAgbWluVExTVmVyc2lvbjogVmVyc2lvblRMUzEzXG4gIGNpcGhlcnM6XG4gICAgLSBUTFNfQUVTXzEyOF9HQ01fU0hBMjU2XG4gICAgLSBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0XG4gICAgLSBUTFNfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2IiwibnVsbGFibGUiOnRydWUsInR5cGUiOiJvYmplY3QifSwib2xkIjp7ImRlc2NyaXB0aW9uIjoib2xkIGlzIGEgVExTIHByb2ZpbGUgZm9yIHVzZSB3aGVuIHNlcnZpY2VzIG5lZWQgdG8gYmUgYWNjZXNzZWQgYnkgdmVyeSBvbGRcbmNsaWVudHMgb3IgbGlicmFyaWVzIGFuZCBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGEgbGFzdCByZXNvcnQuXG5cblRoaXMgcHJvZmlsZSBpcyBlcXVpdmFsZW50IHRvIGEgQ3VzdG9tIHByb2ZpbGUgc3BlY2lmaWVkIGFzOlxuICBtaW5UTFNWZXJzaW9uOiBWZXJzaW9uVExTMTBcbiAgY2lwaGVyczpcbiAgICAtIFRMU19BRVNfMTI4X0dDTV9TSEEyNTZcbiAgICAtIFRMU19BRVNfMjU2X0dDTV9TSEEzODRcbiAgICAtIFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTZcbiAgICAtIEVDREhFLUVDRFNBLUFFUzEyOC1HQ00tU0hBMjU2XG4gICAgLSBFQ0RIRS1SU0EtQUVTMTI4LUdDTS1TSEEyNTZcbiAgICAtIEVDREhFLUVDRFNBLUFFUzI1Ni1HQ00tU0hBMzg0XG4gICAgLSBFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODRcbiAgICAtIEVDREhFLUVDRFNBLUNIQUNIQTIwLVBPTFkxMzA1XG4gICAgLSBFQ0RIRS1SU0EtQ0hBQ0hBMjAtUE9MWTEzMDVcbiAgICAtIEVDREhFLUVDRFNBLUFFUzEyOC1TSEEyNTZcbiAgICAtIEVDREhFLVJTQS1BRVMxMjgtU0hBMjU2XG4gICAgLSBFQ0RIRS1FQ0RTQS1BRVMxMjgtU0hBXG4gICAgLSBFQ0RIRS1SU0EtQUVTMTI4LVNIQVxuICAgIC0gRUNESEUtRUNEU0EtQUVTMjU2LVNIQVxuICAgIC0gRUNESEUtUlNBLUFFUzI1Ni1TSEFcbiAgICAtIEFFUzEyOC1HQ00tU0hBMjU2XG4gICAgLSBBRVMyNTYtR0NNLVNIQTM4NFxuICAgIC0gQUVTMTI4LVNIQTI1NlxuICAgIC0gQUVTMTI4LVNIQVxuICAgIC0gQUVTMjU2LVNIQVxuICAgIC0gREVTLUNCQzMtU0hBIiwibnVsbGFibGUiOnRydWUsInR5cGUiOiJvYmplY3QifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6InR5cGUgaXMgb25lIG9mIE9sZCwgSW50ZXJtZWRpYXRlLCBNb2Rlcm4gb3IgQ3VzdG9tLiBDdXN0b20gcHJvdmlkZXMgdGhlXG5hYmlsaXR5IHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBUTFMgc2VjdXJpdHkgcHJvZmlsZSBwYXJhbWV0ZXJzLlxuXG5UaGUgcHJvZmlsZXMgYXJlIGJhc2VkIG9uIHZlcnNpb24gNS43IG9mIHRoZSBNb3ppbGxhIFNlcnZlciBTaWRlIFRMU1xuY29uZmlndXJhdGlvbiBndWlkZWxpbmVzLiBUaGUgY2lwaGVyIGxpc3RzIGNvbnNpc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24nc1xuXCJjaXBoZXJzdWl0ZXNcIiBmb2xsb3dlZCBieSB0aGUgR28tc3BlY2lmaWMgXCJjaXBoZXJzXCIgZnJvbSB0aGUgZ3VpZGVsaW5lcy5cblNlZTogaHR0cHM6Ly9zc2wtY29uZmlnLm1vemlsbGEub3JnL2d1aWRlbGluZXMvNS43Lmpzb25cblxuVGhlIHByb2ZpbGVzIGFyZSBpbnRlbnQgYmFzZWQsIHNvIHRoZXkgbWF5IGNoYW5nZSBvdmVyIHRpbWUgYXMgbmV3IGNpcGhlcnMgYXJlXG5kZXZlbG9wZWQgYW5kIGV4aXN0aW5nIGNpcGhlcnMgYXJlIGZvdW5kIHRvIGJlIGluc2VjdXJlLiBEZXBlbmRpbmcgb25cbnByZWNpc2VseSB3aGljaCBjaXBoZXJzIGFyZSBhdmFpbGFibGUgdG8gYSBwcm9jZXNzLCB0aGUgbGlzdCBtYXkgYmUgcmVkdWNlZC4iLCJlbnVtIjpbIk9sZCIsIkludGVybWVkaWF0ZSIsIk1vZGVybiIsIkN1c3RvbSJdLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOnsiZGVzY3JpcHRpb24iOiJQcm92aWRlciB0eXBlIiwiZW51bSI6WyJhenVyZV9vcGVuYWkiLCJiYW0iLCJvcGVuYWkiLCJ3YXRzb254IiwicmhvYWlfdmxsbSIsInJoZWxhaV92bGxtIiwiZmFrZV9wcm92aWRlciIsImxsYW1hU3RhY2tHZW5lcmljIiwiZ29vZ2xlX3ZlcnRleCIsImdvb2dsZV92ZXJ0ZXhfYW50aHJvcGljIl0sInR5cGUiOiJzdHJpbmcifSwidXJsIjp7ImRlc2NyaXB0aW9uIjoiUHJvdmlkZXIgQVBJIFVSTCIsInBhdHRlcm4iOiJeaHR0cHM/Oi8vLiokIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsiY3JlZGVudGlhbHNTZWNyZXRSZWYiLCJtb2RlbHMiLCJuYW1lIiwidHlwZSJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLXZhbGlkYXRpb25zIjpbeyJtZXNzYWdlIjoiJ2RlcGxveW1lbnROYW1lJyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgJ2F6dXJlX29wZW5haScgcHJvdmlkZXIiLCJydWxlIjoic2VsZi50eXBlICE9IFwiYXp1cmVfb3BlbmFpXCIgfHwgc2VsZi5kZXBsb3ltZW50TmFtZSAhPSBcIlwiIn0seyJtZXNzYWdlIjoiJ3Byb2plY3RJRCcgbXVzdCBiZSBzcGVjaWZpZWQgZm9yICd3YXRzb254JyBwcm92aWRlciIsInJ1bGUiOiJzZWxmLnR5cGUgIT0gXCJ3YXRzb254XCIgfHwgc2VsZi5wcm9qZWN0SUQgIT0gXCJcIiJ9LHsibWVzc2FnZSI6Iidwcm92aWRlclR5cGUnIGFuZCAnY29uZmlnJyBtdXN0IGJlIHVzZWQgdG9nZXRoZXIgaW4gbGxhbWFTdGFja0dlbmVyaWMgbW9kZSIsInJ1bGUiOiIhaGFzKHNlbGYucHJvdmlkZXJUeXBlKSB8fCBoYXMoc2VsZi5jb25maWcpIn0seyJtZXNzYWdlIjoiJ2NvbmZpZycgcmVxdWlyZXMgJ3Byb3ZpZGVyVHlwZScgdG8gYmUgc2V0IiwicnVsZSI6IiFoYXMoc2VsZi5jb25maWcpIHx8IGhhcyhzZWxmLnByb3ZpZGVyVHlwZSkifSx7Im1lc3NhZ2UiOiJMbGFtYSBTdGFjayBHZW5lcmljIG1vZGUgKHByb3ZpZGVyVHlwZSBzZXQpIHJlcXVpcmVzIHR5cGU9J2xsYW1hU3RhY2tHZW5lcmljJyIsInJ1bGUiOiIhaGFzKHNlbGYucHJvdmlkZXJUeXBlKSB8fCBzZWxmLnR5cGUgPT0gXCJsbGFtYVN0YWNrR2VuZXJpY1wiIn0seyJtZXNzYWdlIjoiTGxhbWEgU3RhY2sgR2VuZXJpYyBtb2RlIGNhbm5vdCB1c2UgbGVnYWN5IHByb3ZpZGVyLXNwZWNpZmljIGZpZWxkcyIsInJ1bGUiOiJzZWxmLnR5cGUgIT0gXCJsbGFtYVN0YWNrR2VuZXJpY1wiIHx8ICghaGFzKHNlbGYuZGVwbG95bWVudE5hbWUpIFx1MDAyNlx1MDAyNiAhaGFzKHNlbGYucHJvamVjdElEKSBcdTAwMjZcdTAwMjYgIWhhcyhzZWxmLnVybCkgXHUwMDI2XHUwMDI2ICFoYXMoc2VsZi5hcGlWZXJzaW9uKSkifSx7Im1lc3NhZ2UiOiJjcmVkZW50aWFsS2V5IG11c3Qgbm90IGJlIGVtcHR5IG9yIHdoaXRlc3BhY2UiLCJydWxlIjoiIWhhcyhzZWxmLmNyZWRlbnRpYWxLZXkpIHx8ICFzZWxmLmNyZWRlbnRpYWxLZXkubWF0Y2hlcygnXlsgXFx0XFxuXFxyXFx2XFxmXSokJykifSx7Im1lc3NhZ2UiOiJnb29nbGVWZXJ0ZXhDb25maWcgaXMgcmVxdWlyZWQgZm9yIGdvb2dsZV92ZXJ0ZXggcHJvdmlkZXIiLCJydWxlIjoic2VsZi50eXBlICE9IFwiZ29vZ2xlX3ZlcnRleFwiIHx8IGhhcyhzZWxmLmdvb2dsZVZlcnRleENvbmZpZykifSx7Im1lc3NhZ2UiOiJnb29nbGVWZXJ0ZXhBbnRocm9waWNDb25maWcgaXMgcmVxdWlyZWQgZm9yIGdvb2dsZV92ZXJ0ZXhfYW50aHJvcGljIHByb3ZpZGVyIiwicnVsZSI6InNlbGYudHlwZSAhPSBcImdvb2dsZV92ZXJ0ZXhfYW50aHJvcGljXCIgfHwgaGFzKHNlbGYuZ29vZ2xlVmVydGV4QW50aHJvcGljQ29uZmlnKSJ9LHsibWVzc2FnZSI6Imdvb2dsZVZlcnRleENvbmZpZyBtYXkgb25seSBiZSBzZXQgd2hlbiB0eXBlIGlzIGdvb2dsZV92ZXJ0ZXgiLCJydWxlIjoic2VsZi50eXBlID09IFwiZ29vZ2xlX3ZlcnRleFwiIHx8ICFoYXMoc2VsZi5nb29nbGVWZXJ0ZXhDb25maWcpIn0seyJtZXNzYWdlIjoiZ29vZ2xlVmVydGV4QW50aHJvcGljQ29uZmlnIG1heSBvbmx5IGJlIHNldCB3aGVuIHR5cGUgaXMgZ29vZ2xlX3ZlcnRleF9hbnRocm9waWMiLCJydWxlIjoic2VsZi50eXBlID09IFwiZ29vZ2xlX3ZlcnRleF9hbnRocm9waWNcIiB8fCAhaGFzKHNlbGYuZ29vZ2xlVmVydGV4QW50aHJvcGljQ29uZmlnKSJ9XX0sIm1heEl0ZW1zIjoxMCwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJwcm92aWRlcnMiXSwidHlwZSI6Im9iamVjdCJ9LCJtY3BTZXJ2ZXJzIjp7ImRlc2NyaXB0aW9uIjoiTUNQIFNlcnZlciBzZXR0aW5ncyIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiTUNQU2VydmVyQ29uZmlnIGRlZmluZXMgdGhlIHN0cmVhbWxpbmVkIGNvbmZpZ3VyYXRpb24gZm9yIGFuIE1DUCBzZXJ2ZXJcblRoaXMgY29uZmlndXJhdGlvbiBvbmx5IHN1cHBvcnRzIEhUVFAvSFRUUFMgdHJhbnNwb3J0IiwicHJvcGVydGllcyI6eyJoZWFkZXJzIjp7ImRlc2NyaXB0aW9uIjoiSGVhZGVycyB0byBzZW5kIHRvIHRoZSBNQ1Agc2VydmVyXG5FYWNoIGhlYWRlciBjYW4gcmVmZXJlbmNlIGEgc2VjcmV0IG9yIHVzZSBhIHNwZWNpYWwgc291cmNlIChrdWJlcm5ldGVzIHRva2VuLCBjbGllbnQgdG9rZW4pIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJNQ1BIZWFkZXIgZGVmaW5lcyBhIGhlYWRlciB0byBzZW5kIHRvIHRoZSBNQ1Agc2VydmVyIiwicHJvcGVydGllcyI6eyJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBvZiB0aGUgaGVhZGVyIChlLmcuLCBcIkF1dGhvcml6YXRpb25cIiwgXCJYLUFQSS1LZXlcIikiLCJtaW5MZW5ndGgiOjEsInBhdHRlcm4iOiJeW0EtWmEtejAtOS1dKyQiLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlRnJvbSI6eyJkZXNjcmlwdGlvbiI6IlNvdXJjZSBvZiB0aGUgaGVhZGVyIHZhbHVlIiwicHJvcGVydGllcyI6eyJzZWNyZXRSZWYiOnsiZGVzY3JpcHRpb24iOiJSZWZlcmVuY2UgdG8gYSBzZWNyZXQgY29udGFpbmluZyB0aGUgaGVhZGVyIHZhbHVlLlxuUmVxdWlyZWQgd2hlbiBUeXBlIGlzIFwic2VjcmV0XCIuXG5UaGUgc2VjcmV0IG11c3QgZXhpc3QgaW4gdGhlIG9wZXJhdG9yJ3MgbmFtZXNwYWNlLiIsInByb3BlcnRpZXMiOnsibmFtZSI6eyJkZWZhdWx0IjoiIiwiZGVzY3JpcHRpb24iOiJOYW1lIG9mIHRoZSByZWZlcmVudC5cblRoaXMgZmllbGQgaXMgZWZmZWN0aXZlbHkgcmVxdWlyZWQsIGJ1dCBkdWUgdG8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXNcbmFsbG93ZWQgdG8gYmUgZW1wdHkuIEluc3RhbmNlcyBvZiB0aGlzIHR5cGUgd2l0aCBhbiBlbXB0eSB2YWx1ZSBoZXJlIGFyZVxuYWxtb3N0IGNlcnRhaW5seSB3cm9uZy5cbk1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbmFtZXMvI25hbWVzIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJ0eXBlIjp7ImRlc2NyaXB0aW9uIjoiVHlwZSBzcGVjaWZpZXMgdGhlIHNvdXJjZSB0eXBlIGZvciB0aGUgaGVhZGVyIHZhbHVlIiwiZW51bSI6WyJzZWNyZXQiLCJrdWJlcm5ldGVzIiwiY2xpZW50Il0sInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInR5cGUiXSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy12YWxpZGF0aW9ucyI6W3sibWVzc2FnZSI6InNlY3JldFJlZiB3aXRoIG5vbi1lbXB0eSBuYW1lIGlzIHJlcXVpcmVkIHdoZW4gdHlwZSBpcyAnc2VjcmV0JyIsInJ1bGUiOiJzZWxmLnR5cGUgPT0gJ3NlY3JldCcgPyBoYXMoc2VsZi5zZWNyZXRSZWYpIFx1MDAyNlx1MDAyNiBzaXplKHNlbGYuc2VjcmV0UmVmLm5hbWUpIFx1MDAzZSAwIDogdHJ1ZSJ9LHsibWVzc2FnZSI6InNlY3JldFJlZiBtdXN0IG5vdCBiZSBzZXQgd2hlbiB0eXBlIGlzICdrdWJlcm5ldGVzJyBvciAnY2xpZW50JyIsInJ1bGUiOiJzZWxmLnR5cGUgIT0gJ3NlY3JldCcgPyAhaGFzKHNlbGYuc2VjcmV0UmVmKSA6IHRydWUifV19fSwicmVxdWlyZWQiOlsibmFtZSIsInZhbHVlRnJvbSJdLCJ0eXBlIjoib2JqZWN0In0sIm1heEl0ZW1zIjoyMCwidHlwZSI6ImFycmF5In0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG9mIHRoZSBNQ1Agc2VydmVyIiwidHlwZSI6InN0cmluZyJ9LCJ0aW1lb3V0Ijp7ImRlZmF1bHQiOjUsImRlc2NyaXB0aW9uIjoiVGltZW91dCBmb3IgdGhlIE1DUCBzZXJ2ZXIgaW4gc2Vjb25kcywgZGVmYXVsdCBpcyA1IiwidHlwZSI6ImludGVnZXIifSwidXJsIjp7ImRlc2NyaXB0aW9uIjoiVVJMIG9mIHRoZSBNQ1Agc2VydmVyIChIVFRQL0hUVFBTKSIsInBhdHRlcm4iOiJeaHR0cHM/Oi8vLiokIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsibmFtZSIsInVybCJdLCJ0eXBlIjoib2JqZWN0In0sIm1heEl0ZW1zIjoyMCwidHlwZSI6ImFycmF5In0sIm9scyI6eyJkZXNjcmlwdGlvbiI6Ik9MU1NwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBPTFMgZGVwbG95bWVudC4iLCJwcm9wZXJ0aWVzIjp7ImFkZGl0aW9uYWxDQUNvbmZpZ01hcFJlZiI6eyJkZXNjcmlwdGlvbiI6IkFkZGl0aW9uYWwgQ0EgY2VydGlmaWNhdGVzIGZvciBUTFMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIE9MUyBzZXJ2aWNlIGFuZCBMTE0gUHJvdmlkZXIiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVmYXVsdCI6IiIsImRlc2NyaXB0aW9uIjoiTmFtZSBvZiB0aGUgcmVmZXJlbnQuXG5UaGlzIGZpZWxkIGlzIGVmZmVjdGl2ZWx5IHJlcXVpcmVkLCBidXQgZHVlIHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzXG5hbGxvd2VkIHRvIGJlIGVtcHR5LiBJbnN0YW5jZXMgb2YgdGhpcyB0eXBlIHdpdGggYW4gZW1wdHkgdmFsdWUgaGVyZSBhcmVcbmFsbW9zdCBjZXJ0YWlubHkgd3JvbmcuXG5Nb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL292ZXJ2aWV3L3dvcmtpbmctd2l0aC1vYmplY3RzL25hbWVzLyNuYW1lcyIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwiYnlva1JBR09ubHkiOnsiZGVzY3JpcHRpb24iOiJPbmx5IHVzZSBCWU9LIFJBRyBzb3VyY2VzLCBpZ25vcmUgdGhlIE9wZW5TaGlmdCBkb2N1bWVudGF0aW9uIFJBRyIsInR5cGUiOiJib29sZWFuIn0sImNvbnZlcnNhdGlvbkNhY2hlIjp7ImRlc2NyaXB0aW9uIjoiQ29udmVyc2F0aW9uIGNhY2hlIHNldHRpbmdzIiwicHJvcGVydGllcyI6eyJwb3N0Z3JlcyI6eyJkZXNjcmlwdGlvbiI6IlBvc3RncmVzU3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIHN0YXRlIG9mIFBvc3RncmVzLiIsInByb3BlcnRpZXMiOnsibWF4Q29ubmVjdGlvbnMiOnsiZGVmYXVsdCI6MjAwMCwiZGVzY3JpcHRpb24iOiJQb3N0Z3JlcyBtYXhjb25uZWN0aW9ucy4gRGVmYXVsdDogXCIyMDAwXCIiLCJtYXhpbXVtIjoyNjIxNDMsIm1pbmltdW0iOjEsInR5cGUiOiJpbnRlZ2VyIn0sInNoYXJlZEJ1ZmZlcnMiOnsiZGVmYXVsdCI6IjI1Nk1CIiwiZGVzY3JpcHRpb24iOiJQb3N0Z3JlcyBzaGFyZWRidWZmZXJzIiwidHlwZSI6InN0cmluZyIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfX0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6eyJkZWZhdWx0IjoicG9zdGdyZXMiLCJkZXNjcmlwdGlvbiI6IkNvbnZlcnNhdGlvbiBjYWNoZSB0eXBlLiBEZWZhdWx0OiBcInBvc3RncmVzXCIiLCJlbnVtIjpbInBvc3RncmVzIl0sInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwiZGVmYXVsdE1vZGVsIjp7ImRlc2NyaXB0aW9uIjoiRGVmYXVsdCBtb2RlbCBmb3IgdXNhZ2UiLCJ0eXBlIjoic3RyaW5nIn0sImRlZmF1bHRQcm92aWRlciI6eyJkZXNjcmlwdGlvbiI6IkRlZmF1bHQgcHJvdmlkZXIgZm9yIHVzYWdlIiwidHlwZSI6InN0cmluZyJ9LCJkZXBsb3ltZW50Ijp7ImRlc2NyaXB0aW9uIjoiT0xTIGRlcGxveW1lbnQgc2V0dGluZ3MiLCJwcm9wZXJ0aWVzIjp7ImFwaSI6eyJkZXNjcmlwdGlvbiI6IkFQSSBjb250YWluZXIgc2V0dGluZ3MuIiwicHJvcGVydGllcyI6eyJhZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IkFmZmluaXR5IHJ1bGVzIChjYW4gYmUgYWRkZWQgd2l0aG91dCBBUEkgdmVyc2lvbiBidW1wKVxuVXNlcyBzdGFuZGFyZCBjb3JldjEuQWZmaW5pdHkiLCJwcm9wZXJ0aWVzIjp7Im5vZGVBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IkRlc2NyaWJlcyBub2RlIGFmZmluaXR5IHNjaGVkdWxpbmcgcnVsZXMgZm9yIHRoZSBwb2QuIiwicHJvcGVydGllcyI6eyJwcmVmZXJyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IlRoZSBzY2hlZHVsZXIgd2lsbCBwcmVmZXIgdG8gc2NoZWR1bGUgcG9kcyB0byBub2RlcyB0aGF0IHNhdGlzZnlcbnRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2VcbmEgbm9kZSB0aGF0IHZpb2xhdGVzIG9uZSBvciBtb3JlIG9mIHRoZSBleHByZXNzaW9ucy4gVGhlIG5vZGUgdGhhdCBpc1xubW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLlxuZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlXG5yZXF1ZXN0LCByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmcgYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLFxuY29tcHV0ZSBhIHN1bSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgdGhpcyBmaWVsZCBhbmQgYWRkaW5nXG5cIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBtYXRjaEV4cHJlc3Npb25zOyB0aGVcbm5vZGUocykgd2l0aCB0aGUgaGlnaGVzdCBzdW0gYXJlIHRoZSBtb3N0IHByZWZlcnJlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGVtcHR5IHByZWZlcnJlZCBzY2hlZHVsaW5nIHRlcm0gbWF0Y2hlcyBhbGwgb2JqZWN0cyB3aXRoIGltcGxpY2l0IHdlaWdodCAwXG4oaS5lLiBpdCdzIGEgbm8tb3ApLiBBIG51bGwgcHJlZmVycmVkIHNjaGVkdWxpbmcgdGVybSBtYXRjaGVzIG5vIG9iamVjdHMgKGkuZS4gaXMgYWxzbyBhIG5vLW9wKS4iLCJwcm9wZXJ0aWVzIjp7InByZWZlcmVuY2UiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgdGVybSwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHdlaWdodC4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGxhYmVscy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yXG50aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXNcbmFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuXG5UaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaEZpZWxkcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50cyBieSBub2RlJ3MgZmllbGRzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3JcbnRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlc1xuYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci5cblRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIndlaWdodCI6eyJkZXNjcmlwdGlvbiI6IldlaWdodCBhc3NvY2lhdGVkIHdpdGggbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZVNlbGVjdG9yVGVybSwgaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInByZWZlcmVuY2UiLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sInJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGFyZSBub3QgbWV0IGF0XG5zY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuXG5JZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldFxuYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYW4gdXBkYXRlKSwgdGhlIHN5c3RlbVxubWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLiIsInByb3BlcnRpZXMiOnsibm9kZVNlbGVjdG9yVGVybXMiOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgdGVybXMuIFRoZSB0ZXJtcyBhcmUgT1JlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbnVsbCBvciBlbXB0eSBub2RlIHNlbGVjdG9yIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzLiBUaGUgcmVxdWlyZW1lbnRzIG9mXG50aGVtIGFyZSBBTkRlZC5cblRoZSBUb3BvbG9neVNlbGVjdG9yVGVybSB0eXBlIGltcGxlbWVudHMgYSBzdWJzZXQgb2YgdGhlIE5vZGVTZWxlY3RvclRlcm0uIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvclxudGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzXG5hcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLlxuVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yXG50aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXNcbmFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuXG5UaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJub2RlU2VsZWN0b3JUZXJtcyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn19LCJ0eXBlIjoib2JqZWN0In0sInBvZEFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiRGVzY3JpYmVzIHBvZCBhZmZpbml0eSBzY2hlZHVsaW5nIHJ1bGVzIChlLmcuIGNvLWxvY2F0ZSB0aGlzIHBvZCBpbiB0aGUgc2FtZSBub2RlLCB6b25lLCBldGMuIGFzIHNvbWUgb3RoZXIgcG9kKHMpKS4iLCJwcm9wZXJ0aWVzIjp7InByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHNjaGVkdWxlciB3aWxsIHByZWZlciB0byBzY2hlZHVsZSBwb2RzIHRvIG5vZGVzIHRoYXQgc2F0aXNmeVxudGhlIGFmZmluaXR5IGV4cHJlc3Npb25zIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkLCBidXQgaXQgbWF5IGNob29zZVxuYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzXG5tb3N0IHByZWZlcnJlZCBpcyB0aGUgb25lIHdpdGggdGhlIGdyZWF0ZXN0IHN1bSBvZiB3ZWlnaHRzLCBpLmUuXG5mb3IgZWFjaCBub2RlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSBzY2hlZHVsaW5nIHJlcXVpcmVtZW50cyAocmVzb3VyY2VcbnJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksXG5jb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmdcblwid2VpZ2h0XCIgdG8gdGhlIHN1bSBpZiB0aGUgbm9kZSBoYXMgcG9kcyB3aGljaCBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybTsgdGhlXG5ub2RlKHMpIHdpdGggdGhlIGhpZ2hlc3Qgc3VtIGFyZSB0aGUgbW9zdCBwcmVmZXJyZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgd2VpZ2h0cyBvZiBhbGwgb2YgdGhlIG1hdGNoZWQgV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm0gZmllbGRzIGFyZSBhZGRlZCBwZXItbm9kZSB0byBmaW5kIHRoZSBtb3N0IHByZWZlcnJlZCBub2RlKHMpIiwicHJvcGVydGllcyI6eyJwb2RBZmZpbml0eVRlcm0iOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBwb2QgYWZmaW5pdHkgdGVybSwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHdlaWdodC4iLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy5cbklmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0XG5yZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpY1xubWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHNcbm1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZVxub3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGxcbmJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZVxuaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYGxhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWBcbnRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uXG5mb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmdcbnBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS5cblRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBtYXRjaExhYmVsS2V5cyBhbmQgbGFiZWxTZWxlY3Rvci5cbkFsc28sIG1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBsYWJlbFNlbGVjdG9yIGlzbid0IHNldC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWlzbWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNaXNtYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsXG5iZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBsYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvblxuZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nXG5wb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG5UaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggbWlzbWF0Y2hMYWJlbEtleXMgYW5kIGxhYmVsU2VsZWN0b3IuXG5BbHNvLCBtaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gbGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uXG5UaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkXG5hbmQgdGhlIG9uZXMgbGlzdGVkIGluIHRoZSBuYW1lc3BhY2VzIGZpZWxkLlxubnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLlxuQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by5cblRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGlzIGZpZWxkXG5hbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuXG5udWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZ1xudGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGVcbndob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZVxuc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLlxuRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ3ZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJ3ZWlnaHQgYXNzb2NpYXRlZCB3aXRoIG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybSxcbmluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwb2RBZmZpbml0eVRlcm0iLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sInJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGFyZSBub3QgbWV0IGF0XG5zY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuXG5JZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldFxuYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYSBwb2QgbGFiZWwgdXBkYXRlKSwgdGhlXG5zeXN0ZW0gbWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLlxuV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZWxlbWVudHMsIHRoZSBsaXN0cyBvZiBub2RlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2hcbnBvZEFmZmluaXR5VGVybSBhcmUgaW50ZXJzZWN0ZWQsIGkuZS4gYWxsIHRlcm1zIG11c3QgYmUgc2F0aXNmaWVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiRGVmaW5lcyBhIHNldCBvZiBwb2RzIChuYW1lbHkgdGhvc2UgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3JcbnJlbGF0aXZlIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UocykpIHRoYXQgdGhpcyBwb2Qgc2hvdWxkIGJlXG5jby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGgsXG53aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2ZcbnRoZSBsYWJlbCB3aXRoIGtleSBcdTAwM2N0b3BvbG9neUtleVx1MDAzZSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2hcbmEgcG9kIG9mIHRoZSBzZXQgb2YgcG9kcyBpcyBydW5uaW5nIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuXG5JZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsXG5iZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBsYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvblxuZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nXG5wb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG5UaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggbWF0Y2hMYWJlbEtleXMgYW5kIGxhYmVsU2VsZWN0b3IuXG5BbHNvLCBtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gbGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbFxuYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlXG5pbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgbGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYFxudG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb25cbmZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZ1xucG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LlxuVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIG1pc21hdGNoTGFiZWxLZXlzIGFuZCBsYWJlbFNlbGVjdG9yLlxuQWxzbywgbWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIGxhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLlxuVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC5cbm51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi5cbkFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXRcbnJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljXG5tZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVsc1xubWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlXG5vcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uXG5UaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLlxubnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmdcbnRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlXG53aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGVcbnNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy5cbkVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwb2RBbnRpQWZmaW5pdHkiOnsiZGVzY3JpcHRpb24iOiJEZXNjcmliZXMgcG9kIGFudGktYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyAoZS5nLiBhdm9pZCBwdXR0aW5nIHRoaXMgcG9kIGluIHRoZSBzYW1lIG5vZGUsIHpvbmUsIGV0Yy4gYXMgc29tZSBvdGhlciBwb2QocykpLiIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5XG50aGUgYW50aS1hZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2VcbmEgbm9kZSB0aGF0IHZpb2xhdGVzIG9uZSBvciBtb3JlIG9mIHRoZSBleHByZXNzaW9ucy4gVGhlIG5vZGUgdGhhdCBpc1xubW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLlxuZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlXG5yZXF1ZXN0LCByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmcgYW50aS1hZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksXG5jb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBzdWJ0cmFjdGluZ1xuXCJ3ZWlnaHRcIiBmcm9tIHRoZSBzdW0gaWYgdGhlIG5vZGUgaGFzIHBvZHMgd2hpY2ggbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm07IHRoZVxubm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHdlaWdodHMgb2YgYWxsIG9mIHRoZSBtYXRjaGVkIFdlaWdodGVkUG9kQWZmaW5pdHlUZXJtIGZpZWxkcyBhcmUgYWRkZWQgcGVyLW5vZGUgdG8gZmluZCB0aGUgbW9zdCBwcmVmZXJyZWQgbm9kZShzKSIsInByb3BlcnRpZXMiOnsicG9kQWZmaW5pdHlUZXJtIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgcG9kIGFmZmluaXR5IHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuXG5JZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsXG5iZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBsYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvblxuZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nXG5wb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG5UaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggbWF0Y2hMYWJlbEtleXMgYW5kIGxhYmVsU2VsZWN0b3IuXG5BbHNvLCBtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gbGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbFxuYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlXG5pbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgbGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYFxudG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb25cbmZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZ1xucG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LlxuVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIG1pc21hdGNoTGFiZWxLZXlzIGFuZCBsYWJlbFNlbGVjdG9yLlxuQWxzbywgbWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIGxhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLlxuVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC5cbm51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi5cbkFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXRcbnJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljXG5tZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVsc1xubWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlXG5vcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uXG5UaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLlxubnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmdcbnRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlXG53aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGVcbnNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy5cbkVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwid2VpZ2h0Ijp7ImRlc2NyaXB0aW9uIjoid2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm0sXG5pbiB0aGUgcmFuZ2UgMS0xMDAuIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsicG9kQWZmaW5pdHlUZXJtIiwid2VpZ2h0Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiSWYgdGhlIGFudGktYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGFyZSBub3QgbWV0IGF0XG5zY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuXG5JZiB0aGUgYW50aS1hZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgY2Vhc2UgdG8gYmUgbWV0XG5hdCBzb21lIHBvaW50IGR1cmluZyBwb2QgZXhlY3V0aW9uIChlLmcuIGR1ZSB0byBhIHBvZCBsYWJlbCB1cGRhdGUpLCB0aGVcbnN5c3RlbSBtYXkgb3IgbWF5IG5vdCB0cnkgdG8gZXZlbnR1YWxseSBldmljdCB0aGUgcG9kIGZyb20gaXRzIG5vZGUuXG5XaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGVtZW50cywgdGhlIGxpc3RzIG9mIG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaFxucG9kQWZmaW5pdHlUZXJtIGFyZSBpbnRlcnNlY3RlZCwgaS5lLiBhbGwgdGVybXMgbXVzdCBiZSBzYXRpc2ZpZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJEZWZpbmVzIGEgc2V0IG9mIHBvZHMgKG5hbWVseSB0aG9zZSBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvclxucmVsYXRpdmUgdG8gdGhlIGdpdmVuIG5hbWVzcGFjZShzKSkgdGhhdCB0aGlzIHBvZCBzaG91bGQgYmVcbmNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCxcbndoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZlxudGhlIGxhYmVsIHdpdGgga2V5IFx1MDAzY3RvcG9sb2d5S2V5XHUwMDNlIG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaFxuYSBwb2Qgb2YgdGhlIHNldCBvZiBwb2RzIGlzIHJ1bm5pbmciLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy5cbklmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0XG5yZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpY1xubWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHNcbm1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZVxub3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGxcbmJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZVxuaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYGxhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWBcbnRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uXG5mb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmdcbnBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS5cblRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBtYXRjaExhYmVsS2V5cyBhbmQgbGFiZWxTZWxlY3Rvci5cbkFsc28sIG1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBsYWJlbFNlbGVjdG9yIGlzbid0IHNldC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWlzbWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNaXNtYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsXG5iZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBsYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvblxuZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nXG5wb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG5UaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggbWlzbWF0Y2hMYWJlbEtleXMgYW5kIGxhYmVsU2VsZWN0b3IuXG5BbHNvLCBtaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gbGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uXG5UaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkXG5hbmQgdGhlIG9uZXMgbGlzdGVkIGluIHRoZSBuYW1lc3BhY2VzIGZpZWxkLlxubnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLlxuQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by5cblRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGlzIGZpZWxkXG5hbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuXG5udWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZ1xudGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGVcbndob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZVxuc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLlxuRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sIm5vZGVTZWxlY3RvciI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoiTm9kZSBzZWxlY3RvciBjb25zdHJhaW50cyIsInR5cGUiOiJvYmplY3QifSwicmVwbGljYXMiOnsiZGVmYXVsdCI6MSwiZGVzY3JpcHRpb24iOiJEZWZpbmVzIHRoZSBudW1iZXIgb2YgZGVzaXJlZCBPTFMgcG9kcy4gRGVmYXVsdDogXCIxXCJcbk5vdGU6IFJlcGxpY2FzIGNhbiBvbmx5IGJlIGNoYW5nZWQgZm9yIEFQSUNvbnRhaW5lci4gRm9yIFBvc3RncmVTUUwgYW5kIENvbnNvbGUgY29udGFpbmVycyxcbnRoZSBudW1iZXIgb2YgcmVwbGljYXMgd2lsbCBhbHdheXMgYmUgc2V0IHRvIDEuIiwiZm9ybWF0IjoiaW50MzIiLCJtaW5pbXVtIjowLCJ0eXBlIjoiaW50ZWdlciJ9LCJyZXNvdXJjZXMiOnsiZGVzY3JpcHRpb24iOiJSZXNvdXJjZSByZXF1aXJlbWVudHMgKENQVSwgbWVtb3J5KVxuVXNlcyBzdGFuZGFyZCBjb3JldjEuUmVzb3VyY2VSZXF1aXJlbWVudHMiLCJwcm9wZXJ0aWVzIjp7ImNsYWltcyI6eyJkZXNjcmlwdGlvbiI6IkNsYWltcyBsaXN0cyB0aGUgbmFtZXMgb2YgcmVzb3VyY2VzLCBkZWZpbmVkIGluIHNwZWMucmVzb3VyY2VDbGFpbXMsXG50aGF0IGFyZSB1c2VkIGJ5IHRoaXMgY29udGFpbmVyLlxuXG5UaGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlXG5EeW5hbWljUmVzb3VyY2VBbGxvY2F0aW9uIGZlYXR1cmUgZ2F0ZS5cblxuVGhpcyBmaWVsZCBpcyBpbW11dGFibGUuIEl0IGNhbiBvbmx5IGJlIHNldCBmb3IgY29udGFpbmVycy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlQ2xhaW0gcmVmZXJlbmNlcyBvbmUgZW50cnkgaW4gUG9kU3BlYy5SZXNvdXJjZUNsYWltcy4iLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIGVudHJ5IGluIHBvZC5zcGVjLnJlc291cmNlQ2xhaW1zIG9mXG50aGUgUG9kIHdoZXJlIHRoaXMgZmllbGQgaXMgdXNlZC4gSXQgbWFrZXMgdGhhdCByZXNvdXJjZSBhdmFpbGFibGVcbmluc2lkZSBhIGNvbnRhaW5lci4iLCJ0eXBlIjoic3RyaW5nIn0sInJlcXVlc3QiOnsiZGVzY3JpcHRpb24iOiJSZXF1ZXN0IGlzIHRoZSBuYW1lIGNob3NlbiBmb3IgYSByZXF1ZXN0IGluIHRoZSByZWZlcmVuY2VkIGNsYWltLlxuSWYgZW1wdHksIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2xhaW0gaXMgbWFkZSBhdmFpbGFibGUsIG90aGVyd2lzZVxub25seSB0aGUgcmVzdWx0IG9mIHRoaXMgcmVxdWVzdC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtbWFwLWtleXMiOlsibmFtZSJdLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoibWFwIn0sImxpbWl0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJMaW1pdHMgZGVzY3JpYmVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyBhbGxvd2VkLlxuTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In0sInJlcXVlc3RzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IlJlcXVlc3RzIGRlc2NyaWJlcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuXG5JZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsXG5vdGhlcndpc2UgdG8gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZS4gUmVxdWVzdHMgY2Fubm90IGV4Y2VlZCBMaW1pdHMuXG5Nb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwidG9sZXJhdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJUb2xlcmF0aW9ucyBmb3IgcG9kIHNjaGVkdWxpbmdcblVzZXMgc3RhbmRhcmQgY29yZXYxLlRvbGVyYXRpb24iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzXG50aGUgdHJpcGxlIFx1MDAzY2tleSx2YWx1ZSxlZmZlY3RcdTAwM2UgdXNpbmcgdGhlIG1hdGNoaW5nIG9wZXJhdG9yIFx1MDAzY29wZXJhdG9yXHUwMDNlLiIsInByb3BlcnRpZXMiOnsiZWZmZWN0Ijp7ImRlc2NyaXB0aW9uIjoiRWZmZWN0IGluZGljYXRlcyB0aGUgdGFpbnQgZWZmZWN0IHRvIG1hdGNoLiBFbXB0eSBtZWFucyBtYXRjaCBhbGwgdGFpbnQgZWZmZWN0cy5cbldoZW4gc3BlY2lmaWVkLCBhbGxvd2VkIHZhbHVlcyBhcmUgTm9TY2hlZHVsZSwgUHJlZmVyTm9TY2hlZHVsZSBhbmQgTm9FeGVjdXRlLiIsInR5cGUiOiJzdHJpbmcifSwia2V5Ijp7ImRlc2NyaXB0aW9uIjoiS2V5IGlzIHRoZSB0YWludCBrZXkgdGhhdCB0aGUgdG9sZXJhdGlvbiBhcHBsaWVzIHRvLiBFbXB0eSBtZWFucyBtYXRjaCBhbGwgdGFpbnQga2V5cy5cbklmIHRoZSBrZXkgaXMgZW1wdHksIG9wZXJhdG9yIG11c3QgYmUgRXhpc3RzOyB0aGlzIGNvbWJpbmF0aW9uIG1lYW5zIHRvIG1hdGNoIGFsbCB2YWx1ZXMgYW5kIGFsbCBrZXlzLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJPcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIHRoZSB2YWx1ZS5cblZhbGlkIG9wZXJhdG9ycyBhcmUgRXhpc3RzLCBFcXVhbCwgTHQsIGFuZCBHdC4gRGVmYXVsdHMgdG8gRXF1YWwuXG5FeGlzdHMgaXMgZXF1aXZhbGVudCB0byB3aWxkY2FyZCBmb3IgdmFsdWUsIHNvIHRoYXQgYSBwb2QgY2FuXG50b2xlcmF0ZSBhbGwgdGFpbnRzIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeS5cbkx0IGFuZCBHdCBwZXJmb3JtIG51bWVyaWMgY29tcGFyaXNvbnMgKHJlcXVpcmVzIGZlYXR1cmUgZ2F0ZSBUYWludFRvbGVyYXRpb25Db21wYXJpc29uT3BlcmF0b3JzKS4iLCJ0eXBlIjoic3RyaW5nIn0sInRvbGVyYXRpb25TZWNvbmRzIjp7ImRlc2NyaXB0aW9uIjoiVG9sZXJhdGlvblNlY29uZHMgcmVwcmVzZW50cyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhlIHRvbGVyYXRpb24gKHdoaWNoIG11c3QgYmVcbm9mIGVmZmVjdCBOb0V4ZWN1dGUsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIGlnbm9yZWQpIHRvbGVyYXRlcyB0aGUgdGFpbnQuIEJ5IGRlZmF1bHQsXG5pdCBpcyBub3Qgc2V0LCB3aGljaCBtZWFucyB0b2xlcmF0ZSB0aGUgdGFpbnQgZm9yZXZlciAoZG8gbm90IGV2aWN0KS4gWmVybyBhbmRcbm5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgMCAoZXZpY3QgaW1tZWRpYXRlbHkpIGJ5IHRoZSBzeXN0ZW0uIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJ2YWx1ZSI6eyJkZXNjcmlwdGlvbiI6IlZhbHVlIGlzIHRoZSB0YWludCB2YWx1ZSB0aGUgdG9sZXJhdGlvbiBtYXRjaGVzIHRvLlxuSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cywgdGhlIHZhbHVlIHNob3VsZCBiZSBlbXB0eSwgb3RoZXJ3aXNlIGp1c3QgYSByZWd1bGFyIHN0cmluZy4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3kgc3ByZWFkIGNvbnN0cmFpbnRzIChjYW4gYmUgYWRkZWQgd2l0aG91dCBBUEkgdmVyc2lvbiBidW1wKVxuVXNlcyBzdGFuZGFyZCBjb3JldjEuVG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50IiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neVNwcmVhZENvbnN0cmFpbnQgc3BlY2lmaWVzIGhvdyB0byBzcHJlYWQgbWF0Y2hpbmcgcG9kcyBhbW9uZyB0aGUgZ2l2ZW4gdG9wb2xvZ3kuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiTGFiZWxTZWxlY3RvciBpcyB1c2VkIHRvIGZpbmQgbWF0Y2hpbmcgcG9kcy5cblBvZHMgdGhhdCBtYXRjaCB0aGlzIGxhYmVsIHNlbGVjdG9yIGFyZSBjb3VudGVkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHBvZHNcbmluIHRoZWlyIGNvcnJlc3BvbmRpbmcgdG9wb2xvZ3kgZG9tYWluLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3QgdGhlIHBvZHMgb3ZlciB3aGljaFxuc3ByZWFkaW5nIHdpbGwgYmUgY2FsY3VsYXRlZC4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZVxuaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgQU5EZWQgd2l0aCBsYWJlbFNlbGVjdG9yXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgb3ZlciB3aGljaCBzcHJlYWRpbmcgd2lsbCBiZSBjYWxjdWxhdGVkXG5mb3IgdGhlIGluY29taW5nIHBvZC4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLlxuTWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LlxuS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGxcbmJlIGlnbm9yZWQuIEEgbnVsbCBvciBlbXB0eSBsaXN0IG1lYW5zIG9ubHkgbWF0Y2ggYWdhaW5zdCBsYWJlbFNlbGVjdG9yLlxuXG5UaGlzIGlzIGEgYmV0YSBmaWVsZCBhbmQgcmVxdWlyZXMgdGhlIE1hdGNoTGFiZWxLZXlzSW5Qb2RUb3BvbG9neVNwcmVhZCBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZCAoZW5hYmxlZCBieSBkZWZhdWx0KS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF4U2tldyI6eyJkZXNjcmlwdGlvbiI6Ik1heFNrZXcgZGVzY3JpYmVzIHRoZSBkZWdyZWUgdG8gd2hpY2ggcG9kcyBtYXkgYmUgdW5ldmVubHkgZGlzdHJpYnV0ZWQuXG5XaGVuIGB3aGVuVW5zYXRpc2ZpYWJsZT1Eb05vdFNjaGVkdWxlYCwgaXQgaXMgdGhlIG1heGltdW0gcGVybWl0dGVkIGRpZmZlcmVuY2VcbmJldHdlZW4gdGhlIG51bWJlciBvZiBtYXRjaGluZyBwb2RzIGluIHRoZSB0YXJnZXQgdG9wb2xvZ3kgYW5kIHRoZSBnbG9iYWwgbWluaW11bS5cblRoZSBnbG9iYWwgbWluaW11bSBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgbWF0Y2hpbmcgcG9kcyBpbiBhbiBlbGlnaWJsZSBkb21haW5cbm9yIHplcm8gaWYgdGhlIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zIGlzIGxlc3MgdGhhbiBNaW5Eb21haW5zLlxuRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDEsIGFuZCBwb2RzIHdpdGggdGhlIHNhbWVcbmxhYmVsU2VsZWN0b3Igc3ByZWFkIGFzIDIvMi8xOlxuSW4gdGhpcyBjYXNlLCB0aGUgZ2xvYmFsIG1pbmltdW0gaXMgMS5cbnwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHxcbnwgIFAgUCAgfCAgUCBQICB8ICAgUCAgIHxcbi0gaWYgTWF4U2tldyBpcyAxLCBpbmNvbWluZyBwb2QgY2FuIG9ubHkgYmUgc2NoZWR1bGVkIHRvIHpvbmUzIHRvIGJlY29tZSAyLzIvMjtcbnNjaGVkdWxpbmcgaXQgb250byB6b25lMSh6b25lMikgd291bGQgbWFrZSB0aGUgQWN0dWFsU2tldygzLTEpIG9uIHpvbmUxKHpvbmUyKVxudmlvbGF0ZSBNYXhTa2V3KDEpLlxuLSBpZiBNYXhTa2V3IGlzIDIsIGluY29taW5nIHBvZCBjYW4gYmUgc2NoZWR1bGVkIG9udG8gYW55IHpvbmUuXG5XaGVuIGB3aGVuVW5zYXRpc2ZpYWJsZT1TY2hlZHVsZUFueXdheWAsIGl0IGlzIHVzZWQgdG8gZ2l2ZSBoaWdoZXIgcHJlY2VkZW5jZVxudG8gdG9wb2xvZ2llcyB0aGF0IHNhdGlzZnkgaXQuXG5JdCdzIGEgcmVxdWlyZWQgZmllbGQuIERlZmF1bHQgdmFsdWUgaXMgMSBhbmQgMCBpcyBub3QgYWxsb3dlZC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn0sIm1pbkRvbWFpbnMiOnsiZGVzY3JpcHRpb24iOiJNaW5Eb21haW5zIGluZGljYXRlcyBhIG1pbmltdW0gbnVtYmVyIG9mIGVsaWdpYmxlIGRvbWFpbnMuXG5XaGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgaXMgbGVzcyB0aGFuIG1pbkRvbWFpbnMsXG5Qb2QgVG9wb2xvZ3kgU3ByZWFkIHRyZWF0cyBcImdsb2JhbCBtaW5pbXVtXCIgYXMgMCwgYW5kIHRoZW4gdGhlIGNhbGN1bGF0aW9uIG9mIFNrZXcgaXMgcGVyZm9ybWVkLlxuQW5kIHdoZW4gdGhlIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zIHdpdGggbWF0Y2hpbmcgdG9wb2xvZ3kga2V5cyBlcXVhbHMgb3IgZ3JlYXRlciB0aGFuIG1pbkRvbWFpbnMsXG50aGlzIHZhbHVlIGhhcyBubyBlZmZlY3Qgb24gc2NoZWR1bGluZy5cbkFzIGEgcmVzdWx0LCB3aGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyBpcyBsZXNzIHRoYW4gbWluRG9tYWlucyxcbnNjaGVkdWxlciB3b24ndCBzY2hlZHVsZSBtb3JlIHRoYW4gbWF4U2tldyBQb2RzIHRvIHRob3NlIGRvbWFpbnMuXG5JZiB2YWx1ZSBpcyBuaWwsIHRoZSBjb25zdHJhaW50IGJlaGF2ZXMgYXMgaWYgTWluRG9tYWlucyBpcyBlcXVhbCB0byAxLlxuVmFsaWQgdmFsdWVzIGFyZSBpbnRlZ2VycyBncmVhdGVyIHRoYW4gMC5cbldoZW4gdmFsdWUgaXMgbm90IG5pbCwgV2hlblVuc2F0aXNmaWFibGUgbXVzdCBiZSBEb05vdFNjaGVkdWxlLlxuXG5Gb3IgZXhhbXBsZSwgaW4gYSAzLXpvbmUgY2x1c3RlciwgTWF4U2tldyBpcyBzZXQgdG8gMiwgTWluRG9tYWlucyBpcyBzZXQgdG8gNSBhbmQgcG9kcyB3aXRoIHRoZSBzYW1lXG5sYWJlbFNlbGVjdG9yIHNwcmVhZCBhcyAyLzIvMjpcbnwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHxcbnwgIFAgUCAgfCAgUCBQICB8ICBQIFAgIHxcblRoZSBudW1iZXIgb2YgZG9tYWlucyBpcyBsZXNzIHRoYW4gNShNaW5Eb21haW5zKSwgc28gXCJnbG9iYWwgbWluaW11bVwiIGlzIHRyZWF0ZWQgYXMgMC5cbkluIHRoaXMgc2l0dWF0aW9uLCBuZXcgcG9kIHdpdGggdGhlIHNhbWUgbGFiZWxTZWxlY3RvciBjYW5ub3QgYmUgc2NoZWR1bGVkLFxuYmVjYXVzZSBjb21wdXRlZCBza2V3IHdpbGwgYmUgMygzIC0gMCkgaWYgbmV3IFBvZCBpcyBzY2hlZHVsZWQgdG8gYW55IG9mIHRoZSB0aHJlZSB6b25lcyxcbml0IHdpbGwgdmlvbGF0ZSBNYXhTa2V3LiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwibm9kZUFmZmluaXR5UG9saWN5Ijp7ImRlc2NyaXB0aW9uIjoiTm9kZUFmZmluaXR5UG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBQb2QncyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yXG53aGVuIGNhbGN1bGF0aW5nIHBvZCB0b3BvbG9neSBzcHJlYWQgc2tldy4gT3B0aW9ucyBhcmU6XG4tIEhvbm9yOiBvbmx5IG5vZGVzIG1hdGNoaW5nIG5vZGVBZmZpbml0eS9ub2RlU2VsZWN0b3IgYXJlIGluY2x1ZGVkIGluIHRoZSBjYWxjdWxhdGlvbnMuXG4tIElnbm9yZTogbm9kZUFmZmluaXR5L25vZGVTZWxlY3RvciBhcmUgaWdub3JlZC4gQWxsIG5vZGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLlxuXG5JZiB0aGlzIHZhbHVlIGlzIG5pbCwgdGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEhvbm9yIHBvbGljeS4iLCJ0eXBlIjoic3RyaW5nIn0sIm5vZGVUYWludHNQb2xpY3kiOnsiZGVzY3JpcHRpb24iOiJOb2RlVGFpbnRzUG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBub2RlIHRhaW50cyB3aGVuIGNhbGN1bGF0aW5nXG5wb2QgdG9wb2xvZ3kgc3ByZWFkIHNrZXcuIE9wdGlvbnMgYXJlOlxuLSBIb25vcjogbm9kZXMgd2l0aG91dCB0YWludHMsIGFsb25nIHdpdGggdGFpbnRlZCBub2RlcyBmb3Igd2hpY2ggdGhlIGluY29taW5nIHBvZFxuaGFzIGEgdG9sZXJhdGlvbiwgYXJlIGluY2x1ZGVkLlxuLSBJZ25vcmU6IG5vZGUgdGFpbnRzIGFyZSBpZ25vcmVkLiBBbGwgbm9kZXMgYXJlIGluY2x1ZGVkLlxuXG5JZiB0aGlzIHZhbHVlIGlzIG5pbCwgdGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIElnbm9yZSBwb2xpY3kuIiwidHlwZSI6InN0cmluZyJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5S2V5IGlzIHRoZSBrZXkgb2Ygbm9kZSBsYWJlbHMuIE5vZGVzIHRoYXQgaGF2ZSBhIGxhYmVsIHdpdGggdGhpcyBrZXlcbmFuZCBpZGVudGljYWwgdmFsdWVzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluIHRoZSBzYW1lIHRvcG9sb2d5LlxuV2UgY29uc2lkZXIgZWFjaCBcdTAwM2NrZXksIHZhbHVlXHUwMDNlIGFzIGEgXCJidWNrZXRcIiwgYW5kIHRyeSB0byBwdXQgYmFsYW5jZWQgbnVtYmVyXG5vZiBwb2RzIGludG8gZWFjaCBidWNrZXQuXG5XZSBkZWZpbmUgYSBkb21haW4gYXMgYSBwYXJ0aWN1bGFyIGluc3RhbmNlIG9mIGEgdG9wb2xvZ3kuXG5BbHNvLCB3ZSBkZWZpbmUgYW4gZWxpZ2libGUgZG9tYWluIGFzIGEgZG9tYWluIHdob3NlIG5vZGVzIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZlxubm9kZUFmZmluaXR5UG9saWN5IGFuZCBub2RlVGFpbnRzUG9saWN5LlxuZS5nLiBJZiBUb3BvbG9neUtleSBpcyBcImt1YmVybmV0ZXMuaW8vaG9zdG5hbWVcIiwgZWFjaCBOb2RlIGlzIGEgZG9tYWluIG9mIHRoYXQgdG9wb2xvZ3kuXG5BbmQsIGlmIFRvcG9sb2d5S2V5IGlzIFwidG9wb2xvZ3kua3ViZXJuZXRlcy5pby96b25lXCIsIGVhY2ggem9uZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LlxuSXQncyBhIHJlcXVpcmVkIGZpZWxkLiIsInR5cGUiOiJzdHJpbmcifSwid2hlblVuc2F0aXNmaWFibGUiOnsiZGVzY3JpcHRpb24iOiJXaGVuVW5zYXRpc2ZpYWJsZSBpbmRpY2F0ZXMgaG93IHRvIGRlYWwgd2l0aCBhIHBvZCBpZiBpdCBkb2Vzbid0IHNhdGlzZnlcbnRoZSBzcHJlYWQgY29uc3RyYWludC5cbi0gRG9Ob3RTY2hlZHVsZSAoZGVmYXVsdCkgdGVsbHMgdGhlIHNjaGVkdWxlciBub3QgdG8gc2NoZWR1bGUgaXQuXG4tIFNjaGVkdWxlQW55d2F5IHRlbGxzIHRoZSBzY2hlZHVsZXIgdG8gc2NoZWR1bGUgdGhlIHBvZCBpbiBhbnkgbG9jYXRpb24sXG4gIGJ1dCBnaXZpbmcgaGlnaGVyIHByZWNlZGVuY2UgdG8gdG9wb2xvZ2llcyB0aGF0IHdvdWxkIGhlbHAgcmVkdWNlIHRoZVxuICBza2V3LlxuQSBjb25zdHJhaW50IGlzIGNvbnNpZGVyZWQgXCJVbnNhdGlzZmlhYmxlXCIgZm9yIGFuIGluY29taW5nIHBvZFxuaWYgYW5kIG9ubHkgaWYgZXZlcnkgcG9zc2libGUgbm9kZSBhc3NpZ25tZW50IGZvciB0aGF0IHBvZCB3b3VsZCB2aW9sYXRlXG5cIk1heFNrZXdcIiBvbiBzb21lIHRvcG9sb2d5LlxuRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDEsIGFuZCBwb2RzIHdpdGggdGhlIHNhbWVcbmxhYmVsU2VsZWN0b3Igc3ByZWFkIGFzIDMvMS8xOlxufCB6b25lMSB8IHpvbmUyIHwgem9uZTMgfFxufCBQIFAgUCB8ICAgUCAgIHwgICBQICAgfFxuSWYgV2hlblVuc2F0aXNmaWFibGUgaXMgc2V0IHRvIERvTm90U2NoZWR1bGUsIGluY29taW5nIHBvZCBjYW4gb25seSBiZSBzY2hlZHVsZWRcbnRvIHpvbmUyKHpvbmUzKSB0byBiZWNvbWUgMy8yLzEoMy8xLzIpIGFzIEFjdHVhbFNrZXcoMi0xKSBvbiB6b25lMih6b25lMykgc2F0aXNmaWVzXG5NYXhTa2V3KDEpLiBJbiBvdGhlciB3b3JkcywgdGhlIGNsdXN0ZXIgY2FuIHN0aWxsIGJlIGltYmFsYW5jZWQsIGJ1dCBzY2hlZHVsZXJcbndvbid0IG1ha2UgaXQgKm1vcmUqIGltYmFsYW5jZWQuXG5JdCdzIGEgcmVxdWlyZWQgZmllbGQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsibWF4U2tldyIsInRvcG9sb2d5S2V5Iiwid2hlblVuc2F0aXNmaWFibGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwiY29uc29sZSI6eyJkZXNjcmlwdGlvbiI6IkNvbnNvbGUgY29udGFpbmVyIHNldHRpbmdzLiIsInByb3BlcnRpZXMiOnsiYWZmaW5pdHkiOnsiZGVzY3JpcHRpb24iOiJBZmZpbml0eSBydWxlcyAoY2FuIGJlIGFkZGVkIHdpdGhvdXQgQVBJIHZlcnNpb24gYnVtcClcblVzZXMgc3RhbmRhcmQgY29yZXYxLkFmZmluaXR5IiwicHJvcGVydGllcyI6eyJub2RlQWZmaW5pdHkiOnsiZGVzY3JpcHRpb24iOiJEZXNjcmliZXMgbm9kZSBhZmZpbml0eSBzY2hlZHVsaW5nIHJ1bGVzIGZvciB0aGUgcG9kLiIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5XG50aGUgYWZmaW5pdHkgZXhwcmVzc2lvbnMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQsIGJ1dCBpdCBtYXkgY2hvb3NlXG5hIG5vZGUgdGhhdCB2aW9sYXRlcyBvbmUgb3IgbW9yZSBvZiB0aGUgZXhwcmVzc2lvbnMuIFRoZSBub2RlIHRoYXQgaXNcbm1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS5cbmZvciBlYWNoIG5vZGUgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHNjaGVkdWxpbmcgcmVxdWlyZW1lbnRzIChyZXNvdXJjZVxucmVxdWVzdCwgcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nIGFmZmluaXR5IGV4cHJlc3Npb25zLCBldGMuKSxcbmNvbXB1dGUgYSBzdW0gYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIHRoaXMgZmllbGQgYW5kIGFkZGluZ1xuXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWF0Y2hFeHByZXNzaW9uczsgdGhlXG5ub2RlKHMpIHdpdGggdGhlIGhpZ2hlc3Qgc3VtIGFyZSB0aGUgbW9zdCBwcmVmZXJyZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBbiBlbXB0eSBwcmVmZXJyZWQgc2NoZWR1bGluZyB0ZXJtIG1hdGNoZXMgYWxsIG9iamVjdHMgd2l0aCBpbXBsaWNpdCB3ZWlnaHQgMFxuKGkuZS4gaXQncyBhIG5vLW9wKS4gQSBudWxsIHByZWZlcnJlZCBzY2hlZHVsaW5nIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzIChpLmUuIGlzIGFsc28gYSBuby1vcCkuIiwicHJvcGVydGllcyI6eyJwcmVmZXJlbmNlIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvclxudGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzXG5hcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLlxuVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yXG50aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXNcbmFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuXG5UaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJ3ZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJXZWlnaHQgYXNzb2NpYXRlZCB3aXRoIG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIG5vZGVTZWxlY3RvclRlcm0sIGluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwcmVmZXJlbmNlIiwid2VpZ2h0Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdFxuc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLlxuSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBjZWFzZSB0byBiZSBtZXRcbmF0IHNvbWUgcG9pbnQgZHVyaW5nIHBvZCBleGVjdXRpb24gKGUuZy4gZHVlIHRvIGFuIHVwZGF0ZSksIHRoZSBzeXN0ZW1cbm1heSBvciBtYXkgbm90IHRyeSB0byBldmVudHVhbGx5IGV2aWN0IHRoZSBwb2QgZnJvbSBpdHMgbm9kZS4iLCJwcm9wZXJ0aWVzIjp7Im5vZGVTZWxlY3RvclRlcm1zIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHRlcm1zLiBUaGUgdGVybXMgYXJlIE9SZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG51bGwgb3IgZW1wdHkgbm9kZSBzZWxlY3RvciB0ZXJtIG1hdGNoZXMgbm8gb2JqZWN0cy4gVGhlIHJlcXVpcmVtZW50cyBvZlxudGhlbSBhcmUgQU5EZWQuXG5UaGUgVG9wb2xvZ3lTZWxlY3RvclRlcm0gdHlwZSBpbXBsZW1lbnRzIGEgc3Vic2V0IG9mIHRoZSBOb2RlU2VsZWN0b3JUZXJtLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6IkEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50cyBieSBub2RlJ3MgbGFiZWxzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3JcbnRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlc1xuYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci5cblRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoRmllbGRzIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBmaWVsZHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvclxudGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzXG5hcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLlxuVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsibm9kZVNlbGVjdG9yVGVybXMiXSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwb2RBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IkRlc2NyaWJlcyBwb2QgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyAoZS5nLiBjby1sb2NhdGUgdGhpcyBwb2QgaW4gdGhlIHNhbWUgbm9kZSwgem9uZSwgZXRjLiBhcyBzb21lIG90aGVyIHBvZChzKSkuIiwicHJvcGVydGllcyI6eyJwcmVmZXJyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IlRoZSBzY2hlZHVsZXIgd2lsbCBwcmVmZXIgdG8gc2NoZWR1bGUgcG9kcyB0byBub2RlcyB0aGF0IHNhdGlzZnlcbnRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2VcbmEgbm9kZSB0aGF0IHZpb2xhdGVzIG9uZSBvciBtb3JlIG9mIHRoZSBleHByZXNzaW9ucy4gVGhlIG5vZGUgdGhhdCBpc1xubW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLlxuZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlXG5yZXF1ZXN0LCByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmcgYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLFxuY29tcHV0ZSBhIHN1bSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgdGhpcyBmaWVsZCBhbmQgYWRkaW5nXG5cIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgaGFzIHBvZHMgd2hpY2ggbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm07IHRoZVxubm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHdlaWdodHMgb2YgYWxsIG9mIHRoZSBtYXRjaGVkIFdlaWdodGVkUG9kQWZmaW5pdHlUZXJtIGZpZWxkcyBhcmUgYWRkZWQgcGVyLW5vZGUgdG8gZmluZCB0aGUgbW9zdCBwcmVmZXJyZWQgbm9kZShzKSIsInByb3BlcnRpZXMiOnsicG9kQWZmaW5pdHlUZXJtIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgcG9kIGFmZmluaXR5IHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuXG5JZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsXG5iZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBsYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvblxuZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nXG5wb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG5UaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggbWF0Y2hMYWJlbEtleXMgYW5kIGxhYmVsU2VsZWN0b3IuXG5BbHNvLCBtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gbGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbFxuYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlXG5pbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgbGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYFxudG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb25cbmZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZ1xucG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LlxuVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIG1pc21hdGNoTGFiZWxLZXlzIGFuZCBsYWJlbFNlbGVjdG9yLlxuQWxzbywgbWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIGxhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLlxuVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC5cbm51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi5cbkFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXRcbnJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljXG5tZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVsc1xubWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlXG5vcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uXG5UaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLlxubnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmdcbnRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlXG53aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGVcbnNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy5cbkVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwid2VpZ2h0Ijp7ImRlc2NyaXB0aW9uIjoid2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm0sXG5pbiB0aGUgcmFuZ2UgMS0xMDAuIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsicG9kQWZmaW5pdHlUZXJtIiwid2VpZ2h0Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdFxuc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLlxuSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBjZWFzZSB0byBiZSBtZXRcbmF0IHNvbWUgcG9pbnQgZHVyaW5nIHBvZCBleGVjdXRpb24gKGUuZy4gZHVlIHRvIGEgcG9kIGxhYmVsIHVwZGF0ZSksIHRoZVxuc3lzdGVtIG1heSBvciBtYXkgbm90IHRyeSB0byBldmVudHVhbGx5IGV2aWN0IHRoZSBwb2QgZnJvbSBpdHMgbm9kZS5cbldoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGVsZW1lbnRzLCB0aGUgbGlzdHMgb2Ygbm9kZXMgY29ycmVzcG9uZGluZyB0byBlYWNoXG5wb2RBZmZpbml0eVRlcm0gYXJlIGludGVyc2VjdGVkLCBpLmUuIGFsbCB0ZXJtcyBtdXN0IGJlIHNhdGlzZmllZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkRlZmluZXMgYSBzZXQgb2YgcG9kcyAobmFtZWx5IHRob3NlIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yXG5yZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbmFtZXNwYWNlKHMpKSB0aGF0IHRoaXMgcG9kIHNob3VsZCBiZVxuY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoLFxud2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mXG50aGUgbGFiZWwgd2l0aCBrZXkgXHUwMDNjdG9wb2xvZ3lLZXlcdTAwM2UgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoXG5hIHBvZCBvZiB0aGUgc2V0IG9mIHBvZHMgaXMgcnVubmluZyIsInByb3BlcnRpZXMiOnsibGFiZWxTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciBhIHNldCBvZiByZXNvdXJjZXMsIGluIHRoaXMgY2FzZSBwb2RzLlxuSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXRcbnJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljXG5tZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVsc1xubWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlXG5vcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbFxuYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlXG5pbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgbGFiZWxTZWxlY3RvcmAgYXMgYGtleSBpbiAodmFsdWUpYFxudG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb25cbmZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZ1xucG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LlxuVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIG1hdGNoTGFiZWxLZXlzIGFuZCBsYWJlbFNlbGVjdG9yLlxuQWxzbywgbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIGxhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtaXNtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1pc21hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGxcbmJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZVxuaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYGxhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWBcbnRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uXG5mb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmdcbnBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS5cblRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBtaXNtYXRjaExhYmVsS2V5cyBhbmQgbGFiZWxTZWxlY3Rvci5cbkFsc28sIG1pc21hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBsYWJlbFNlbGVjdG9yIGlzbid0IHNldC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgdGhlIHNldCBvZiBuYW1lc3BhY2VzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by5cblRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGRcbmFuZCB0aGUgb25lcyBsaXN0ZWQgaW4gdGhlIG5hbWVzcGFjZXMgZmllbGQuXG5udWxsIHNlbGVjdG9yIGFuZCBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuXG5BbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0XG5yZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpY1xubWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHNcbm1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZVxub3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLlxuVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoaXMgZmllbGRcbmFuZCB0aGUgb25lcyBzZWxlY3RlZCBieSBuYW1lc3BhY2VTZWxlY3Rvci5cbm51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUaGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoIHRoZSBwb2RzIG1hdGNoaW5nXG50aGUgbGFiZWxTZWxlY3RvciBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZXMsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZVxud2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlXG5zZWxlY3RlZCBwb2RzIGlzIHJ1bm5pbmcuXG5FbXB0eSB0b3BvbG9neUtleSBpcyBub3QgYWxsb3dlZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJ0b3BvbG9neUtleSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInR5cGUiOiJvYmplY3QifSwicG9kQW50aUFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiRGVzY3JpYmVzIHBvZCBhbnRpLWFmZmluaXR5IHNjaGVkdWxpbmcgcnVsZXMgKGUuZy4gYXZvaWQgcHV0dGluZyB0aGlzIHBvZCBpbiB0aGUgc2FtZSBub2RlLCB6b25lLCBldGMuIGFzIHNvbWUgb3RoZXIgcG9kKHMpKS4iLCJwcm9wZXJ0aWVzIjp7InByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHNjaGVkdWxlciB3aWxsIHByZWZlciB0byBzY2hlZHVsZSBwb2RzIHRvIG5vZGVzIHRoYXQgc2F0aXNmeVxudGhlIGFudGktYWZmaW5pdHkgZXhwcmVzc2lvbnMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQsIGJ1dCBpdCBtYXkgY2hvb3NlXG5hIG5vZGUgdGhhdCB2aW9sYXRlcyBvbmUgb3IgbW9yZSBvZiB0aGUgZXhwcmVzc2lvbnMuIFRoZSBub2RlIHRoYXQgaXNcbm1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS5cbmZvciBlYWNoIG5vZGUgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHNjaGVkdWxpbmcgcmVxdWlyZW1lbnRzIChyZXNvdXJjZVxucmVxdWVzdCwgcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nIGFudGktYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLFxuY29tcHV0ZSBhIHN1bSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgdGhpcyBmaWVsZCBhbmQgc3VidHJhY3Rpbmdcblwid2VpZ2h0XCIgZnJvbSB0aGUgc3VtIGlmIHRoZSBub2RlIGhhcyBwb2RzIHdoaWNoIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtOyB0aGVcbm5vZGUocykgd2l0aCB0aGUgaGlnaGVzdCBzdW0gYXJlIHRoZSBtb3N0IHByZWZlcnJlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSB3ZWlnaHRzIG9mIGFsbCBvZiB0aGUgbWF0Y2hlZCBXZWlnaHRlZFBvZEFmZmluaXR5VGVybSBmaWVsZHMgYXJlIGFkZGVkIHBlci1ub2RlIHRvIGZpbmQgdGhlIG1vc3QgcHJlZmVycmVkIG5vZGUocykiLCJwcm9wZXJ0aWVzIjp7InBvZEFmZmluaXR5VGVybSI6eyJkZXNjcmlwdGlvbiI6IlJlcXVpcmVkLiBBIHBvZCBhZmZpbml0eSB0ZXJtLCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgd2VpZ2h0LiIsInByb3BlcnRpZXMiOnsibGFiZWxTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciBhIHNldCBvZiByZXNvdXJjZXMsIGluIHRoaXMgY2FzZSBwb2RzLlxuSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXRcbnJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljXG5tZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVsc1xubWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlXG5vcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbFxuYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlXG5pbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgbGFiZWxTZWxlY3RvcmAgYXMgYGtleSBpbiAodmFsdWUpYFxudG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb25cbmZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZ1xucG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LlxuVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIG1hdGNoTGFiZWxLZXlzIGFuZCBsYWJlbFNlbGVjdG9yLlxuQWxzbywgbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIGxhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtaXNtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1pc21hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGxcbmJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZVxuaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYGxhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWBcbnRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uXG5mb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmdcbnBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS5cblRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBtaXNtYXRjaExhYmVsS2V5cyBhbmQgbGFiZWxTZWxlY3Rvci5cbkFsc28sIG1pc21hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBsYWJlbFNlbGVjdG9yIGlzbid0IHNldC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgdGhlIHNldCBvZiBuYW1lc3BhY2VzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by5cblRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGRcbmFuZCB0aGUgb25lcyBsaXN0ZWQgaW4gdGhlIG5hbWVzcGFjZXMgZmllbGQuXG5udWxsIHNlbGVjdG9yIGFuZCBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuXG5BbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0XG5yZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpY1xubWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHNcbm1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZVxub3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLlxuVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoaXMgZmllbGRcbmFuZCB0aGUgb25lcyBzZWxlY3RlZCBieSBuYW1lc3BhY2VTZWxlY3Rvci5cbm51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUaGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoIHRoZSBwb2RzIG1hdGNoaW5nXG50aGUgbGFiZWxTZWxlY3RvciBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZXMsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZVxud2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlXG5zZWxlY3RlZCBwb2RzIGlzIHJ1bm5pbmcuXG5FbXB0eSB0b3BvbG9neUtleSBpcyBub3QgYWxsb3dlZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJ0b3BvbG9neUtleSJdLCJ0eXBlIjoib2JqZWN0In0sIndlaWdodCI6eyJkZXNjcmlwdGlvbiI6IndlaWdodCBhc3NvY2lhdGVkIHdpdGggbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtLFxuaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInBvZEFmZmluaXR5VGVybSIsIndlaWdodCJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhbnRpLWFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdFxuc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLlxuSWYgdGhlIGFudGktYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldFxuYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYSBwb2QgbGFiZWwgdXBkYXRlKSwgdGhlXG5zeXN0ZW0gbWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLlxuV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZWxlbWVudHMsIHRoZSBsaXN0cyBvZiBub2RlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2hcbnBvZEFmZmluaXR5VGVybSBhcmUgaW50ZXJzZWN0ZWQsIGkuZS4gYWxsIHRlcm1zIG11c3QgYmUgc2F0aXNmaWVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiRGVmaW5lcyBhIHNldCBvZiBwb2RzIChuYW1lbHkgdGhvc2UgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3JcbnJlbGF0aXZlIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UocykpIHRoYXQgdGhpcyBwb2Qgc2hvdWxkIGJlXG5jby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGgsXG53aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2ZcbnRoZSBsYWJlbCB3aXRoIGtleSBcdTAwM2N0b3BvbG9neUtleVx1MDAzZSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2hcbmEgcG9kIG9mIHRoZSBzZXQgb2YgcG9kcyBpcyBydW5uaW5nIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuXG5JZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsXG5iZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBsYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvblxuZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nXG5wb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG5UaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggbWF0Y2hMYWJlbEtleXMgYW5kIGxhYmVsU2VsZWN0b3IuXG5BbHNvLCBtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gbGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbFxuYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlXG5pbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgbGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYFxudG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb25cbmZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZ1xucG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LlxuVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIG1pc21hdGNoTGFiZWxLZXlzIGFuZCBsYWJlbFNlbGVjdG9yLlxuQWxzbywgbWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIGxhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLlxuVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC5cbm51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi5cbkFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXRcbnJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljXG5tZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVsc1xubWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlXG5vcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uXG5UaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLlxubnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmdcbnRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlXG53aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGVcbnNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy5cbkVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJub2RlU2VsZWN0b3IiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Ik5vZGUgc2VsZWN0b3IgY29uc3RyYWludHMiLCJ0eXBlIjoib2JqZWN0In0sInJlcGxpY2FzIjp7ImRlZmF1bHQiOjEsImRlc2NyaXB0aW9uIjoiRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGRlc2lyZWQgT0xTIHBvZHMuIERlZmF1bHQ6IFwiMVwiXG5Ob3RlOiBSZXBsaWNhcyBjYW4gb25seSBiZSBjaGFuZ2VkIGZvciBBUElDb250YWluZXIuIEZvciBQb3N0Z3JlU1FMIGFuZCBDb25zb2xlIGNvbnRhaW5lcnMsXG50aGUgbnVtYmVyIG9mIHJlcGxpY2FzIHdpbGwgYWx3YXlzIGJlIHNldCB0byAxLiIsImZvcm1hdCI6ImludDMyIiwibWluaW11bSI6MCwidHlwZSI6ImludGVnZXIifSwicmVzb3VyY2VzIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2UgcmVxdWlyZW1lbnRzIChDUFUsIG1lbW9yeSlcblVzZXMgc3RhbmRhcmQgY29yZXYxLlJlc291cmNlUmVxdWlyZW1lbnRzIiwicHJvcGVydGllcyI6eyJjbGFpbXMiOnsiZGVzY3JpcHRpb24iOiJDbGFpbXMgbGlzdHMgdGhlIG5hbWVzIG9mIHJlc291cmNlcywgZGVmaW5lZCBpbiBzcGVjLnJlc291cmNlQ2xhaW1zLFxudGhhdCBhcmUgdXNlZCBieSB0aGlzIGNvbnRhaW5lci5cblxuVGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZVxuRHluYW1pY1Jlc291cmNlQWxsb2NhdGlvbiBmZWF0dXJlIGdhdGUuXG5cblRoaXMgZmllbGQgaXMgaW1tdXRhYmxlLiBJdCBjYW4gb25seSBiZSBzZXQgZm9yIGNvbnRhaW5lcnMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJSZXNvdXJjZUNsYWltIHJlZmVyZW5jZXMgb25lIGVudHJ5IGluIFBvZFNwZWMuUmVzb3VyY2VDbGFpbXMuIiwicHJvcGVydGllcyI6eyJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIG9uZSBlbnRyeSBpbiBwb2Quc3BlYy5yZXNvdXJjZUNsYWltcyBvZlxudGhlIFBvZCB3aGVyZSB0aGlzIGZpZWxkIGlzIHVzZWQuIEl0IG1ha2VzIHRoYXQgcmVzb3VyY2UgYXZhaWxhYmxlXG5pbnNpZGUgYSBjb250YWluZXIuIiwidHlwZSI6InN0cmluZyJ9LCJyZXF1ZXN0Ijp7ImRlc2NyaXB0aW9uIjoiUmVxdWVzdCBpcyB0aGUgbmFtZSBjaG9zZW4gZm9yIGEgcmVxdWVzdCBpbiB0aGUgcmVmZXJlbmNlZCBjbGFpbS5cbklmIGVtcHR5LCBldmVyeXRoaW5nIGZyb20gdGhlIGNsYWltIGlzIG1hZGUgYXZhaWxhYmxlLCBvdGhlcndpc2Vcbm9ubHkgdGhlIHJlc3VsdCBvZiB0aGlzIHJlcXVlc3QuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsibmFtZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LW1hcC1rZXlzIjpbIm5hbWUiXSwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6Im1hcCJ9LCJsaW1pdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiTGltaXRzIGRlc2NyaWJlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgYWxsb3dlZC5cbk1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLlxuSWYgUmVxdWVzdHMgaXMgb21pdHRlZCBmb3IgYSBjb250YWluZXIsIGl0IGRlZmF1bHRzIHRvIExpbWl0cyBpZiB0aGF0IGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLFxub3RoZXJ3aXNlIHRvIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgdmFsdWUuIFJlcXVlc3RzIGNhbm5vdCBleGNlZWQgTGltaXRzLlxuTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInRvbGVyYXRpb25zIjp7ImRlc2NyaXB0aW9uIjoiVG9sZXJhdGlvbnMgZm9yIHBvZCBzY2hlZHVsaW5nXG5Vc2VzIHN0YW5kYXJkIGNvcmV2MS5Ub2xlcmF0aW9uIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgcG9kIHRoaXMgVG9sZXJhdGlvbiBpcyBhdHRhY2hlZCB0byB0b2xlcmF0ZXMgYW55IHRhaW50IHRoYXQgbWF0Y2hlc1xudGhlIHRyaXBsZSBcdTAwM2NrZXksdmFsdWUsZWZmZWN0XHUwMDNlIHVzaW5nIHRoZSBtYXRjaGluZyBvcGVyYXRvciBcdTAwM2NvcGVyYXRvclx1MDAzZS4iLCJwcm9wZXJ0aWVzIjp7ImVmZmVjdCI6eyJkZXNjcmlwdGlvbiI6IkVmZmVjdCBpbmRpY2F0ZXMgdGhlIHRhaW50IGVmZmVjdCB0byBtYXRjaC4gRW1wdHkgbWVhbnMgbWF0Y2ggYWxsIHRhaW50IGVmZmVjdHMuXG5XaGVuIHNwZWNpZmllZCwgYWxsb3dlZCB2YWx1ZXMgYXJlIE5vU2NoZWR1bGUsIFByZWZlck5vU2NoZWR1bGUgYW5kIE5vRXhlY3V0ZS4iLCJ0eXBlIjoic3RyaW5nIn0sImtleSI6eyJkZXNjcmlwdGlvbiI6IktleSBpcyB0aGUgdGFpbnQga2V5IHRoYXQgdGhlIHRvbGVyYXRpb24gYXBwbGllcyB0by4gRW1wdHkgbWVhbnMgbWF0Y2ggYWxsIHRhaW50IGtleXMuXG5JZiB0aGUga2V5IGlzIGVtcHR5LCBvcGVyYXRvciBtdXN0IGJlIEV4aXN0czsgdGhpcyBjb21iaW5hdGlvbiBtZWFucyB0byBtYXRjaCBhbGwgdmFsdWVzIGFuZCBhbGwga2V5cy4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiT3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byB0aGUgdmFsdWUuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEV4aXN0cywgRXF1YWwsIEx0LCBhbmQgR3QuIERlZmF1bHRzIHRvIEVxdWFsLlxuRXhpc3RzIGlzIGVxdWl2YWxlbnQgdG8gd2lsZGNhcmQgZm9yIHZhbHVlLCBzbyB0aGF0IGEgcG9kIGNhblxudG9sZXJhdGUgYWxsIHRhaW50cyBvZiBhIHBhcnRpY3VsYXIgY2F0ZWdvcnkuXG5MdCBhbmQgR3QgcGVyZm9ybSBudW1lcmljIGNvbXBhcmlzb25zIChyZXF1aXJlcyBmZWF0dXJlIGdhdGUgVGFpbnRUb2xlcmF0aW9uQ29tcGFyaXNvbk9wZXJhdG9ycykuIiwidHlwZSI6InN0cmluZyJ9LCJ0b2xlcmF0aW9uU2Vjb25kcyI6eyJkZXNjcmlwdGlvbiI6IlRvbGVyYXRpb25TZWNvbmRzIHJlcHJlc2VudHMgdGhlIHBlcmlvZCBvZiB0aW1lIHRoZSB0b2xlcmF0aW9uICh3aGljaCBtdXN0IGJlXG5vZiBlZmZlY3QgTm9FeGVjdXRlLCBvdGhlcndpc2UgdGhpcyBmaWVsZCBpcyBpZ25vcmVkKSB0b2xlcmF0ZXMgdGhlIHRhaW50LiBCeSBkZWZhdWx0LFxuaXQgaXMgbm90IHNldCwgd2hpY2ggbWVhbnMgdG9sZXJhdGUgdGhlIHRhaW50IGZvcmV2ZXIgKGRvIG5vdCBldmljdCkuIFplcm8gYW5kXG5uZWdhdGl2ZSB2YWx1ZXMgd2lsbCBiZSB0cmVhdGVkIGFzIDAgKGV2aWN0IGltbWVkaWF0ZWx5KSBieSB0aGUgc3lzdGVtLiIsImZvcm1hdCI6ImludDY0IiwidHlwZSI6ImludGVnZXIifSwidmFsdWUiOnsiZGVzY3JpcHRpb24iOiJWYWx1ZSBpcyB0aGUgdGFpbnQgdmFsdWUgdGhlIHRvbGVyYXRpb24gbWF0Y2hlcyB0by5cbklmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMsIHRoZSB2YWx1ZSBzaG91bGQgYmUgZW1wdHksIG90aGVyd2lzZSBqdXN0IGEgcmVndWxhciBzdHJpbmcuIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5IHNwcmVhZCBjb25zdHJhaW50cyAoY2FuIGJlIGFkZGVkIHdpdGhvdXQgQVBJIHZlcnNpb24gYnVtcClcblVzZXMgc3RhbmRhcmQgY29yZXYxLlRvcG9sb2d5U3ByZWFkQ29uc3RyYWludCIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50IHNwZWNpZmllcyBob3cgdG8gc3ByZWFkIG1hdGNoaW5nIHBvZHMgYW1vbmcgdGhlIGdpdmVuIHRvcG9sb2d5LiIsInByb3BlcnRpZXMiOnsibGFiZWxTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkxhYmVsU2VsZWN0b3IgaXMgdXNlZCB0byBmaW5kIG1hdGNoaW5nIHBvZHMuXG5Qb2RzIHRoYXQgbWF0Y2ggdGhpcyBsYWJlbCBzZWxlY3RvciBhcmUgY291bnRlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwb2RzXG5pbiB0aGVpciBjb3JyZXNwb25kaW5nIHRvcG9sb2d5IGRvbWFpbi4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXRcbnJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljXG5tZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVsc1xubWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlXG5vcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHRoZSBwb2RzIG92ZXIgd2hpY2hcbnNwcmVhZGluZyB3aWxsIGJlIGNhbGN1bGF0ZWQuIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIEFORGVkIHdpdGggbGFiZWxTZWxlY3RvclxudG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIG92ZXIgd2hpY2ggc3ByZWFkaW5nIHdpbGwgYmUgY2FsY3VsYXRlZFxuZm9yIHRoZSBpbmNvbWluZyBwb2QuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci5cbk1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC5cbktleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsXG5iZSBpZ25vcmVkLiBBIG51bGwgb3IgZW1wdHkgbGlzdCBtZWFucyBvbmx5IG1hdGNoIGFnYWluc3QgbGFiZWxTZWxlY3Rvci5cblxuVGhpcyBpcyBhIGJldGEgZmllbGQgYW5kIHJlcXVpcmVzIHRoZSBNYXRjaExhYmVsS2V5c0luUG9kVG9wb2xvZ3lTcHJlYWQgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQgKGVuYWJsZWQgYnkgZGVmYXVsdCkuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1heFNrZXciOnsiZGVzY3JpcHRpb24iOiJNYXhTa2V3IGRlc2NyaWJlcyB0aGUgZGVncmVlIHRvIHdoaWNoIHBvZHMgbWF5IGJlIHVuZXZlbmx5IGRpc3RyaWJ1dGVkLlxuV2hlbiBgd2hlblVuc2F0aXNmaWFibGU9RG9Ob3RTY2hlZHVsZWAsIGl0IGlzIHRoZSBtYXhpbXVtIHBlcm1pdHRlZCBkaWZmZXJlbmNlXG5iZXR3ZWVuIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgcG9kcyBpbiB0aGUgdGFyZ2V0IHRvcG9sb2d5IGFuZCB0aGUgZ2xvYmFsIG1pbmltdW0uXG5UaGUgZ2xvYmFsIG1pbmltdW0gaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG1hdGNoaW5nIHBvZHMgaW4gYW4gZWxpZ2libGUgZG9tYWluXG5vciB6ZXJvIGlmIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyBpcyBsZXNzIHRoYW4gTWluRG9tYWlucy5cbkZvciBleGFtcGxlLCBpbiBhIDMtem9uZSBjbHVzdGVyLCBNYXhTa2V3IGlzIHNldCB0byAxLCBhbmQgcG9kcyB3aXRoIHRoZSBzYW1lXG5sYWJlbFNlbGVjdG9yIHNwcmVhZCBhcyAyLzIvMTpcbkluIHRoaXMgY2FzZSwgdGhlIGdsb2JhbCBtaW5pbXVtIGlzIDEuXG58IHpvbmUxIHwgem9uZTIgfCB6b25lMyB8XG58ICBQIFAgIHwgIFAgUCAgfCAgIFAgICB8XG4tIGlmIE1heFNrZXcgaXMgMSwgaW5jb21pbmcgcG9kIGNhbiBvbmx5IGJlIHNjaGVkdWxlZCB0byB6b25lMyB0byBiZWNvbWUgMi8yLzI7XG5zY2hlZHVsaW5nIGl0IG9udG8gem9uZTEoem9uZTIpIHdvdWxkIG1ha2UgdGhlIEFjdHVhbFNrZXcoMy0xKSBvbiB6b25lMSh6b25lMilcbnZpb2xhdGUgTWF4U2tldygxKS5cbi0gaWYgTWF4U2tldyBpcyAyLCBpbmNvbWluZyBwb2QgY2FuIGJlIHNjaGVkdWxlZCBvbnRvIGFueSB6b25lLlxuV2hlbiBgd2hlblVuc2F0aXNmaWFibGU9U2NoZWR1bGVBbnl3YXlgLCBpdCBpcyB1c2VkIHRvIGdpdmUgaGlnaGVyIHByZWNlZGVuY2VcbnRvIHRvcG9sb2dpZXMgdGhhdCBzYXRpc2Z5IGl0LlxuSXQncyBhIHJlcXVpcmVkIGZpZWxkLiBEZWZhdWx0IHZhbHVlIGlzIDEgYW5kIDAgaXMgbm90IGFsbG93ZWQuIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtaW5Eb21haW5zIjp7ImRlc2NyaXB0aW9uIjoiTWluRG9tYWlucyBpbmRpY2F0ZXMgYSBtaW5pbXVtIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zLlxuV2hlbiB0aGUgbnVtYmVyIG9mIGVsaWdpYmxlIGRvbWFpbnMgd2l0aCBtYXRjaGluZyB0b3BvbG9neSBrZXlzIGlzIGxlc3MgdGhhbiBtaW5Eb21haW5zLFxuUG9kIFRvcG9sb2d5IFNwcmVhZCB0cmVhdHMgXCJnbG9iYWwgbWluaW11bVwiIGFzIDAsIGFuZCB0aGVuIHRoZSBjYWxjdWxhdGlvbiBvZiBTa2V3IGlzIHBlcmZvcm1lZC5cbkFuZCB3aGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgZXF1YWxzIG9yIGdyZWF0ZXIgdGhhbiBtaW5Eb21haW5zLFxudGhpcyB2YWx1ZSBoYXMgbm8gZWZmZWN0IG9uIHNjaGVkdWxpbmcuXG5BcyBhIHJlc3VsdCwgd2hlbiB0aGUgbnVtYmVyIG9mIGVsaWdpYmxlIGRvbWFpbnMgaXMgbGVzcyB0aGFuIG1pbkRvbWFpbnMsXG5zY2hlZHVsZXIgd29uJ3Qgc2NoZWR1bGUgbW9yZSB0aGFuIG1heFNrZXcgUG9kcyB0byB0aG9zZSBkb21haW5zLlxuSWYgdmFsdWUgaXMgbmlsLCB0aGUgY29uc3RyYWludCBiZWhhdmVzIGFzIGlmIE1pbkRvbWFpbnMgaXMgZXF1YWwgdG8gMS5cblZhbGlkIHZhbHVlcyBhcmUgaW50ZWdlcnMgZ3JlYXRlciB0aGFuIDAuXG5XaGVuIHZhbHVlIGlzIG5vdCBuaWwsIFdoZW5VbnNhdGlzZmlhYmxlIG11c3QgYmUgRG9Ob3RTY2hlZHVsZS5cblxuRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDIsIE1pbkRvbWFpbnMgaXMgc2V0IHRvIDUgYW5kIHBvZHMgd2l0aCB0aGUgc2FtZVxubGFiZWxTZWxlY3RvciBzcHJlYWQgYXMgMi8yLzI6XG58IHpvbmUxIHwgem9uZTIgfCB6b25lMyB8XG58ICBQIFAgIHwgIFAgUCAgfCAgUCBQICB8XG5UaGUgbnVtYmVyIG9mIGRvbWFpbnMgaXMgbGVzcyB0aGFuIDUoTWluRG9tYWlucyksIHNvIFwiZ2xvYmFsIG1pbmltdW1cIiBpcyB0cmVhdGVkIGFzIDAuXG5JbiB0aGlzIHNpdHVhdGlvbiwgbmV3IHBvZCB3aXRoIHRoZSBzYW1lIGxhYmVsU2VsZWN0b3IgY2Fubm90IGJlIHNjaGVkdWxlZCxcbmJlY2F1c2UgY29tcHV0ZWQgc2tldyB3aWxsIGJlIDMoMyAtIDApIGlmIG5ldyBQb2QgaXMgc2NoZWR1bGVkIHRvIGFueSBvZiB0aGUgdGhyZWUgem9uZXMsXG5pdCB3aWxsIHZpb2xhdGUgTWF4U2tldy4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn0sIm5vZGVBZmZpbml0eVBvbGljeSI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVBZmZpbml0eVBvbGljeSBpbmRpY2F0ZXMgaG93IHdlIHdpbGwgdHJlYXQgUG9kJ3Mgbm9kZUFmZmluaXR5L25vZGVTZWxlY3Rvclxud2hlbiBjYWxjdWxhdGluZyBwb2QgdG9wb2xvZ3kgc3ByZWFkIHNrZXcuIE9wdGlvbnMgYXJlOlxuLSBIb25vcjogb25seSBub2RlcyBtYXRjaGluZyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLlxuLSBJZ25vcmU6IG5vZGVBZmZpbml0eS9ub2RlU2VsZWN0b3IgYXJlIGlnbm9yZWQuIEFsbCBub2RlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9ucy5cblxuSWYgdGhpcyB2YWx1ZSBpcyBuaWwsIHRoZSBiZWhhdmlvciBpcyBlcXVpdmFsZW50IHRvIHRoZSBIb25vciBwb2xpY3kuIiwidHlwZSI6InN0cmluZyJ9LCJub2RlVGFpbnRzUG9saWN5Ijp7ImRlc2NyaXB0aW9uIjoiTm9kZVRhaW50c1BvbGljeSBpbmRpY2F0ZXMgaG93IHdlIHdpbGwgdHJlYXQgbm9kZSB0YWludHMgd2hlbiBjYWxjdWxhdGluZ1xucG9kIHRvcG9sb2d5IHNwcmVhZCBza2V3LiBPcHRpb25zIGFyZTpcbi0gSG9ub3I6IG5vZGVzIHdpdGhvdXQgdGFpbnRzLCBhbG9uZyB3aXRoIHRhaW50ZWQgbm9kZXMgZm9yIHdoaWNoIHRoZSBpbmNvbWluZyBwb2RcbmhhcyBhIHRvbGVyYXRpb24sIGFyZSBpbmNsdWRlZC5cbi0gSWdub3JlOiBub2RlIHRhaW50cyBhcmUgaWdub3JlZC4gQWxsIG5vZGVzIGFyZSBpbmNsdWRlZC5cblxuSWYgdGhpcyB2YWx1ZSBpcyBuaWwsIHRoZSBiZWhhdmlvciBpcyBlcXVpdmFsZW50IHRvIHRoZSBJZ25vcmUgcG9saWN5LiIsInR5cGUiOiJzdHJpbmcifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neUtleSBpcyB0aGUga2V5IG9mIG5vZGUgbGFiZWxzLiBOb2RlcyB0aGF0IGhhdmUgYSBsYWJlbCB3aXRoIHRoaXMga2V5XG5hbmQgaWRlbnRpY2FsIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbiB0aGUgc2FtZSB0b3BvbG9neS5cbldlIGNvbnNpZGVyIGVhY2ggXHUwMDNja2V5LCB2YWx1ZVx1MDAzZSBhcyBhIFwiYnVja2V0XCIsIGFuZCB0cnkgdG8gcHV0IGJhbGFuY2VkIG51bWJlclxub2YgcG9kcyBpbnRvIGVhY2ggYnVja2V0LlxuV2UgZGVmaW5lIGEgZG9tYWluIGFzIGEgcGFydGljdWxhciBpbnN0YW5jZSBvZiBhIHRvcG9sb2d5LlxuQWxzbywgd2UgZGVmaW5lIGFuIGVsaWdpYmxlIGRvbWFpbiBhcyBhIGRvbWFpbiB3aG9zZSBub2RlcyBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2Zcbm5vZGVBZmZpbml0eVBvbGljeSBhbmQgbm9kZVRhaW50c1BvbGljeS5cbmUuZy4gSWYgVG9wb2xvZ3lLZXkgaXMgXCJrdWJlcm5ldGVzLmlvL2hvc3RuYW1lXCIsIGVhY2ggTm9kZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LlxuQW5kLCBpZiBUb3BvbG9neUtleSBpcyBcInRvcG9sb2d5Lmt1YmVybmV0ZXMuaW8vem9uZVwiLCBlYWNoIHpvbmUgaXMgYSBkb21haW4gb2YgdGhhdCB0b3BvbG9neS5cbkl0J3MgYSByZXF1aXJlZCBmaWVsZC4iLCJ0eXBlIjoic3RyaW5nIn0sIndoZW5VbnNhdGlzZmlhYmxlIjp7ImRlc2NyaXB0aW9uIjoiV2hlblVuc2F0aXNmaWFibGUgaW5kaWNhdGVzIGhvdyB0byBkZWFsIHdpdGggYSBwb2QgaWYgaXQgZG9lc24ndCBzYXRpc2Z5XG50aGUgc3ByZWFkIGNvbnN0cmFpbnQuXG4tIERvTm90U2NoZWR1bGUgKGRlZmF1bHQpIHRlbGxzIHRoZSBzY2hlZHVsZXIgbm90IHRvIHNjaGVkdWxlIGl0LlxuLSBTY2hlZHVsZUFueXdheSB0ZWxscyB0aGUgc2NoZWR1bGVyIHRvIHNjaGVkdWxlIHRoZSBwb2QgaW4gYW55IGxvY2F0aW9uLFxuICBidXQgZ2l2aW5nIGhpZ2hlciBwcmVjZWRlbmNlIHRvIHRvcG9sb2dpZXMgdGhhdCB3b3VsZCBoZWxwIHJlZHVjZSB0aGVcbiAgc2tldy5cbkEgY29uc3RyYWludCBpcyBjb25zaWRlcmVkIFwiVW5zYXRpc2ZpYWJsZVwiIGZvciBhbiBpbmNvbWluZyBwb2RcbmlmIGFuZCBvbmx5IGlmIGV2ZXJ5IHBvc3NpYmxlIG5vZGUgYXNzaWdubWVudCBmb3IgdGhhdCBwb2Qgd291bGQgdmlvbGF0ZVxuXCJNYXhTa2V3XCIgb24gc29tZSB0b3BvbG9neS5cbkZvciBleGFtcGxlLCBpbiBhIDMtem9uZSBjbHVzdGVyLCBNYXhTa2V3IGlzIHNldCB0byAxLCBhbmQgcG9kcyB3aXRoIHRoZSBzYW1lXG5sYWJlbFNlbGVjdG9yIHNwcmVhZCBhcyAzLzEvMTpcbnwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHxcbnwgUCBQIFAgfCAgIFAgICB8ICAgUCAgIHxcbklmIFdoZW5VbnNhdGlzZmlhYmxlIGlzIHNldCB0byBEb05vdFNjaGVkdWxlLCBpbmNvbWluZyBwb2QgY2FuIG9ubHkgYmUgc2NoZWR1bGVkXG50byB6b25lMih6b25lMykgdG8gYmVjb21lIDMvMi8xKDMvMS8yKSBhcyBBY3R1YWxTa2V3KDItMSkgb24gem9uZTIoem9uZTMpIHNhdGlzZmllc1xuTWF4U2tldygxKS4gSW4gb3RoZXIgd29yZHMsIHRoZSBjbHVzdGVyIGNhbiBzdGlsbCBiZSBpbWJhbGFuY2VkLCBidXQgc2NoZWR1bGVyXG53b24ndCBtYWtlIGl0ICptb3JlKiBpbWJhbGFuY2VkLlxuSXQncyBhIHJlcXVpcmVkIGZpZWxkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbIm1heFNrZXciLCJ0b3BvbG9neUtleSIsIndoZW5VbnNhdGlzZmlhYmxlIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sImRhdGFDb2xsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJEYXRhIENvbGxlY3RvciBjb250YWluZXIgc2V0dGluZ3MuIiwicHJvcGVydGllcyI6eyJyZXNvdXJjZXMiOnsiZGVzY3JpcHRpb24iOiJSZXNvdXJjZSByZXF1aXJlbWVudHMgKENQVSwgbWVtb3J5KVxuVXNlcyBzdGFuZGFyZCBjb3JldjEuUmVzb3VyY2VSZXF1aXJlbWVudHMiLCJwcm9wZXJ0aWVzIjp7ImNsYWltcyI6eyJkZXNjcmlwdGlvbiI6IkNsYWltcyBsaXN0cyB0aGUgbmFtZXMgb2YgcmVzb3VyY2VzLCBkZWZpbmVkIGluIHNwZWMucmVzb3VyY2VDbGFpbXMsXG50aGF0IGFyZSB1c2VkIGJ5IHRoaXMgY29udGFpbmVyLlxuXG5UaGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlXG5EeW5hbWljUmVzb3VyY2VBbGxvY2F0aW9uIGZlYXR1cmUgZ2F0ZS5cblxuVGhpcyBmaWVsZCBpcyBpbW11dGFibGUuIEl0IGNhbiBvbmx5IGJlIHNldCBmb3IgY29udGFpbmVycy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlQ2xhaW0gcmVmZXJlbmNlcyBvbmUgZW50cnkgaW4gUG9kU3BlYy5SZXNvdXJjZUNsYWltcy4iLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIGVudHJ5IGluIHBvZC5zcGVjLnJlc291cmNlQ2xhaW1zIG9mXG50aGUgUG9kIHdoZXJlIHRoaXMgZmllbGQgaXMgdXNlZC4gSXQgbWFrZXMgdGhhdCByZXNvdXJjZSBhdmFpbGFibGVcbmluc2lkZSBhIGNvbnRhaW5lci4iLCJ0eXBlIjoic3RyaW5nIn0sInJlcXVlc3QiOnsiZGVzY3JpcHRpb24iOiJSZXF1ZXN0IGlzIHRoZSBuYW1lIGNob3NlbiBmb3IgYSByZXF1ZXN0IGluIHRoZSByZWZlcmVuY2VkIGNsYWltLlxuSWYgZW1wdHksIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2xhaW0gaXMgbWFkZSBhdmFpbGFibGUsIG90aGVyd2lzZVxub25seSB0aGUgcmVzdWx0IG9mIHRoaXMgcmVxdWVzdC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtbWFwLWtleXMiOlsibmFtZSJdLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoibWFwIn0sImxpbWl0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJMaW1pdHMgZGVzY3JpYmVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyBhbGxvd2VkLlxuTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In0sInJlcXVlc3RzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IlJlcXVlc3RzIGRlc2NyaWJlcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuXG5JZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsXG5vdGhlcndpc2UgdG8gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZS4gUmVxdWVzdHMgY2Fubm90IGV4Y2VlZCBMaW1pdHMuXG5Nb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwiZGF0YWJhc2UiOnsiZGVzY3JpcHRpb24iOiJEYXRhYmFzZSBjb250YWluZXIgc2V0dGluZ3MuIiwicHJvcGVydGllcyI6eyJhZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IkFmZmluaXR5IHJ1bGVzIChjYW4gYmUgYWRkZWQgd2l0aG91dCBBUEkgdmVyc2lvbiBidW1wKVxuVXNlcyBzdGFuZGFyZCBjb3JldjEuQWZmaW5pdHkiLCJwcm9wZXJ0aWVzIjp7Im5vZGVBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IkRlc2NyaWJlcyBub2RlIGFmZmluaXR5IHNjaGVkdWxpbmcgcnVsZXMgZm9yIHRoZSBwb2QuIiwicHJvcGVydGllcyI6eyJwcmVmZXJyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IlRoZSBzY2hlZHVsZXIgd2lsbCBwcmVmZXIgdG8gc2NoZWR1bGUgcG9kcyB0byBub2RlcyB0aGF0IHNhdGlzZnlcbnRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2VcbmEgbm9kZSB0aGF0IHZpb2xhdGVzIG9uZSBvciBtb3JlIG9mIHRoZSBleHByZXNzaW9ucy4gVGhlIG5vZGUgdGhhdCBpc1xubW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLlxuZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlXG5yZXF1ZXN0LCByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmcgYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLFxuY29tcHV0ZSBhIHN1bSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgdGhpcyBmaWVsZCBhbmQgYWRkaW5nXG5cIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBtYXRjaEV4cHJlc3Npb25zOyB0aGVcbm5vZGUocykgd2l0aCB0aGUgaGlnaGVzdCBzdW0gYXJlIHRoZSBtb3N0IHByZWZlcnJlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGVtcHR5IHByZWZlcnJlZCBzY2hlZHVsaW5nIHRlcm0gbWF0Y2hlcyBhbGwgb2JqZWN0cyB3aXRoIGltcGxpY2l0IHdlaWdodCAwXG4oaS5lLiBpdCdzIGEgbm8tb3ApLiBBIG51bGwgcHJlZmVycmVkIHNjaGVkdWxpbmcgdGVybSBtYXRjaGVzIG5vIG9iamVjdHMgKGkuZS4gaXMgYWxzbyBhIG5vLW9wKS4iLCJwcm9wZXJ0aWVzIjp7InByZWZlcmVuY2UiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgdGVybSwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHdlaWdodC4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGxhYmVscy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yXG50aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXNcbmFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuXG5UaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaEZpZWxkcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50cyBieSBub2RlJ3MgZmllbGRzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3JcbnRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlc1xuYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci5cblRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIndlaWdodCI6eyJkZXNjcmlwdGlvbiI6IldlaWdodCBhc3NvY2lhdGVkIHdpdGggbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZVNlbGVjdG9yVGVybSwgaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInByZWZlcmVuY2UiLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sInJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGFyZSBub3QgbWV0IGF0XG5zY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuXG5JZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldFxuYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYW4gdXBkYXRlKSwgdGhlIHN5c3RlbVxubWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLiIsInByb3BlcnRpZXMiOnsibm9kZVNlbGVjdG9yVGVybXMiOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgdGVybXMuIFRoZSB0ZXJtcyBhcmUgT1JlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbnVsbCBvciBlbXB0eSBub2RlIHNlbGVjdG9yIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzLiBUaGUgcmVxdWlyZW1lbnRzIG9mXG50aGVtIGFyZSBBTkRlZC5cblRoZSBUb3BvbG9neVNlbGVjdG9yVGVybSB0eXBlIGltcGxlbWVudHMgYSBzdWJzZXQgb2YgdGhlIE5vZGVTZWxlY3RvclRlcm0uIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvclxudGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzXG5hcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLlxuVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yXG50aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXNcbmFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuXG5UaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJub2RlU2VsZWN0b3JUZXJtcyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn19LCJ0eXBlIjoib2JqZWN0In0sInBvZEFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiRGVzY3JpYmVzIHBvZCBhZmZpbml0eSBzY2hlZHVsaW5nIHJ1bGVzIChlLmcuIGNvLWxvY2F0ZSB0aGlzIHBvZCBpbiB0aGUgc2FtZSBub2RlLCB6b25lLCBldGMuIGFzIHNvbWUgb3RoZXIgcG9kKHMpKS4iLCJwcm9wZXJ0aWVzIjp7InByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHNjaGVkdWxlciB3aWxsIHByZWZlciB0byBzY2hlZHVsZSBwb2RzIHRvIG5vZGVzIHRoYXQgc2F0aXNmeVxudGhlIGFmZmluaXR5IGV4cHJlc3Npb25zIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkLCBidXQgaXQgbWF5IGNob29zZVxuYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzXG5tb3N0IHByZWZlcnJlZCBpcyB0aGUgb25lIHdpdGggdGhlIGdyZWF0ZXN0IHN1bSBvZiB3ZWlnaHRzLCBpLmUuXG5mb3IgZWFjaCBub2RlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSBzY2hlZHVsaW5nIHJlcXVpcmVtZW50cyAocmVzb3VyY2VcbnJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksXG5jb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmdcblwid2VpZ2h0XCIgdG8gdGhlIHN1bSBpZiB0aGUgbm9kZSBoYXMgcG9kcyB3aGljaCBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybTsgdGhlXG5ub2RlKHMpIHdpdGggdGhlIGhpZ2hlc3Qgc3VtIGFyZSB0aGUgbW9zdCBwcmVmZXJyZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgd2VpZ2h0cyBvZiBhbGwgb2YgdGhlIG1hdGNoZWQgV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm0gZmllbGRzIGFyZSBhZGRlZCBwZXItbm9kZSB0byBmaW5kIHRoZSBtb3N0IHByZWZlcnJlZCBub2RlKHMpIiwicHJvcGVydGllcyI6eyJwb2RBZmZpbml0eVRlcm0iOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBwb2QgYWZmaW5pdHkgdGVybSwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHdlaWdodC4iLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy5cbklmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0XG5yZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpY1xubWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHNcbm1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZVxub3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGxcbmJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZVxuaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYGxhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWBcbnRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uXG5mb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmdcbnBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS5cblRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBtYXRjaExhYmVsS2V5cyBhbmQgbGFiZWxTZWxlY3Rvci5cbkFsc28sIG1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBsYWJlbFNlbGVjdG9yIGlzbid0IHNldC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWlzbWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNaXNtYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsXG5iZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBsYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvblxuZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nXG5wb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG5UaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggbWlzbWF0Y2hMYWJlbEtleXMgYW5kIGxhYmVsU2VsZWN0b3IuXG5BbHNvLCBtaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gbGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uXG5UaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkXG5hbmQgdGhlIG9uZXMgbGlzdGVkIGluIHRoZSBuYW1lc3BhY2VzIGZpZWxkLlxubnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLlxuQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by5cblRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGlzIGZpZWxkXG5hbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuXG5udWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZ1xudGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGVcbndob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZVxuc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLlxuRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ3ZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJ3ZWlnaHQgYXNzb2NpYXRlZCB3aXRoIG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybSxcbmluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwb2RBZmZpbml0eVRlcm0iLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sInJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGFyZSBub3QgbWV0IGF0XG5zY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuXG5JZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldFxuYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYSBwb2QgbGFiZWwgdXBkYXRlKSwgdGhlXG5zeXN0ZW0gbWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLlxuV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZWxlbWVudHMsIHRoZSBsaXN0cyBvZiBub2RlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2hcbnBvZEFmZmluaXR5VGVybSBhcmUgaW50ZXJzZWN0ZWQsIGkuZS4gYWxsIHRlcm1zIG11c3QgYmUgc2F0aXNmaWVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiRGVmaW5lcyBhIHNldCBvZiBwb2RzIChuYW1lbHkgdGhvc2UgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3JcbnJlbGF0aXZlIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UocykpIHRoYXQgdGhpcyBwb2Qgc2hvdWxkIGJlXG5jby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGgsXG53aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2ZcbnRoZSBsYWJlbCB3aXRoIGtleSBcdTAwM2N0b3BvbG9neUtleVx1MDAzZSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2hcbmEgcG9kIG9mIHRoZSBzZXQgb2YgcG9kcyBpcyBydW5uaW5nIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuXG5JZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsXG5iZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBsYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvblxuZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nXG5wb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG5UaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggbWF0Y2hMYWJlbEtleXMgYW5kIGxhYmVsU2VsZWN0b3IuXG5BbHNvLCBtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gbGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbFxuYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlXG5pbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgbGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYFxudG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb25cbmZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZ1xucG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LlxuVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIG1pc21hdGNoTGFiZWxLZXlzIGFuZCBsYWJlbFNlbGVjdG9yLlxuQWxzbywgbWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIGxhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLlxuVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC5cbm51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi5cbkFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXRcbnJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljXG5tZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVsc1xubWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlXG5vcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uXG5UaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLlxubnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmdcbnRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlXG53aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGVcbnNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy5cbkVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwb2RBbnRpQWZmaW5pdHkiOnsiZGVzY3JpcHRpb24iOiJEZXNjcmliZXMgcG9kIGFudGktYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyAoZS5nLiBhdm9pZCBwdXR0aW5nIHRoaXMgcG9kIGluIHRoZSBzYW1lIG5vZGUsIHpvbmUsIGV0Yy4gYXMgc29tZSBvdGhlciBwb2QocykpLiIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5XG50aGUgYW50aS1hZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2VcbmEgbm9kZSB0aGF0IHZpb2xhdGVzIG9uZSBvciBtb3JlIG9mIHRoZSBleHByZXNzaW9ucy4gVGhlIG5vZGUgdGhhdCBpc1xubW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLlxuZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlXG5yZXF1ZXN0LCByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmcgYW50aS1hZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksXG5jb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBzdWJ0cmFjdGluZ1xuXCJ3ZWlnaHRcIiBmcm9tIHRoZSBzdW0gaWYgdGhlIG5vZGUgaGFzIHBvZHMgd2hpY2ggbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm07IHRoZVxubm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHdlaWdodHMgb2YgYWxsIG9mIHRoZSBtYXRjaGVkIFdlaWdodGVkUG9kQWZmaW5pdHlUZXJtIGZpZWxkcyBhcmUgYWRkZWQgcGVyLW5vZGUgdG8gZmluZCB0aGUgbW9zdCBwcmVmZXJyZWQgbm9kZShzKSIsInByb3BlcnRpZXMiOnsicG9kQWZmaW5pdHlUZXJtIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgcG9kIGFmZmluaXR5IHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuXG5JZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsXG5iZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBsYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvblxuZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nXG5wb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG5UaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggbWF0Y2hMYWJlbEtleXMgYW5kIGxhYmVsU2VsZWN0b3IuXG5BbHNvLCBtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gbGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbFxuYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlXG5pbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgbGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYFxudG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb25cbmZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZ1xucG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LlxuVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIG1pc21hdGNoTGFiZWxLZXlzIGFuZCBsYWJlbFNlbGVjdG9yLlxuQWxzbywgbWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIGxhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLlxuVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC5cbm51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi5cbkFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXRcbnJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljXG5tZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVsc1xubWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlXG5vcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uXG5UaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZFxuYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLlxubnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmdcbnRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlXG53aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGVcbnNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy5cbkVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwid2VpZ2h0Ijp7ImRlc2NyaXB0aW9uIjoid2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm0sXG5pbiB0aGUgcmFuZ2UgMS0xMDAuIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsicG9kQWZmaW5pdHlUZXJtIiwid2VpZ2h0Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiSWYgdGhlIGFudGktYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGFyZSBub3QgbWV0IGF0XG5zY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuXG5JZiB0aGUgYW50aS1hZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgY2Vhc2UgdG8gYmUgbWV0XG5hdCBzb21lIHBvaW50IGR1cmluZyBwb2QgZXhlY3V0aW9uIChlLmcuIGR1ZSB0byBhIHBvZCBsYWJlbCB1cGRhdGUpLCB0aGVcbnN5c3RlbSBtYXkgb3IgbWF5IG5vdCB0cnkgdG8gZXZlbnR1YWxseSBldmljdCB0aGUgcG9kIGZyb20gaXRzIG5vZGUuXG5XaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGVtZW50cywgdGhlIGxpc3RzIG9mIG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaFxucG9kQWZmaW5pdHlUZXJtIGFyZSBpbnRlcnNlY3RlZCwgaS5lLiBhbGwgdGVybXMgbXVzdCBiZSBzYXRpc2ZpZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJEZWZpbmVzIGEgc2V0IG9mIHBvZHMgKG5hbWVseSB0aG9zZSBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvclxucmVsYXRpdmUgdG8gdGhlIGdpdmVuIG5hbWVzcGFjZShzKSkgdGhhdCB0aGlzIHBvZCBzaG91bGQgYmVcbmNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCxcbndoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZlxudGhlIGxhYmVsIHdpdGgga2V5IFx1MDAzY3RvcG9sb2d5S2V5XHUwMDNlIG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaFxuYSBwb2Qgb2YgdGhlIHNldCBvZiBwb2RzIGlzIHJ1bm5pbmciLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy5cbklmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0XG5yZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpY1xubWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHNcbm1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZVxub3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGxcbmJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZVxuaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYGxhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWBcbnRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uXG5mb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmdcbnBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS5cblRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBtYXRjaExhYmVsS2V5cyBhbmQgbGFiZWxTZWxlY3Rvci5cbkFsc28sIG1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBsYWJlbFNlbGVjdG9yIGlzbid0IHNldC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWlzbWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNaXNtYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsXG5iZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGVcbmluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBsYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvblxuZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nXG5wb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG5UaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggbWlzbWF0Y2hMYWJlbEtleXMgYW5kIGxhYmVsU2VsZWN0b3IuXG5BbHNvLCBtaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gbGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uXG5UaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkXG5hbmQgdGhlIG9uZXMgbGlzdGVkIGluIHRoZSBuYW1lc3BhY2VzIGZpZWxkLlxubnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLlxuQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by5cblRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGlzIGZpZWxkXG5hbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuXG5udWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZ1xudGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGVcbndob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZVxuc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLlxuRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sIm5vZGVTZWxlY3RvciI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoiTm9kZSBzZWxlY3RvciBjb25zdHJhaW50cyIsInR5cGUiOiJvYmplY3QifSwicmVwbGljYXMiOnsiZGVmYXVsdCI6MSwiZGVzY3JpcHRpb24iOiJEZWZpbmVzIHRoZSBudW1iZXIgb2YgZGVzaXJlZCBPTFMgcG9kcy4gRGVmYXVsdDogXCIxXCJcbk5vdGU6IFJlcGxpY2FzIGNhbiBvbmx5IGJlIGNoYW5nZWQgZm9yIEFQSUNvbnRhaW5lci4gRm9yIFBvc3RncmVTUUwgYW5kIENvbnNvbGUgY29udGFpbmVycyxcbnRoZSBudW1iZXIgb2YgcmVwbGljYXMgd2lsbCBhbHdheXMgYmUgc2V0IHRvIDEuIiwiZm9ybWF0IjoiaW50MzIiLCJtaW5pbXVtIjowLCJ0eXBlIjoiaW50ZWdlciJ9LCJyZXNvdXJjZXMiOnsiZGVzY3JpcHRpb24iOiJSZXNvdXJjZSByZXF1aXJlbWVudHMgKENQVSwgbWVtb3J5KVxuVXNlcyBzdGFuZGFyZCBjb3JldjEuUmVzb3VyY2VSZXF1aXJlbWVudHMiLCJwcm9wZXJ0aWVzIjp7ImNsYWltcyI6eyJkZXNjcmlwdGlvbiI6IkNsYWltcyBsaXN0cyB0aGUgbmFtZXMgb2YgcmVzb3VyY2VzLCBkZWZpbmVkIGluIHNwZWMucmVzb3VyY2VDbGFpbXMsXG50aGF0IGFyZSB1c2VkIGJ5IHRoaXMgY29udGFpbmVyLlxuXG5UaGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlXG5EeW5hbWljUmVzb3VyY2VBbGxvY2F0aW9uIGZlYXR1cmUgZ2F0ZS5cblxuVGhpcyBmaWVsZCBpcyBpbW11dGFibGUuIEl0IGNhbiBvbmx5IGJlIHNldCBmb3IgY29udGFpbmVycy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlQ2xhaW0gcmVmZXJlbmNlcyBvbmUgZW50cnkgaW4gUG9kU3BlYy5SZXNvdXJjZUNsYWltcy4iLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIGVudHJ5IGluIHBvZC5zcGVjLnJlc291cmNlQ2xhaW1zIG9mXG50aGUgUG9kIHdoZXJlIHRoaXMgZmllbGQgaXMgdXNlZC4gSXQgbWFrZXMgdGhhdCByZXNvdXJjZSBhdmFpbGFibGVcbmluc2lkZSBhIGNvbnRhaW5lci4iLCJ0eXBlIjoic3RyaW5nIn0sInJlcXVlc3QiOnsiZGVzY3JpcHRpb24iOiJSZXF1ZXN0IGlzIHRoZSBuYW1lIGNob3NlbiBmb3IgYSByZXF1ZXN0IGluIHRoZSByZWZlcmVuY2VkIGNsYWltLlxuSWYgZW1wdHksIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2xhaW0gaXMgbWFkZSBhdmFpbGFibGUsIG90aGVyd2lzZVxub25seSB0aGUgcmVzdWx0IG9mIHRoaXMgcmVxdWVzdC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtbWFwLWtleXMiOlsibmFtZSJdLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoibWFwIn0sImxpbWl0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJMaW1pdHMgZGVzY3JpYmVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyBhbGxvd2VkLlxuTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In0sInJlcXVlc3RzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IlJlcXVlc3RzIGRlc2NyaWJlcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuXG5JZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsXG5vdGhlcndpc2UgdG8gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZS4gUmVxdWVzdHMgY2Fubm90IGV4Y2VlZCBMaW1pdHMuXG5Nb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwidG9sZXJhdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJUb2xlcmF0aW9ucyBmb3IgcG9kIHNjaGVkdWxpbmdcblVzZXMgc3RhbmRhcmQgY29yZXYxLlRvbGVyYXRpb24iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzXG50aGUgdHJpcGxlIFx1MDAzY2tleSx2YWx1ZSxlZmZlY3RcdTAwM2UgdXNpbmcgdGhlIG1hdGNoaW5nIG9wZXJhdG9yIFx1MDAzY29wZXJhdG9yXHUwMDNlLiIsInByb3BlcnRpZXMiOnsiZWZmZWN0Ijp7ImRlc2NyaXB0aW9uIjoiRWZmZWN0IGluZGljYXRlcyB0aGUgdGFpbnQgZWZmZWN0IHRvIG1hdGNoLiBFbXB0eSBtZWFucyBtYXRjaCBhbGwgdGFpbnQgZWZmZWN0cy5cbldoZW4gc3BlY2lmaWVkLCBhbGxvd2VkIHZhbHVlcyBhcmUgTm9TY2hlZHVsZSwgUHJlZmVyTm9TY2hlZHVsZSBhbmQgTm9FeGVjdXRlLiIsInR5cGUiOiJzdHJpbmcifSwia2V5Ijp7ImRlc2NyaXB0aW9uIjoiS2V5IGlzIHRoZSB0YWludCBrZXkgdGhhdCB0aGUgdG9sZXJhdGlvbiBhcHBsaWVzIHRvLiBFbXB0eSBtZWFucyBtYXRjaCBhbGwgdGFpbnQga2V5cy5cbklmIHRoZSBrZXkgaXMgZW1wdHksIG9wZXJhdG9yIG11c3QgYmUgRXhpc3RzOyB0aGlzIGNvbWJpbmF0aW9uIG1lYW5zIHRvIG1hdGNoIGFsbCB2YWx1ZXMgYW5kIGFsbCBrZXlzLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJPcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIHRoZSB2YWx1ZS5cblZhbGlkIG9wZXJhdG9ycyBhcmUgRXhpc3RzLCBFcXVhbCwgTHQsIGFuZCBHdC4gRGVmYXVsdHMgdG8gRXF1YWwuXG5FeGlzdHMgaXMgZXF1aXZhbGVudCB0byB3aWxkY2FyZCBmb3IgdmFsdWUsIHNvIHRoYXQgYSBwb2QgY2FuXG50b2xlcmF0ZSBhbGwgdGFpbnRzIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeS5cbkx0IGFuZCBHdCBwZXJmb3JtIG51bWVyaWMgY29tcGFyaXNvbnMgKHJlcXVpcmVzIGZlYXR1cmUgZ2F0ZSBUYWludFRvbGVyYXRpb25Db21wYXJpc29uT3BlcmF0b3JzKS4iLCJ0eXBlIjoic3RyaW5nIn0sInRvbGVyYXRpb25TZWNvbmRzIjp7ImRlc2NyaXB0aW9uIjoiVG9sZXJhdGlvblNlY29uZHMgcmVwcmVzZW50cyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhlIHRvbGVyYXRpb24gKHdoaWNoIG11c3QgYmVcbm9mIGVmZmVjdCBOb0V4ZWN1dGUsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIGlnbm9yZWQpIHRvbGVyYXRlcyB0aGUgdGFpbnQuIEJ5IGRlZmF1bHQsXG5pdCBpcyBub3Qgc2V0LCB3aGljaCBtZWFucyB0b2xlcmF0ZSB0aGUgdGFpbnQgZm9yZXZlciAoZG8gbm90IGV2aWN0KS4gWmVybyBhbmRcbm5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgMCAoZXZpY3QgaW1tZWRpYXRlbHkpIGJ5IHRoZSBzeXN0ZW0uIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJ2YWx1ZSI6eyJkZXNjcmlwdGlvbiI6IlZhbHVlIGlzIHRoZSB0YWludCB2YWx1ZSB0aGUgdG9sZXJhdGlvbiBtYXRjaGVzIHRvLlxuSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cywgdGhlIHZhbHVlIHNob3VsZCBiZSBlbXB0eSwgb3RoZXJ3aXNlIGp1c3QgYSByZWd1bGFyIHN0cmluZy4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3kgc3ByZWFkIGNvbnN0cmFpbnRzIChjYW4gYmUgYWRkZWQgd2l0aG91dCBBUEkgdmVyc2lvbiBidW1wKVxuVXNlcyBzdGFuZGFyZCBjb3JldjEuVG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50IiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neVNwcmVhZENvbnN0cmFpbnQgc3BlY2lmaWVzIGhvdyB0byBzcHJlYWQgbWF0Y2hpbmcgcG9kcyBhbW9uZyB0aGUgZ2l2ZW4gdG9wb2xvZ3kuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiTGFiZWxTZWxlY3RvciBpcyB1c2VkIHRvIGZpbmQgbWF0Y2hpbmcgcG9kcy5cblBvZHMgdGhhdCBtYXRjaCB0aGlzIGxhYmVsIHNlbGVjdG9yIGFyZSBjb3VudGVkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHBvZHNcbmluIHRoZWlyIGNvcnJlc3BvbmRpbmcgdG9wb2xvZ3kgZG9tYWluLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdFxucmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWNcbm1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzXG5tYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGVcbm9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3QgdGhlIHBvZHMgb3ZlciB3aGljaFxuc3ByZWFkaW5nIHdpbGwgYmUgY2FsY3VsYXRlZC4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZVxuaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgQU5EZWQgd2l0aCBsYWJlbFNlbGVjdG9yXG50byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgb3ZlciB3aGljaCBzcHJlYWRpbmcgd2lsbCBiZSBjYWxjdWxhdGVkXG5mb3IgdGhlIGluY29taW5nIHBvZC4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLlxuTWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LlxuS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGxcbmJlIGlnbm9yZWQuIEEgbnVsbCBvciBlbXB0eSBsaXN0IG1lYW5zIG9ubHkgbWF0Y2ggYWdhaW5zdCBsYWJlbFNlbGVjdG9yLlxuXG5UaGlzIGlzIGEgYmV0YSBmaWVsZCBhbmQgcmVxdWlyZXMgdGhlIE1hdGNoTGFiZWxLZXlzSW5Qb2RUb3BvbG9neVNwcmVhZCBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZCAoZW5hYmxlZCBieSBkZWZhdWx0KS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF4U2tldyI6eyJkZXNjcmlwdGlvbiI6Ik1heFNrZXcgZGVzY3JpYmVzIHRoZSBkZWdyZWUgdG8gd2hpY2ggcG9kcyBtYXkgYmUgdW5ldmVubHkgZGlzdHJpYnV0ZWQuXG5XaGVuIGB3aGVuVW5zYXRpc2ZpYWJsZT1Eb05vdFNjaGVkdWxlYCwgaXQgaXMgdGhlIG1heGltdW0gcGVybWl0dGVkIGRpZmZlcmVuY2VcbmJldHdlZW4gdGhlIG51bWJlciBvZiBtYXRjaGluZyBwb2RzIGluIHRoZSB0YXJnZXQgdG9wb2xvZ3kgYW5kIHRoZSBnbG9iYWwgbWluaW11bS5cblRoZSBnbG9iYWwgbWluaW11bSBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgbWF0Y2hpbmcgcG9kcyBpbiBhbiBlbGlnaWJsZSBkb21haW5cbm9yIHplcm8gaWYgdGhlIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zIGlzIGxlc3MgdGhhbiBNaW5Eb21haW5zLlxuRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDEsIGFuZCBwb2RzIHdpdGggdGhlIHNhbWVcbmxhYmVsU2VsZWN0b3Igc3ByZWFkIGFzIDIvMi8xOlxuSW4gdGhpcyBjYXNlLCB0aGUgZ2xvYmFsIG1pbmltdW0gaXMgMS5cbnwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHxcbnwgIFAgUCAgfCAgUCBQICB8ICAgUCAgIHxcbi0gaWYgTWF4U2tldyBpcyAxLCBpbmNvbWluZyBwb2QgY2FuIG9ubHkgYmUgc2NoZWR1bGVkIHRvIHpvbmUzIHRvIGJlY29tZSAyLzIvMjtcbnNjaGVkdWxpbmcgaXQgb250byB6b25lMSh6b25lMikgd291bGQgbWFrZSB0aGUgQWN0dWFsU2tldygzLTEpIG9uIHpvbmUxKHpvbmUyKVxudmlvbGF0ZSBNYXhTa2V3KDEpLlxuLSBpZiBNYXhTa2V3IGlzIDIsIGluY29taW5nIHBvZCBjYW4gYmUgc2NoZWR1bGVkIG9udG8gYW55IHpvbmUuXG5XaGVuIGB3aGVuVW5zYXRpc2ZpYWJsZT1TY2hlZHVsZUFueXdheWAsIGl0IGlzIHVzZWQgdG8gZ2l2ZSBoaWdoZXIgcHJlY2VkZW5jZVxudG8gdG9wb2xvZ2llcyB0aGF0IHNhdGlzZnkgaXQuXG5JdCdzIGEgcmVxdWlyZWQgZmllbGQuIERlZmF1bHQgdmFsdWUgaXMgMSBhbmQgMCBpcyBub3QgYWxsb3dlZC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn0sIm1pbkRvbWFpbnMiOnsiZGVzY3JpcHRpb24iOiJNaW5Eb21haW5zIGluZGljYXRlcyBhIG1pbmltdW0gbnVtYmVyIG9mIGVsaWdpYmxlIGRvbWFpbnMuXG5XaGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgaXMgbGVzcyB0aGFuIG1pbkRvbWFpbnMsXG5Qb2QgVG9wb2xvZ3kgU3ByZWFkIHRyZWF0cyBcImdsb2JhbCBtaW5pbXVtXCIgYXMgMCwgYW5kIHRoZW4gdGhlIGNhbGN1bGF0aW9uIG9mIFNrZXcgaXMgcGVyZm9ybWVkLlxuQW5kIHdoZW4gdGhlIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zIHdpdGggbWF0Y2hpbmcgdG9wb2xvZ3kga2V5cyBlcXVhbHMgb3IgZ3JlYXRlciB0aGFuIG1pbkRvbWFpbnMsXG50aGlzIHZhbHVlIGhhcyBubyBlZmZlY3Qgb24gc2NoZWR1bGluZy5cbkFzIGEgcmVzdWx0LCB3aGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyBpcyBsZXNzIHRoYW4gbWluRG9tYWlucyxcbnNjaGVkdWxlciB3b24ndCBzY2hlZHVsZSBtb3JlIHRoYW4gbWF4U2tldyBQb2RzIHRvIHRob3NlIGRvbWFpbnMuXG5JZiB2YWx1ZSBpcyBuaWwsIHRoZSBjb25zdHJhaW50IGJlaGF2ZXMgYXMgaWYgTWluRG9tYWlucyBpcyBlcXVhbCB0byAxLlxuVmFsaWQgdmFsdWVzIGFyZSBpbnRlZ2VycyBncmVhdGVyIHRoYW4gMC5cbldoZW4gdmFsdWUgaXMgbm90IG5pbCwgV2hlblVuc2F0aXNmaWFibGUgbXVzdCBiZSBEb05vdFNjaGVkdWxlLlxuXG5Gb3IgZXhhbXBsZSwgaW4gYSAzLXpvbmUgY2x1c3RlciwgTWF4U2tldyBpcyBzZXQgdG8gMiwgTWluRG9tYWlucyBpcyBzZXQgdG8gNSBhbmQgcG9kcyB3aXRoIHRoZSBzYW1lXG5sYWJlbFNlbGVjdG9yIHNwcmVhZCBhcyAyLzIvMjpcbnwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHxcbnwgIFAgUCAgfCAgUCBQICB8ICBQIFAgIHxcblRoZSBudW1iZXIgb2YgZG9tYWlucyBpcyBsZXNzIHRoYW4gNShNaW5Eb21haW5zKSwgc28gXCJnbG9iYWwgbWluaW11bVwiIGlzIHRyZWF0ZWQgYXMgMC5cbkluIHRoaXMgc2l0dWF0aW9uLCBuZXcgcG9kIHdpdGggdGhlIHNhbWUgbGFiZWxTZWxlY3RvciBjYW5ub3QgYmUgc2NoZWR1bGVkLFxuYmVjYXVzZSBjb21wdXRlZCBza2V3IHdpbGwgYmUgMygzIC0gMCkgaWYgbmV3IFBvZCBpcyBzY2hlZHVsZWQgdG8gYW55IG9mIHRoZSB0aHJlZSB6b25lcyxcbml0IHdpbGwgdmlvbGF0ZSBNYXhTa2V3LiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwibm9kZUFmZmluaXR5UG9saWN5Ijp7ImRlc2NyaXB0aW9uIjoiTm9kZUFmZmluaXR5UG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBQb2QncyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yXG53aGVuIGNhbGN1bGF0aW5nIHBvZCB0b3BvbG9neSBzcHJlYWQgc2tldy4gT3B0aW9ucyBhcmU6XG4tIEhvbm9yOiBvbmx5IG5vZGVzIG1hdGNoaW5nIG5vZGVBZmZpbml0eS9ub2RlU2VsZWN0b3IgYXJlIGluY2x1ZGVkIGluIHRoZSBjYWxjdWxhdGlvbnMuXG4tIElnbm9yZTogbm9kZUFmZmluaXR5L25vZGVTZWxlY3RvciBhcmUgaWdub3JlZC4gQWxsIG5vZGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLlxuXG5JZiB0aGlzIHZhbHVlIGlzIG5pbCwgdGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEhvbm9yIHBvbGljeS4iLCJ0eXBlIjoic3RyaW5nIn0sIm5vZGVUYWludHNQb2xpY3kiOnsiZGVzY3JpcHRpb24iOiJOb2RlVGFpbnRzUG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBub2RlIHRhaW50cyB3aGVuIGNhbGN1bGF0aW5nXG5wb2QgdG9wb2xvZ3kgc3ByZWFkIHNrZXcuIE9wdGlvbnMgYXJlOlxuLSBIb25vcjogbm9kZXMgd2l0aG91dCB0YWludHMsIGFsb25nIHdpdGggdGFpbnRlZCBub2RlcyBmb3Igd2hpY2ggdGhlIGluY29taW5nIHBvZFxuaGFzIGEgdG9sZXJhdGlvbiwgYXJlIGluY2x1ZGVkLlxuLSBJZ25vcmU6IG5vZGUgdGFpbnRzIGFyZSBpZ25vcmVkLiBBbGwgbm9kZXMgYXJlIGluY2x1ZGVkLlxuXG5JZiB0aGlzIHZhbHVlIGlzIG5pbCwgdGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIElnbm9yZSBwb2xpY3kuIiwidHlwZSI6InN0cmluZyJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5S2V5IGlzIHRoZSBrZXkgb2Ygbm9kZSBsYWJlbHMuIE5vZGVzIHRoYXQgaGF2ZSBhIGxhYmVsIHdpdGggdGhpcyBrZXlcbmFuZCBpZGVudGljYWwgdmFsdWVzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluIHRoZSBzYW1lIHRvcG9sb2d5LlxuV2UgY29uc2lkZXIgZWFjaCBcdTAwM2NrZXksIHZhbHVlXHUwMDNlIGFzIGEgXCJidWNrZXRcIiwgYW5kIHRyeSB0byBwdXQgYmFsYW5jZWQgbnVtYmVyXG5vZiBwb2RzIGludG8gZWFjaCBidWNrZXQuXG5XZSBkZWZpbmUgYSBkb21haW4gYXMgYSBwYXJ0aWN1bGFyIGluc3RhbmNlIG9mIGEgdG9wb2xvZ3kuXG5BbHNvLCB3ZSBkZWZpbmUgYW4gZWxpZ2libGUgZG9tYWluIGFzIGEgZG9tYWluIHdob3NlIG5vZGVzIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZlxubm9kZUFmZmluaXR5UG9saWN5IGFuZCBub2RlVGFpbnRzUG9saWN5LlxuZS5nLiBJZiBUb3BvbG9neUtleSBpcyBcImt1YmVybmV0ZXMuaW8vaG9zdG5hbWVcIiwgZWFjaCBOb2RlIGlzIGEgZG9tYWluIG9mIHRoYXQgdG9wb2xvZ3kuXG5BbmQsIGlmIFRvcG9sb2d5S2V5IGlzIFwidG9wb2xvZ3kua3ViZXJuZXRlcy5pby96b25lXCIsIGVhY2ggem9uZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LlxuSXQncyBhIHJlcXVpcmVkIGZpZWxkLiIsInR5cGUiOiJzdHJpbmcifSwid2hlblVuc2F0aXNmaWFibGUiOnsiZGVzY3JpcHRpb24iOiJXaGVuVW5zYXRpc2ZpYWJsZSBpbmRpY2F0ZXMgaG93IHRvIGRlYWwgd2l0aCBhIHBvZCBpZiBpdCBkb2Vzbid0IHNhdGlzZnlcbnRoZSBzcHJlYWQgY29uc3RyYWludC5cbi0gRG9Ob3RTY2hlZHVsZSAoZGVmYXVsdCkgdGVsbHMgdGhlIHNjaGVkdWxlciBub3QgdG8gc2NoZWR1bGUgaXQuXG4tIFNjaGVkdWxlQW55d2F5IHRlbGxzIHRoZSBzY2hlZHVsZXIgdG8gc2NoZWR1bGUgdGhlIHBvZCBpbiBhbnkgbG9jYXRpb24sXG4gIGJ1dCBnaXZpbmcgaGlnaGVyIHByZWNlZGVuY2UgdG8gdG9wb2xvZ2llcyB0aGF0IHdvdWxkIGhlbHAgcmVkdWNlIHRoZVxuICBza2V3LlxuQSBjb25zdHJhaW50IGlzIGNvbnNpZGVyZWQgXCJVbnNhdGlzZmlhYmxlXCIgZm9yIGFuIGluY29taW5nIHBvZFxuaWYgYW5kIG9ubHkgaWYgZXZlcnkgcG9zc2libGUgbm9kZSBhc3NpZ25tZW50IGZvciB0aGF0IHBvZCB3b3VsZCB2aW9sYXRlXG5cIk1heFNrZXdcIiBvbiBzb21lIHRvcG9sb2d5LlxuRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDEsIGFuZCBwb2RzIHdpdGggdGhlIHNhbWVcbmxhYmVsU2VsZWN0b3Igc3ByZWFkIGFzIDMvMS8xOlxufCB6b25lMSB8IHpvbmUyIHwgem9uZTMgfFxufCBQIFAgUCB8ICAgUCAgIHwgICBQICAgfFxuSWYgV2hlblVuc2F0aXNmaWFibGUgaXMgc2V0IHRvIERvTm90U2NoZWR1bGUsIGluY29taW5nIHBvZCBjYW4gb25seSBiZSBzY2hlZHVsZWRcbnRvIHpvbmUyKHpvbmUzKSB0byBiZWNvbWUgMy8yLzEoMy8xLzIpIGFzIEFjdHVhbFNrZXcoMi0xKSBvbiB6b25lMih6b25lMykgc2F0aXNmaWVzXG5NYXhTa2V3KDEpLiBJbiBvdGhlciB3b3JkcywgdGhlIGNsdXN0ZXIgY2FuIHN0aWxsIGJlIGltYmFsYW5jZWQsIGJ1dCBzY2hlZHVsZXJcbndvbid0IG1ha2UgaXQgKm1vcmUqIGltYmFsYW5jZWQuXG5JdCdzIGEgcmVxdWlyZWQgZmllbGQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsibWF4U2tldyIsInRvcG9sb2d5S2V5Iiwid2hlblVuc2F0aXNmaWFibGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwibGxhbWFTdGFjayI6eyJkZXNjcmlwdGlvbiI6IkxsYW1hIFN0YWNrIGNvbnRhaW5lciBzZXR0aW5ncy4iLCJwcm9wZXJ0aWVzIjp7InJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlIHJlcXVpcmVtZW50cyAoQ1BVLCBtZW1vcnkpXG5Vc2VzIHN0YW5kYXJkIGNvcmV2MS5SZXNvdXJjZVJlcXVpcmVtZW50cyIsInByb3BlcnRpZXMiOnsiY2xhaW1zIjp7ImRlc2NyaXB0aW9uIjoiQ2xhaW1zIGxpc3RzIHRoZSBuYW1lcyBvZiByZXNvdXJjZXMsIGRlZmluZWQgaW4gc3BlYy5yZXNvdXJjZUNsYWltcyxcbnRoYXQgYXJlIHVzZWQgYnkgdGhpcyBjb250YWluZXIuXG5cblRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGVcbkR5bmFtaWNSZXNvdXJjZUFsbG9jYXRpb24gZmVhdHVyZSBnYXRlLlxuXG5UaGlzIGZpZWxkIGlzIGltbXV0YWJsZS4gSXQgY2FuIG9ubHkgYmUgc2V0IGZvciBjb250YWluZXJzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2VDbGFpbSByZWZlcmVuY2VzIG9uZSBlbnRyeSBpbiBQb2RTcGVjLlJlc291cmNlQ2xhaW1zLiIsInByb3BlcnRpZXMiOnsibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBvbmUgZW50cnkgaW4gcG9kLnNwZWMucmVzb3VyY2VDbGFpbXMgb2ZcbnRoZSBQb2Qgd2hlcmUgdGhpcyBmaWVsZCBpcyB1c2VkLiBJdCBtYWtlcyB0aGF0IHJlc291cmNlIGF2YWlsYWJsZVxuaW5zaWRlIGEgY29udGFpbmVyLiIsInR5cGUiOiJzdHJpbmcifSwicmVxdWVzdCI6eyJkZXNjcmlwdGlvbiI6IlJlcXVlc3QgaXMgdGhlIG5hbWUgY2hvc2VuIGZvciBhIHJlcXVlc3QgaW4gdGhlIHJlZmVyZW5jZWQgY2xhaW0uXG5JZiBlbXB0eSwgZXZlcnl0aGluZyBmcm9tIHRoZSBjbGFpbSBpcyBtYWRlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlXG5vbmx5IHRoZSByZXN1bHQgb2YgdGhpcyByZXF1ZXN0LiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC1tYXAta2V5cyI6WyJuYW1lIl0sIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJtYXAifSwibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuXG5Nb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifSwicmVxdWVzdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiUmVxdWVzdHMgZGVzY3JpYmVzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyByZXF1aXJlZC5cbklmIFJlcXVlc3RzIGlzIG9taXR0ZWQgZm9yIGEgY29udGFpbmVyLCBpdCBkZWZhdWx0cyB0byBMaW1pdHMgaWYgdGhhdCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCxcbm90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy5cbk1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJtY3BTZXJ2ZXIiOnsiZGVzY3JpcHRpb24iOiJNQ1Agc2VydmVyIGNvbnRhaW5lciBzZXR0aW5ncy4iLCJwcm9wZXJ0aWVzIjp7InJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlIHJlcXVpcmVtZW50cyAoQ1BVLCBtZW1vcnkpXG5Vc2VzIHN0YW5kYXJkIGNvcmV2MS5SZXNvdXJjZVJlcXVpcmVtZW50cyIsInByb3BlcnRpZXMiOnsiY2xhaW1zIjp7ImRlc2NyaXB0aW9uIjoiQ2xhaW1zIGxpc3RzIHRoZSBuYW1lcyBvZiByZXNvdXJjZXMsIGRlZmluZWQgaW4gc3BlYy5yZXNvdXJjZUNsYWltcyxcbnRoYXQgYXJlIHVzZWQgYnkgdGhpcyBjb250YWluZXIuXG5cblRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGVcbkR5bmFtaWNSZXNvdXJjZUFsbG9jYXRpb24gZmVhdHVyZSBnYXRlLlxuXG5UaGlzIGZpZWxkIGlzIGltbXV0YWJsZS4gSXQgY2FuIG9ubHkgYmUgc2V0IGZvciBjb250YWluZXJzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2VDbGFpbSByZWZlcmVuY2VzIG9uZSBlbnRyeSBpbiBQb2RTcGVjLlJlc291cmNlQ2xhaW1zLiIsInByb3BlcnRpZXMiOnsibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBvbmUgZW50cnkgaW4gcG9kLnNwZWMucmVzb3VyY2VDbGFpbXMgb2ZcbnRoZSBQb2Qgd2hlcmUgdGhpcyBmaWVsZCBpcyB1c2VkLiBJdCBtYWtlcyB0aGF0IHJlc291cmNlIGF2YWlsYWJsZVxuaW5zaWRlIGEgY29udGFpbmVyLiIsInR5cGUiOiJzdHJpbmcifSwicmVxdWVzdCI6eyJkZXNjcmlwdGlvbiI6IlJlcXVlc3QgaXMgdGhlIG5hbWUgY2hvc2VuIGZvciBhIHJlcXVlc3QgaW4gdGhlIHJlZmVyZW5jZWQgY2xhaW0uXG5JZiBlbXB0eSwgZXZlcnl0aGluZyBmcm9tIHRoZSBjbGFpbSBpcyBtYWRlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlXG5vbmx5IHRoZSByZXN1bHQgb2YgdGhpcyByZXF1ZXN0LiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC1tYXAta2V5cyI6WyJuYW1lIl0sIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJtYXAifSwibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuXG5Nb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifSwicmVxdWVzdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiUmVxdWVzdHMgZGVzY3JpYmVzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyByZXF1aXJlZC5cbklmIFJlcXVlc3RzIGlzIG9taXR0ZWQgZm9yIGEgY29udGFpbmVyLCBpdCBkZWZhdWx0cyB0byBMaW1pdHMgaWYgdGhhdCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCxcbm90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy5cbk1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJpbWFnZVB1bGxTZWNyZXRzIjp7ImRlc2NyaXB0aW9uIjoiUHVsbCBzZWNyZXRzIGZvciBCWU9LIFJBRyBpbWFnZXMgZnJvbSBpbWFnZSByZWdpc3RyaWVzIHJlcXVpcmluZyBhdXRoZW50aWNhdGlvbiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiTG9jYWxPYmplY3RSZWZlcmVuY2UgY29udGFpbnMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGxldCB5b3UgbG9jYXRlIHRoZVxucmVmZXJlbmNlZCBvYmplY3QgaW5zaWRlIHRoZSBzYW1lIG5hbWVzcGFjZS4iLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVmYXVsdCI6IiIsImRlc2NyaXB0aW9uIjoiTmFtZSBvZiB0aGUgcmVmZXJlbnQuXG5UaGlzIGZpZWxkIGlzIGVmZmVjdGl2ZWx5IHJlcXVpcmVkLCBidXQgZHVlIHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzXG5hbGxvd2VkIHRvIGJlIGVtcHR5LiBJbnN0YW5jZXMgb2YgdGhpcyB0eXBlIHdpdGggYW4gZW1wdHkgdmFsdWUgaGVyZSBhcmVcbmFsbW9zdCBjZXJ0YWlubHkgd3JvbmcuXG5Nb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL292ZXJ2aWV3L3dvcmtpbmctd2l0aC1vYmplY3RzL25hbWVzLyNuYW1lcyIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwidHlwZSI6ImFycmF5In0sImludHJvc3BlY3Rpb25FbmFibGVkIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlIGludHJvc3BlY3Rpb24gZmVhdHVyZXMgKGUuZy4gYnVpbHQtaW4gT3BlblNoaWZ0IE1DUCBzZXJ2ZXIpLiBPbWl0dGVkIG1lYW5zIHVzZSB0aGVcbkNSRCBkZWZhdWx0ICh0cnVlKTsgZXhwbGljaXQgZmFsc2UgZGlzYWJsZXMgaW50cm9zcGVjdGlvbi4iLCJ0eXBlIjoiYm9vbGVhbiJ9LCJsb2dMZXZlbCI6eyJkZWZhdWx0IjoiSU5GTyIsImRlc2NyaXB0aW9uIjoiTG9nIGxldmVsLiBWYWxpZCBvcHRpb25zIGFyZSBERUJVRywgSU5GTywgV0FSTklORywgRVJST1IgYW5kIENSSVRJQ0FMLiBEZWZhdWx0OiBcIklORk9cIi4iLCJlbnVtIjpbIkRFQlVHIiwiSU5GTyIsIldBUk5JTkciLCJFUlJPUiIsIkNSSVRJQ0FMIl0sInR5cGUiOiJzdHJpbmcifSwibWF4SXRlcmF0aW9ucyI6eyJkZWZhdWx0Ijo1LCJkZXNjcmlwdGlvbiI6Ik1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIGFnZW50IGV4ZWN1dGlvbi4gRGVmYXVsdDogNSIsIm1pbmltdW0iOjEsInR5cGUiOiJpbnRlZ2VyIn0sIm1jcEt1YmVTZXJ2ZXJDb25maWciOnsiZGVzY3JpcHRpb24iOiJNQ1AgS3ViZXJuZXRlcyBzZXJ2ZXIgY29uZmlndXJhdGlvbiIsInByb3BlcnRpZXMiOnsidGltZW91dCI6eyJkZWZhdWx0Ijo2MCwiZGVzY3JpcHRpb24iOiJUaW1lb3V0IGZvciB0aGUgTUNQIEt1YmUgc2VydmVyIGluIHNlY29uZHMsIGRlZmF1bHQgaXMgNjAiLCJtaW5pbXVtIjo1LCJ0eXBlIjoiaW50ZWdlciJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwcm94eUNvbmZpZyI6eyJkZXNjcmlwdGlvbiI6IlByb3h5IHNldHRpbmdzIGZvciBjb25uZWN0aW5nIHRvIGV4dGVybmFsIHNlcnZlcnMsIHN1Y2ggYXMgTExNIHByb3ZpZGVycy4iLCJwcm9wZXJ0aWVzIjp7InByb3h5Q0FDZXJ0aWZpY2F0ZSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBjb25maWdtYXAgYW5kIGtleSBob2xkaW5nIHByb3h5IENBIGNlcnRpZmljYXRlLlxuVGhlIGtleSBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCJwcm94eS1jYS5jcnRcIiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbklmIHlvdSB1c2UgYSBkaWZmZXJlbnQga2V5IG5hbWUgaW4geW91ciBDb25maWdNYXAsIHNwZWNpZnkgaXQgaW4gdGhlIEtleSBmaWVsZCBvZiBQcm94eUNBQ2VydENvbmZpZ01hcFJlZi4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZWZhdWx0IjoicHJveHktY2EuY3J0IiwiZGVzY3JpcHRpb24iOiJLZXkgaW4gdGhlIENvbmZpZ01hcCB0aGF0IGNvbnRhaW5zIHRoZSBwcm94eSBDQSBjZXJ0aWZpY2F0ZS5cbkRlZmF1bHRzIHRvIFwicHJveHktY2EuY3J0XCIgaWYgbm90IHNwZWNpZmllZC4iLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVmYXVsdCI6IiIsImRlc2NyaXB0aW9uIjoiTmFtZSBvZiB0aGUgcmVmZXJlbnQuXG5UaGlzIGZpZWxkIGlzIGVmZmVjdGl2ZWx5IHJlcXVpcmVkLCBidXQgZHVlIHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzXG5hbGxvd2VkIHRvIGJlIGVtcHR5LiBJbnN0YW5jZXMgb2YgdGhpcyB0eXBlIHdpdGggYW4gZW1wdHkgdmFsdWUgaGVyZSBhcmVcbmFsbW9zdCBjZXJ0YWlubHkgd3JvbmcuXG5Nb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL292ZXJ2aWV3L3dvcmtpbmctd2l0aC1vYmplY3RzL25hbWVzLyNuYW1lcyIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwicHJveHlVUkwiOnsiZGVzY3JpcHRpb24iOiJQcm94eSBVUkwsIGUuZy4gaHR0cHM6Ly9wcm94eS5leGFtcGxlLmNvbTo4MDgwXG5JZiBub3Qgc3BlY2lmaWVkLCB0aGUgY2x1c3RlciB3aWRlIHByb3h5IHdpbGwgYmUgdXNlZCwgdGhyb3VnaCBlbnYgdmFyIFwiaHR0cHNfcHJveHlcIi4iLCJwYXR0ZXJuIjoiXmh0dHBzPzovLy4qJCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwicXVlcnlGaWx0ZXJzIjp7ImRlc2NyaXB0aW9uIjoiUXVlcnkgZmlsdGVycyIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiUXVlcnlGaWx0ZXJzU3BlYyBkZWZpbmVzIGZpbHRlcnMgdG8gbWFuaXB1bGF0ZSBxdWVzdGlvbnMvcXVlcmllcy4iLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVzY3JpcHRpb24iOiJGaWx0ZXIgbmFtZS4iLCJ0eXBlIjoic3RyaW5nIn0sInBhdHRlcm4iOnsiZGVzY3JpcHRpb24iOiJGaWx0ZXIgcGF0dGVybi4iLCJ0eXBlIjoic3RyaW5nIn0sInJlcGxhY2VXaXRoIjp7ImRlc2NyaXB0aW9uIjoiUmVwbGFjZW1lbnQgZm9yIHRoZSBtYXRjaGVkIHBhdHRlcm4uIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicXVlcnlTeXN0ZW1Qcm9tcHQiOnsiZGVzY3JpcHRpb24iOiJDdXN0b20gc3lzdGVtIHByb21wdCBmb3IgTExNIHF1ZXJpZXMuIElmIG5vdCBzcGVjaWZpZWQsIHVzZXMgdGhlIGRlZmF1bHQgT3BlblNoaWZ0IExpZ2h0c3BlZWQgcHJvbXB0LiIsInR5cGUiOiJzdHJpbmcifSwicXVvdGFIYW5kbGVyc0NvbmZpZyI6eyJkZXNjcmlwdGlvbiI6IkxMTSBUb2tlbiBRdW90YSBDb25maWd1cmF0aW9uIiwicHJvcGVydGllcyI6eyJlbmFibGVUb2tlbkhpc3RvcnkiOnsiZGVzY3JpcHRpb24iOiJFbmFibGUgdG9rZW4gaGlzdG9yeSIsInR5cGUiOiJib29sZWFuIn0sImxpbWl0ZXJzQ29uZmlnIjp7ImRlc2NyaXB0aW9uIjoiVG9rZW4gcXVvdGEgbGltaXRlcnMiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkxpbWl0ZXJDb25maWcgZGVmaW5lcyBzZXR0aW5ncyBmb3IgYSB0b2tlbiBxdW90YSBsaW1pdGVyIiwicHJvcGVydGllcyI6eyJpbml0aWFsUXVvdGEiOnsiZGVzY3JpcHRpb24iOiJJbml0aWFsIHZhbHVlIG9mIHRoZSB0b2tlbiBxdW90YSIsIm1pbmltdW0iOjAsInR5cGUiOiJpbnRlZ2VyIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG9mIHRoZSBsaW1pdGVyIiwidHlwZSI6InN0cmluZyJ9LCJwZXJpb2QiOnsiZGVzY3JpcHRpb24iOiJQZXJpb2Qgb2YgdGltZSB0aGUgdG9rZW4gcXVvdGEgaXMgZm9yXG5FeGFtcGxlczogXCIxIGhvdXJcIiwgXCIzMCBtaW51dGVzXCIsIFwiMiBkYXlzXCIsIFwiMSBoXCIsIFwiMzAgbWluXCIsIFwiMiBkXCJcbkFjY2VwdHMgc2luZ3VsYXIgKGUuZy4sIFwiMSBzZWNvbmRcIikgb3IgcGx1cmFsIChlLmcuLCBcIjIgc2Vjb25kc1wiKSBmb3Jtc1xuU3VwcG9ydGVkIHVuaXRzOiBzZWNvbmQocyksIG1pbnV0ZShzKSwgaG91cihzKSwgZGF5KHMpLCBtb250aChzKSwgeWVhcihzKSBvciBzLCBtaW4sIGgsIGQsIG0sIHkiLCJwYXR0ZXJuIjoiXigxXFxzKyhzZWNvbmR8bWludXRlfGhvdXJ8ZGF5fG1vbnRofHllYXJ8c3xtaW58aHxkfG18eSl8KFsyLTldWzAtOV0qfFsxLTldWzAtOV17Mix9KVxccysoc2Vjb25kc3xtaW51dGVzfGhvdXJzfGRheXN8bW9udGhzfHllYXJzfHN8bWlufGh8ZHxtfHkpKSQiLCJ0eXBlIjoic3RyaW5nIn0sInF1b3RhSW5jcmVhc2UiOnsiZGVzY3JpcHRpb24iOiJUb2tlbiBxdW90YSBpbmNyZWFzZSBzdGVwIiwibWluaW11bSI6MCwidHlwZSI6ImludGVnZXIifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6IlR5cGUgb2YgdGhlIGxpbWl0ZXIiLCJlbnVtIjpbImNsdXN0ZXJfbGltaXRlciIsInVzZXJfbGltaXRlciJdLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJpbml0aWFsUXVvdGEiLCJuYW1lIiwicGVyaW9kIiwicXVvdGFJbmNyZWFzZSIsInR5cGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwicmFnIjp7ImRlc2NyaXB0aW9uIjoiUkFHIGRhdGFiYXNlcyIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiUkFHU3BlYyBkZWZpbmVzIGhvdyB0byByZXRyaWV2ZSBSQUcgZGF0YWJhc2VzLiIsInByb3BlcnRpZXMiOnsiaW1hZ2UiOnsiZGVzY3JpcHRpb24iOiJUaGUgVVJMIG9mIHRoZSBjb250YWluZXIgaW1hZ2UgdG8gdXNlIGFzIGEgUkFHIHNvdXJjZSIsInR5cGUiOiJzdHJpbmcifSwiaW5kZXhJRCI6eyJkZWZhdWx0IjoiIiwiZGVzY3JpcHRpb24iOiJUaGUgSW5kZXggSUQgb2YgdGhlIFJBRyBkYXRhYmFzZS4gT25seSBuZWVkZWQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGluZGljZXMgaW4gdGhlIGRhdGFiYXNlLiIsInR5cGUiOiJzdHJpbmcifSwiaW5kZXhQYXRoIjp7ImRlZmF1bHQiOiIvcmFnL3ZlY3Rvcl9kYiIsImRlc2NyaXB0aW9uIjoiVGhlIHBhdGggdG8gdGhlIFJBRyBkYXRhYmFzZSBpbnNpZGUgb2YgdGhlIGNvbnRhaW5lciBpbWFnZSIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImltYWdlIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInN0b3JhZ2UiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50IFN0b3JhZ2UgQ29uZmlndXJhdGlvbiIsInByb3BlcnRpZXMiOnsiY2xhc3MiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlIGNsYXNzIG9mIHRoZSByZXF1ZXN0ZWQgdm9sdW1lIiwidHlwZSI6InN0cmluZyJ9LCJzaXplIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwiZGVzY3JpcHRpb24iOiJTaXplIG9mIHRoZSByZXF1ZXN0ZWQgdm9sdW1lIiwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9fSwidHlwZSI6Im9iamVjdCJ9LCJ0bHNDb25maWciOnsiZGVzY3JpcHRpb24iOiJUTFMgY29uZmlndXJhdGlvbiBvZiB0aGUgTGlnaHRzcGVlZCBiYWNrZW5kJ3MgSFRUUFMgZW5kcG9pbnQiLCJwcm9wZXJ0aWVzIjp7ImtleUNlcnRTZWNyZXRSZWYiOnsiZGVzY3JpcHRpb24iOiJLZXlDZXJ0U2VjcmV0UmVmIHJlZmVyZW5jZXMgYSBTZWNyZXQgY29udGFpbmluZyBUTFMgY2VydGlmaWNhdGUgYW5kIGtleS5cblRoZSBTZWNyZXQgbXVzdCBjb250YWluIHRoZSBmb2xsb3dpbmcga2V5czpcbiAgLSB0bHMuY3J0OiBTZXJ2ZXIgY2VydGlmaWNhdGUgKFBFTSBmb3JtYXQpIC0gUkVRVUlSRURcbiAgLSB0bHMua2V5OiBQcml2YXRlIGtleSAoUEVNIGZvcm1hdCkgLSBSRVFVSVJFRFxuICAtIGNhLmNydDogQ0EgY2VydGlmaWNhdGUgZm9yIGNvbnNvbGUgcHJveHkgdHJ1c3QgKFBFTSBmb3JtYXQpIC0gT1BUSU9OQUxcblxuSWYgY2EuY3J0IGlzIG5vdCBwcm92aWRlZCwgdGhlIE9wZW5TaGlmdCBDb25zb2xlIHByb3h5IHdpbGwgdXNlIHRoZSBkZWZhdWx0IHN5c3RlbSB0cnVzdCBzdG9yZS4iLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVmYXVsdCI6IiIsImRlc2NyaXB0aW9uIjoiTmFtZSBvZiB0aGUgcmVmZXJlbnQuXG5UaGlzIGZpZWxkIGlzIGVmZmVjdGl2ZWx5IHJlcXVpcmVkLCBidXQgZHVlIHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzXG5hbGxvd2VkIHRvIGJlIGVtcHR5LiBJbnN0YW5jZXMgb2YgdGhpcyB0eXBlIHdpdGggYW4gZW1wdHkgdmFsdWUgaGVyZSBhcmVcbmFsbW9zdCBjZXJ0YWlubHkgd3JvbmcuXG5Nb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL292ZXJ2aWV3L3dvcmtpbmctd2l0aC1vYmplY3RzL25hbWVzLyNuYW1lcyIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifX0sInR5cGUiOiJvYmplY3QifSwidGxzU2VjdXJpdHlQcm9maWxlIjp7ImRlc2NyaXB0aW9uIjoiVExTIFNlY3VyaXR5IFByb2ZpbGUgdXNlZCBieSBBUEkgZW5kcG9pbnRzIiwicHJvcGVydGllcyI6eyJjdXN0b20iOnsiZGVzY3JpcHRpb24iOiJjdXN0b20gaXMgYSB1c2VyLWRlZmluZWQgVExTIHNlY3VyaXR5IHByb2ZpbGUuIEJlIGV4dHJlbWVseSBjYXJlZnVsIHVzaW5nIGEgY3VzdG9tXG5wcm9maWxlIGFzIGludmFsaWQgY29uZmlndXJhdGlvbnMgY2FuIGJlIGNhdGFzdHJvcGhpYy4gQW4gZXhhbXBsZSBjdXN0b20gcHJvZmlsZVxubG9va3MgbGlrZSB0aGlzOlxuXG4gIG1pblRMU1ZlcnNpb246IFZlcnNpb25UTFMxMVxuICBjaXBoZXJzOlxuICAgIC0gRUNESEUtRUNEU0EtQ0hBQ0hBMjAtUE9MWTEzMDVcbiAgICAtIEVDREhFLVJTQS1DSEFDSEEyMC1QT0xZMTMwNVxuICAgIC0gRUNESEUtUlNBLUFFUzEyOC1HQ00tU0hBMjU2XG4gICAgLSBFQ0RIRS1FQ0RTQS1BRVMxMjgtR0NNLVNIQTI1NiIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7ImNpcGhlcnMiOnsiZGVzY3JpcHRpb24iOiJjaXBoZXJzIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgY2lwaGVyIGFsZ29yaXRobXMgdGhhdCBhcmUgbmVnb3RpYXRlZFxuZHVyaW5nIHRoZSBUTFMgaGFuZHNoYWtlLiBPcGVyYXRvcnMgbWF5IHJlbW92ZSBlbnRyaWVzIHRoYXQgdGhlaXIgb3BlcmFuZHNcbmRvIG5vdCBzdXBwb3J0LiBGb3IgZXhhbXBsZSwgdG8gdXNlIG9ubHkgRUNESEUtUlNBLUFFUzEyOC1HQ00tU0hBMjU2ICh5YW1sKTpcblxuICBjaXBoZXJzOlxuICAgIC0gRUNESEUtUlNBLUFFUzEyOC1HQ00tU0hBMjU2XG5cblRMUyAxLjMgY2lwaGVyIHN1aXRlcyAoZS5nLiBUTFNfQUVTXzEyOF9HQ01fU0hBMjU2KSBhcmUgbm90IGNvbmZpZ3VyYWJsZVxuYW5kIGFyZSBhbHdheXMgZW5hYmxlZCB3aGVuIFRMUyAxLjMgaXMgbmVnb3RpYXRlZC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWluVExTVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6Im1pblRMU1ZlcnNpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBtaW5pbWFsIHZlcnNpb24gb2YgdGhlIFRMUyBwcm90b2NvbFxudGhhdCBpcyBuZWdvdGlhdGVkIGR1cmluZyB0aGUgVExTIGhhbmRzaGFrZS4gRm9yIGV4YW1wbGUsIHRvIHVzZSBUTFNcbnZlcnNpb25zIDEuMSwgMS4yIGFuZCAxLjMgKHlhbWwpOlxuXG4gIG1pblRMU1ZlcnNpb246IFZlcnNpb25UTFMxMSIsImVudW0iOlsiVmVyc2lvblRMUzEwIiwiVmVyc2lvblRMUzExIiwiVmVyc2lvblRMUzEyIiwiVmVyc2lvblRMUzEzIl0sInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwiaW50ZXJtZWRpYXRlIjp7ImRlc2NyaXB0aW9uIjoiaW50ZXJtZWRpYXRlIGlzIGEgVExTIHByb2ZpbGUgZm9yIHVzZSB3aGVuIHlvdSBkbyBub3QgbmVlZCBjb21wYXRpYmlsaXR5IHdpdGhcbmxlZ2FjeSBjbGllbnRzIGFuZCB3YW50IHRvIHJlbWFpbiBoaWdobHkgc2VjdXJlIHdoaWxlIGJlaW5nIGNvbXBhdGlibGUgd2l0aFxubW9zdCBjbGllbnRzIGN1cnJlbnRseSBpbiB1c2UuXG5cblRoaXMgcHJvZmlsZSBpcyBlcXVpdmFsZW50IHRvIGEgQ3VzdG9tIHByb2ZpbGUgc3BlY2lmaWVkIGFzOlxuICBtaW5UTFNWZXJzaW9uOiBWZXJzaW9uVExTMTJcbiAgY2lwaGVyczpcbiAgICAtIFRMU19BRVNfMTI4X0dDTV9TSEEyNTZcbiAgICAtIFRMU19BRVNfMjU2X0dDTV9TSEEzODRcbiAgICAtIFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTZcbiAgICAtIEVDREhFLUVDRFNBLUFFUzEyOC1HQ00tU0hBMjU2XG4gICAgLSBFQ0RIRS1SU0EtQUVTMTI4LUdDTS1TSEEyNTZcbiAgICAtIEVDREhFLUVDRFNBLUFFUzI1Ni1HQ00tU0hBMzg0XG4gICAgLSBFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODRcbiAgICAtIEVDREhFLUVDRFNBLUNIQUNIQTIwLVBPTFkxMzA1XG4gICAgLSBFQ0RIRS1SU0EtQ0hBQ0hBMjAtUE9MWTEzMDUiLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6Im9iamVjdCJ9LCJtb2Rlcm4iOnsiZGVzY3JpcHRpb24iOiJtb2Rlcm4gaXMgYSBUTFMgc2VjdXJpdHkgcHJvZmlsZSBmb3IgdXNlIHdpdGggY2xpZW50cyB0aGF0IHN1cHBvcnQgVExTIDEuMyBhbmRcbmRvIG5vdCBuZWVkIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIG9sZGVyIGNsaWVudHMuXG5cblRoaXMgcHJvZmlsZSBpcyBlcXVpdmFsZW50IHRvIGEgQ3VzdG9tIHByb2ZpbGUgc3BlY2lmaWVkIGFzOlxuICBtaW5UTFNWZXJzaW9uOiBWZXJzaW9uVExTMTNcbiAgY2lwaGVyczpcbiAgICAtIFRMU19BRVNfMTI4X0dDTV9TSEEyNTZcbiAgICAtIFRMU19BRVNfMjU2X0dDTV9TSEEzODRcbiAgICAtIFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYiLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6Im9iamVjdCJ9LCJvbGQiOnsiZGVzY3JpcHRpb24iOiJvbGQgaXMgYSBUTFMgcHJvZmlsZSBmb3IgdXNlIHdoZW4gc2VydmljZXMgbmVlZCB0byBiZSBhY2Nlc3NlZCBieSB2ZXJ5IG9sZFxuY2xpZW50cyBvciBsaWJyYXJpZXMgYW5kIHNob3VsZCBiZSB1c2VkIG9ubHkgYXMgYSBsYXN0IHJlc29ydC5cblxuVGhpcyBwcm9maWxlIGlzIGVxdWl2YWxlbnQgdG8gYSBDdXN0b20gcHJvZmlsZSBzcGVjaWZpZWQgYXM6XG4gIG1pblRMU1ZlcnNpb246IFZlcnNpb25UTFMxMFxuICBjaXBoZXJzOlxuICAgIC0gVExTX0FFU18xMjhfR0NNX1NIQTI1NlxuICAgIC0gVExTX0FFU18yNTZfR0NNX1NIQTM4NFxuICAgIC0gVExTX0NIQUNIQTIwX1BPTFkxMzA1X1NIQTI1NlxuICAgIC0gRUNESEUtRUNEU0EtQUVTMTI4LUdDTS1TSEEyNTZcbiAgICAtIEVDREhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NlxuICAgIC0gRUNESEUtRUNEU0EtQUVTMjU2LUdDTS1TSEEzODRcbiAgICAtIEVDREhFLVJTQS1BRVMyNTYtR0NNLVNIQTM4NFxuICAgIC0gRUNESEUtRUNEU0EtQ0hBQ0hBMjAtUE9MWTEzMDVcbiAgICAtIEVDREhFLVJTQS1DSEFDSEEyMC1QT0xZMTMwNVxuICAgIC0gRUNESEUtRUNEU0EtQUVTMTI4LVNIQTI1NlxuICAgIC0gRUNESEUtUlNBLUFFUzEyOC1TSEEyNTZcbiAgICAtIEVDREhFLUVDRFNBLUFFUzEyOC1TSEFcbiAgICAtIEVDREhFLVJTQS1BRVMxMjgtU0hBXG4gICAgLSBFQ0RIRS1FQ0RTQS1BRVMyNTYtU0hBXG4gICAgLSBFQ0RIRS1SU0EtQUVTMjU2LVNIQVxuICAgIC0gQUVTMTI4LUdDTS1TSEEyNTZcbiAgICAtIEFFUzI1Ni1HQ00tU0hBMzg0XG4gICAgLSBBRVMxMjgtU0hBMjU2XG4gICAgLSBBRVMxMjgtU0hBXG4gICAgLSBBRVMyNTYtU0hBXG4gICAgLSBERVMtQ0JDMy1TSEEiLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjp7ImRlc2NyaXB0aW9uIjoidHlwZSBpcyBvbmUgb2YgT2xkLCBJbnRlcm1lZGlhdGUsIE1vZGVybiBvciBDdXN0b20uIEN1c3RvbSBwcm92aWRlcyB0aGVcbmFiaWxpdHkgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIFRMUyBzZWN1cml0eSBwcm9maWxlIHBhcmFtZXRlcnMuXG5cblRoZSBwcm9maWxlcyBhcmUgYmFzZWQgb24gdmVyc2lvbiA1Ljcgb2YgdGhlIE1vemlsbGEgU2VydmVyIFNpZGUgVExTXG5jb25maWd1cmF0aW9uIGd1aWRlbGluZXMuIFRoZSBjaXBoZXIgbGlzdHMgY29uc2lzdCBvZiB0aGUgY29uZmlndXJhdGlvbidzXG5cImNpcGhlcnN1aXRlc1wiIGZvbGxvd2VkIGJ5IHRoZSBHby1zcGVjaWZpYyBcImNpcGhlcnNcIiBmcm9tIHRoZSBndWlkZWxpbmVzLlxuU2VlOiBodHRwczovL3NzbC1jb25maWcubW96aWxsYS5vcmcvZ3VpZGVsaW5lcy81LjcuanNvblxuXG5UaGUgcHJvZmlsZXMgYXJlIGludGVudCBiYXNlZCwgc28gdGhleSBtYXkgY2hhbmdlIG92ZXIgdGltZSBhcyBuZXcgY2lwaGVycyBhcmVcbmRldmVsb3BlZCBhbmQgZXhpc3RpbmcgY2lwaGVycyBhcmUgZm91bmQgdG8gYmUgaW5zZWN1cmUuIERlcGVuZGluZyBvblxucHJlY2lzZWx5IHdoaWNoIGNpcGhlcnMgYXJlIGF2YWlsYWJsZSB0byBhIHByb2Nlc3MsIHRoZSBsaXN0IG1heSBiZSByZWR1Y2VkLiIsImVudW0iOlsiT2xkIiwiSW50ZXJtZWRpYXRlIiwiTW9kZXJuIiwiQ3VzdG9tIl0sInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwidG9vbEZpbHRlcmluZ0NvbmZpZyI6eyJkZXNjcmlwdGlvbiI6IlRvb2wgZmlsdGVyaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGh5YnJpZCBSQUcgcmV0cmlldmFsLiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgdG9vbHMgYXJlIHVzZWQuIiwicHJvcGVydGllcyI6eyJhbHBoYSI6eyJkZWZhdWx0IjowLjgsImRlc2NyaXB0aW9uIjoiV2VpZ2h0IGZvciBkZW5zZSB2cyBzcGFyc2UgcmV0cmlldmFsICgxLjAgPSBmdWxsIGRlbnNlLCAwLjAgPSBmdWxsIHNwYXJzZSkiLCJ0eXBlIjoibnVtYmVyIn0sInRocmVzaG9sZCI6eyJkZWZhdWx0IjowLjAxLCJkZXNjcmlwdGlvbiI6Ik1pbmltdW0gc2ltaWxhcml0eSB0aHJlc2hvbGQgZm9yIGZpbHRlcmluZyByZXN1bHRzIiwidHlwZSI6Im51bWJlciJ9LCJ0b3BLIjp7ImRlZmF1bHQiOjEwLCJkZXNjcmlwdGlvbiI6Ik51bWJlciBvZiB0b29scyB0byByZXRyaWV2ZSIsIm1heGltdW0iOjUwLCJtaW5pbXVtIjoxLCJ0eXBlIjoiaW50ZWdlciJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy12YWxpZGF0aW9ucyI6W3sibWVzc2FnZSI6ImFscGhhIG11c3QgYmUgYmV0d2VlbiAwLjAgYW5kIDEuMCIsInJ1bGUiOiJzZWxmLmFscGhhIFx1MDAzZT0gMC4wIFx1MDAyNlx1MDAyNiBzZWxmLmFscGhhIFx1MDAzYz0gMS4wIn0seyJtZXNzYWdlIjoidGhyZXNob2xkIG11c3QgYmUgYmV0d2VlbiAwLjAgYW5kIDEuMCIsInJ1bGUiOiJzZWxmLnRocmVzaG9sZCBcdTAwM2U9IDAuMCBcdTAwMjZcdTAwMjYgc2VsZi50aHJlc2hvbGQgXHUwMDNjPSAxLjAifV19LCJ0b29sc0FwcHJvdmFsQ29uZmlnIjp7ImRlc2NyaXB0aW9uIjoiVG9vbCBleGVjdXRpb24gYXBwcm92YWwgY29uZmlndXJhdGlvbi4gQ29udHJvbHMgd2hldGhlciB0b29sIGNhbGxzIHJlcXVpcmUgdXNlciBhcHByb3ZhbCBiZWZvcmUgZXhlY3V0aW9uLiIsInByb3BlcnRpZXMiOnsiYXBwcm92YWxUaW1lb3V0Ijp7ImRlZmF1bHQiOjYwMCwiZGVzY3JpcHRpb24iOiJUaW1lb3V0IGluIHNlY29uZHMgZm9yIHdhaXRpbmcgZm9yIHVzZXIgYXBwcm92YWwiLCJtaW5pbXVtIjoxLCJ0eXBlIjoiaW50ZWdlciJ9LCJhcHByb3ZhbFR5cGUiOnsiZGVmYXVsdCI6InRvb2xfYW5ub3RhdGlvbnMiLCJkZXNjcmlwdGlvbiI6IkFwcHJvdmFsIHN0cmF0ZWd5IGZvciB0b29sIGV4ZWN1dGlvbi5cbiduZXZlcicgLSB0b29scyBleGVjdXRlIHdpdGhvdXQgYXBwcm92YWxcbidhbHdheXMnIC0gYWxsIHRvb2wgY2FsbHMgcmVxdWlyZSBhcHByb3ZhbFxuJ3Rvb2xfYW5ub3RhdGlvbnMnIC0gYXBwcm92YWwgYmFzZWQgb24gcGVyLXRvb2wgYW5ub3RhdGlvbnMiLCJlbnVtIjpbIm5ldmVyIiwiYWx3YXlzIiwidG9vbF9hbm5vdGF0aW9ucyJdLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInVzZXJEYXRhQ29sbGVjdGlvbiI6eyJkZXNjcmlwdGlvbiI6IlVzZXIgZGF0YSBjb2xsZWN0aW9uIHN3aXRjaGVzIiwicHJvcGVydGllcyI6eyJmZWVkYmFja0Rpc2FibGVkIjp7InR5cGUiOiJib29sZWFuIn0sInRyYW5zY3JpcHRzRGlzYWJsZWQiOnsidHlwZSI6ImJvb2xlYW4ifX0sInR5cGUiOiJvYmplY3QifX0sInJlcXVpcmVkIjpbImRlZmF1bHRNb2RlbCIsImRlZmF1bHRQcm92aWRlciJdLCJ0eXBlIjoib2JqZWN0In0sIm9sc0RhdGFDb2xsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJPTFNEYXRhQ29sbGVjdG9yU3BlYyBkZWZpbmVzIGFsbG93ZWQgT0xTIGRhdGEgY29sbGVjdG9yIGNvbmZpZ3VyYXRpb24uIiwicHJvcGVydGllcyI6eyJsb2dMZXZlbCI6eyJkZWZhdWx0IjoiSU5GTyIsImRlc2NyaXB0aW9uIjoiTG9nIGxldmVsLiBWYWxpZCBvcHRpb25zIGFyZSBERUJVRywgSU5GTywgV0FSTklORywgRVJST1IgYW5kIENSSVRJQ0FMLiBEZWZhdWx0OiBcIklORk9cIi4iLCJlbnVtIjpbIkRFQlVHIiwiSU5GTyIsIldBUk5JTkciLCJFUlJPUiIsIkNSSVRJQ0FMIl0sInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInJlcXVpcmVkIjpbImxsbSIsIm9scyJdLCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik9MU0NvbmZpZ1N0YXR1cyBkZWZpbmVzIHRoZSBvYnNlcnZlZCBzdGF0ZSBvZiBPTFMgZGVwbG95bWVudC4iLCJwcm9wZXJ0aWVzIjp7ImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJDb25kaXRpb25zIHJlcHJlc2VudCB0aGUgc3RhdGUgb2YgaW5kaXZpZHVhbCBjb21wb25lbnRzXG5BbHdheXMgcG9wdWxhdGVkIGFmdGVyIGZpcnN0IHJlY29uY2lsaWF0aW9uIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJDb25kaXRpb24gY29udGFpbnMgZGV0YWlscyBmb3Igb25lIGFzcGVjdCBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIEFQSSBSZXNvdXJjZS4iLCJwcm9wZXJ0aWVzIjp7Imxhc3RUcmFuc2l0aW9uVGltZSI6eyJkZXNjcmlwdGlvbiI6Imxhc3RUcmFuc2l0aW9uVGltZSBpcyB0aGUgbGFzdCB0aW1lIHRoZSBjb25kaXRpb24gdHJhbnNpdGlvbmVkIGZyb20gb25lIHN0YXR1cyB0byBhbm90aGVyLlxuVGhpcyBzaG91bGQgYmUgd2hlbiB0aGUgdW5kZXJseWluZyBjb25kaXRpb24gY2hhbmdlZC4gIElmIHRoYXQgaXMgbm90IGtub3duLCB0aGVuIHVzaW5nIHRoZSB0aW1lIHdoZW4gdGhlIEFQSSBmaWVsZCBjaGFuZ2VkIGlzIGFjY2VwdGFibGUuIiwiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJtZXNzYWdlIjp7ImRlc2NyaXB0aW9uIjoibWVzc2FnZSBpcyBhIGh1bWFuIHJlYWRhYmxlIG1lc3NhZ2UgaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IHRoZSB0cmFuc2l0aW9uLlxuVGhpcyBtYXkgYmUgYW4gZW1wdHkgc3RyaW5nLiIsIm1heExlbmd0aCI6MzI3NjgsInR5cGUiOiJzdHJpbmcifSwib2JzZXJ2ZWRHZW5lcmF0aW9uIjp7ImRlc2NyaXB0aW9uIjoib2JzZXJ2ZWRHZW5lcmF0aW9uIHJlcHJlc2VudHMgdGhlIC5tZXRhZGF0YS5nZW5lcmF0aW9uIHRoYXQgdGhlIGNvbmRpdGlvbiB3YXMgc2V0IGJhc2VkIHVwb24uXG5Gb3IgaW5zdGFuY2UsIGlmIC5tZXRhZGF0YS5nZW5lcmF0aW9uIGlzIGN1cnJlbnRseSAxMiwgYnV0IHRoZSAuc3RhdHVzLmNvbmRpdGlvbnNbeF0ub2JzZXJ2ZWRHZW5lcmF0aW9uIGlzIDksIHRoZSBjb25kaXRpb24gaXMgb3V0IG9mIGRhdGVcbndpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgaW5zdGFuY2UuIiwiZm9ybWF0IjoiaW50NjQiLCJtaW5pbXVtIjowLCJ0eXBlIjoiaW50ZWdlciJ9LCJyZWFzb24iOnsiZGVzY3JpcHRpb24iOiJyZWFzb24gY29udGFpbnMgYSBwcm9ncmFtbWF0aWMgaWRlbnRpZmllciBpbmRpY2F0aW5nIHRoZSByZWFzb24gZm9yIHRoZSBjb25kaXRpb24ncyBsYXN0IHRyYW5zaXRpb24uXG5Qcm9kdWNlcnMgb2Ygc3BlY2lmaWMgY29uZGl0aW9uIHR5cGVzIG1heSBkZWZpbmUgZXhwZWN0ZWQgdmFsdWVzIGFuZCBtZWFuaW5ncyBmb3IgdGhpcyBmaWVsZCxcbmFuZCB3aGV0aGVyIHRoZSB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgYSBndWFyYW50ZWVkIEFQSS5cblRoZSB2YWx1ZSBzaG91bGQgYmUgYSBDYW1lbENhc2Ugc3RyaW5nLlxuVGhpcyBmaWVsZCBtYXkgbm90IGJlIGVtcHR5LiIsIm1heExlbmd0aCI6MTAyNCwibWluTGVuZ3RoIjoxLCJwYXR0ZXJuIjoiXltBLVphLXpdKFtBLVphLXowLTlfLDpdKltBLVphLXowLTlfXSk/JCIsInR5cGUiOiJzdHJpbmcifSwic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoic3RhdHVzIG9mIHRoZSBjb25kaXRpb24sIG9uZSBvZiBUcnVlLCBGYWxzZSwgVW5rbm93bi4iLCJlbnVtIjpbIlRydWUiLCJGYWxzZSIsIlVua25vd24iXSwidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjp7ImRlc2NyaXB0aW9uIjoidHlwZSBvZiBjb25kaXRpb24gaW4gQ2FtZWxDYXNlIG9yIGluIGZvby5leGFtcGxlLmNvbS9DYW1lbENhc2UuIiwibWF4TGVuZ3RoIjozMTYsInBhdHRlcm4iOiJeKFthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KFxcLlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KSovKT8oKFtBLVphLXowLTldWy1BLVphLXowLTlfLl0qKT9bQS1aYS16MC05XSkkIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsibGFzdFRyYW5zaXRpb25UaW1lIiwibWVzc2FnZSIsInJlYXNvbiIsInN0YXR1cyIsInR5cGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwiZGlhZ25vc3RpY0luZm8iOnsiZGVzY3JpcHRpb24iOiJEaWFnbm9zdGljSW5mbyBwcm92aWRlcyBkZXRhaWxlZCB0cm91Ymxlc2hvb3RpbmcgaW5mb3JtYXRpb24gd2hlbiBkZXBsb3ltZW50cyBmYWlsLlxuRWFjaCBlbnRyeSBjb250YWlucyBwb2QtbGV2ZWwgZXJyb3IgZGV0YWlscyBmb3IgYSBzcGVjaWZpYyBjb21wb25lbnQuXG5UaGlzIGFycmF5IGlzIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGVkIHdoZW4gZGVwbG95bWVudHMgZmFpbCBhbmQgY2xlYXJlZCB3aGVuIHRoZXkgcmVjb3Zlci5cbk9ubHkgcHJlc2VudCBkdXJpbmcgZGVwbG95bWVudCBmYWlsdXJlcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlBvZERpYWdub3N0aWMgZGVzY3JpYmVzIGEgcG9kLWxldmVsIGlzc3VlIiwicHJvcGVydGllcyI6eyJjb250YWluZXJOYW1lIjp7ImRlc2NyaXB0aW9uIjoiQ29udGFpbmVyTmFtZSBpcyB0aGUgY29udGFpbmVyIHdpdGhpbiB0aGUgcG9kIHRoYXQgZmFpbGVkXG5FbXB0eSBpZiB0aGUgaXNzdWUgaXMgYXQgdGhlIHBvZCBsZXZlbCAoZS5nLiwgc2NoZWR1bGluZykiLCJ0eXBlIjoic3RyaW5nIn0sImV4aXRDb2RlIjp7ImRlc2NyaXB0aW9uIjoiRXhpdENvZGUgZm9yIHRlcm1pbmF0ZWQgY29udGFpbmVycyAob25seSBzZXQgZm9yIGNvbnRhaW5lciBmYWlsdXJlcykiLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn0sImZhaWxlZENvbXBvbmVudCI6eyJkZXNjcmlwdGlvbiI6IkZhaWxlZENvbXBvbmVudCBpZGVudGlmaWVzIHdoaWNoIGNvbXBvbmVudCB0aGlzIGRpYWdub3N0aWMgcmVsYXRlcyB0byxcbnVzaW5nIHRoZSBzYW1lIHR5cGUgYXMgdGhlIENvbmRpdGlvbnMgZmllbGQgKGUuZy4sIFwiQXBpUmVhZHlcIiwgXCJDYWNoZVJlYWR5XCIpXG5UaGlzIGFsbG93cyBlYXN5IGNvcnJlbGF0aW9uIGJldHdlZW4gY29uZGl0aW9uIHN0YXR1cyBhbmQgZGlhZ25vc3RpYyBkZXRhaWxzLiIsInR5cGUiOiJzdHJpbmcifSwibGFzdFVwZGF0ZWQiOnsiZGVzY3JpcHRpb24iOiJMYXN0VXBkYXRlZCBpcyB0aGUgdGltZXN0YW1wIHdoZW4gdGhpcyBkaWFnbm9zdGljIHdhcyBjb2xsZWN0ZWQiLCJmb3JtYXQiOiJkYXRlLXRpbWUiLCJ0eXBlIjoic3RyaW5nIn0sIm1lc3NhZ2UiOnsiZGVzY3JpcHRpb24iOiJNZXNzYWdlIHByb3ZpZGVzIGRldGFpbGVkIGVycm9yIGluZm9ybWF0aW9uIGZyb20gS3ViZXJuZXRlcyIsInR5cGUiOiJzdHJpbmcifSwicG9kTmFtZSI6eyJkZXNjcmlwdGlvbiI6IlBvZE5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIHBvZCB3aXRoIGlzc3VlcyIsInR5cGUiOiJzdHJpbmcifSwicmVhc29uIjp7ImRlc2NyaXB0aW9uIjoiUmVhc29uIGlzIHRoZSBmYWlsdXJlIHJlYXNvblxuRXhhbXBsZXM6IEltYWdlUHVsbEJhY2tPZmYsIENyYXNoTG9vcEJhY2tPZmYsIFVuc2NoZWR1bGFibGUsIE9PTUtpbGxlZCIsInR5cGUiOiJzdHJpbmcifSwidHlwZSI6eyJhbGxPZiI6W3siZW51bSI6WyJDb250YWluZXJXYWl0aW5nIiwiQ29udGFpbmVyVGVybWluYXRlZCIsIlBvZFNjaGVkdWxpbmciLCJQb2RDb25kaXRpb24iXX0seyJlbnVtIjpbIkNvbnRhaW5lcldhaXRpbmciLCJDb250YWluZXJUZXJtaW5hdGVkIiwiUG9kU2NoZWR1bGluZyIsIlBvZENvbmRpdGlvbiJdfV0sImRlc2NyaXB0aW9uIjoiVHlwZSBpbmRpY2F0ZXMgdGhlIGRpYWdub3N0aWMgdHlwZSIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImZhaWxlZENvbXBvbmVudCIsImxhc3RVcGRhdGVkIiwibWVzc2FnZSIsInBvZE5hbWUiLCJyZWFzb24iLCJ0eXBlIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm92ZXJhbGxTdGF0dXMiOnsiZGVzY3JpcHRpb24iOiJPdmVyYWxsU3RhdHVzIHByb3ZpZGVzIGEgaGlnaC1sZXZlbCBzdW1tYXJ5IG9mIHRoZSBlbnRpcmUgc3lzdGVtJ3MgaGVhbHRoLlxuQWdncmVnYXRlcyBhbGwgY29tcG9uZW50IGNvbmRpdGlvbnMgaW50byBhIHNpbmdsZSBzdGF0dXMgdmFsdWUuXG4tIFJlYWR5OiBBbGwgY29tcG9uZW50cyBhcmUgaGVhbHRoeVxuLSBOb3RSZWFkeTogQXQgbGVhc3Qgb25lIGNvbXBvbmVudCBpcyBub3QgcmVhZHkgKGNoZWNrIGNvbmRpdGlvbnMgZm9yIGRldGFpbHMpXG5BbHdheXMgc2V0IGFmdGVyIGZpcnN0IHJlY29uY2lsaWF0aW9uIiwiZW51bSI6WyJSZWFkeSIsIk5vdFJlYWR5Il0sInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImNvbmRpdGlvbnMiXSwidHlwZSI6Im9iamVjdCJ9fSwicmVxdWlyZWQiOlsic3BlYyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLXZhbGlkYXRpb25zIjpbeyJtZXNzYWdlIjoiLm1ldGFkYXRhLm5hbWUgbXVzdCBiZSAnY2x1c3RlciciLCJydWxlIjoic2VsZi5tZXRhZGF0YS5uYW1lID09ICdjbHVzdGVyJyJ9XX19LCJzZXJ2ZWQiOnRydWUsInN0b3JhZ2UiOnRydWUsInN1YnJlc291cmNlcyI6eyJzdGF0dXMiOnt9fX1dfSwic3RhdHVzIjp7ImFjY2VwdGVkTmFtZXMiOnsia2luZCI6IiIsInBsdXJhbCI6IiJ9LCJjb25kaXRpb25zIjpudWxsLCJzdG9yZWRWZXJzaW9ucyI6bnVsbH19 + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiYWxtLWV4YW1wbGVzIjoiW1xuICB7XG4gICAgXCJhcGlWZXJzaW9uXCI6IFwib2xzLm9wZW5zaGlmdC5pby92MWFscGhhMVwiLFxuICAgIFwia2luZFwiOiBcIk9MU0NvbmZpZ1wiLFxuICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgXCJsYWJlbHNcIjoge1xuICAgICAgICBcImFwcC5rdWJlcm5ldGVzLmlvL2NyZWF0ZWQtYnlcIjogXCJsaWdodHNwZWVkLW9wZXJhdG9yXCIsXG4gICAgICAgIFwiYXBwLmt1YmVybmV0ZXMuaW8vaW5zdGFuY2VcIjogXCJvbHNjb25maWctc2FtcGxlXCIsXG4gICAgICAgIFwiYXBwLmt1YmVybmV0ZXMuaW8vbWFuYWdlZC1ieVwiOiBcImt1c3RvbWl6ZVwiLFxuICAgICAgICBcImFwcC5rdWJlcm5ldGVzLmlvL25hbWVcIjogXCJvbHNjb25maWdcIixcbiAgICAgICAgXCJhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mXCI6IFwibGlnaHRzcGVlZC1vcGVyYXRvclwiXG4gICAgICB9LFxuICAgICAgXCJuYW1lXCI6IFwiY2x1c3RlclwiXG4gICAgfSxcbiAgICBcInNwZWNcIjoge1xuICAgICAgXCJsbG1cIjoge1xuICAgICAgICBcInByb3ZpZGVyc1wiOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJjcmVkZW50aWFsc1NlY3JldFJlZlwiOiB7XG4gICAgICAgICAgICAgIFwibmFtZVwiOiBcImNyZWRlbnRpYWxzXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm1vZGVsc1wiOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJncHQtMy41LXR1cmJvLTExMDZcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJuYW1lXCI6IFwiT3BlbkFJXCJcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIH1cbl0iLCJjYXBhYmlsaXRpZXMiOiJTZWFtbGVzcyBVcGdyYWRlcyIsImNvbnNvbGUub3BlbnNoaWZ0LmlvL29wZXJhdG9yLW1vbml0b3JpbmctZGVmYXVsdCI6InRydWUiLCJjcmVhdGVkQXQiOiIyMDI2LTA1LTEyVDA0OjQ4OjE2WiIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vY25mIjoiZmFsc2UiLCJmZWF0dXJlcy5vcGVyYXRvcnMub3BlbnNoaWZ0LmlvL2NuaSI6ImZhbHNlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby9jc2kiOiJmYWxzZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vZGlzY29ubmVjdGVkIjoidHJ1ZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vZmlwcy1jb21wbGlhbnQiOiJ0cnVlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby9wcm94eS1hd2FyZSI6ImZhbHNlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby90bHMtcHJvZmlsZXMiOiJmYWxzZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vdG9rZW4tYXV0aC1hd3MiOiJmYWxzZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vdG9rZW4tYXV0aC1henVyZSI6ImZhbHNlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby90b2tlbi1hdXRoLWdjcCI6ImZhbHNlIiwib3BlcmF0b3JmcmFtZXdvcmsuaW8vY2x1c3Rlci1tb25pdG9yaW5nIjoidHJ1ZSIsIm9wZXJhdG9yZnJhbWV3b3JrLmlvL3N1Z2dlc3RlZC1uYW1lc3BhY2UiOiJvcGVuc2hpZnQtbGlnaHRzcGVlZCIsIm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vdmFsaWQtc3Vic2NyaXB0aW9uIjoiW1wiT3BlblNoaWZ0IENvbnRhaW5lciBQbGF0Zm9ybVwiLCBcIk9wZW5TaGlmdCBQbGF0Zm9ybSBQbHVzXCIsIFwiT3BlblNoaWZ0IEt1YmVybmV0ZXMgRW5naW5lXCIsIFwiT3BlblNoaWZ0IFZpcnR1YWxpemF0aW9uIEVuZ2luZVwiXSIsIm9wZXJhdG9ycy5vcGVyYXRvcmZyYW1ld29yay5pby9idWlsZGVyIjoib3BlcmF0b3Itc2RrLXYxLjM2LjEiLCJvcGVyYXRvcnMub3BlcmF0b3JmcmFtZXdvcmsuaW8vcHJvamVjdF9sYXlvdXQiOiJnby5rdWJlYnVpbGRlci5pby92NCIsInJlcG9zaXRvcnkiOiJodHRwczovL2dpdGh1Yi5jb20vb3BlbnNoaWZ0L2xpZ2h0c3BlZWQtb3BlcmF0b3IifSwibmFtZSI6ImxpZ2h0c3BlZWQtb3BlcmF0b3IudjEuMC4xMyIsIm5hbWVzcGFjZSI6Im9wZW5zaGlmdC1saWdodHNwZWVkIn0sInNwZWMiOnsiYXBpc2VydmljZWRlZmluaXRpb25zIjp7fSwiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyI6eyJvd25lZCI6W3siZGVzY3JpcHRpb24iOiJSZWQgSGF0IE9wZW5TaGlmdCBMaWdodHNwZWVkIGluc3RhbmNlLiBPTFNDb25maWcgaXMgdGhlIFNjaGVtYSBmb3IgdGhlIG9sc2NvbmZpZ3MgQVBJIiwiZGlzcGxheU5hbWUiOiJPTFNDb25maWciLCJraW5kIjoiT0xTQ29uZmlnIiwibmFtZSI6Im9sc2NvbmZpZ3Mub2xzLm9wZW5zaGlmdC5pbyIsInNwZWNEZXNjcmlwdG9ycyI6W3siZGVzY3JpcHRpb24iOiJQcm92aWRlciBuYW1lIiwiZGlzcGxheU5hbWUiOiJOYW1lIiwicGF0aCI6ImxsbS5wcm92aWRlcnNbMF0ubmFtZSJ9LHsiZGVzY3JpcHRpb24iOiJPTFMgZGVwbG95bWVudCBzZXR0aW5ncyIsImRpc3BsYXlOYW1lIjoiRGVwbG95bWVudCIsInBhdGgiOiJvbHMuZGVwbG95bWVudCJ9LHsiZGVzY3JpcHRpb24iOiJQcm92aWRlciBBUEkgVVJMIiwiZGlzcGxheU5hbWUiOiJVUkwiLCJwYXRoIjoibGxtLnByb3ZpZGVyc1swXS51cmwifSx7ImRlc2NyaXB0aW9uIjoiQ29udmVyc2F0aW9uIGNhY2hlIHNldHRpbmdzIiwiZGlzcGxheU5hbWUiOiJDb252ZXJzYXRpb24gQ2FjaGUiLCJwYXRoIjoib2xzLmNvbnZlcnNhdGlvbkNhY2hlIn0seyJkZXNjcmlwdGlvbiI6IlRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgb2JqZWN0IHRoYXQgc3RvcmVzIEFQSSBwcm92aWRlciBjcmVkZW50aWFscyIsImRpc3BsYXlOYW1lIjoiQ3JlZGVudGlhbCBTZWNyZXQiLCJwYXRoIjoibGxtLnByb3ZpZGVyc1swXS5jcmVkZW50aWFsc1NlY3JldFJlZiJ9LHsiZGVzY3JpcHRpb24iOiJGZWF0dXJlIEdhdGVzIGhvbGRzIGxpc3Qgb2YgZmVhdHVyZXMgdG8gYmUgZW5hYmxlZCBleHBsaWNpdGx5LCBvdGhlcndpc2UgdGhleSBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC5cbnBvc3NpYmxlIHZhbHVlczogTUNQU2VydmVyLCBUb29sRmlsdGVyaW5nIiwiZGlzcGxheU5hbWUiOiJGZWF0dXJlIEdhdGVzIiwicGF0aCI6ImZlYXR1cmVHYXRlcyJ9LHsiZGlzcGxheU5hbWUiOiJMTE0gU2V0dGluZ3MiLCJwYXRoIjoibGxtIn0seyJkaXNwbGF5TmFtZSI6IlByb3ZpZGVycyIsInBhdGgiOiJsbG0ucHJvdmlkZXJzIn0seyJkZXNjcmlwdGlvbiI6IkFQSSBWZXJzaW9uIGZvciBBenVyZSBPcGVuQUkgcHJvdmlkZXIiLCJkaXNwbGF5TmFtZSI6IkF6dXJlIE9wZW5BSSBBUEkgVmVyc2lvbiIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLmFwaVZlcnNpb24ifSx7ImRlc2NyaXB0aW9uIjoiQXJiaXRyYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwcm92aWRlciAoTGxhbWEgU3RhY2sgR2VuZXJpYyBtb2RlIG9ubHkpXG5UaGlzIG1hcCBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gTGxhbWEgU3RhY2sgcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbkNyZWRlbnRpYWxzIGFyZSBhdXRvbWF0aWNhbGx5IGluamVjdGVkIGFzIGVudmlyb25tZW50IHZhcmlhYmxlIHN1YnN0aXR1dGlvbnMuXG5FeGFtcGxlOiB7XCJ1cmxcIjogXCJodHRwczovLy4uLlwiLCBcImN1c3RvbV9maWVsZFwiOiBcInZhbHVlXCJ9IiwiZGlzcGxheU5hbWUiOiJMbGFtYSBTdGFjayBQcm92aWRlciBDb25maWciLCJwYXRoIjoibGxtLnByb3ZpZGVyc1swXS5jb25maWcifSx7ImRlc2NyaXB0aW9uIjoiU2VjcmV0IGtleSBuYW1lIGZvciBwcm92aWRlciBjcmVkZW50aWFscyAoZGVmYXVsdHMgdG8gXCJhcGl0b2tlblwiIGlmIG5vdCBzZXQpLlxuU3BlY2lmaWVzIHdoaWNoIGtleSBpbnNpZGUgY3JlZGVudGlhbHNTZWNyZXRSZWYgdG8gcmVhZCB0aGUgY3JlZGVudGlhbCB2YWx1ZSBmcm9tLlxuVGhlIGNyZWRlbnRpYWwgdmFsdWUgaXMgYWx3YXlzIGV4cG9zZWQgdG8gdGhlIGNvbnRhaW5lciBhcyBlbnYgdmFyIHtQUk9WSURFUl9OQU1FfV9BUElfS0VZXG4oZGVyaXZlZCBmcm9tIHRoZSBwcm92aWRlciBuYW1lLCBub3QgdGhpcyBmaWVsZCksIGFuZCByZWZlcmVuY2VkIGluIHRoZSBMbGFtYSBTdGFjayBjb25maWdcbllBTUwgYXMgJHtlbnYuUFJPVklERVJfTkFNRV9BUElfS0VZfS4gVGhpcyBmaWVsZCBvbmx5IGNvbnRyb2xzIHdoaWNoIHNlY3JldCBkYXRhIGtleSBpcyByZWFkLiIsImRpc3BsYXlOYW1lIjoiQ3JlZGVudGlhbCBLZXkgTmFtZSIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLmNyZWRlbnRpYWxLZXkifSx7ImRlc2NyaXB0aW9uIjoiRGVwbG95bWVudCBuYW1lIGZvciBBenVyZSBPcGVuQUkgcHJvdmlkZXIiLCJkaXNwbGF5TmFtZSI6IkF6dXJlIERlcGxveW1lbnQgTmFtZSIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLmRlcGxveW1lbnROYW1lIn0seyJkZXNjcmlwdGlvbiI6IkZha2UgUHJvdmlkZXIgTUNQIFRvb2wgQ2FsbCIsImRpc3BsYXlOYW1lIjoiRmFrZSBQcm92aWRlciBNQ1AgVG9vbCBDYWxsIiwicGF0aCI6ImxsbS5wcm92aWRlcnNbMF0uZmFrZVByb3ZpZGVyTUNQVG9vbENhbGwifSx7ImRlc2NyaXB0aW9uIjoiR29vZ2xlIFZlcnRleCBBbnRocm9waWMgQ29uZmlnIiwiZGlzcGxheU5hbWUiOiJHb29nbGUgVmVydGV4IEFudGhyb3BpYyBDb25maWciLCJwYXRoIjoibGxtLnByb3ZpZGVyc1swXS5nb29nbGVWZXJ0ZXhBbnRocm9waWNDb25maWcifSx7ImRlc2NyaXB0aW9uIjoiU2VydmVyIHJlZ2lvbiBsb2NhdGlvbiIsImRpc3BsYXlOYW1lIjoiU2VydmVyIFJlZ2lvbiBMb2NhdGlvbiIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLmdvb2dsZVZlcnRleEFudGhyb3BpY0NvbmZpZy5sb2NhdGlvbiJ9LHsiZGVzY3JpcHRpb24iOiJHb29nbGUgQ2xvdWQgcHJvamVjdCBJRCIsImRpc3BsYXlOYW1lIjoiR29vZ2xlIENsb3VkIFByb2plY3QgSUQiLCJwYXRoIjoibGxtLnByb3ZpZGVyc1swXS5nb29nbGVWZXJ0ZXhBbnRocm9waWNDb25maWcucHJvamVjdElEIn0seyJkZXNjcmlwdGlvbiI6Ikdvb2dsZSBWZXJ0ZXggQ29uZmlnIiwiZGlzcGxheU5hbWUiOiJHb29nbGUgVmVydGV4IENvbmZpZyIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLmdvb2dsZVZlcnRleENvbmZpZyJ9LHsiZGVzY3JpcHRpb24iOiJTZXJ2ZXIgcmVnaW9uIGxvY2F0aW9uIiwiZGlzcGxheU5hbWUiOiJTZXJ2ZXIgUmVnaW9uIExvY2F0aW9uIiwicGF0aCI6ImxsbS5wcm92aWRlcnNbMF0uZ29vZ2xlVmVydGV4Q29uZmlnLmxvY2F0aW9uIn0seyJkZXNjcmlwdGlvbiI6Ikdvb2dsZSBDbG91ZCBwcm9qZWN0IElEIiwiZGlzcGxheU5hbWUiOiJHb29nbGUgQ2xvdWQgUHJvamVjdCBJRCIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLmdvb2dsZVZlcnRleENvbmZpZy5wcm9qZWN0SUQifSx7ImRlc2NyaXB0aW9uIjoiTGlzdCBvZiBtb2RlbHMgZnJvbSB0aGUgcHJvdmlkZXIiLCJkaXNwbGF5TmFtZSI6Ik1vZGVscyIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLm1vZGVscyJ9LHsiZGVzY3JpcHRpb24iOiJEZWZpbmVzIHRoZSBtb2RlbCdzIGNvbnRleHQgd2luZG93IHNpemUsIGluIHRva2Vucy4gVGhlIGRlZmF1bHQgaXMgMTI4ayB0b2tlbnMuIiwiZGlzcGxheU5hbWUiOiJDb250ZXh0IFdpbmRvdyBTaXplIiwicGF0aCI6ImxsbS5wcm92aWRlcnNbMF0ubW9kZWxzWzBdLmNvbnRleHRXaW5kb3dTaXplIn0seyJkZXNjcmlwdGlvbiI6Ik1vZGVsIG5hbWUiLCJkaXNwbGF5TmFtZSI6Ik5hbWUiLCJwYXRoIjoibGxtLnByb3ZpZGVyc1swXS5tb2RlbHNbMF0ubmFtZSJ9LHsiZGVzY3JpcHRpb24iOiJNb2RlbCBBUEkgcGFyYW1ldGVycyIsImRpc3BsYXlOYW1lIjoiUGFyYW1ldGVycyIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLm1vZGVsc1swXS5wYXJhbWV0ZXJzIn0seyJkZXNjcmlwdGlvbiI6Ik1heCB0b2tlbnMgZm9yIHJlc3BvbnNlLiBUaGUgZGVmYXVsdCBpcyAyMDQ4IHRva2Vucy4iLCJkaXNwbGF5TmFtZSI6Ik1heCBUb2tlbnMgRm9yIFJlc3BvbnNlIiwicGF0aCI6ImxsbS5wcm92aWRlcnNbMF0ubW9kZWxzWzBdLnBhcmFtZXRlcnMubWF4VG9rZW5zRm9yUmVzcG9uc2UifSx7ImRlc2NyaXB0aW9uIjoiUmF0aW8gb2YgY29udGV4dCB3aW5kb3cgc2l6ZSBhbGxvY2F0ZWQgZm9yIHRvb2wgdG9rZW4gYnVkZ2V0LiBNdXN0IGJlIGJldHdlZW4gMC4xIGFuZCAwLjUuIFRoZSBkZWZhdWx0IGlzIDAuNS4iLCJkaXNwbGF5TmFtZSI6IlRvb2wgQnVkZ2V0IFJhdGlvIiwicGF0aCI6ImxsbS5wcm92aWRlcnNbMF0ubW9kZWxzWzBdLnBhcmFtZXRlcnMudG9vbEJ1ZGdldFJhdGlvIn0seyJkZXNjcmlwdGlvbiI6Ik1vZGVsIEFQSSBVUkwiLCJkaXNwbGF5TmFtZSI6IlVSTCIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLm1vZGVsc1swXS51cmwifSx7ImRlc2NyaXB0aW9uIjoiV2F0c29ueCBQcm9qZWN0IElEIiwiZGlzcGxheU5hbWUiOiJXYXRzb254IFByb2plY3QgSUQiLCJwYXRoIjoibGxtLnByb3ZpZGVyc1swXS5wcm9qZWN0SUQifSx7ImRlc2NyaXB0aW9uIjoiTGxhbWEgU3RhY2sgR2VuZXJpYyBwcm92aWRlciB0eXBlIGZvciBwcm92aWRlciBjb25maWd1cmF0aW9uIChlLmcuLCBcInJlbW90ZTo6b3BlbmFpXCIsIFwiaW5saW5lOjpzZW50ZW5jZS10cmFuc2Zvcm1lcnNcIilcbldoZW4gc2V0LCB0aGlzIHByb3ZpZGVyIHVzZXMgTGxhbWEgU3RhY2sgR2VuZXJpYyBtb2RlIGluc3RlYWQgb2YgbGVnYWN5IG1vZGUuXG5NdXN0IGZvbGxvdyBwYXR0ZXJuOiAoaW5saW5lfHJlbW90ZSk6Olx1MDAzY3Byb3ZpZGVyLW5hbWVcdTAwM2UiLCJkaXNwbGF5TmFtZSI6IkxsYW1hIFN0YWNrIFByb3ZpZGVyIFR5cGUiLCJwYXRoIjoibGxtLnByb3ZpZGVyc1swXS5wcm92aWRlclR5cGUifSx7ImRlc2NyaXB0aW9uIjoiVExTIFNlY3VyaXR5IFByb2ZpbGUgdXNlZCBieSBjb25uZWN0aW9uIHRvIHByb3ZpZGVyIiwiZGlzcGxheU5hbWUiOiJUTFMgU2VjdXJpdHkgUHJvZmlsZSIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLnRsc1NlY3VyaXR5UHJvZmlsZSIsIngtZGVzY3JpcHRvcnMiOlsidXJuOmFsbTpkZXNjcmlwdG9yOmNvbS50ZWN0b25pYy51aTphZHZhbmNlZCJdfSx7ImRlc2NyaXB0aW9uIjoiUHJvdmlkZXIgdHlwZSIsImRpc3BsYXlOYW1lIjoiUHJvdmlkZXIgVHlwZSIsInBhdGgiOiJsbG0ucHJvdmlkZXJzWzBdLnR5cGUifSx7ImRlc2NyaXB0aW9uIjoiTUNQIFNlcnZlciBzZXR0aW5ncyIsImRpc3BsYXlOYW1lIjoiTUNQIFNlcnZlciBTZXR0aW5ncyIsInBhdGgiOiJtY3BTZXJ2ZXJzIn0seyJkZXNjcmlwdGlvbiI6IkhlYWRlcnMgdG8gc2VuZCB0byB0aGUgTUNQIHNlcnZlclxuRWFjaCBoZWFkZXIgY2FuIHJlZmVyZW5jZSBhIHNlY3JldCBvciB1c2UgYSBzcGVjaWFsIHNvdXJjZSAoa3ViZXJuZXRlcyB0b2tlbiwgY2xpZW50IHRva2VuKSIsImRpc3BsYXlOYW1lIjoiSGVhZGVycyIsInBhdGgiOiJtY3BTZXJ2ZXJzWzBdLmhlYWRlcnMifSx7ImRlc2NyaXB0aW9uIjoiTmFtZSBvZiB0aGUgaGVhZGVyIChlLmcuLCBcIkF1dGhvcml6YXRpb25cIiwgXCJYLUFQSS1LZXlcIikiLCJkaXNwbGF5TmFtZSI6IkhlYWRlciBOYW1lIiwicGF0aCI6Im1jcFNlcnZlcnNbMF0uaGVhZGVyc1swXS5uYW1lIn0seyJkZXNjcmlwdGlvbiI6IlNvdXJjZSBvZiB0aGUgaGVhZGVyIHZhbHVlIiwiZGlzcGxheU5hbWUiOiJWYWx1ZSBTb3VyY2UiLCJwYXRoIjoibWNwU2VydmVyc1swXS5oZWFkZXJzWzBdLnZhbHVlRnJvbSJ9LHsiZGVzY3JpcHRpb24iOiJSZWZlcmVuY2UgdG8gYSBzZWNyZXQgY29udGFpbmluZyB0aGUgaGVhZGVyIHZhbHVlLlxuUmVxdWlyZWQgd2hlbiBUeXBlIGlzIFwic2VjcmV0XCIuXG5UaGUgc2VjcmV0IG11c3QgZXhpc3QgaW4gdGhlIG9wZXJhdG9yJ3MgbmFtZXNwYWNlLiIsImRpc3BsYXlOYW1lIjoiU2VjcmV0IFJlZmVyZW5jZSIsInBhdGgiOiJtY3BTZXJ2ZXJzWzBdLmhlYWRlcnNbMF0udmFsdWVGcm9tLnNlY3JldFJlZiJ9LHsiZGVzY3JpcHRpb24iOiJUeXBlIHNwZWNpZmllcyB0aGUgc291cmNlIHR5cGUgZm9yIHRoZSBoZWFkZXIgdmFsdWUiLCJkaXNwbGF5TmFtZSI6IlNvdXJjZSBUeXBlIiwicGF0aCI6Im1jcFNlcnZlcnNbMF0uaGVhZGVyc1swXS52YWx1ZUZyb20udHlwZSJ9LHsiZGVzY3JpcHRpb24iOiJOYW1lIG9mIHRoZSBNQ1Agc2VydmVyIiwiZGlzcGxheU5hbWUiOiJOYW1lIiwicGF0aCI6Im1jcFNlcnZlcnNbMF0ubmFtZSJ9LHsiZGVzY3JpcHRpb24iOiJUaW1lb3V0IGZvciB0aGUgTUNQIHNlcnZlciBpbiBzZWNvbmRzLCBkZWZhdWx0IGlzIDUiLCJkaXNwbGF5TmFtZSI6IlRpbWVvdXQgKHNlY29uZHMpIiwicGF0aCI6Im1jcFNlcnZlcnNbMF0udGltZW91dCJ9LHsiZGVzY3JpcHRpb24iOiJVUkwgb2YgdGhlIE1DUCBzZXJ2ZXIgKEhUVFAvSFRUUFMpIiwiZGlzcGxheU5hbWUiOiJVUkwiLCJwYXRoIjoibWNwU2VydmVyc1swXS51cmwifSx7ImRpc3BsYXlOYW1lIjoiT0xTIFNldHRpbmdzIiwicGF0aCI6Im9scyJ9LHsiZGVzY3JpcHRpb24iOiJBZGRpdGlvbmFsIENBIGNlcnRpZmljYXRlcyBmb3IgVExTIGNvbW11bmljYXRpb24gYmV0d2VlbiBPTFMgc2VydmljZSBhbmQgTExNIFByb3ZpZGVyIiwiZGlzcGxheU5hbWUiOiJBZGRpdGlvbmFsIENBIENvbmZpZ21hcCIsInBhdGgiOiJvbHMuYWRkaXRpb25hbENBQ29uZmlnTWFwUmVmIiwieC1kZXNjcmlwdG9ycyI6WyJ1cm46YWxtOmRlc2NyaXB0b3I6Y29tLnRlY3RvbmljLnVpOmFkdmFuY2VkIl19LHsiZGVzY3JpcHRpb24iOiJPbmx5IHVzZSBCWU9LIFJBRyBzb3VyY2VzLCBpZ25vcmUgdGhlIE9wZW5TaGlmdCBkb2N1bWVudGF0aW9uIFJBRyIsImRpc3BsYXlOYW1lIjoiT25seSB1c2UgQllPSyBSQUcgc291cmNlcyIsInBhdGgiOiJvbHMuYnlva1JBR09ubHkiLCJ4LWRlc2NyaXB0b3JzIjpbInVybjphbG06ZGVzY3JpcHRvcjpjb20udGVjdG9uaWMudWk6Ym9vbGVhblN3aXRjaCJdfSx7ImRpc3BsYXlOYW1lIjoiUG9zdGdyZVNRTCBTZXR0aW5ncyIsInBhdGgiOiJvbHMuY29udmVyc2F0aW9uQ2FjaGUucG9zdGdyZXMifSx7ImRlc2NyaXB0aW9uIjoiUG9zdGdyZXMgbWF4Y29ubmVjdGlvbnMuIERlZmF1bHQ6IFwiMjAwMFwiIiwiZGlzcGxheU5hbWUiOiJNYXhpbXVtIENvbm5lY3Rpb25zIiwicGF0aCI6Im9scy5jb252ZXJzYXRpb25DYWNoZS5wb3N0Z3Jlcy5tYXhDb25uZWN0aW9ucyJ9LHsiZGVzY3JpcHRpb24iOiJQb3N0Z3JlcyBzaGFyZWRidWZmZXJzIiwiZGlzcGxheU5hbWUiOiJTaGFyZWQgQnVmZmVyIFNpemUiLCJwYXRoIjoib2xzLmNvbnZlcnNhdGlvbkNhY2hlLnBvc3RncmVzLnNoYXJlZEJ1ZmZlcnMifSx7ImRlc2NyaXB0aW9uIjoiQ29udmVyc2F0aW9uIGNhY2hlIHR5cGUuIERlZmF1bHQ6IFwicG9zdGdyZXNcIiIsImRpc3BsYXlOYW1lIjoiQ2FjaGUgVHlwZSIsInBhdGgiOiJvbHMuY29udmVyc2F0aW9uQ2FjaGUudHlwZSJ9LHsiZGVzY3JpcHRpb24iOiJEZWZhdWx0IG1vZGVsIGZvciB1c2FnZSIsImRpc3BsYXlOYW1lIjoiRGVmYXVsdCBNb2RlbCIsInBhdGgiOiJvbHMuZGVmYXVsdE1vZGVsIiwieC1kZXNjcmlwdG9ycyI6WyJ1cm46YWxtOmRlc2NyaXB0b3I6Y29tLnRlY3RvbmljLnVpOnRleHQiXX0seyJkZXNjcmlwdGlvbiI6IkRlZmF1bHQgcHJvdmlkZXIgZm9yIHVzYWdlIiwiZGlzcGxheU5hbWUiOiJEZWZhdWx0IFByb3ZpZGVyIiwicGF0aCI6Im9scy5kZWZhdWx0UHJvdmlkZXIiLCJ4LWRlc2NyaXB0b3JzIjpbInVybjphbG06ZGVzY3JpcHRvcjpjb20udGVjdG9uaWMudWk6dGV4dCJdfSx7ImRlc2NyaXB0aW9uIjoiQVBJIGNvbnRhaW5lciBzZXR0aW5ncy4iLCJkaXNwbGF5TmFtZSI6IkFQSSBEZXBsb3ltZW50IiwicGF0aCI6Im9scy5kZXBsb3ltZW50LmFwaSJ9LHsiZGVzY3JpcHRpb24iOiJEZWZpbmVzIHRoZSBudW1iZXIgb2YgZGVzaXJlZCBPTFMgcG9kcy4gRGVmYXVsdDogXCIxXCJcbk5vdGU6IFJlcGxpY2FzIGNhbiBvbmx5IGJlIGNoYW5nZWQgZm9yIEFQSUNvbnRhaW5lci4gRm9yIFBvc3RncmVTUUwgYW5kIENvbnNvbGUgY29udGFpbmVycyxcbnRoZSBudW1iZXIgb2YgcmVwbGljYXMgd2lsbCBhbHdheXMgYmUgc2V0IHRvIDEuIiwiZGlzcGxheU5hbWUiOiJOdW1iZXIgb2YgcmVwbGljYXMiLCJwYXRoIjoib2xzLmRlcGxveW1lbnQuYXBpLnJlcGxpY2FzIiwieC1kZXNjcmlwdG9ycyI6WyJ1cm46YWxtOmRlc2NyaXB0b3I6Y29tLnRlY3RvbmljLnVpOnBvZENvdW50Il19LHsiZGVzY3JpcHRpb24iOiJDb25zb2xlIGNvbnRhaW5lciBzZXR0aW5ncy4iLCJkaXNwbGF5TmFtZSI6IkNvbnNvbGUgRGVwbG95bWVudCIsInBhdGgiOiJvbHMuZGVwbG95bWVudC5jb25zb2xlIn0seyJkZXNjcmlwdGlvbiI6IkRlZmluZXMgdGhlIG51bWJlciBvZiBkZXNpcmVkIE9MUyBwb2RzLiBEZWZhdWx0OiBcIjFcIlxuTm90ZTogUmVwbGljYXMgY2FuIG9ubHkgYmUgY2hhbmdlZCBmb3IgQVBJQ29udGFpbmVyLiBGb3IgUG9zdGdyZVNRTCBhbmQgQ29uc29sZSBjb250YWluZXJzLFxudGhlIG51bWJlciBvZiByZXBsaWNhcyB3aWxsIGFsd2F5cyBiZSBzZXQgdG8gMS4iLCJkaXNwbGF5TmFtZSI6Ik51bWJlciBvZiByZXBsaWNhcyIsInBhdGgiOiJvbHMuZGVwbG95bWVudC5jb25zb2xlLnJlcGxpY2FzIiwieC1kZXNjcmlwdG9ycyI6WyJ1cm46YWxtOmRlc2NyaXB0b3I6Y29tLnRlY3RvbmljLnVpOnBvZENvdW50Il19LHsiZGVzY3JpcHRpb24iOiJEYXRhIENvbGxlY3RvciBjb250YWluZXIgc2V0dGluZ3MuIiwiZGlzcGxheU5hbWUiOiJEYXRhIENvbGxlY3RvciBDb250YWluZXIiLCJwYXRoIjoib2xzLmRlcGxveW1lbnQuZGF0YUNvbGxlY3RvciJ9LHsiZGVzY3JpcHRpb24iOiJEYXRhYmFzZSBjb250YWluZXIgc2V0dGluZ3MuIiwiZGlzcGxheU5hbWUiOiJEYXRhYmFzZSBEZXBsb3ltZW50IiwicGF0aCI6Im9scy5kZXBsb3ltZW50LmRhdGFiYXNlIn0seyJkZXNjcmlwdGlvbiI6IkRlZmluZXMgdGhlIG51bWJlciBvZiBkZXNpcmVkIE9MUyBwb2RzLiBEZWZhdWx0OiBcIjFcIlxuTm90ZTogUmVwbGljYXMgY2FuIG9ubHkgYmUgY2hhbmdlZCBmb3IgQVBJQ29udGFpbmVyLiBGb3IgUG9zdGdyZVNRTCBhbmQgQ29uc29sZSBjb250YWluZXJzLFxudGhlIG51bWJlciBvZiByZXBsaWNhcyB3aWxsIGFsd2F5cyBiZSBzZXQgdG8gMS4iLCJkaXNwbGF5TmFtZSI6Ik51bWJlciBvZiByZXBsaWNhcyIsInBhdGgiOiJvbHMuZGVwbG95bWVudC5kYXRhYmFzZS5yZXBsaWNhcyIsIngtZGVzY3JpcHRvcnMiOlsidXJuOmFsbTpkZXNjcmlwdG9yOmNvbS50ZWN0b25pYy51aTpwb2RDb3VudCJdfSx7ImRlc2NyaXB0aW9uIjoiTGxhbWEgU3RhY2sgY29udGFpbmVyIHNldHRpbmdzLiIsImRpc3BsYXlOYW1lIjoiTGxhbWEgU3RhY2sgQ29udGFpbmVyIiwicGF0aCI6Im9scy5kZXBsb3ltZW50LmxsYW1hU3RhY2sifSx7ImRlc2NyaXB0aW9uIjoiTUNQIHNlcnZlciBjb250YWluZXIgc2V0dGluZ3MuIiwiZGlzcGxheU5hbWUiOiJNQ1AgU2VydmVyIENvbnRhaW5lciIsInBhdGgiOiJvbHMuZGVwbG95bWVudC5tY3BTZXJ2ZXIifSx7ImRlc2NyaXB0aW9uIjoiUHVsbCBzZWNyZXRzIGZvciBCWU9LIFJBRyBpbWFnZXMgZnJvbSBpbWFnZSByZWdpc3RyaWVzIHJlcXVpcmluZyBhdXRoZW50aWNhdGlvbiIsImRpc3BsYXlOYW1lIjoiSW1hZ2UgUHVsbCBTZWNyZXRzIiwicGF0aCI6Im9scy5pbWFnZVB1bGxTZWNyZXRzIn0seyJkZXNjcmlwdGlvbiI6IkVuYWJsZSBpbnRyb3NwZWN0aW9uIGZlYXR1cmVzIChlLmcuIGJ1aWx0LWluIE9wZW5TaGlmdCBNQ1Agc2VydmVyKS4gT21pdHRlZCBtZWFucyB1c2UgdGhlXG5DUkQgZGVmYXVsdCAodHJ1ZSk7IGV4cGxpY2l0IGZhbHNlIGRpc2FibGVzIGludHJvc3BlY3Rpb24uIiwiZGlzcGxheU5hbWUiOiJJbnRyb3NwZWN0aW9uIEVuYWJsZWQiLCJwYXRoIjoib2xzLmludHJvc3BlY3Rpb25FbmFibGVkIiwieC1kZXNjcmlwdG9ycyI6WyJ1cm46YWxtOmRlc2NyaXB0b3I6Y29tLnRlY3RvbmljLnVpOmJvb2xlYW5Td2l0Y2giXX0seyJkZXNjcmlwdGlvbiI6IkxvZyBsZXZlbC4gVmFsaWQgb3B0aW9ucyBhcmUgREVCVUcsIElORk8sIFdBUk5JTkcsIEVSUk9SIGFuZCBDUklUSUNBTC4gRGVmYXVsdDogXCJJTkZPXCIuIiwiZGlzcGxheU5hbWUiOiJMb2cgbGV2ZWwiLCJwYXRoIjoib2xzLmxvZ0xldmVsIn0seyJkZXNjcmlwdGlvbiI6Ik1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIGFnZW50IGV4ZWN1dGlvbi4gRGVmYXVsdDogNSIsImRpc3BsYXlOYW1lIjoiTWF4IEl0ZXJhdGlvbnMiLCJwYXRoIjoib2xzLm1heEl0ZXJhdGlvbnMiLCJ4LWRlc2NyaXB0b3JzIjpbInVybjphbG06ZGVzY3JpcHRvcjpjb20udGVjdG9uaWMudWk6bnVtYmVyIl19LHsiZGVzY3JpcHRpb24iOiJNQ1AgS3ViZXJuZXRlcyBzZXJ2ZXIgY29uZmlndXJhdGlvbiIsImRpc3BsYXlOYW1lIjoiTUNQIEt1YmUgU2VydmVyIENvbmZpZ3VyYXRpb24iLCJwYXRoIjoib2xzLm1jcEt1YmVTZXJ2ZXJDb25maWciLCJ4LWRlc2NyaXB0b3JzIjpbInVybjphbG06ZGVzY3JpcHRvcjpjb20udGVjdG9uaWMudWk6YWR2YW5jZWQiXX0seyJkZXNjcmlwdGlvbiI6IlRpbWVvdXQgZm9yIHRoZSBNQ1AgS3ViZSBzZXJ2ZXIgaW4gc2Vjb25kcywgZGVmYXVsdCBpcyA2MCIsImRpc3BsYXlOYW1lIjoiVGltZW91dCAoc2Vjb25kcykiLCJwYXRoIjoib2xzLm1jcEt1YmVTZXJ2ZXJDb25maWcudGltZW91dCJ9LHsiZGVzY3JpcHRpb24iOiJQcm94eSBzZXR0aW5ncyBmb3IgY29ubmVjdGluZyB0byBleHRlcm5hbCBzZXJ2ZXJzLCBzdWNoIGFzIExMTSBwcm92aWRlcnMuIiwiZGlzcGxheU5hbWUiOiJQcm94eSBTZXR0aW5ncyIsInBhdGgiOiJvbHMucHJveHlDb25maWciLCJ4LWRlc2NyaXB0b3JzIjpbInVybjphbG06ZGVzY3JpcHRvcjpjb20udGVjdG9uaWMudWk6YWR2YW5jZWQiXX0seyJkZXNjcmlwdGlvbiI6IlRoZSBjb25maWdtYXAgYW5kIGtleSBob2xkaW5nIHByb3h5IENBIGNlcnRpZmljYXRlLlxuVGhlIGtleSBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCJwcm94eS1jYS5jcnRcIiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbklmIHlvdSB1c2UgYSBkaWZmZXJlbnQga2V5IG5hbWUgaW4geW91ciBDb25maWdNYXAsIHNwZWNpZnkgaXQgaW4gdGhlIEtleSBmaWVsZCBvZiBQcm94eUNBQ2VydENvbmZpZ01hcFJlZi4iLCJkaXNwbGF5TmFtZSI6IlByb3h5IENBIENlcnRpZmljYXRlIiwicGF0aCI6Im9scy5wcm94eUNvbmZpZy5wcm94eUNBQ2VydGlmaWNhdGUifSx7ImRlc2NyaXB0aW9uIjoiUHJveHkgVVJMLCBlLmcuIGh0dHBzOi8vcHJveHkuZXhhbXBsZS5jb206ODA4MFxuSWYgbm90IHNwZWNpZmllZCwgdGhlIGNsdXN0ZXIgd2lkZSBwcm94eSB3aWxsIGJlIHVzZWQsIHRocm91Z2ggZW52IHZhciBcImh0dHBzX3Byb3h5XCIuIiwiZGlzcGxheU5hbWUiOiJQcm94eSBVUkwiLCJwYXRoIjoib2xzLnByb3h5Q29uZmlnLnByb3h5VVJMIn0seyJkZXNjcmlwdGlvbiI6IlF1ZXJ5IGZpbHRlcnMiLCJkaXNwbGF5TmFtZSI6IlF1ZXJ5IEZpbHRlcnMiLCJwYXRoIjoib2xzLnF1ZXJ5RmlsdGVycyJ9LHsiZGVzY3JpcHRpb24iOiJGaWx0ZXIgbmFtZS4iLCJkaXNwbGF5TmFtZSI6IkZpbHRlciBOYW1lIiwicGF0aCI6Im9scy5xdWVyeUZpbHRlcnNbMF0ubmFtZSJ9LHsiZGVzY3JpcHRpb24iOiJGaWx0ZXIgcGF0dGVybi4iLCJkaXNwbGF5TmFtZSI6IlRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UiLCJwYXRoIjoib2xzLnF1ZXJ5RmlsdGVyc1swXS5wYXR0ZXJuIn0seyJkZXNjcmlwdGlvbiI6IlJlcGxhY2VtZW50IGZvciB0aGUgbWF0Y2hlZCBwYXR0ZXJuLiIsImRpc3BsYXlOYW1lIjoiUmVwbGFjZSBXaXRoIiwicGF0aCI6Im9scy5xdWVyeUZpbHRlcnNbMF0ucmVwbGFjZVdpdGgifSx7ImRlc2NyaXB0aW9uIjoiQ3VzdG9tIHN5c3RlbSBwcm9tcHQgZm9yIExMTSBxdWVyaWVzLiBJZiBub3Qgc3BlY2lmaWVkLCB1c2VzIHRoZSBkZWZhdWx0IE9wZW5TaGlmdCBMaWdodHNwZWVkIHByb21wdC4iLCJkaXNwbGF5TmFtZSI6IlF1ZXJ5IFN5c3RlbSBQcm9tcHQiLCJwYXRoIjoib2xzLnF1ZXJ5U3lzdGVtUHJvbXB0IiwieC1kZXNjcmlwdG9ycyI6WyJ1cm46YWxtOmRlc2NyaXB0b3I6Y29tLnRlY3RvbmljLnVpOmFkdmFuY2VkIl19LHsiZGVzY3JpcHRpb24iOiJMTE0gVG9rZW4gUXVvdGEgQ29uZmlndXJhdGlvbiIsImRpc3BsYXlOYW1lIjoiTExNIFRva2VuIFF1b3RhIENvbmZpZ3VyYXRpb24iLCJwYXRoIjoib2xzLnF1b3RhSGFuZGxlcnNDb25maWcifSx7ImRlc2NyaXB0aW9uIjoiRW5hYmxlIHRva2VuIGhpc3RvcnkiLCJkaXNwbGF5TmFtZSI6IkVuYWJsZSBUb2tlbiBIaXN0b3J5IiwicGF0aCI6Im9scy5xdW90YUhhbmRsZXJzQ29uZmlnLmVuYWJsZVRva2VuSGlzdG9yeSIsIngtZGVzY3JpcHRvcnMiOlsidXJuOmFsbTpkZXNjcmlwdG9yOmNvbS50ZWN0b25pYy51aTpib29sZWFuU3dpdGNoIl19LHsiZGVzY3JpcHRpb24iOiJUb2tlbiBxdW90YSBsaW1pdGVycyIsImRpc3BsYXlOYW1lIjoiVG9rZW4gUXVvdGEgTGltaXRlcnMiLCJwYXRoIjoib2xzLnF1b3RhSGFuZGxlcnNDb25maWcubGltaXRlcnNDb25maWciLCJ4LWRlc2NyaXB0b3JzIjpbInVybjphbG06ZGVzY3JpcHRvcjpjb20udGVjdG9uaWMudWk6YWR2YW5jZWQiXX0seyJkZXNjcmlwdGlvbiI6IkluaXRpYWwgdmFsdWUgb2YgdGhlIHRva2VuIHF1b3RhIiwiZGlzcGxheU5hbWUiOiJJbml0aWFsIFRva2VuIFF1b3RhIiwicGF0aCI6Im9scy5xdW90YUhhbmRsZXJzQ29uZmlnLmxpbWl0ZXJzQ29uZmlnWzBdLmluaXRpYWxRdW90YSJ9LHsiZGVzY3JpcHRpb24iOiJOYW1lIG9mIHRoZSBsaW1pdGVyIiwiZGlzcGxheU5hbWUiOiJMaW1pdGVyIE5hbWUiLCJwYXRoIjoib2xzLnF1b3RhSGFuZGxlcnNDb25maWcubGltaXRlcnNDb25maWdbMF0ubmFtZSJ9LHsiZGVzY3JpcHRpb24iOiJQZXJpb2Qgb2YgdGltZSB0aGUgdG9rZW4gcXVvdGEgaXMgZm9yXG5FeGFtcGxlczogXCIxIGhvdXJcIiwgXCIzMCBtaW51dGVzXCIsIFwiMiBkYXlzXCIsIFwiMSBoXCIsIFwiMzAgbWluXCIsIFwiMiBkXCJcbkFjY2VwdHMgc2luZ3VsYXIgKGUuZy4sIFwiMSBzZWNvbmRcIikgb3IgcGx1cmFsIChlLmcuLCBcIjIgc2Vjb25kc1wiKSBmb3Jtc1xuU3VwcG9ydGVkIHVuaXRzOiBzZWNvbmQocyksIG1pbnV0ZShzKSwgaG91cihzKSwgZGF5KHMpLCBtb250aChzKSwgeWVhcihzKSBvciBzLCBtaW4sIGgsIGQsIG0sIHkiLCJkaXNwbGF5TmFtZSI6IlBlcmlvZCBvZiBUaW1lIHRoZSBUb2tlbiBRdW90YSBJcyBGb3IiLCJwYXRoIjoib2xzLnF1b3RhSGFuZGxlcnNDb25maWcubGltaXRlcnNDb25maWdbMF0ucGVyaW9kIn0seyJkZXNjcmlwdGlvbiI6IlRva2VuIHF1b3RhIGluY3JlYXNlIHN0ZXAiLCJkaXNwbGF5TmFtZSI6IlRva2VuIFF1b3RhIEluY3JlYXNlIFN0ZXAiLCJwYXRoIjoib2xzLnF1b3RhSGFuZGxlcnNDb25maWcubGltaXRlcnNDb25maWdbMF0ucXVvdGFJbmNyZWFzZSJ9LHsiZGVzY3JpcHRpb24iOiJUeXBlIG9mIHRoZSBsaW1pdGVyIiwiZGlzcGxheU5hbWUiOiJMaW1pdGVyIFR5cGUuIEFjY2VwdGVkIFZhbHVlczogY2x1c3Rlcl9saW1pdGVyLCB1c2VyX2xpbWl0ZXIuIiwicGF0aCI6Im9scy5xdW90YUhhbmRsZXJzQ29uZmlnLmxpbWl0ZXJzQ29uZmlnWzBdLnR5cGUifSx7ImRlc2NyaXB0aW9uIjoiUkFHIGRhdGFiYXNlcyIsImRpc3BsYXlOYW1lIjoiUkFHIERhdGFiYXNlcyIsInBhdGgiOiJvbHMucmFnIiwieC1kZXNjcmlwdG9ycyI6WyJ1cm46YWxtOmRlc2NyaXB0b3I6Y29tLnRlY3RvbmljLnVpOmFkdmFuY2VkIl19LHsiZGVzY3JpcHRpb24iOiJUaGUgVVJMIG9mIHRoZSBjb250YWluZXIgaW1hZ2UgdG8gdXNlIGFzIGEgUkFHIHNvdXJjZSIsImRpc3BsYXlOYW1lIjoiSW1hZ2UiLCJwYXRoIjoib2xzLnJhZ1swXS5pbWFnZSJ9LHsiZGVzY3JpcHRpb24iOiJUaGUgSW5kZXggSUQgb2YgdGhlIFJBRyBkYXRhYmFzZS4gT25seSBuZWVkZWQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGluZGljZXMgaW4gdGhlIGRhdGFiYXNlLiIsImRpc3BsYXlOYW1lIjoiSW5kZXggSUQiLCJwYXRoIjoib2xzLnJhZ1swXS5pbmRleElEIn0seyJkZXNjcmlwdGlvbiI6IlRoZSBwYXRoIHRvIHRoZSBSQUcgZGF0YWJhc2UgaW5zaWRlIG9mIHRoZSBjb250YWluZXIgaW1hZ2UiLCJkaXNwbGF5TmFtZSI6IkluZGV4IFBhdGggaW4gdGhlIEltYWdlIiwicGF0aCI6Im9scy5yYWdbMF0uaW5kZXhQYXRoIn0seyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnQgU3RvcmFnZSBDb25maWd1cmF0aW9uIiwiZGlzcGxheU5hbWUiOiJQZXJzaXN0ZW50IFN0b3JhZ2UgQ29uZmlndXJhdGlvbiIsInBhdGgiOiJvbHMuc3RvcmFnZSIsIngtZGVzY3JpcHRvcnMiOlsidXJuOmFsbTpkZXNjcmlwdG9yOmNvbS50ZWN0b25pYy51aTphZHZhbmNlZCJdfSx7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZSBjbGFzcyBvZiB0aGUgcmVxdWVzdGVkIHZvbHVtZSIsImRpc3BsYXlOYW1lIjoiU3RvcmFnZSBDbGFzcyBvZiB0aGUgUmVxdWVzdGVkIFZvbHVtZSIsInBhdGgiOiJvbHMuc3RvcmFnZS5jbGFzcyJ9LHsiZGVzY3JpcHRpb24iOiJTaXplIG9mIHRoZSByZXF1ZXN0ZWQgdm9sdW1lIiwiZGlzcGxheU5hbWUiOiJTaXplIG9mIHRoZSBSZXF1ZXN0ZWQgVm9sdW1lIiwicGF0aCI6Im9scy5zdG9yYWdlLnNpemUifSx7ImRlc2NyaXB0aW9uIjoiVExTIGNvbmZpZ3VyYXRpb24gb2YgdGhlIExpZ2h0c3BlZWQgYmFja2VuZCdzIEhUVFBTIGVuZHBvaW50IiwiZGlzcGxheU5hbWUiOiJUTFMgQ29uZmlndXJhdGlvbiIsInBhdGgiOiJvbHMudGxzQ29uZmlnIn0seyJkZXNjcmlwdGlvbiI6IktleUNlcnRTZWNyZXRSZWYgcmVmZXJlbmNlcyBhIFNlY3JldCBjb250YWluaW5nIFRMUyBjZXJ0aWZpY2F0ZSBhbmQga2V5LlxuVGhlIFNlY3JldCBtdXN0IGNvbnRhaW4gdGhlIGZvbGxvd2luZyBrZXlzOlxuICAtIHRscy5jcnQ6IFNlcnZlciBjZXJ0aWZpY2F0ZSAoUEVNIGZvcm1hdCkgLSBSRVFVSVJFRFxuICAtIHRscy5rZXk6IFByaXZhdGUga2V5IChQRU0gZm9ybWF0KSAtIFJFUVVJUkVEXG4gIC0gY2EuY3J0OiBDQSBjZXJ0aWZpY2F0ZSBmb3IgY29uc29sZSBwcm94eSB0cnVzdCAoUEVNIGZvcm1hdCkgLSBPUFRJT05BTFxuXG5cbklmIGNhLmNydCBpcyBub3QgcHJvdmlkZWQsIHRoZSBPcGVuU2hpZnQgQ29uc29sZSBwcm94eSB3aWxsIHVzZSB0aGUgZGVmYXVsdCBzeXN0ZW0gdHJ1c3Qgc3RvcmUuIiwiZGlzcGxheU5hbWUiOiJUTFMgQ2VydGlmaWNhdGUgU2VjcmV0IFJlZmVyZW5jZSIsInBhdGgiOiJvbHMudGxzQ29uZmlnLmtleUNlcnRTZWNyZXRSZWYifSx7ImRlc2NyaXB0aW9uIjoiVExTIFNlY3VyaXR5IFByb2ZpbGUgdXNlZCBieSBBUEkgZW5kcG9pbnRzIiwiZGlzcGxheU5hbWUiOiJUTFMgU2VjdXJpdHkgUHJvZmlsZSIsInBhdGgiOiJvbHMudGxzU2VjdXJpdHlQcm9maWxlIiwieC1kZXNjcmlwdG9ycyI6WyJ1cm46YWxtOmRlc2NyaXB0b3I6Y29tLnRlY3RvbmljLnVpOmFkdmFuY2VkIl19LHsiZGVzY3JpcHRpb24iOiJUb29sIGZpbHRlcmluZyBjb25maWd1cmF0aW9uIGZvciBoeWJyaWQgUkFHIHJldHJpZXZhbC4gSWYgbm90IHNwZWNpZmllZCwgYWxsIHRvb2xzIGFyZSB1c2VkLiIsImRpc3BsYXlOYW1lIjoiVG9vbCBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbiIsInBhdGgiOiJvbHMudG9vbEZpbHRlcmluZ0NvbmZpZyIsIngtZGVzY3JpcHRvcnMiOlsidXJuOmFsbTpkZXNjcmlwdG9yOmNvbS50ZWN0b25pYy51aTphZHZhbmNlZCJdfSx7ImRlc2NyaXB0aW9uIjoiV2VpZ2h0IGZvciBkZW5zZSB2cyBzcGFyc2UgcmV0cmlldmFsICgxLjAgPSBmdWxsIGRlbnNlLCAwLjAgPSBmdWxsIHNwYXJzZSkiLCJkaXNwbGF5TmFtZSI6IkFscGhhIFdlaWdodCIsInBhdGgiOiJvbHMudG9vbEZpbHRlcmluZ0NvbmZpZy5hbHBoYSJ9LHsiZGVzY3JpcHRpb24iOiJNaW5pbXVtIHNpbWlsYXJpdHkgdGhyZXNob2xkIGZvciBmaWx0ZXJpbmcgcmVzdWx0cyIsImRpc3BsYXlOYW1lIjoiU2ltaWxhcml0eSBUaHJlc2hvbGQiLCJwYXRoIjoib2xzLnRvb2xGaWx0ZXJpbmdDb25maWcudGhyZXNob2xkIn0seyJkZXNjcmlwdGlvbiI6Ik51bWJlciBvZiB0b29scyB0byByZXRyaWV2ZSIsImRpc3BsYXlOYW1lIjoiVG9wIEsiLCJwYXRoIjoib2xzLnRvb2xGaWx0ZXJpbmdDb25maWcudG9wSyJ9LHsiZGVzY3JpcHRpb24iOiJUb29sIGV4ZWN1dGlvbiBhcHByb3ZhbCBjb25maWd1cmF0aW9uLiBDb250cm9scyB3aGV0aGVyIHRvb2wgY2FsbHMgcmVxdWlyZSB1c2VyIGFwcHJvdmFsIGJlZm9yZSBleGVjdXRpb24uIiwiZGlzcGxheU5hbWUiOiJUb29scyBBcHByb3ZhbCBDb25maWd1cmF0aW9uIiwicGF0aCI6Im9scy50b29sc0FwcHJvdmFsQ29uZmlnIiwieC1kZXNjcmlwdG9ycyI6WyJ1cm46YWxtOmRlc2NyaXB0b3I6Y29tLnRlY3RvbmljLnVpOmFkdmFuY2VkIl19LHsiZGVzY3JpcHRpb24iOiJUaW1lb3V0IGluIHNlY29uZHMgZm9yIHdhaXRpbmcgZm9yIHVzZXIgYXBwcm92YWwiLCJkaXNwbGF5TmFtZSI6IkFwcHJvdmFsIFRpbWVvdXQgKHNlY29uZHMpIiwicGF0aCI6Im9scy50b29sc0FwcHJvdmFsQ29uZmlnLmFwcHJvdmFsVGltZW91dCJ9LHsiZGVzY3JpcHRpb24iOiJBcHByb3ZhbCBzdHJhdGVneSBmb3IgdG9vbCBleGVjdXRpb24uXG4nbmV2ZXInIC0gdG9vbHMgZXhlY3V0ZSB3aXRob3V0IGFwcHJvdmFsXG4nYWx3YXlzJyAtIGFsbCB0b29sIGNhbGxzIHJlcXVpcmUgYXBwcm92YWxcbid0b29sX2Fubm90YXRpb25zJyAtIGFwcHJvdmFsIGJhc2VkIG9uIHBlci10b29sIGFubm90YXRpb25zIiwiZGlzcGxheU5hbWUiOiJBcHByb3ZhbCBUeXBlIiwicGF0aCI6Im9scy50b29sc0FwcHJvdmFsQ29uZmlnLmFwcHJvdmFsVHlwZSJ9LHsiZGVzY3JpcHRpb24iOiJVc2VyIGRhdGEgY29sbGVjdGlvbiBzd2l0Y2hlcyIsImRpc3BsYXlOYW1lIjoiVXNlciBEYXRhIENvbGxlY3Rpb24iLCJwYXRoIjoib2xzLnVzZXJEYXRhQ29sbGVjdGlvbiJ9LHsiZGlzcGxheU5hbWUiOiJEbyBOb3QgQ29sbGVjdCBVc2VyIEZlZWRiYWNrIiwicGF0aCI6Im9scy51c2VyRGF0YUNvbGxlY3Rpb24uZmVlZGJhY2tEaXNhYmxlZCJ9LHsiZGlzcGxheU5hbWUiOiJEbyBOb3QgQ29sbGVjdCBUcmFuc2NyaXB0cyIsInBhdGgiOiJvbHMudXNlckRhdGFDb2xsZWN0aW9uLnRyYW5zY3JpcHRzRGlzYWJsZWQifSx7ImRpc3BsYXlOYW1lIjoiT0xTIERhdGEgQ29sbGVjdG9yIFNldHRpbmdzIiwicGF0aCI6Im9sc0RhdGFDb2xsZWN0b3IifSx7ImRlc2NyaXB0aW9uIjoiTG9nIGxldmVsLiBWYWxpZCBvcHRpb25zIGFyZSBERUJVRywgSU5GTywgV0FSTklORywgRVJST1IgYW5kIENSSVRJQ0FMLiBEZWZhdWx0OiBcIklORk9cIi4iLCJkaXNwbGF5TmFtZSI6IkxvZyBsZXZlbCIsInBhdGgiOiJvbHNEYXRhQ29sbGVjdG9yLmxvZ0xldmVsIn1dLCJzdGF0dXNEZXNjcmlwdG9ycyI6W3siZGVzY3JpcHRpb24iOiJDb25kaXRpb25zIHJlcHJlc2VudCB0aGUgc3RhdGUgb2YgaW5kaXZpZHVhbCBjb21wb25lbnRzXG5BbHdheXMgcG9wdWxhdGVkIGFmdGVyIGZpcnN0IHJlY29uY2lsaWF0aW9uIiwiZGlzcGxheU5hbWUiOiJDb25kaXRpb25zIiwicGF0aCI6ImNvbmRpdGlvbnMifSx7ImRlc2NyaXB0aW9uIjoiRGlhZ25vc3RpY0luZm8gcHJvdmlkZXMgZGV0YWlsZWQgdHJvdWJsZXNob290aW5nIGluZm9ybWF0aW9uIHdoZW4gZGVwbG95bWVudHMgZmFpbC5cbkVhY2ggZW50cnkgY29udGFpbnMgcG9kLWxldmVsIGVycm9yIGRldGFpbHMgZm9yIGEgc3BlY2lmaWMgY29tcG9uZW50LlxuVGhpcyBhcnJheSBpcyBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlZCB3aGVuIGRlcGxveW1lbnRzIGZhaWwgYW5kIGNsZWFyZWQgd2hlbiB0aGV5IHJlY292ZXIuXG5Pbmx5IHByZXNlbnQgZHVyaW5nIGRlcGxveW1lbnQgZmFpbHVyZXMuIiwiZGlzcGxheU5hbWUiOiJEaWFnbm9zdGljIEluZm8iLCJwYXRoIjoiZGlhZ25vc3RpY0luZm8ifSx7ImRlc2NyaXB0aW9uIjoiT3ZlcmFsbFN0YXR1cyBwcm92aWRlcyBhIGhpZ2gtbGV2ZWwgc3VtbWFyeSBvZiB0aGUgZW50aXJlIHN5c3RlbSdzIGhlYWx0aC5cbkFnZ3JlZ2F0ZXMgYWxsIGNvbXBvbmVudCBjb25kaXRpb25zIGludG8gYSBzaW5nbGUgc3RhdHVzIHZhbHVlLlxuLSBSZWFkeTogQWxsIGNvbXBvbmVudHMgYXJlIGhlYWx0aHlcbi0gTm90UmVhZHk6IEF0IGxlYXN0IG9uZSBjb21wb25lbnQgaXMgbm90IHJlYWR5IChjaGVjayBjb25kaXRpb25zIGZvciBkZXRhaWxzKVxuQWx3YXlzIHNldCBhZnRlciBmaXJzdCByZWNvbmNpbGlhdGlvbiIsImRpc3BsYXlOYW1lIjoiT3ZlcmFsbCBTdGF0dXMiLCJwYXRoIjoib3ZlcmFsbFN0YXR1cyJ9XSwidmVyc2lvbiI6InYxYWxwaGExIn1dfSwiZGVzY3JpcHRpb24iOiJPcGVuU2hpZnQgTGlnaHRzcGVlZCBPcGVyYXRvciBwcm92aWRlcyBnZW5lcmF0aXZlIEFJLWJhc2VkIHZpcnR1YWwgYXNzaXN0YW50IHdoaWNoIGludGVncmF0ZXMgaW50byB0aGUgT3BlblNoaWZ0IHdlYiBjb25zb2xlLiBPcGVuU2hpZnQgTGlnaHRzcGVlZCBjYW4gYW5zd2VyIG5hdHVyYWwgbGFuZ3VhZ2UgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gT3BlblNoaWZ0IENvbnRhaW5lciBQbGF0Zm9ybS5cblxuVG8gY29uZmlndXJlIHRoZSBPcGVuU2hpZnQgTGlnaHRzcGVlZCBPcGVyYXRvciwgeW91IG5lZWQgYSBMYXJnZSBMYW5ndWFnZSBNb2RlbCAoTExNKSAuIFlvdSBjYW4gaG9zdCB0aGUgTExNIHVzaW5nIFJIRUxBSSBvciBSSE9BSSBvciB1c2Ugb25lIG9mIHRoZSBtb2RlbHMgZnJvbSB0aGUgZm9sbG93aW5nIFNvZnR3YXJlLWFzLWEtU2VydmljZSBwcm92aWRlcnM6XG5cbi0gT3BlbkFJXG4tIE1pY3Jvc29mdCBBenVyZSBPcGVuQUlcbi0gSUJNIFdhdHNvblhcblxuRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQWJvdXQgT3BlblNoaWZ0IExpZ2h0c3BlZWRdKGh0dHBzOi8vZG9jcy5yZWRoYXQuY29tL2VuL2RvY3VtZW50YXRpb24vcmVkX2hhdF9vcGVuc2hpZnRfbGlnaHRzcGVlZC8xLjB0cDEvaHRtbC9hYm91dC9vbHMtYWJvdXQtb3BlbnNoaWZ0LWxpZ2h0c3BlZWQpIGluIHRoZSBvZmZpY2lhbCBwcm9kdWN0IGRvY3VtZW50YXRpb24uXG5cblF1ZXN0aW9ucywgY29tbWVudHMsIGNvbmNlcm5zLCBvciBqdXN0IHdhbnQgdG8gdGFsayB0byB0aGUgT3BlblNoaWZ0IExpZ2h0c3BlZWQgdGVhbT8gW0VtYWlsIHVzXShtYWlsdG86b3BlbnNoaWZ0LWxpZ2h0c3BlZWQtY29udGFjdC1yZXF1ZXN0c0ByZWRoYXQuY29tKSEiLCJkaXNwbGF5TmFtZSI6Ik9wZW5TaGlmdCBMaWdodHNwZWVkIE9wZXJhdG9yIiwiaWNvbiI6W3siYmFzZTY0ZGF0YSI6ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFYd0FBQUY4Q0FZQUFBRE01d0RLQUFBQUNYQklXWE1BQUc2NkFBQnV1Z0hXM3JFWEFBQWdcbkFFbEVRVlI0bk8zZFQyZ2plWDczOGE5S1ZhVS9sbHRTZTN0bU9obVFoZzBzZ1lUMlFBZ0xhWjVXWDViYzFrME84K1JrR1hKSURtR2NcblEwZ0NnZlZDWUxQazRpR0g1TEJnK1pSbkQ4SGFXOGhsMVE4YldFTGdVWk5BV05obExkaWtkN3JibHR5VzlhZFVLajBIVzQ2NzIyNnJcbmZsVWxsYXJlTDJoNnBsdS9xaC9qNGVPZnY3OS9pY2xrSWdDQTZOTVczUUVBd0h3UStBQVFFd1ErQU1RRWdROEFNVUhnQTBCTUVQZ0FcbkVCTUVQZ0RFQklFUEFERkI0QU5BVE9pTDdrQlV0ZHZ0aDVQSjVMY2N4M2swbVV5SzQvSDRhNVBKSkMwaVlsbFdZZEg5QXhiTk5NMk9cbmlFZ2lrUmdrazhtZkpCS0p0cVpwVHhPSnhMOFZpOFVmTGJwL1VaVGdhQVh2am8rUHR4M0hlZVE0em0vYXR2MHJvOUVvcytnK0Fjdk9cbk1JeStydXYvclduYXYydWE5dlR1M2J1N2krN1RzaVB3WGVwME9pWEhjZjdRdHUzZnRXMzdhNFE3TUQ4WDN3UitvdXY2UDJtYTl2ZUZcblFxRzE2RDR0RXdKL0J1MTIrelBidHY5b05CcjlOZ0VQaElkaEdIM0RNUDVWMS9XL0t4YUwzMTkwZjhLT3dMOUJ1OTMrYkRRYS9ibGxcbldiOHhIbytaNndCQ0xwbE0ycVpwL29kaEdIOU4rRitQd0wraTNXNC90RzM3cjRiRDRlOFE4c0R5U2lhVGRpcVYraGRkMS8rU0NlRC9cblFlQ0x5TkhSMGZjc3kvbzlWczhBMFdPYVpzYzB6WDljVzF2N2cwWDNaZEZpRy9pZFRxYzBHbzMyR2MwRDhUQWQ5UnVHc1JuWHlkN1lcbkJYNjczWDQ0R28zK2RqZ2NQbkFjSjdIby9nQ1lMMDNUSnFsVTZwbGhHSDhjdDNKUGJBTC9JdWhyL1g3L3E0dnVDNEJ3eUdReVB6TU1cbm94cVg0STk4NEU5TE43MWU3OUdpK3dJZ25MTFo3Tk00bEhvaUhmaXZYcjA2NlBmNzM2UjBBK0EybXFaTk1wbk1ENzd5bGE4OFdYUmZcbmdoTEp3RDgrUHQ3dTlYcC9FOWJKV0UzVHhEVE5hLzh1bFVyTnVUZEFjSWJENGJWL2JsbVdPSTR6NTk3TUpwbE0ydGxzOWsramVKUkRcbnBBSy8wK21VQm9QQmo0ZkQ0VWVMN290cG1xTHJ1aGlHSWFacFhvYThwbkZBS1REbE9NNWwrRnVXSmFQUlNHemJGc3V5RnQwMVNhVlNcbnYweW4wMStQVXBrbk1vRy95UEtOcnV1U1RxY3Z3ejJkVHMrN0MwRGtEQWFEeTI4Q2c4RkFiTnVlZXgraVZ1Wlorc0R2ZERxbGZyL2Zcbm5QZW1xV3cySzZsVVNyTFpyT2g2S0N0SFFLVFl0aTI5WGsrR3c2SDBlcjI1dnRzMHpVNG1rMWxmOXRIK1VnZis4Zkh4ZDg3T3p2NXNcbkhxTjZUZE1rbTgxS0pwT1JiRFliOU9zQTNLTFg2MG0vMzVkZXJ6ZVgrUUJOMHlZckt5dmZ2WHYzN2w4RS9yS0FMR1hnZHpxZGttVlpcbjlYNi92eDcwdTZZaG44dmxnbjRWQUVYZGJ2Y3kvSU9XeVdTYXBtbHVMT05vZitrQ3Y5MXVQK3ozKy84YzVESEZtcWJKNnVxcTVISTVcbnlqWEFFckZ0VzdyZHJweWVuZ1k2NmpjTW81L0paTDZ4YkJ1MmxpcndneTdoNkxvdStYeWUwVHdRQWQxdVYwNU9UZ0tiN0YzR0VzL1NcbkJQNnJWNjhPenM3T05vSjRkanFkbHRYVlZXcnpRQVQxZWowNVBUMlZ3V0FReVBOWFZsYnF5N0tLWnlrQy84V0xGejhONGd3Y1hkZGxcbmJXMk5aWlJBREF3R0F6azZPZ3BreEovSlpINzJ3UWNmL0pydkQvWlpxQU0vcUNXWG1xWkpzVmlrZEFQRVVMZmJsWGE3N1h1TmZ4bVdcbmJvWTI4RHVkVHFuWDYvMm4zNU96K1h4ZTd0eTV3NDVYSU1ZY3g1SFhyMS9MeWNtSnI4ODFES09meldaL1BheWhIOHJBRDJJbFRqcWRcbmxtS3hlT01aTmdEaXg3SXNhYmZidnRiM3d4ejZvUXY4ZHJ2OVdiZmIvUWUvVnVKb21uWTVxZ2VBNjB4SCszNlZlVFJObStSeXVkOFBcbjIyWHFvUXA4djhQZU5FMjVkKzhlYStrQjNNcTJiWG41OHFWdkI3ZUZNZlJERS9pZFRxZDBlbnI2YzcvQ1BwL1BTNkhBbmVRQTNPbDBcbk9yN1Y5alZObTZ5dXJuNFNsdkpPS0FMZnp3bGFUZFBrM3IxN0xMVUVvR3d3R01qTGx5OTlLZkdFcWFhLzhNRDNNK3hOMDVRUFAveVFcbkZUZ0FQSE1jUjc3ODhrdGZTanhoQ2YyRkoyTy8zMi82RWZhNVhFN3UzNzlQMkFQd2hhWnBjdi8rZlYvMjY0eEdvMHkvMzIvNjBDMVBcbkZwcU9MMTY4K0trZm02cnkrYnlzcmEzNTBTVUFlTVBhMnByazgzblB6N0VzcS9EaXhZdWYrdEFsWlFzTC9Jc2JxandmbDdDMnRzYmtcbkxJQkFGUW9GWHdhVi9YNy9xNjlldlRyd29VdEtGaEw0RjZkZWVqb0lUZE0wV1Z0YjQzZ0VBSE9SeStWa2JXM05jOW40N094czQvajRcbitEcytkY3VWdVUvYXR0dnRoOTF1OS85NldYNnBhWnA4K09HSDdKb0ZNSGVXWmNtWFgzN3BhUVhQeFJyOS96WHY4L1RuR3ZoK3JNZ2hcbjdBRXNtaCtodjRpVk8zTXQ2VmlXVlNmc0FTdzdQNWFBajBhampHVlpkUis3ZGF1NUJmN3g4ZkYzdk41QnkrRm5BTUxDTkUwcEZvdWVcbm50SHY5OWZuV2MrZlMwbkhqMk1UbUtBRkVFYmRibGVPam82VTI4L3orSVc1alBENy9YN1RTOWh6enl5QXNNcmxjcDdXNlR1T2s1alhcbnBxekFBLy9WcTFjSFhqWlg1WEk1MXRrRENMVkNvZUJwVUdwWlZtRWU2L01ETGVsNExlV1lwaW4zNzkvM3Uxc0FFSWpuejU4cm43MHpcbmo5Sk9vQ1A4d1dEd1k5V3duNjdJQVlCbDRXWGxqdU00aWNGZzhHT2Z1L1NHd0FMLytQaDRlemdjZnFUYS90NjlleHlFQm1DcFRJOW5cblZ6VWNEajg2UGo3ZTlyRkxid2lzcFBPTFgveGlOQjZQbGE2YTR2SVNBTXZNeXlVcXlXVFMvdmpqancyZnV5UWlBWTN3WDcxNmRhQWFcbjlxWnBFdllBbGxxaFVGRGVNelFlai9XZ0puQjlIK0Y3bWFpZG5qL05IYlFBbHAxdDIvTDgrWE9sNHhlQ21zRDFmWVEvR28zMlZTZHFcbjgvazhZUThnRW5SZFYxNmY3emhPWWpRYTdmdmNKWDhEdjkxdVArejFlbzlVMnFiVGFibHo1NDZmM1FHQWhicHo1NDd5L2RxOVh1OVJcbnU5MSs2R2QvZkEzODBXaFVVMjNyOVV3S0FBZ2pMOW5tSlZPdjQxdmd0OXZ0aDZvM1dPWHplUTVGQXhCSnBta3FsM2I2L2Y1WC9Semxcbit4YjRvOUhvYjVVNm9HbVVjZ0JFMnAwN2Q1VDNGYWxtNjNWOENmeE9wMU1hRG9jUFZOb1dpMFUyV0FHSU5FM1RsRXM3dytId1FhZlRcbktmblNEejhlb3JveVI5ZDFUc0VFRUF1NVhFNXBGYUtmSzNaOENmemhjUGc3S3UzOHVBVWVBSmFGYXVhcFp1emJQQWYrMGRIUjkxUjJcbjFhYlRhZVhsU2dDd2pGUnpiendlNjBkSFI5L3orbjdQZ1c5WjF1K3B0RnRkWGZYNmFnQllPcXJacDVxMVYza0svSGE3L1ZEbGNoTmRcbjF5V2J6WHA1TlFBc3BXdzJxMVRMdHl5cjRIV0pwcWZBdDIzN3IxVGFlYmtPREFDV25Xb0dxbWJ1bEtmQVY1bEkwRFNObFRrQVlpMlhcbnl5a3RSL2M2ZWFzYytPMTIrek9WeVZwcTl3Q2dsb1hqOFZodnQ5dWZxYjVUT2ZCSG85R2ZxN1JqZEE4QTZsbW9tcjBpSGdMZnNxemZcbmNOdEdkYklDQUtKR2RmR0tTdlpldmxPbGtXbzVKNVBKcUx3T21EdTcwYmo4NTBTaElNbjE5Y1YxQnBHVnlXU2sxK3U1YWpNdDZ4U0xcbnhlKzdmWi9TQ04rMjdUOXkvU0ltYTdFRVJ2VzZuSlRMY3ZyNDhlV3YxNTkrS2lmbHNvenE5VVYzRHhHak9ubXJrc0VpaW9FL0dvMStcbjIyMGIxdDBqN002cVZlaytlU0pPNjkxYjVaeFdTN3BQbnNoWnRUci9qaUhTVkxKUkpZTkZGQUsvMCttVVJxT1I2OW9NNVJ5RTJhaGVcbkYydi85dk9wclAxOVJ2cndsVW8yamthampNb0ptcTREMzNHY1AzVGJSb1FSUHNLdHQ3MGR5R2VCMjZobW8wb1d1dzU4MjdaLzEyMGJcbndoNWhObTQycnkzajNNUnB0ZDZZMUFXOFVzbElsU3hXQ2Z5dnVXMlRTcVhjTmdIbVp0THBMTG9MaURtVmpGVEpZdGVCcjFLL1o0UVBcbkFEZFRuTGgxbmNXdUF2LzQrTmgxOFZMWGRUWmJBY0I3cU9hazIweDJGZmpqOFhqRFhYZUVTMDRBWUFZcVdlazR6aU0zbjNjVitKUEpcbjVHTjMzUkV4RE1OdEV3Q0lIWldzZEJ6bk45MTgzbFhnMjdiOUsrNjZJMkthcHRzbUFCQTdLbG5wTnBOZEJiN0tKQUVsSFFDNG5VcFdcbnVzM2ttUU5mNVdvdFJ2Y0FNRHVWekhTVHpUTUgvbVF5K1MyM0hXRjFEZ0RNVGlVejNXVHp6SUh2ZGpaWWhBbGJBSEJEY2VKMjVteDJcbk04SXZ1dTBJSlIwQW1KMUtacnJKNXBrRGZ6d2V1OS9HcTNET013REVsVXBtdXNsbU55TjgxMVBJalBBQllIYUtJL3lac3puUUlUZ2pcbmZBQ1lYZENaT2ZQVExjc3F1SG93WVE4QXJybk5UamZaSEZncVU4NEJBUGVDekU2RzRRQVFFd1ErQU1RRWdROEFNVUhnQTBCTXpCVDRcbktnZW5zVW9IQU1KbHBsUXVGb3MvY3Z0Z3p0RUJBUGVDekU2RzRRQVFJa0ZXUndoOEFJZ0pEcXhIcU5tTmhqaUhoeUlpb3BYTG9sY3FcbkMrMFBzTXdJZklTU1ZhdEpmMmRIbkZicmpUL1hTaVZKYjI5TGFudDdRVDBEbGhjbEhZVE9XYlVxWjF0Yjc0UzlpSWpUYWtudlQvNUVcbnpxclYrWGNNV0hJRVBrTEZxdFhFMnQrLy9YUDcrMkxWYXNGM0NJZ1FBaCtoMHQvWkNlU3pBQWg4aElqZGFGeGJ4cm1KMDJxSjNXZ0VcbjF5RWdZZ2g4TExWeHM3bm9MZ0JMZzhESFVyTUpmR0JtQkQ2V0dpVWRZSFlFUGtKRFpWT1YwMnJKcE5QeHZ6TkFCTEh4S3VZYWpZWWNcblh1eGtMWmZMVWxud1R0Ymtnd2N5ZnZiTVZadHhzOGtPWEdBR2pQQmpxbGFyU2JsY2xzZVBIOHZXMXBac2JXM0o0OGVQcFZ3dVMyMkJcbjY5dFZnbnRFV1FlWUNZRWZROVZxVmJhMnRxUjF6UkxJVnFzbFcxdGJVbDNRVGxaOWZkMTFHK3I0d0d3SS9KaXAxV3F5UDhOTzF2Mzlcbi9ZV0VmbEloOEZtYUNjeUd3SStaSFJlN1V4Y1Irc24xZFVuazg2N2FURTVPTGsvVUJIQXpBajlHbXMzbXRXV2M5MWxVNkx2RktCKzRcbkhZRWZJeDNGNVl2ekRuMG1ib0ZnRVBpWXlUeERYMlhpbGhFK2NEc0NQMFlLaFlLbjl2TUtmWlVSdnYzMHFmOGRBU0tHd0krUjlmVjFcbktaVktucDR4ajlCUEZBcWlLZlNUVVQ3d2ZnUit6TGhacFhPVGVZUyt5c1F0Ni9HQjl5UHdZNlphcmNybTVxYm41d1FkK2txQnp3Z2ZcbmVDOENQNFpxdFZyb1E5OVFxT05UMGdIZWo4Q1BxYkNIdnNyRXJkdEQxNEM0SWZCakxPeWhuM3p3d0hVYjZ2akF6UWo4bUF0ejZLdlVcbjhkbUFCZHlNd0Vkb1ExK2xqZy9nWmdRK1JDU2NvYTh5d2dkd013SWZsOElXK2lxQnIzbmNUUXhFR1lHUE40UXQ5RTJYZlRFMk5qeS9cbkU0Z3FBaC92Q0ZQb1oxenNERTU5L3JsbzViS245d0ZSUnVEaldtRUpmYTFjbHBXOXZWcy9sM3p3d05VM0J5Q09DSHpjS0N5aGIxYXJcbnN2ckRINHIrNk5FN2Y1Zkk1eVg5clcvSmFxTWhDZXIzd0h2cGkrNEF3cTFXcTRtSXpIUVA3dnRNMjArZjU1WmVxY2hxb3lITzRlRWJcbjF4a20xOWNKZW1CR0JENXVGWmJRRnprdjhWQ25COVJRMHNGTXdsTGVBYUNPd01mTUNIMWd1Ukg0Y0lYUUI1WVhnUS9YQ0gxZ09SSDRcblVFTG9BOHVIVlRvQk96dzhsTU9MWllTRlFrSFdJM1FnV0poVzd3QzRIU1A4Z05UcmRTbVh5L0xKSjUvSTQ4ZVA1ZkhqeC9McHA1OUtcbnVWeVdlcjIrNk83NWhwRStzRHdJL0FCVXExVjU4dVNKdEZxdGQvNnUxV3JKa3lkUEloVnVoRDZ3SEFoOG45WHI5WmxLSFB2Nys0ejBcbnIwSG9BOEVoOEgyMnZiMGR5R2VYQWFFUGhCdUI3Nk5HbzNGdEdlY21yVlpMR2hHN2c1WFFCOEtMd1BkUnM5bDAzU1pxZ1M5QzZBTmhcblJlRDdxS3h3cUZlVWxtbGVSZWdENFVQZyswZ2x2S01hK0NMUkRuMk9aTVl5SXZCOVZDNlhwVlFxemZ6NVVxbWs5RlBCTWxtRzBOY3JcbkZkRmNmTjIwVWtucGduVmcwUWg4bjduWkxScmt6bEs3MFpEaDdxNVl0WnJZQzU0bldJYlF6Kzd1QnZKWklFdzRXc0ZubFVwRlB2LzhcbmMvbmlpeS9lKzdsdmZldGJVcWxVZkgvL2NIZFgranM3TWprNWVlZnZrZzhlaUY2cGlMNitMc21MWC9NUzltTVlqSTBOTVRjM3hicWxcbmYrYm1waGdiRzc2K0c1aVh4R1F5bWVtRHJWWnJ0ZzlleU9melVvaHhuYk5lcjh2Mjl2WTd5elJMcFpMczd1N0tSZ0NoY1ZhdDNocFlcblZ5WHllVW11cjE5K0U5QXJsY0JyMDlWcTFYUG9pNGhzYm00RzhoUFNxRjZYM3ZhMk9HOTkzYlJTU2JLN3U0UTlBdGZwZE9Ua21nSGJcbis1UktwY1FzbnlQd0E5Wm9OS1RaYkVxbjA1RktwUkxJcUY1RXhLclY1R3hyeS9OenB2WHA1UHE2R0pXSzZBSDAxNi9RMzl2YkM2ekVcbk0yNDJaZExwWFA1N0VQOGRnT3NRK0xqVlNibjh6cWpVTDhrSER5Ni9BZmhWQ3ZJajlFdWwwdVZKcEVCVUJCbjRUTnBHd0xqWkRDenNcblJVVEd6NTZKdGI4dloxdGI4dnJUVDZXZFNNaFp0U3FPaDdEMVl5SzMxV29wYlhZRDRvckFqNER4QWtMUDJ0K1hrMDgrRWN0REhkMlBcbjBPOWNLYnNBZUQ4Q0g1NmNiVzE1V3ZicDE1Sk5BTGNqOENOQVcvRG1yZjdPanFmMlhrS2ZlU0pnZGdSK0JMamRLZW8zKytsVHoyVWxcbmxkQXZsVXFSUHBvQzhCc2JyeUlpdTdzcjNTZFBGdlorNS9EUTgrb2R0NXV6ZGp6K1pJSGdOQnFOeXhWVTVYSTVzT1hJY0lmQWo0aFpcbmQ0b0d4Y3VLbmF0bURmM056YzNRSGFpRzg2L2Z6czdPdFJzT2QzWjIrSm90R0NXZENGbXAxV1JsYjI4aDVSMC9qMm1vMVdxeXQ3ZDNcbjdVRjBwVkpKOXZiMkFqMkhDR3FxMWFwc2JXM2RlSmZ6MXRZV2diOWdiTHlLcUhHektYYWpJZmJGNzBHdTAwL2s4MUlJYUhuazJ4ZkVcblVCb0lwMXF0Smxzejd2UU82bGlNcUFoeTR4VWxuWWlhN29oTlhmejdwTk9SY2JNcG8wWkQ3RWJqL09nQWwvOVQzU1FWNE4yOEJQeHlcbmNET2ZFdFFCZUxnZEkvd1ljdzRQTDc4SmpKdE5zWjgrZGYyTTVJTUhjb2ZkcnJIV2JEYmwwMDgvZGQyT2tmNzFHT0VqRUZxNUxGcTVcbi9NWUprRmRMUWVObVU4YlBudDNZUHZYNTU1SmhwVXpzcWU1MlpxUS9md1ErM3ZCMktVamsvREtWMFpWYXVsWW9pTEd4c2ZBTlgxaCtcbmhQNThFZmk0bFI3UU1jbUlCcStsVzBKL2ZsaVdDY0NUOWZWMVYzYzVYeWVNRjlWSEVZRVB3RE0vZGowVCtzRWo4QUY0VnExV1EzOVJcblBRaDhBRDd4NjZoclFqODRCRDRBM3hENjRVYmdBL0FWb1I5ZUJENEEzeEg2NFVUZ0F3Z0VvUjgrQkQ2QXdCRDY0VUxnQXdnVW9SOGVcbkJENkF3Qkg2NGNCWk9nR3ozN3JBQSs5S0ZBcSszcGoxUHMxbVUvbDBSM2hUclZhbDJXektzL2Vjd0RvTHp0NVJSK0FIWkZTdlMyOTdcbk85Q2JwcUpFSzVVa3U3djd4bEhOZnFyWDY3Szl2WDN0OVh0WVBvUytHa282QVRpclZxWDc1QWxoNzRMVGFrbjN5Uk01QytESDlXcTFcbktrK2VQQ0hzSTJaL2YxKzJBN3h0TFlvSWZKK042bld4TGtZZmNNL2EzNWRSdmU3YjgrcjErdVZvRU5IenhSZGZ2SFB2TVc3R0ZZYytcbk95bVhHZGw3cEpWS2tqODg5T1ZaNVhLWmtYM0VsVW9sT2ZUcC81Y3dDUEtLUTBiNFBobzNtNFM5RDV4V3k1Zko3a2FqUWRqSFFLdlZcbllpSitSZ1MranliOFR4Y3FoRUI4Tkp2TlJYZGhLUkQ0QUJBVEJENUNLZUhEL0UrWlM5WmpZMzFPK3ppV0hZSHZJNzFTRWMzajNaNDRcbm43VDFZeU9XSDNldEl2eEtwVklzRjRpb0lQQjlsdDNkWFhRWGxwNmYvdzEzK1hwRUhwdXZaa2ZnKzh6WTJCRFRoek5ENHNyYzNQUjFcbnQrM0d4b1l2WjdnZ25ENy8vSE9wVkNxTDdzYlNJUEFEc0ZLclNlN2dnUEtPQzFxcEpMbURBMWtKWUxSV3E5WGs0T0NBOGs3RWJHNXVcbjhoT2NTMnk4Q3RpNDJXUzU1Z3owT1kzUzJKVzVXTnZiMjU0UFR4TTVEL3VvbG5LQzNIakY0V2tCbTljcGtKZ05QLzR2VHJWYUpld1hcbmpKSU9nTUJWcTFWZnpqUWk3TDBoOEFFRWlyQVBEd0lmUUdBSSszQWg4QUVFZ3JBUEh3SWZnTzhJKzNBaThBSDRpckFQTHdJZmdHOElcbiszQWo4QUg0Z3JBUFB3SWZnR2UxV28yd1h3SUVQZ0RQZG5aMlBEK0RzQThlZ1EvQWsyYXo2Zm51WU1KK1BqaExCN2V5R3cwWk5ScmlcbkhCNktpSWhXTG91NXNjRTVRUkFSNzNjSEUvYnpRK0RqRGVObVUreEdRK3htVThiTnBveHZPT3hxOE8xdmkvSE5iOHBLcmViTGRZU0lcbko4Sit2Z2o4R0hNT0QyWGNiTXFvMFRnUCtxZFBYYlVmL2VBSGNscXB5R3FqUWVqSG1Pb3g2SVQ5L0JINE1USHBkQzdEM2I0SStJbkxcbk03ZXZNMzcyVEFhN3U1THhZZElPeTJsNmQ3Q2JPajVodnhoY2dCSlIwMUMzTDBvMGpzZEp0ZmRKNVBPU1B6d01aSlRmYURUazhHTHVcbm9Gd3VjNTU5U05WcU5kbmEycHJwczRUOSszRUJDbVptMVdyUzM5a0pOT0RmTmprNWtYR3o2ZXV0VmJWYVRYWjJkdDRaTlpaS0pkblpcbjJaRnF0ZXJidStCZHRWcVZScU54NjFwOHduNnhXSllaSVdmVnFweHRiYzAxN0lOUXJWWmxhMnZyMmhKQnE5V1NyYTB0QWorRWFyV2FcbjdPM3RYWHQzY0tsVWtyMjlQY0ord1NqcFJJUlZxOG5aakQ5U0IySDFoei8wWllUdlpudiszdDRld1I5U2I5OGRUQ2x1ZGtHV2RBajhcbmlEZ3BseGM2c3MvLy9PZWlsY3VlbnVIMkxKWlNxWFJaM3dlaUlzakFwNlFUQVVGUHl0NUdmL1JvN21FdmNsN2VhVGFibnQ0THhBbUJcbkQ4KzhMc24wY3NxaTExMmVRSndRK1BCa1pXL1BVKzNlcnlOMUFkeU93SWNTYzNOVDhqLy91WmdlSmszOUNIdm1pWURac1E0L0F2UktcblJiUlNLYkE2ZnZMQkEwbXVyNHRScVVoeWZkMlhROVA4Q1B0U3FTVHJIT0FHekl6QUQ5amg0ZUViTzBYTEhpYzNiNUxkM1pYdWt5ZWVcbm42T1ZTcGVoYmxRcXZtNm1tdktyak9QSEdldzNzYThzSzB3VUNwd01pa2dnOEFOU3I5ZGxlM3Y3MnAyaXU3dTdzckd4NGV2N2pJME5cbk1UYzN4WElScElsOFhwTHI2NkpYS3FKZi9CNzBJV2grWG9NWHhCcjhVYjB1dmUzdGQzNWEwa29seWU3dWl1SHoxdzJZSjliaEIyQ1dcblVBdHFpL2xOZ1NWeVhwcVpocnRmcFJrM3duN242Vm0xZXVzM1RITnpVMWJZTFlvQXNmRnFpZFRyZFhreVkybmw0T0RBOTVIKzFMalpcbmxNbVZKWXRCbEdiY0NIdllqK3IxbVV0aXVZTURSdm9JRElHL1JNcmw4c3pIeE1abHAyall3MTdFM1U1bHJWU1NmQXkrYmxnTWR0b3VcbmlVYWo0ZXBNOEZhcjljNlpJMUd6REdFL2JqWmRyWEJ5V3EwM0puV0JaVUhnKzBobG0zK1VBMzhad2w1RTNpaDlBVkZHNFB0SVpadC9cblZNdGV5eEwyUUp3UStENVNPUUkyaWh1SENIc2duQWg4SDFVcUZjbm44ek4vdmxRcVJlNmNjTUllQ0M4QzMyZHVkbi91N3U0RzE1RUZcbklPeUJjQ1B3ZmJhOXZTMmJtNXUzZm01emN6T3dOZmlMUU5nRDRVZmdCNkJXcThuQndjR05kM3NlSEJ4RUt0UUllMkE1Y0paT1FEWTJcbk5tUmpZME1hallZMG0wM3BkRHBTcVZTbzJkK0FzQWVDUitBSExJb2hQMFhZQTh1RmtnNlVFUGJBOGlIdzRScGhEeXduQWgrdUVQYkFcbjhpTHdNVFBDSGxodUJENW1RdGdEeTQ5Vk9yaFZtTUorM0d5S2MzZ296dUhoNWZXTUFHWkQ0T085d2hMMmRxTWgvWjBkc1o4K2ZlUFBcbkUvbThwTGEzSmIyOUhmaDl2TUN5bzZTREc0VWw3SzFhVFU0ZlAzNG43RVZFSmljbk12ajJ0K1cwVXVGY2UrQVdCRDZ1Rlphd2R3NFBcbjVXeHI2OWJQalo4OWs3NkxnK3VBT0NMdzhZNndoTDJJdUFyeDRSZGZpTU5kczhDTkNIeThJVXhoTHlKaXVlekxxRjczL0U0Z3FnaDhcblhBcGIySThWN2dnZU04SUhia1RnUTBUQ0YvWWlhb0hQeEMxd013SWZvUXg3RVpGUm8rRzZqVll1Ky9aK0lHb0kvSmdMYTlpTHFJM3dcbkRUWmlBVGNpOEdNc3pHRXZjcjdVMGkxMjNnSTNJL0JqS3V4aGJ5dVVjNUlQSHZqZUR5QktDUHdZQ252WWk2alY3NVByNi81M0JJZ1FcbkFqOW1hclZhNk1OZVJLMStyeFA0d0hzUitER3o0OFB4QS9NNDRsZ3A4S25mQSs5RjRNZElzOW1VVnF2bDZSbnpDUHRKcHlPT1FqOHBcbjZRRHZSK0RIU01manBxUjVYVjZpTW1HclAzcmtmMGVBaUNId01aTjUzbFJsSzVSekdOMER0eVB3WTZTZ2VFSEl2SzhsVkJuaHMrRUtcbnVCMkJIeVByNit0U0twVmN0Vm5FSGJRcUU3YU04SUhiRWZneDQyYVZ6cUxDZm5KeTRxcE5JcC9uREIxZ0JnUit6RlNyVmRuYzNMejFcbmM0c0lleEZHOTBDUUNQd1lxdFZxc3JlM2QyMTVwMVFxeWQ3ZTNrTENYa1J0d3BiMTk4QnM5RVYzQUl0UnJWYWxXcTFLNDYwSjBzcUNcbnc1TUpXeUE0Qkg3TUxUcmczNlp5UWlZbEhXQTJsSFFRR2lxamU2MVVrb1RpY2xNZ2JnaDhoSWFqY0I4dDlYdGdkZ1ErbGhvblpBS3pcbkkvQVJHaXByNlJuaEE3TWo4QkVhZXFVaW1vdWR3RnFweElRdDRBS0JqMURKN3U0Rzhsa0FCRDVDeHRqWUVIT0duY0RtNXFZWUd4dHpcbjZCRVFIUVErUW1lbFZwT1Z2YjFyeXp0YXFTUzVnd05aV2RCT1lHQ1pzZkVLb1dSV3EySldxK2VIcVYxYzNKSW9GS2paQXg0UStBZzFcbkFoN3dEeVVkQUlnSkFoOEFZaUt3d0IrTlJrRTlHZ0FpYXpnY3VtN1RicmNmenZLNXdBTGZjWnlnSGcwQXVLSllMUDVvbHM5UjBnR0Fcbm1DRHdBU0FtQ0h3QWlBa0NId0JpSXJEQXR5d3JxRWNEUUdRRm1aMHpCNzVwbWgwM0QyYVZEZ0M0NXpZNzNXUnpvQ1VkUWg4QVpoZDBcblpzNGMrSWxFWXVEMjRaUjFBR0IyS3BucEpwdG5EdnhrTXZrVHR4MWhoQThBczFQSlREZlo3R2FFMzNiYkVVYjRBREE3eFJIK3pOazhcbmMrQnJtdmJVYlVjNFR3Y0FacWVTbVc2eTJjMEkvOS9jZHNTMmJiZE5BQ0MyVkRMVFRUYlBIUGl6SHM1ekZTVWRBSmlkU21hNnlXWlhcbnl6SU53K2k3N2N4ZzRIcHhEd0RFamtwV3VzMWtWNEd2Ni9wL3Urc09vM3dBbUlWS1Zyck5aRmVCcjJuYXY3dnJEaE8zQURBTHhRbGJcblY1bnNOdkJkcjlTaHBBTUF0MVBKU3JlWjdDcnc3OTY5dSt1dU8rZXp6cXpXQVlDYnFlYWsyMHgyZlphT3lzUnRyOWR6MndRQVlrTWxcbkkxV3kySFhnNjdydStvZ0ZsVXQ1Z1RCTEZBcUw3Z0lpUkNValZiSllKZkQveVcwYlJ2Z0lNNzFTRWExVW12bnpXcWtreWZYMUFIdUVcbnVGSEpTSlVzZGgzNG1xYjl2ZHMySW9RK3dpMjdPM3NwMU0xbmdkdW9acU5LRnJzTy9FS2gwRktwSGZYN3Jwc0FjMk5zYklpNXVYbnJcbjU4ek5UVEUyTnViUUk4U0ZTallhaHRFdkZBb3R0KzJVTGtBeERPTmYzYlpoaEkrd1c2blZKSGR3Y0cxNVJ5dVZKSGR3SUN1MTJ2dzdcbmhraFRuTEIxbmNFaUlvbkpaT0s2VWJ2ZC91ejE2OWYveDIyN3RiVTF5ZVZ5cnQ4SHpOdTQyWlJKNTM5dWp0TXJsY1YxQnBIVjdYYmxcbjZPaklkYnM3ZCs3ODcyS3grSDIzN1pRQ1gwVGtGNy80eFdnOEh1dHUybVN6V2JsMzc1N1Mrd0FnYWw2K2ZPbDZoSjlNSnUyUFAvN1lcblVIbWY4cDIycG1uK2g5czJ2VjZQVFZnQUlPZWJyVlRLT1NyWk82VWMrSVpoL0xWS3UyNjNxL3BLQUlnTTFTeFV6VjRSRDRGZkxCYS9cbm4wd21YUS9YVDA5UFZWOEpBSkdoa29YSlpOSldxZDFQS1FlK2lFZ3FsZm9YdDIwY3gyR1VEeURXdXQydTBvWGxLcGw3bGFmQTEzWDlcbkwxWGFuWnljZUhrdEFDdzExUXhVemR3cFQ0RmZMQlovWkpwbTUvWlB2a2wxc2dJQWxwM3E0aFhUTkRzcVY4MWU1U253THpyeGp5cnRcbnFPVURpQ1BWN0ZQTjJxdVUxK0ZmcGJJbVgwVGt3dzgvbEhRNjdmbjlBTEFNQm9PQmZQbmxsNjdiZVZsN2Y1WG5FYjZJK2tTQ3lnNHpcbkFGaFdxcG5uZGJKMnlwZkFOd3hqVTlNMDF6OHEyTGJOaWgwQXNkRHRkcFZxOTVxbVRRekR1UDFrdjFtZTVjZERDb1ZDSzVWS1BWTnBcbjIyNjNsWlluQWNDeWNCeEgydTIyVXR0VUt2Vk01V1RNNi9nUytDSWlobUg4c1VvN3gzSGs5ZXZYZm5VREFFTG45ZXZYeWdOYjFXeTlcbmptK0JYeXdXZjVUSlpINm0wdmJrNUVRc3kvS3JLd0FRR3BabEthKzd6MlF5UC9PNkZQTXEzd0pmUk1Rd2pLcHFXOVVmZHdBZ3pMeGtcbm01ZE12WTZ2Z1Y4c0ZuK1V6V2FmcXJRZERBYVVkZ0JFeXV2WHIyVXdHQ2kxeldhelQvMGMzWXY0SFBnaTZpdDJSTTVMT3h5ZkRDQUtcbmJOdFdMdVg0dVRMbmplZjYvY0JDb2RES1pESS9VR25yT0k2OGZQblM3eTRCd055OWZQbFNlYUkyazhuOHdObW1EMEVBQUFjUFNVUkJcblZLK1ZPVmY1c3RQMk9xcTdiMFZFOHZtOEZBb0Z2N3NFQUhQUjZYU1VSL2QrN2FxOWp1OGovS2xzTnZ1bnFtMVBUazZVNjE0QXNFaURcbndjRFRpY0Jlc3ZNMmdZM3dSVVIrK2N0ZlBoOE9oeCtwdE5VMFRYNzFWMzlWTkMydzcwa0E0Q3ZIY2VTLy91dS9sRXM1cVZUcWx4OTlcbjlORjluN3QxS2RBMFRhZlRYMWVkd0hVY1IrbVFJUUJZbEMrLy9GSTU3RFZObTZUVDZhLzczS1UzM3hIa3c3MU00SXFjYjFqZ2dEVUFcbnkrRG82TWpUQnRLZ0ptcXZDclNrTS9YOCtmTzJaVm5LczdCTTRnSUlNeStUdENMbmw1dmN2MysvNkdPWHJqV1hBbmttazFsWExlMklcbm5FL2ljcW9tZ0REcWRydWV3bDdUdEVrbWsxbjNzVXMzdjJzZUx5a1VDcTJWbFpYdmVubkcwZEVSb1E4Z1ZMcmRydWV5ODhyS3luZURcbkx1Vk16YVdrTS9YaXhZdi8xKy8zbGIrVGFab21IMzc0b1ppbTZXZTNBTUExeTdJOFRkS0tpR1F5bWVZSEgzendxWS9kZXErNXJuazBcblRYUERNSXkrYXZ2cHloMU8xZ1N3U0g2RXZXRVlmZE0wTjN6czFxM21HdmdYcTNhKzRhV2VUK2dEV0NRL3d2NmliditOZVpWeUx0ODdcbno1ZUpuSitvNmJXZVB3MTlhdm9BNXFuYjdYb09lNUh6dXIzZkoySE9ZcTQxL0t0ZXZYcDFjSFoyNXZuSG1iVzFOY25sY241MENRQnVcbjVNY0VyWWpJeXNwSy9TdGYrY29USDdyazJzSUNYMFRreFlzWFArMzMrMS8xK2h6VzZRTUlrdGQxOWxPWlRPWm5IM3p3d2EvNTBDVWxcbkN3MThFZStic3FaeXVaeXNyYTM1MFNVQXVPVFhrdkI1YmE1Nm40V2ZUSmJKWk5hOXJOeVo2bmE3OHZ6NWM4KzFOUUFRT1o4cmZQNzhcbnVTOWhieGhHZjE2YnE5NW40U044RVpGT3AxUHE5WHIvT1JxTk1sNmZwV21hM0x0M1Q5THB0QjlkQXhCRGc4SEEwd1VtVnhtRzBjOW1cbnM3OCs3eFU1MXdsRjRJdWNoLzdwNmVuUEhjZEorUEU4NnZvQVZQaFZyeGM1WDM2NXVycjZTUmpDWGlRRUpaMnBRcUhReXVWeXYrOWxcbmpmNVZKeWNuOHZ6NWMrN0lCVEFUMjdibCtmUG52b1o5THBmNy9iQ0V2VWlJUnZoVDdYYjdzMjYzK3c5K2pmUTFUWk44UGk5Mzd0enhcbjQzRUFJdWoxNjlkeWNuTGkyeHpnTk95THhlTDNmWG1nVDBJWCtDTCsxdlNuMHVtMEZJdEZ6dUVCY01teUxHbTMyNzVlcVJxbW12M2JcblFobjRJc0dFdm9oY2p2YTVPaEdJTDhkeExrZjFmZ3B6Mkl1RU9QQkZ6a08vMys4My9WaW5mNVdtYVZJc0Z0bWhDOFJRdDl1VmRydnRcbit4SnUwelE3bVV4bVBheGhMeEx5d0oveWEwZnUyM1JkbDdXMU5aWndBakV3R0F6azZPZ29rSVVjaTk1Qk82dWxDSHdSLzg3ZXVVNDZcbm5aYlYxVlhKWnJOQlBCN0FBdlY2UFRrOVBmVzFUbi9WSXMvR2NXdHBBbDlFNVBqNCtEdG5aMmQvNXRjS25yZnB1aTc1Zko1U0R4QUJcbjA2c0hnMXFhclduYVpHVmw1YnQzNzk3OWkwQmVFSUNsQ253UmtYYTcvYkRmNy8rejM1TzVWMm1hSnF1cnE1TEw1VVRYOWFCZUE4Qm5cbnRtMUx0OXVWMDlQVFFJOVp1VGdxNFJ1TE9PTFlpNlVMZkpIenlWekxzdXBlcmt1Y1ZUYWJsVXdtdzZnZkNMRnV0eXY5Zmw5NnZWN2dcbjc4cGtNazNUTkRmQ1BEbDdrNlVNL0ttZ1N6eFhhWnAyR2Y3VStvSEY2L1Y2bHlFL2owTVRsN0dFODdhbERueVI0Slp1M2lhYnpVb3FcbmxaSnNOa3ZaQjVnRDI3YWwxK3ZKY0RpY3kwaitxbVZZY2ptTHBRLzhxVmV2WGgzMCsvMXZ6bU8wL3paZDF5V2RUb3RoR0dLYUpzczhcbkFSOE1CZ094TEV0R281RU1Cb09Gbkl0MWNmZnNENVpsRmM1dEloUDRJdWVqL2NGZzhPUGhjUGpSb3Z0aW1xYm91bjc1VFVEVHRNdmZcbkFaeHpIRWNzeTdyOGZUUWFpVzNiWWxuV29yc21xVlRxbCtsMCt1dkxQcXEvS2xLQlAzVjhmTHpkNi9YK1pqd2VoN2JXY3ROUEFhbFVcbmFzNDlBWUl6SEE2di9mTnB5SWRSTXBtMHM5bnNuOTY5ZTNkMzBYM3hXeVFEZjJxUlpSNEF5eVZxNVp2clJEcndSYzdMUEtQUmFML1hcbjZ6MWFkRjhBaEZNMm0zMXFHTVptbE1vMzE0bDg0RSsxMisySG85R29Gc1NaUEFDV1V5YVQrWmxoR05WbDIwQ2xLamFCUDNVUi9IODdcbkhBNGZVT29CNGtmVHRFa3FsWHBtR01ZZnh5WG9wMklYK0ZQVFVzOXdPUHlkTUUvdUF2QkhNcG0wVTZuVXY4U2hkSE9UMkFiK1ZVZEhcblI5K3pMT3YzNXIxNUMwRHdUTlBzbUtiNWoydHJhMyt3Nkw0c0dvRi9SYnZkZm1qYjlsOHg2Z2VXMjNRMHIrdjZYOGF0YlBNK0JQNE5cbjJ1MzJaNlBSNk04dHkvb053aDhJdjJReWFadW0rUitHWWZ4MTJDNFBEd3NDZndidGR2c3oyN2IvYURRYS9YYVF4eklEY01jd2pMNWhcbkdQK3E2L3JmRWZLM0kvQmQ2blE2SmNkeC90QzI3ZCsxYmZ0cmZBTUE1c2N3akw2dTZ6L1JkZjJmTkUzNys3aE92cW9pOEgxd2ZIeThcbjdUak9JOGR4ZnRPMjdWL2htd0RnM1VXNC83ZW1hZit1YWRyVEtCNTFNRzhFZmtEYTdmYkR5V1R5VzQ3alBKcE1Kc1h4ZVB5MXlXU1NcbkZoRmhOUkJ3dm5wR1JDU1JTQXlTeWVSUEVvbEVXOU8wcDRsRTR0K1lhQTBHZ1I4dTVZdGZRRlEwUmFTejZFN2dISUVQQURIQjRld0FcbkVCTUVQZ0RFQklFUEFERkI0QU5BVEJENEFCQVRCRDRBeEFTQkR3QXhRZUFEUUV6OGYrb2tmZHRsOURvakFBQUFBRWxGVGtTdVFtQ0NcbiIsIm1lZGlhdHlwZSI6ImltYWdlL3BuZyJ9XSwiaW5zdGFsbCI6eyJzcGVjIjp7ImNsdXN0ZXJQZXJtaXNzaW9ucyI6W3sicnVsZXMiOlt7Im5vblJlc291cmNlVVJMcyI6WyIvbHMtYWNjZXNzIiwiL29scy1tZXRyaWNzLWFjY2VzcyJdLCJ2ZXJicyI6WyJnZXQiXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJjb25maWdtYXBzIiwicGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInNlcnZpY2VhY2NvdW50cyIsInNlcnZpY2VzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsicG9kcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJzZWNyZXRzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImRlbGV0ZWNvbGxlY3Rpb24iLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyIiXSwicmVzb3VyY2VOYW1lcyI6WyJwdWxsLXNlY3JldCJdLCJyZXNvdXJjZXMiOlsic2VjcmV0cyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiYXBwcyJdLCJyZXNvdXJjZXMiOlsiZGVwbG95bWVudHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiYXV0aGVudGljYXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJ0b2tlbnJldmlld3MiXSwidmVyYnMiOlsiY3JlYXRlIl19LHsiYXBpR3JvdXBzIjpbImF1dGhvcml6YXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJzdWJqZWN0YWNjZXNzcmV2aWV3cyJdLCJ2ZXJicyI6WyJjcmVhdGUiXX0seyJhcGlHcm91cHMiOlsiY29uZmlnLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsiYXBpc2VydmVycyIsImNsdXN0ZXJ2ZXJzaW9ucyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiY29uc29sZS5vcGVuc2hpZnQuaW8iXSwicmVzb3VyY2VzIjpbImNvbnNvbGVleHRlcm5hbGxvZ2xpbmtzIiwiY29uc29sZWxpbmtzIiwiY29uc29sZXBsdWdpbnMiLCJjb25zb2xlcGx1Z2lucy9maW5hbGl6ZXJzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJpbWFnZS5vcGVuc2hpZnQuaW8iXSwicmVzb3VyY2VzIjpbImltYWdlc3RyZWFtcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJtb25pdG9yaW5nLmNvcmVvcy5jb20iXSwicmVzb3VyY2VzIjpbInByb21ldGhldXNydWxlcyIsInNlcnZpY2Vtb25pdG9ycyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJuZXR3b3JraW5nLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsibmV0d29ya3BvbGljaWVzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIm9scy5vcGVuc2hpZnQuaW8iXSwicmVzb3VyY2VzIjpbIm9sc2NvbmZpZ3MiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsib2xzLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsib2xzY29uZmlncy9maW5hbGl6ZXJzIl0sInZlcmJzIjpbInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJvbHMub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJvbHNjb25maWdzL3N0YXR1cyJdLCJ2ZXJicyI6WyJnZXQiLCJwYXRjaCIsInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJvcGVyYXRvci5vcGVuc2hpZnQuaW8iXSwicmVzb3VyY2VzIjpbImNvbnNvbGVzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJjbHVzdGVycm9sZWJpbmRpbmdzIiwiY2x1c3RlcnJvbGVzIl0sInZlcmJzIjpbImNyZWF0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJzdG9yYWdlY2xhc3NlcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJsaWdodHNwZWVkLW9wZXJhdG9yLWNvbnRyb2xsZXItbWFuYWdlciJ9XSwiZGVwbG95bWVudHMiOlt7ImxhYmVsIjp7ImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCI6Im1hbmFnZXIiLCJhcHAua3ViZXJuZXRlcy5pby9jcmVhdGVkLWJ5IjoibGlnaHRzcGVlZC1vcGVyYXRvciIsImFwcC5rdWJlcm5ldGVzLmlvL2luc3RhbmNlIjoiY29udHJvbGxlci1tYW5hZ2VyIiwiYXBwLmt1YmVybmV0ZXMuaW8vbWFuYWdlZC1ieSI6Imt1c3RvbWl6ZSIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJkZXBsb3ltZW50IiwiYXBwLmt1YmVybmV0ZXMuaW8vcGFydC1vZiI6ImxpZ2h0c3BlZWQtb3BlcmF0b3IiLCJjb250cm9sLXBsYW5lIjoiY29udHJvbGxlci1tYW5hZ2VyIn0sIm5hbWUiOiJsaWdodHNwZWVkLW9wZXJhdG9yLWNvbnRyb2xsZXItbWFuYWdlciIsInNwZWMiOnsicmVwbGljYXMiOjEsInNlbGVjdG9yIjp7Im1hdGNoTGFiZWxzIjp7ImNvbnRyb2wtcGxhbmUiOiJjb250cm9sbGVyLW1hbmFnZXIifX0sInN0cmF0ZWd5Ijp7fSwidGVtcGxhdGUiOnsibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsia3ViZWN0bC5rdWJlcm5ldGVzLmlvL2RlZmF1bHQtY29udGFpbmVyIjoibWFuYWdlciJ9LCJsYWJlbHMiOnsiY29udHJvbC1wbGFuZSI6ImNvbnRyb2xsZXItbWFuYWdlciJ9fSwic3BlYyI6eyJjb250YWluZXJzIjpbeyJhcmdzIjpbIi0tbGVhZGVyLWVsZWN0IiwiLS1oZWFsdGgtcHJvYmUtYmluZC1hZGRyZXNzPTo4MDgxIiwiLS1tZXRyaWNzLWJpbmQtYWRkcmVzcz06ODQ0MyIsIi0tc2VjdXJlLW1ldHJpY3Mtc2VydmVyIiwiLS1jZXJ0LWRpcj0vZXRjL3Rscy9wcml2YXRlIiwiLS1sY29yZS1pbWFnZT1xdWF5LmlvL2xpZ2h0c3BlZWQtY29yZS9saWdodHNwZWVkLXN0YWNrOmRldi1sYXRlc3QiLCItLXVzZS1sY29yZT1mYWxzZSIsIi0tbGNvcmUtc2VydmVyPXRydWUiLCItLXNlcnZpY2UtaW1hZ2U9cmVnaXN0cnkucmVkaGF0LmlvL29wZW5zaGlmdC1saWdodHNwZWVkL2xpZ2h0c3BlZWQtc2VydmljZS1hcGktcmhlbDlAc2hhMjU2OjUyODcxMzRlZTg0YzQ4MzdlNzRkYjU0YTM2ZjlhYmU3MWRjYmQ0NmQwNjdiMDRkOTliZmFhOTcyYTRmMTQ5Y2QiLCItLWNvbnNvbGUtaW1hZ2U9cmVnaXN0cnkucmVkaGF0LmlvL29wZW5zaGlmdC1saWdodHNwZWVkL2xpZ2h0c3BlZWQtY29uc29sZS1wbHVnaW4tcmhlbDlAc2hhMjU2OmM2MTNlNDcxY2QzYjc3ZmI4NWRhY2IzMzdiNWI5YzZiOWZkZGQwNjU2MzQ4NWIwMTg5ODA5NjkwYjE0MmRkNGYiLCItLWNvbnNvbGUtaW1hZ2UtcGY1PXJlZ2lzdHJ5LnJlZGhhdC5pby9vcGVuc2hpZnQtbGlnaHRzcGVlZC9saWdodHNwZWVkLWNvbnNvbGUtcGx1Z2luLXBmNS1yaGVsOUBzaGEyNTY6ODZhYzQzZTU0YTdkMTIxNzYyMjY1Y2ZiYjliMzJkM2I3NTIyNmU3NWVmMjVhYmFmZjJhZGIyMmMxMTcxZjAwYSIsIi0tY29uc29sZS1pbWFnZS00LTE5PXJlZ2lzdHJ5LnJlZGhhdC5pby9vcGVuc2hpZnQtbGlnaHRzcGVlZC9saWdodHNwZWVkLWNvbnNvbGUtcGx1Z2luLTQxOS1yaGVsOUBzaGEyNTY6YWFjMWY1NjEwYTQ0NjE1NWRjNjU2OTNiNmEwMDVhYzYxMzc5MTExNzg0NGVhNjFlOTg1MzlmZjA2Nzg4Zjc1NiIsIi0tcG9zdGdyZXMtaW1hZ2U9cmVnaXN0cnkucmVkaGF0LmlvL3JoZWw5L3Bvc3RncmVzcWwtMTZAc2hhMjU2OjQyZjM4NWFjM2M5Yjg5MTM0MjZkYTdjNTdlNzBiYzY2MTdjZDIzN2FhZjY5N2M2NjdmNjM4NWE4YzBiMDExOGIiLCItLW9wZW5zaGlmdC1tY3Atc2VydmVyLWltYWdlPXJlZ2lzdHJ5LnJlZGhhdC5pby9vcGVuc2hpZnQtbGlnaHRzcGVlZC9vcGVuc2hpZnQtbWNwLXNlcnZlci1yaGVsOUBzaGEyNTY6YTc4NjBmZTY3NTQ5ZTMzZjZmNWJjNTE3OTM0Y2MyOGNjNTEyZTIxMmIxZDM3YWU0ZWU1OGI5NmNmZmNjNTMwYSIsIi0tZGF0YXZlcnNlLWV4cG9ydGVyLWltYWdlPXJlZ2lzdHJ5LnJlZGhhdC5pby9saWdodHNwZWVkLWNvcmUvZGF0YXZlcnNlLWV4cG9ydGVyLXJoZWw5QHNoYTI1NjpkYzA3MTQyMWM5MjVkYmU1NWZkMDM3NjVmN2EyZWRlNzE0MGU5YTRkNDlhYTk1YzBiNGQyNDM1Y2JlZTk1ZjBmIiwiLS1vY3AtcmFnLWltYWdlPXJlZ2lzdHJ5LnJlZGhhdC5pby9vcGVuc2hpZnQtbGlnaHRzcGVlZC9saWdodHNwZWVkLW9jcC1yYWctcmhlbDlAc2hhMjU2OmQzYzMzNTJiYTlkYTM5NmIzZWFhYzM4MjVkMmZjZDcyODQzZWIwNmU3NDVlYzQwNjkwNWQxOWU5NTMwYjU2N2IiXSwiY29tbWFuZCI6WyIvbWFuYWdlciJdLCJlbnYiOlt7Im5hbWUiOiJXQVRDSF9OQU1FU1BBQ0UiLCJ2YWx1ZUZyb20iOnsiZmllbGRSZWYiOnsiZmllbGRQYXRoIjoibWV0YWRhdGEuYW5ub3RhdGlvbnNbJ29sbS50YXJnZXROYW1lc3BhY2VzJ10ifX19XSwiaW1hZ2UiOiJyZWdpc3RyeS5yZWRoYXQuaW8vb3BlbnNoaWZ0LWxpZ2h0c3BlZWQvbGlnaHRzcGVlZC1yaGVsOS1vcGVyYXRvckBzaGEyNTY6YWM4NDY1NzdmZmEwMDAxZjZmNDBmN2I0YzY4ODViOTZmNjE1ZWI5ZGE0OGNkZDEzYzkxYjRlYjdkYzZjNzhkMSIsImltYWdlUHVsbFBvbGljeSI6IkFsd2F5cyIsImxpdmVuZXNzUHJvYmUiOnsiaHR0cEdldCI6eyJwYXRoIjoiL2hlYWx0aHoiLCJwb3J0Ijo4MDgxfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTUsInBlcmlvZFNlY29uZHMiOjIwfSwibmFtZSI6Im1hbmFnZXIiLCJwb3J0cyI6W3siY29udGFpbmVyUG9ydCI6ODQ0MywibmFtZSI6Im1ldHJpY3MiLCJwcm90b2NvbCI6IlRDUCJ9XSwicmVhZGluZXNzUHJvYmUiOnsiaHR0cEdldCI6eyJwYXRoIjoiL3JlYWR5eiIsInBvcnQiOjgwODF9LCJpbml0aWFsRGVsYXlTZWNvbmRzIjo1LCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiNTAwbSIsIm1lbW9yeSI6IjI1Nk1pIn0sInJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjY0TWkifX0sInNlY3VyaXR5Q29udGV4dCI6eyJhbGxvd1ByaXZpbGVnZUVzY2FsYXRpb24iOmZhbHNlLCJjYXBhYmlsaXRpZXMiOnsiZHJvcCI6WyJBTEwiXX0sInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJ2b2x1bWVNb3VudHMiOlt7Im1vdW50UGF0aCI6Ii9ldGMvdGxzL3ByaXZhdGUiLCJuYW1lIjoiY29udHJvbGxlci1tYW5hZ2VyLXRscyIsInJlYWRPbmx5Ijp0cnVlfV19XSwic2VjdXJpdHlDb250ZXh0Ijp7InJ1bkFzTm9uUm9vdCI6dHJ1ZX0sInNlcnZpY2VBY2NvdW50TmFtZSI6ImxpZ2h0c3BlZWQtb3BlcmF0b3ItY29udHJvbGxlci1tYW5hZ2VyIiwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOjEwLCJ2b2x1bWVzIjpbeyJuYW1lIjoiY29udHJvbGxlci1tYW5hZ2VyLXRscyIsInNlY3JldCI6eyJzZWNyZXROYW1lIjoiY29udHJvbGxlci1tYW5hZ2VyLXRscyJ9fV19fX19XSwicGVybWlzc2lvbnMiOlt7InJ1bGVzIjpbeyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJjb25maWdtYXBzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCIsImNyZWF0ZSIsInVwZGF0ZSIsInBhdGNoIiwiZGVsZXRlIl19LHsiYXBpR3JvdXBzIjpbImNvb3JkaW5hdGlvbi5rOHMuaW8iXSwicmVzb3VyY2VzIjpbImxlYXNlcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giLCJjcmVhdGUiLCJ1cGRhdGUiLCJwYXRjaCIsImRlbGV0ZSJdfSx7ImFwaUdyb3VwcyI6WyIiXSwicmVzb3VyY2VzIjpbImV2ZW50cyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJwYXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJyb2xlYmluZGluZ3MiLCJyb2xlcyJdLCJ2ZXJicyI6WyIqIl19XSwic2VydmljZUFjY291bnROYW1lIjoibGlnaHRzcGVlZC1vcGVyYXRvci1jb250cm9sbGVyLW1hbmFnZXIifV19LCJzdHJhdGVneSI6ImRlcGxveW1lbnQifSwiaW5zdGFsbE1vZGVzIjpbeyJzdXBwb3J0ZWQiOnRydWUsInR5cGUiOiJPd25OYW1lc3BhY2UifSx7InN1cHBvcnRlZCI6ZmFsc2UsInR5cGUiOiJTaW5nbGVOYW1lc3BhY2UifSx7InN1cHBvcnRlZCI6ZmFsc2UsInR5cGUiOiJNdWx0aU5hbWVzcGFjZSJ9LHsic3VwcG9ydGVkIjpmYWxzZSwidHlwZSI6IkFsbE5hbWVzcGFjZXMifV0sImtleXdvcmRzIjpbImFpIiwiYXNzaXN0YW50Iiwib3BlbnNoaWZ0IiwibGxtIl0sImxpbmtzIjpbeyJuYW1lIjoiTGlnaHRzcGVlZCBPcGVyYXRvciIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc2hpZnQvbGlnaHRzcGVlZC1vcGVyYXRvciJ9XSwibWF0dXJpdHkiOiJhbHBoYSIsIm1pbkt1YmVWZXJzaW9uIjoiMS4yOC4wIiwicHJvdmlkZXIiOnsibmFtZSI6IlJlZCBIYXQsIEluYyIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc2hpZnQvbGlnaHRzcGVlZC1zZXJ2aWNlIn0sInJlbGF0ZWRJbWFnZXMiOlt7ImltYWdlIjoicmVnaXN0cnkucmVkaGF0LmlvL29wZW5zaGlmdC1saWdodHNwZWVkL2xpZ2h0c3BlZWQtc2VydmljZS1hcGktcmhlbDlAc2hhMjU2OjUyODcxMzRlZTg0YzQ4MzdlNzRkYjU0YTM2ZjlhYmU3MWRjYmQ0NmQwNjdiMDRkOTliZmFhOTcyYTRmMTQ5Y2QiLCJuYW1lIjoibGlnaHRzcGVlZC1zZXJ2aWNlLWFwaSJ9LHsiaW1hZ2UiOiJyZWdpc3RyeS5yZWRoYXQuaW8vb3BlbnNoaWZ0LWxpZ2h0c3BlZWQvbGlnaHRzcGVlZC1jb25zb2xlLXBsdWdpbi1yaGVsOUBzaGEyNTY6YzYxM2U0NzFjZDNiNzdmYjg1ZGFjYjMzN2I1YjljNmI5ZmRkZDA2NTYzNDg1YjAxODk4MDk2OTBiMTQyZGQ0ZiIsIm5hbWUiOiJsaWdodHNwZWVkLWNvbnNvbGUtcGx1Z2luIn0seyJpbWFnZSI6InJlZ2lzdHJ5LnJlZGhhdC5pby9vcGVuc2hpZnQtbGlnaHRzcGVlZC9saWdodHNwZWVkLWNvbnNvbGUtcGx1Z2luLXBmNS1yaGVsOUBzaGEyNTY6ODZhYzQzZTU0YTdkMTIxNzYyMjY1Y2ZiYjliMzJkM2I3NTIyNmU3NWVmMjVhYmFmZjJhZGIyMmMxMTcxZjAwYSIsIm5hbWUiOiJsaWdodHNwZWVkLWNvbnNvbGUtcGx1Z2luLXBmNSJ9LHsiaW1hZ2UiOiJyZWdpc3RyeS5yZWRoYXQuaW8vb3BlbnNoaWZ0LWxpZ2h0c3BlZWQvbGlnaHRzcGVlZC1jb25zb2xlLXBsdWdpbi00MTktcmhlbDlAc2hhMjU2OmFhYzFmNTYxMGE0NDYxNTVkYzY1NjkzYjZhMDA1YWM2MTM3OTExMTc4NDRlYTYxZTk4NTM5ZmYwNjc4OGY3NTYiLCJuYW1lIjoibGlnaHRzcGVlZC1jb25zb2xlLXBsdWdpbi00LTE5In0seyJpbWFnZSI6InJlZ2lzdHJ5LnJlZGhhdC5pby9vcGVuc2hpZnQtbGlnaHRzcGVlZC9saWdodHNwZWVkLXJoZWw5LW9wZXJhdG9yQHNoYTI1NjphYzg0NjU3N2ZmYTAwMDFmNmY0MGY3YjRjNjg4NWI5NmY2MTVlYjlkYTQ4Y2RkMTNjOTFiNGViN2RjNmM3OGQxIiwibmFtZSI6ImxpZ2h0c3BlZWQtb3BlcmF0b3IifSx7ImltYWdlIjoicmVnaXN0cnkucmVkaGF0LmlvL29wZW5zaGlmdC1saWdodHNwZWVkL29wZW5zaGlmdC1tY3Atc2VydmVyLXJoZWw5QHNoYTI1NjphNzg2MGZlNjc1NDllMzNmNmY1YmM1MTc5MzRjYzI4Y2M1MTJlMjEyYjFkMzdhZTRlZTU4Yjk2Y2ZmY2M1MzBhIiwibmFtZSI6Im9wZW5zaGlmdC1tY3Atc2VydmVyIn0seyJpbWFnZSI6InJlZ2lzdHJ5LnJlZGhhdC5pby9saWdodHNwZWVkLWNvcmUvZGF0YXZlcnNlLWV4cG9ydGVyLXJoZWw5QHNoYTI1NjpkYzA3MTQyMWM5MjVkYmU1NWZkMDM3NjVmN2EyZWRlNzE0MGU5YTRkNDlhYTk1YzBiNGQyNDM1Y2JlZTk1ZjBmIiwibmFtZSI6ImxpZ2h0c3BlZWQtdG8tZGF0YXZlcnNlLWV4cG9ydGVyIn0seyJpbWFnZSI6InJlZ2lzdHJ5LnJlZGhhdC5pby9vcGVuc2hpZnQtbGlnaHRzcGVlZC9saWdodHNwZWVkLW9jcC1yYWctcmhlbDlAc2hhMjU2OmQzYzMzNTJiYTlkYTM5NmIzZWFhYzM4MjVkMmZjZDcyODQzZWIwNmU3NDVlYzQwNjkwNWQxOWU5NTMwYjU2N2IiLCJuYW1lIjoibGlnaHRzcGVlZC1vY3AtcmFnIn0seyJpbWFnZSI6InJlZ2lzdHJ5LnJlZGhhdC5pby9yaGVsOS9wb3N0Z3Jlc3FsLTE2QHNoYTI1Njo0MmYzODVhYzNjOWI4OTEzNDI2ZGE3YzU3ZTcwYmM2NjE3Y2QyMzdhYWY2OTdjNjY3ZjYzODVhOGMwYjAxMThiIiwibmFtZSI6ImxpZ2h0c3BlZWQtcG9zdGdyZXNxbCJ9LHsiaW1hZ2UiOiJyZWdpc3RyeS5yZWRoYXQuaW8vb3BlbnNoaWZ0LWxpZ2h0c3BlZWQvbGlnaHRzcGVlZC1vcGVyYXRvci1idW5kbGVAc2hhMjU2OmVhMzY5NjQyNjZhOThiMGI4NWE3YzY4YjJmNmNjODAwZTliNzRiYTA3OGViMjNkMjcxNzRiODlkN2Y1ZGI1Y2EiLCJuYW1lIjoibGlnaHRzcGVlZC1vcGVyYXRvci1idW5kbGUifV0sInZlcnNpb24iOiIxLjAuMTMifX0= + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoicmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MSIsImtpbmQiOiJDbHVzdGVyUm9sZSIsIm1ldGFkYXRhIjp7ImNyZWF0aW9uVGltZXN0YW1wIjpudWxsLCJsYWJlbHMiOnsiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50IjoibWV0cmljcyIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJjbHVzdGVycm9sZSIsImFwcC5rdWJlcm5ldGVzLmlvL3BhcnQtb2YiOiJsaWdodHNwZWVkLW9wZXJhdG9yIn0sIm5hbWUiOiJsaWdodHNwZWVkLW9wZXJhdG9yLW9scy1tZXRyaWNzLXJlYWRlciJ9LCJydWxlcyI6W3sibm9uUmVzb3VyY2VVUkxzIjpbIi9vbHMtbWV0cmljcy1hY2Nlc3MiXSwidmVyYnMiOlsiZ2V0Il19LHsibm9uUmVzb3VyY2VVUkxzIjpbIi9scy1hY2Nlc3MiXSwidmVyYnMiOlsiZ2V0Il19XX0= + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoicmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MSIsImtpbmQiOiJDbHVzdGVyUm9sZSIsIm1ldGFkYXRhIjp7ImNyZWF0aW9uVGltZXN0YW1wIjpudWxsLCJsYWJlbHMiOnsiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50IjoidXNlci1hY2Nlc3MiLCJhcHAua3ViZXJuZXRlcy5pby9jcmVhdGVkLWJ5IjoibGlnaHRzcGVlZC1vcGVyYXRvciIsImFwcC5rdWJlcm5ldGVzLmlvL2luc3RhbmNlIjoicXVlcnktYWNjZXNzIiwiYXBwLmt1YmVybmV0ZXMuaW8vbWFuYWdlZC1ieSI6Imt1c3RvbWl6ZSIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJjbHVzdGVycm9sZSIsImFwcC5rdWJlcm5ldGVzLmlvL3BhcnQtb2YiOiJsaWdodHNwZWVkLW9wZXJhdG9yIn0sIm5hbWUiOiJsaWdodHNwZWVkLW9wZXJhdG9yLXF1ZXJ5LWFjY2VzcyJ9LCJydWxlcyI6W3sibm9uUmVzb3VyY2VVUkxzIjpbIi9vbHMtYWNjZXNzIl0sInZlcmJzIjpbImdldCJdfSx7Im5vblJlc291cmNlVVJMcyI6WyIvbHMtYWNjZXNzIl0sInZlcmJzIjpbImdldCJdfV19 + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoicmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MSIsImtpbmQiOiJDbHVzdGVyUm9sZUJpbmRpbmciLCJtZXRhZGF0YSI6eyJjcmVhdGlvblRpbWVzdGFtcCI6bnVsbCwibGFiZWxzIjp7ImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCI6Im1ldHJpY3MiLCJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjoiY2x1c3RlcnJvbGViaW5kaW5nIiwiYXBwLmt1YmVybmV0ZXMuaW8vcGFydC1vZiI6ImxpZ2h0c3BlZWQtb3BlcmF0b3IifSwibmFtZSI6ImxpZ2h0c3BlZWQtb3BlcmF0b3Itb2xzLW1ldHJpY3MtcmVhZGVyIn0sInJvbGVSZWYiOnsiYXBpR3JvdXAiOiJyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvIiwia2luZCI6IkNsdXN0ZXJSb2xlIiwibmFtZSI6ImxpZ2h0c3BlZWQtb3BlcmF0b3Itb2xzLW1ldHJpY3MtcmVhZGVyIn0sInN1YmplY3RzIjpbeyJraW5kIjoiU2VydmljZUFjY291bnQiLCJuYW1lIjoibGlnaHRzcGVlZC1vcGVyYXRvci1tZXRyaWNzLXJlYWRlciIsIm5hbWVzcGFjZSI6Im9wZW5zaGlmdC1saWdodHNwZWVkIn1dfQ== + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoicmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MSIsImtpbmQiOiJSb2xlIiwibWV0YWRhdGEiOnsiY3JlYXRpb25UaW1lc3RhbXAiOm51bGwsImxhYmVscyI6eyJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQiOiJtZXRyaWNzIiwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSI6InJvbGUiLCJhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mIjoibGlnaHRzcGVlZC1vcGVyYXRvciJ9LCJuYW1lIjoibGlnaHRzcGVlZC1vcGVyYXRvci1wcm9tZXRoZXVzLW9wZXJhdG9yIn0sInJ1bGVzIjpbeyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlTmFtZXMiOlsibWV0cmljcy1yZWFkZXItdG9rZW4iXSwicmVzb3VyY2VzIjpbInNlY3JldHMiXSwidmVyYnMiOlsiZ2V0Iiwid2F0Y2giLCJsaXN0Il19XX0= + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoicmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MSIsImtpbmQiOiJSb2xlIiwibWV0YWRhdGEiOnsiY3JlYXRpb25UaW1lc3RhbXAiOm51bGwsImxhYmVscyI6eyJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQiOiJtZXRyaWNzIiwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSI6InJvbGUiLCJhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mIjoibGlnaHRzcGVlZC1vcGVyYXRvciJ9LCJuYW1lIjoibGlnaHRzcGVlZC1vcGVyYXRvci1wcm9tZXRoZXVzLWs4cyJ9LCJydWxlcyI6W3siYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsic2VydmljZXMiLCJlbmRwb2ludHMiLCJwb2RzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJleHRlbnNpb25zIl0sInJlc291cmNlcyI6WyJpbmdyZXNzZXMiXSwidmVyYnMiOlsiZ2V0IiwibGlzdCIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIm5ldHdvcmtpbmcuazhzLmlvIl0sInJlc291cmNlcyI6WyJpbmdyZXNzZXMiXSwidmVyYnMiOlsiZ2V0IiwibGlzdCIsIndhdGNoIl19XX0= + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoicmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MSIsImtpbmQiOiJSb2xlQmluZGluZyIsIm1ldGFkYXRhIjp7ImNyZWF0aW9uVGltZXN0YW1wIjpudWxsLCJsYWJlbHMiOnsiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50IjoibWV0cmljcyIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJyb2xlYmluZGluZyIsImFwcC5rdWJlcm5ldGVzLmlvL3BhcnQtb2YiOiJsaWdodHNwZWVkLW9wZXJhdG9yIn0sIm5hbWUiOiJsaWdodHNwZWVkLW9wZXJhdG9yLXByb21ldGhldXMtazhzIn0sInJvbGVSZWYiOnsiYXBpR3JvdXAiOiJyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvIiwia2luZCI6IlJvbGUiLCJuYW1lIjoibGlnaHRzcGVlZC1vcGVyYXRvci1wcm9tZXRoZXVzLWs4cyJ9LCJzdWJqZWN0cyI6W3sia2luZCI6IlNlcnZpY2VBY2NvdW50IiwibmFtZSI6InByb21ldGhldXMtazhzIiwibmFtZXNwYWNlIjoib3BlbnNoaWZ0LW1vbml0b3JpbmcifV19 + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoicmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MSIsImtpbmQiOiJSb2xlQmluZGluZyIsIm1ldGFkYXRhIjp7ImNyZWF0aW9uVGltZXN0YW1wIjpudWxsLCJsYWJlbHMiOnsiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50IjoibWV0cmljcyIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJyb2xlYmluZGluZyIsImFwcC5rdWJlcm5ldGVzLmlvL3BhcnQtb2YiOiJsaWdodHNwZWVkLW9wZXJhdG9yIn0sIm5hbWUiOiJsaWdodHNwZWVkLW9wZXJhdG9yLXByb21ldGhldXMtb3BlcmF0b3IifSwicm9sZVJlZiI6eyJhcGlHcm91cCI6InJiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8iLCJraW5kIjoiUm9sZSIsIm5hbWUiOiJsaWdodHNwZWVkLW9wZXJhdG9yLXByb21ldGhldXMtb3BlcmF0b3IifSwic3ViamVjdHMiOlt7ImtpbmQiOiJTZXJ2aWNlQWNjb3VudCIsIm5hbWUiOiJwcm9tZXRoZXVzLW9wZXJhdG9yIiwibmFtZXNwYWNlIjoib3BlbnNoaWZ0LW1vbml0b3JpbmcifV19 + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoidjEiLCJraW5kIjoiU2VydmljZSIsIm1ldGFkYXRhIjp7ImFubm90YXRpb25zIjp7InNlcnZpY2UuYmV0YS5vcGVuc2hpZnQuaW8vc2VydmluZy1jZXJ0LXNlY3JldC1uYW1lIjoiY29udHJvbGxlci1tYW5hZ2VyLXRscyJ9LCJjcmVhdGlvblRpbWVzdGFtcCI6bnVsbCwibGFiZWxzIjp7ImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCI6Im1hbmFnZXIiLCJhcHAua3ViZXJuZXRlcy5pby9jcmVhdGVkLWJ5IjoibGlnaHRzcGVlZC1vcGVyYXRvciIsImFwcC5rdWJlcm5ldGVzLmlvL2luc3RhbmNlIjoiY29udHJvbGxlci1tYW5hZ2VyLXNlcnZpY2UiLCJhcHAua3ViZXJuZXRlcy5pby9tYW5hZ2VkLWJ5Ijoia3VzdG9taXplIiwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSI6InNlcnZpY2UiLCJhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mIjoibGlnaHRzcGVlZC1vcGVyYXRvciIsImNvbnRyb2wtcGxhbmUiOiJjb250cm9sbGVyLW1hbmFnZXIifSwibmFtZSI6ImxpZ2h0c3BlZWQtb3BlcmF0b3ItY29udHJvbGxlci1tYW5hZ2VyLXNlcnZpY2UifSwic3BlYyI6eyJwb3J0cyI6W3sibmFtZSI6Im1ldHJpY3MiLCJwb3J0Ijo4NDQzLCJwcm90b2NvbCI6IlRDUCIsInRhcmdldFBvcnQiOiJtZXRyaWNzIn1dLCJzZWxlY3RvciI6eyJjb250cm9sLXBsYW5lIjoiY29udHJvbGxlci1tYW5hZ2VyIn19LCJzdGF0dXMiOnsibG9hZEJhbGFuY2VyIjp7fX19 + - type: olm.bundle.object + value: + data: eyJhcGlWZXJzaW9uIjoidjEiLCJraW5kIjoiU2VydmljZUFjY291bnQiLCJtZXRhZGF0YSI6eyJjcmVhdGlvblRpbWVzdGFtcCI6bnVsbCwibGFiZWxzIjp7ImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCI6Im1ldHJpY3MiLCJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjoic2VydmljZS1hY2NvdW50IiwiYXBwLmt1YmVybmV0ZXMuaW8vcGFydC1vZiI6ImxpZ2h0c3BlZWQtb3BlcmF0b3IifSwibmFtZSI6ImxpZ2h0c3BlZWQtb3BlcmF0b3ItbWV0cmljcy1yZWFkZXIifX0= +relatedImages: + - name: lightspeed-service-api + image: registry.redhat.io/openshift-lightspeed/lightspeed-service-api-rhel9@sha256:5287134ee84c4837e74db54a36f9abe71dcbd46d067b04d99bfaa972a4f149cd + - name: lightspeed-console-plugin + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-rhel9@sha256:c613e471cd3b77fb85dacb337b5b9c6b9fddd06563485b0189809690b142dd4f + - name: lightspeed-console-plugin-pf5 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-pf5-rhel9@sha256:86ac43e54a7d121762265cfbb9b32d3b75226e75ef25abaff2adb22c1171f00a + - name: lightspeed-console-plugin-4-19 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-419-rhel9@sha256:aac1f5610a446155dc65693b6a005ac613791117844ea61e98539ff06788f756 + - name: lightspeed-operator + image: registry.redhat.io/openshift-lightspeed/lightspeed-rhel9-operator@sha256:ac846577ffa0001f6f40f7b4c6885b96f615eb9da48cdd13c91b4eb7dc6c78d1 + - name: openshift-mcp-server + image: registry.redhat.io/openshift-lightspeed/openshift-mcp-server-rhel9@sha256:a7860fe67549e33f6f5bc517934cc28cc512e212b1d37ae4ee58b96cffcc530a + - name: lightspeed-to-dataverse-exporter + image: registry.redhat.io/lightspeed-core/dataverse-exporter-rhel9@sha256:dc071421c925dbe55fd03765f7a2ede7140e9a4d49aa95c0b4d2435cbee95f0f + - name: lightspeed-ocp-rag + image: registry.redhat.io/openshift-lightspeed/lightspeed-ocp-rag-rhel9@sha256:d3c3352ba9da396b3eaac3825d2fcd72843eb06e745ec406905d19e9530b567b + - name: lightspeed-postgresql + image: registry.redhat.io/rhel9/postgresql-16@sha256:42f385ac3c9b8913426da7c57e70bc6617cd237aaf697c667f6385a8c0b0118b + - name: lightspeed-operator-bundle + image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +schema: olm.bundle diff --git a/lightspeed-catalog-4.16/index.yaml b/lightspeed-catalog-4.16/index.yaml index aa8ae4bca..1e4faf26d 100644 --- a/lightspeed-catalog-4.16/index.yaml +++ b/lightspeed-catalog-4.16/index.yaml @@ -20,6 +20,8 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 --- schema: olm.channel package: lightspeed-operator @@ -35,3 +37,5 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 diff --git a/lightspeed-catalog-4.17/bundle-v1.0.13.yaml b/lightspeed-catalog-4.17/bundle-v1.0.13.yaml new file mode 100644 index 000000000..84dd476a3 --- /dev/null +++ b/lightspeed-catalog-4.17/bundle-v1.0.13.yaml @@ -0,0 +1,544 @@ +--- +image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +name: lightspeed-operator.v1.0.13 +package: lightspeed-operator +properties: + - type: olm.gvk + value: + group: ols.openshift.io + kind: OLSConfig + version: v1alpha1 + - type: olm.package + value: + packageName: lightspeed-operator + version: 1.0.13 + - type: olm.csv.metadata + value: + annotations: + alm-examples: |- + [ + { + "apiVersion": "ols.openshift.io/v1alpha1", + "kind": "OLSConfig", + "metadata": { + "labels": { + "app.kubernetes.io/created-by": "lightspeed-operator", + "app.kubernetes.io/instance": "olsconfig-sample", + "app.kubernetes.io/managed-by": "kustomize", + "app.kubernetes.io/name": "olsconfig", + "app.kubernetes.io/part-of": "lightspeed-operator" + }, + "name": "cluster" + }, + "spec": { + "llm": { + "providers": [ + { + "credentialsSecretRef": { + "name": "credentials" + }, + "models": [ + { + "name": "gpt-3.5-turbo-1106" + } + ], + "name": "OpenAI" + } + ] + } + } + } + ] + capabilities: Seamless Upgrades + console.openshift.io/operator-monitoring-default: "true" + createdAt: "2026-05-12T04:48:16Z" + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "false" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + operatorframework.io/cluster-monitoring: "true" + operatorframework.io/suggested-namespace: openshift-lightspeed + operators.openshift.io/valid-subscription: '["OpenShift Container Platform", "OpenShift Platform Plus", "OpenShift Kubernetes Engine", "OpenShift Virtualization Engine"]' + operators.operatorframework.io/builder: operator-sdk-v1.36.1 + operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 + repository: https://github.com/openshift/lightspeed-operator + apiServiceDefinitions: {} + crdDescriptions: + owned: + - description: Red Hat OpenShift Lightspeed instance. OLSConfig is the Schema for the olsconfigs API + displayName: OLSConfig + kind: OLSConfig + name: olsconfigs.ols.openshift.io + specDescriptors: + - description: Provider name + displayName: Name + path: llm.providers[0].name + - description: OLS deployment settings + displayName: Deployment + path: ols.deployment + - description: Provider API URL + displayName: URL + path: llm.providers[0].url + - description: Conversation cache settings + displayName: Conversation Cache + path: ols.conversationCache + - description: The name of the secret object that stores API provider credentials + displayName: Credential Secret + path: llm.providers[0].credentialsSecretRef + - description: |- + Feature Gates holds list of features to be enabled explicitly, otherwise they are disabled by default. + possible values: MCPServer, ToolFiltering + displayName: Feature Gates + path: featureGates + - displayName: LLM Settings + path: llm + - displayName: Providers + path: llm.providers + - description: API Version for Azure OpenAI provider + displayName: Azure OpenAI API Version + path: llm.providers[0].apiVersion + - description: |- + Arbitrary configuration for the provider (Llama Stack Generic mode only) + This map is passed directly to Llama Stack provider configuration. + Credentials are automatically injected as environment variable substitutions. + Example: {"url": "https://...", "custom_field": "value"} + displayName: Llama Stack Provider Config + path: llm.providers[0].config + - description: |- + Secret key name for provider credentials (defaults to "apitoken" if not set). + Specifies which key inside credentialsSecretRef to read the credential value from. + The credential value is always exposed to the container as env var {PROVIDER_NAME}_API_KEY + (derived from the provider name, not this field), and referenced in the Llama Stack config + YAML as ${env.PROVIDER_NAME_API_KEY}. This field only controls which secret data key is read. + displayName: Credential Key Name + path: llm.providers[0].credentialKey + - description: Deployment name for Azure OpenAI provider + displayName: Azure Deployment Name + path: llm.providers[0].deploymentName + - description: Fake Provider MCP Tool Call + displayName: Fake Provider MCP Tool Call + path: llm.providers[0].fakeProviderMCPToolCall + - description: Google Vertex Anthropic Config + displayName: Google Vertex Anthropic Config + path: llm.providers[0].googleVertexAnthropicConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexAnthropicConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexAnthropicConfig.projectID + - description: Google Vertex Config + displayName: Google Vertex Config + path: llm.providers[0].googleVertexConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexConfig.projectID + - description: List of models from the provider + displayName: Models + path: llm.providers[0].models + - description: Defines the model's context window size, in tokens. The default is 128k tokens. + displayName: Context Window Size + path: llm.providers[0].models[0].contextWindowSize + - description: Model name + displayName: Name + path: llm.providers[0].models[0].name + - description: Model API parameters + displayName: Parameters + path: llm.providers[0].models[0].parameters + - description: Max tokens for response. The default is 2048 tokens. + displayName: Max Tokens For Response + path: llm.providers[0].models[0].parameters.maxTokensForResponse + - description: Ratio of context window size allocated for tool token budget. Must be between 0.1 and 0.5. The default is 0.5. + displayName: Tool Budget Ratio + path: llm.providers[0].models[0].parameters.toolBudgetRatio + - description: Model API URL + displayName: URL + path: llm.providers[0].models[0].url + - description: Watsonx Project ID + displayName: Watsonx Project ID + path: llm.providers[0].projectID + - description: |- + Llama Stack Generic provider type for provider configuration (e.g., "remote::openai", "inline::sentence-transformers") + When set, this provider uses Llama Stack Generic mode instead of legacy mode. + Must follow pattern: (inline|remote):: + displayName: Llama Stack Provider Type + path: llm.providers[0].providerType + - description: TLS Security Profile used by connection to provider + displayName: TLS Security Profile + path: llm.providers[0].tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Provider type + displayName: Provider Type + path: llm.providers[0].type + - description: MCP Server settings + displayName: MCP Server Settings + path: mcpServers + - description: |- + Headers to send to the MCP server + Each header can reference a secret or use a special source (kubernetes token, client token) + displayName: Headers + path: mcpServers[0].headers + - description: Name of the header (e.g., "Authorization", "X-API-Key") + displayName: Header Name + path: mcpServers[0].headers[0].name + - description: Source of the header value + displayName: Value Source + path: mcpServers[0].headers[0].valueFrom + - description: |- + Reference to a secret containing the header value. + Required when Type is "secret". + The secret must exist in the operator's namespace. + displayName: Secret Reference + path: mcpServers[0].headers[0].valueFrom.secretRef + - description: Type specifies the source type for the header value + displayName: Source Type + path: mcpServers[0].headers[0].valueFrom.type + - description: Name of the MCP server + displayName: Name + path: mcpServers[0].name + - description: Timeout for the MCP server in seconds, default is 5 + displayName: Timeout (seconds) + path: mcpServers[0].timeout + - description: URL of the MCP server (HTTP/HTTPS) + displayName: URL + path: mcpServers[0].url + - displayName: OLS Settings + path: ols + - description: Additional CA certificates for TLS communication between OLS service and LLM Provider + displayName: Additional CA Configmap + path: ols.additionalCAConfigMapRef + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Only use BYOK RAG sources, ignore the OpenShift documentation RAG + displayName: Only use BYOK RAG sources + path: ols.byokRAGOnly + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - displayName: PostgreSQL Settings + path: ols.conversationCache.postgres + - description: 'Postgres maxconnections. Default: "2000"' + displayName: Maximum Connections + path: ols.conversationCache.postgres.maxConnections + - description: Postgres sharedbuffers + displayName: Shared Buffer Size + path: ols.conversationCache.postgres.sharedBuffers + - description: 'Conversation cache type. Default: "postgres"' + displayName: Cache Type + path: ols.conversationCache.type + - description: Default model for usage + displayName: Default Model + path: ols.defaultModel + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: Default provider for usage + displayName: Default Provider + path: ols.defaultProvider + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: API container settings. + displayName: API Deployment + path: ols.deployment.api + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.api.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Console container settings. + displayName: Console Deployment + path: ols.deployment.console + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.console.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Data Collector container settings. + displayName: Data Collector Container + path: ols.deployment.dataCollector + - description: Database container settings. + displayName: Database Deployment + path: ols.deployment.database + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.database.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Llama Stack container settings. + displayName: Llama Stack Container + path: ols.deployment.llamaStack + - description: MCP server container settings. + displayName: MCP Server Container + path: ols.deployment.mcpServer + - description: Pull secrets for BYOK RAG images from image registries requiring authentication + displayName: Image Pull Secrets + path: ols.imagePullSecrets + - description: |- + Enable introspection features (e.g. built-in OpenShift MCP server). Omitted means use the + CRD default (true); explicit false disables introspection. + displayName: Introspection Enabled + path: ols.introspectionEnabled + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: ols.logLevel + - description: 'Maximum number of iterations for agent execution. Default: 5' + displayName: Max Iterations + path: ols.maxIterations + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:number + - description: MCP Kubernetes server configuration + displayName: MCP Kube Server Configuration + path: ols.mcpKubeServerConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout for the MCP Kube server in seconds, default is 60 + displayName: Timeout (seconds) + path: ols.mcpKubeServerConfig.timeout + - description: Proxy settings for connecting to external servers, such as LLM providers. + displayName: Proxy Settings + path: ols.proxyConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: |- + The configmap and key holding proxy CA certificate. + The key is optional and defaults to "proxy-ca.crt" for backward compatibility. + If you use a different key name in your ConfigMap, specify it in the Key field of ProxyCACertConfigMapRef. + displayName: Proxy CA Certificate + path: ols.proxyConfig.proxyCACertificate + - description: |- + Proxy URL, e.g. https://proxy.example.com:8080 + If not specified, the cluster wide proxy will be used, through env var "https_proxy". + displayName: Proxy URL + path: ols.proxyConfig.proxyURL + - description: Query filters + displayName: Query Filters + path: ols.queryFilters + - description: Filter name. + displayName: Filter Name + path: ols.queryFilters[0].name + - description: Filter pattern. + displayName: The pattern to replace + path: ols.queryFilters[0].pattern + - description: Replacement for the matched pattern. + displayName: Replace With + path: ols.queryFilters[0].replaceWith + - description: Custom system prompt for LLM queries. If not specified, uses the default OpenShift Lightspeed prompt. + displayName: Query System Prompt + path: ols.querySystemPrompt + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: LLM Token Quota Configuration + displayName: LLM Token Quota Configuration + path: ols.quotaHandlersConfig + - description: Enable token history + displayName: Enable Token History + path: ols.quotaHandlersConfig.enableTokenHistory + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: Token quota limiters + displayName: Token Quota Limiters + path: ols.quotaHandlersConfig.limitersConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Initial value of the token quota + displayName: Initial Token Quota + path: ols.quotaHandlersConfig.limitersConfig[0].initialQuota + - description: Name of the limiter + displayName: Limiter Name + path: ols.quotaHandlersConfig.limitersConfig[0].name + - description: |- + Period of time the token quota is for + Examples: "1 hour", "30 minutes", "2 days", "1 h", "30 min", "2 d" + Accepts singular (e.g., "1 second") or plural (e.g., "2 seconds") forms + Supported units: second(s), minute(s), hour(s), day(s), month(s), year(s) or s, min, h, d, m, y + displayName: Period of Time the Token Quota Is For + path: ols.quotaHandlersConfig.limitersConfig[0].period + - description: Token quota increase step + displayName: Token Quota Increase Step + path: ols.quotaHandlersConfig.limitersConfig[0].quotaIncrease + - description: Type of the limiter + displayName: 'Limiter Type. Accepted Values: cluster_limiter, user_limiter.' + path: ols.quotaHandlersConfig.limitersConfig[0].type + - description: RAG databases + displayName: RAG Databases + path: ols.rag + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: The URL of the container image to use as a RAG source + displayName: Image + path: ols.rag[0].image + - description: The Index ID of the RAG database. Only needed if there are multiple indices in the database. + displayName: Index ID + path: ols.rag[0].indexID + - description: The path to the RAG database inside of the container image + displayName: Index Path in the Image + path: ols.rag[0].indexPath + - description: Persistent Storage Configuration + displayName: Persistent Storage Configuration + path: ols.storage + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Storage class of the requested volume + displayName: Storage Class of the Requested Volume + path: ols.storage.class + - description: Size of the requested volume + displayName: Size of the Requested Volume + path: ols.storage.size + - description: TLS configuration of the Lightspeed backend's HTTPS endpoint + displayName: TLS Configuration + path: ols.tlsConfig + - description: |- + KeyCertSecretRef references a Secret containing TLS certificate and key. + The Secret must contain the following keys: + - tls.crt: Server certificate (PEM format) - REQUIRED + - tls.key: Private key (PEM format) - REQUIRED + - ca.crt: CA certificate for console proxy trust (PEM format) - OPTIONAL + + + If ca.crt is not provided, the OpenShift Console proxy will use the default system trust store. + displayName: TLS Certificate Secret Reference + path: ols.tlsConfig.keyCertSecretRef + - description: TLS Security Profile used by API endpoints + displayName: TLS Security Profile + path: ols.tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Tool filtering configuration for hybrid RAG retrieval. If not specified, all tools are used. + displayName: Tool Filtering Configuration + path: ols.toolFilteringConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Weight for dense vs sparse retrieval (1.0 = full dense, 0.0 = full sparse) + displayName: Alpha Weight + path: ols.toolFilteringConfig.alpha + - description: Minimum similarity threshold for filtering results + displayName: Similarity Threshold + path: ols.toolFilteringConfig.threshold + - description: Number of tools to retrieve + displayName: Top K + path: ols.toolFilteringConfig.topK + - description: Tool execution approval configuration. Controls whether tool calls require user approval before execution. + displayName: Tools Approval Configuration + path: ols.toolsApprovalConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout in seconds for waiting for user approval + displayName: Approval Timeout (seconds) + path: ols.toolsApprovalConfig.approvalTimeout + - description: |- + Approval strategy for tool execution. + 'never' - tools execute without approval + 'always' - all tool calls require approval + 'tool_annotations' - approval based on per-tool annotations + displayName: Approval Type + path: ols.toolsApprovalConfig.approvalType + - description: User data collection switches + displayName: User Data Collection + path: ols.userDataCollection + - displayName: Do Not Collect User Feedback + path: ols.userDataCollection.feedbackDisabled + - displayName: Do Not Collect Transcripts + path: ols.userDataCollection.transcriptsDisabled + - displayName: OLS Data Collector Settings + path: olsDataCollector + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: olsDataCollector.logLevel + statusDescriptors: + - description: |- + Conditions represent the state of individual components + Always populated after first reconciliation + displayName: Conditions + path: conditions + - description: |- + DiagnosticInfo provides detailed troubleshooting information when deployments fail. + Each entry contains pod-level error details for a specific component. + This array is automatically populated when deployments fail and cleared when they recover. + Only present during deployment failures. + displayName: Diagnostic Info + path: diagnosticInfo + - description: |- + OverallStatus provides a high-level summary of the entire system's health. + Aggregates all component conditions into a single status value. + - Ready: All components are healthy + - NotReady: At least one component is not ready (check conditions for details) + Always set after first reconciliation + displayName: Overall Status + path: overallStatus + version: v1alpha1 + description: |- + OpenShift Lightspeed Operator provides generative AI-based virtual assistant which integrates into the OpenShift web console. OpenShift Lightspeed can answer natural language questions related to OpenShift Container Platform. + + To configure the OpenShift Lightspeed Operator, you need a Large Language Model (LLM) . You can host the LLM using RHELAI or RHOAI or use one of the models from the following Software-as-a-Service providers: + + - OpenAI + - Microsoft Azure OpenAI + - IBM WatsonX + + For more information, see [About OpenShift Lightspeed](https://docs.redhat.com/en/documentation/red_hat_openshift_lightspeed/1.0tp1/html/about/ols-about-openshift-lightspeed) in the official product documentation. + + Questions, comments, concerns, or just want to talk to the OpenShift Lightspeed team? [Email us](mailto:openshift-lightspeed-contact-requests@redhat.com)! + displayName: OpenShift Lightspeed Operator + installModes: + - supported: true + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: false + type: AllNamespaces + keywords: + - ai + - assistant + - openshift + - llm + links: + - name: Lightspeed Operator + url: https://github.com/openshift/lightspeed-operator + maturity: alpha + minKubeVersion: 1.28.0 + provider: + name: Red Hat, Inc + url: https://github.com/openshift/lightspeed-service +relatedImages: + - name: lightspeed-service-api + image: registry.redhat.io/openshift-lightspeed/lightspeed-service-api-rhel9@sha256:5287134ee84c4837e74db54a36f9abe71dcbd46d067b04d99bfaa972a4f149cd + - name: lightspeed-console-plugin + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-rhel9@sha256:c613e471cd3b77fb85dacb337b5b9c6b9fddd06563485b0189809690b142dd4f + - name: lightspeed-console-plugin-pf5 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-pf5-rhel9@sha256:86ac43e54a7d121762265cfbb9b32d3b75226e75ef25abaff2adb22c1171f00a + - name: lightspeed-console-plugin-4-19 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-419-rhel9@sha256:aac1f5610a446155dc65693b6a005ac613791117844ea61e98539ff06788f756 + - name: lightspeed-operator + image: registry.redhat.io/openshift-lightspeed/lightspeed-rhel9-operator@sha256:ac846577ffa0001f6f40f7b4c6885b96f615eb9da48cdd13c91b4eb7dc6c78d1 + - name: openshift-mcp-server + image: registry.redhat.io/openshift-lightspeed/openshift-mcp-server-rhel9@sha256:a7860fe67549e33f6f5bc517934cc28cc512e212b1d37ae4ee58b96cffcc530a + - name: lightspeed-to-dataverse-exporter + image: registry.redhat.io/lightspeed-core/dataverse-exporter-rhel9@sha256:dc071421c925dbe55fd03765f7a2ede7140e9a4d49aa95c0b4d2435cbee95f0f + - name: lightspeed-ocp-rag + image: registry.redhat.io/openshift-lightspeed/lightspeed-ocp-rag-rhel9@sha256:d3c3352ba9da396b3eaac3825d2fcd72843eb06e745ec406905d19e9530b567b + - name: lightspeed-postgresql + image: registry.redhat.io/rhel9/postgresql-16@sha256:42f385ac3c9b8913426da7c57e70bc6617cd237aaf697c667f6385a8c0b0118b + - name: lightspeed-operator-bundle + image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +schema: olm.bundle diff --git a/lightspeed-catalog-4.17/index.yaml b/lightspeed-catalog-4.17/index.yaml index aa8ae4bca..1e4faf26d 100644 --- a/lightspeed-catalog-4.17/index.yaml +++ b/lightspeed-catalog-4.17/index.yaml @@ -20,6 +20,8 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 --- schema: olm.channel package: lightspeed-operator @@ -35,3 +37,5 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 diff --git a/lightspeed-catalog-4.18/bundle-v1.0.13.yaml b/lightspeed-catalog-4.18/bundle-v1.0.13.yaml new file mode 100644 index 000000000..84dd476a3 --- /dev/null +++ b/lightspeed-catalog-4.18/bundle-v1.0.13.yaml @@ -0,0 +1,544 @@ +--- +image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +name: lightspeed-operator.v1.0.13 +package: lightspeed-operator +properties: + - type: olm.gvk + value: + group: ols.openshift.io + kind: OLSConfig + version: v1alpha1 + - type: olm.package + value: + packageName: lightspeed-operator + version: 1.0.13 + - type: olm.csv.metadata + value: + annotations: + alm-examples: |- + [ + { + "apiVersion": "ols.openshift.io/v1alpha1", + "kind": "OLSConfig", + "metadata": { + "labels": { + "app.kubernetes.io/created-by": "lightspeed-operator", + "app.kubernetes.io/instance": "olsconfig-sample", + "app.kubernetes.io/managed-by": "kustomize", + "app.kubernetes.io/name": "olsconfig", + "app.kubernetes.io/part-of": "lightspeed-operator" + }, + "name": "cluster" + }, + "spec": { + "llm": { + "providers": [ + { + "credentialsSecretRef": { + "name": "credentials" + }, + "models": [ + { + "name": "gpt-3.5-turbo-1106" + } + ], + "name": "OpenAI" + } + ] + } + } + } + ] + capabilities: Seamless Upgrades + console.openshift.io/operator-monitoring-default: "true" + createdAt: "2026-05-12T04:48:16Z" + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "false" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + operatorframework.io/cluster-monitoring: "true" + operatorframework.io/suggested-namespace: openshift-lightspeed + operators.openshift.io/valid-subscription: '["OpenShift Container Platform", "OpenShift Platform Plus", "OpenShift Kubernetes Engine", "OpenShift Virtualization Engine"]' + operators.operatorframework.io/builder: operator-sdk-v1.36.1 + operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 + repository: https://github.com/openshift/lightspeed-operator + apiServiceDefinitions: {} + crdDescriptions: + owned: + - description: Red Hat OpenShift Lightspeed instance. OLSConfig is the Schema for the olsconfigs API + displayName: OLSConfig + kind: OLSConfig + name: olsconfigs.ols.openshift.io + specDescriptors: + - description: Provider name + displayName: Name + path: llm.providers[0].name + - description: OLS deployment settings + displayName: Deployment + path: ols.deployment + - description: Provider API URL + displayName: URL + path: llm.providers[0].url + - description: Conversation cache settings + displayName: Conversation Cache + path: ols.conversationCache + - description: The name of the secret object that stores API provider credentials + displayName: Credential Secret + path: llm.providers[0].credentialsSecretRef + - description: |- + Feature Gates holds list of features to be enabled explicitly, otherwise they are disabled by default. + possible values: MCPServer, ToolFiltering + displayName: Feature Gates + path: featureGates + - displayName: LLM Settings + path: llm + - displayName: Providers + path: llm.providers + - description: API Version for Azure OpenAI provider + displayName: Azure OpenAI API Version + path: llm.providers[0].apiVersion + - description: |- + Arbitrary configuration for the provider (Llama Stack Generic mode only) + This map is passed directly to Llama Stack provider configuration. + Credentials are automatically injected as environment variable substitutions. + Example: {"url": "https://...", "custom_field": "value"} + displayName: Llama Stack Provider Config + path: llm.providers[0].config + - description: |- + Secret key name for provider credentials (defaults to "apitoken" if not set). + Specifies which key inside credentialsSecretRef to read the credential value from. + The credential value is always exposed to the container as env var {PROVIDER_NAME}_API_KEY + (derived from the provider name, not this field), and referenced in the Llama Stack config + YAML as ${env.PROVIDER_NAME_API_KEY}. This field only controls which secret data key is read. + displayName: Credential Key Name + path: llm.providers[0].credentialKey + - description: Deployment name for Azure OpenAI provider + displayName: Azure Deployment Name + path: llm.providers[0].deploymentName + - description: Fake Provider MCP Tool Call + displayName: Fake Provider MCP Tool Call + path: llm.providers[0].fakeProviderMCPToolCall + - description: Google Vertex Anthropic Config + displayName: Google Vertex Anthropic Config + path: llm.providers[0].googleVertexAnthropicConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexAnthropicConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexAnthropicConfig.projectID + - description: Google Vertex Config + displayName: Google Vertex Config + path: llm.providers[0].googleVertexConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexConfig.projectID + - description: List of models from the provider + displayName: Models + path: llm.providers[0].models + - description: Defines the model's context window size, in tokens. The default is 128k tokens. + displayName: Context Window Size + path: llm.providers[0].models[0].contextWindowSize + - description: Model name + displayName: Name + path: llm.providers[0].models[0].name + - description: Model API parameters + displayName: Parameters + path: llm.providers[0].models[0].parameters + - description: Max tokens for response. The default is 2048 tokens. + displayName: Max Tokens For Response + path: llm.providers[0].models[0].parameters.maxTokensForResponse + - description: Ratio of context window size allocated for tool token budget. Must be between 0.1 and 0.5. The default is 0.5. + displayName: Tool Budget Ratio + path: llm.providers[0].models[0].parameters.toolBudgetRatio + - description: Model API URL + displayName: URL + path: llm.providers[0].models[0].url + - description: Watsonx Project ID + displayName: Watsonx Project ID + path: llm.providers[0].projectID + - description: |- + Llama Stack Generic provider type for provider configuration (e.g., "remote::openai", "inline::sentence-transformers") + When set, this provider uses Llama Stack Generic mode instead of legacy mode. + Must follow pattern: (inline|remote):: + displayName: Llama Stack Provider Type + path: llm.providers[0].providerType + - description: TLS Security Profile used by connection to provider + displayName: TLS Security Profile + path: llm.providers[0].tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Provider type + displayName: Provider Type + path: llm.providers[0].type + - description: MCP Server settings + displayName: MCP Server Settings + path: mcpServers + - description: |- + Headers to send to the MCP server + Each header can reference a secret or use a special source (kubernetes token, client token) + displayName: Headers + path: mcpServers[0].headers + - description: Name of the header (e.g., "Authorization", "X-API-Key") + displayName: Header Name + path: mcpServers[0].headers[0].name + - description: Source of the header value + displayName: Value Source + path: mcpServers[0].headers[0].valueFrom + - description: |- + Reference to a secret containing the header value. + Required when Type is "secret". + The secret must exist in the operator's namespace. + displayName: Secret Reference + path: mcpServers[0].headers[0].valueFrom.secretRef + - description: Type specifies the source type for the header value + displayName: Source Type + path: mcpServers[0].headers[0].valueFrom.type + - description: Name of the MCP server + displayName: Name + path: mcpServers[0].name + - description: Timeout for the MCP server in seconds, default is 5 + displayName: Timeout (seconds) + path: mcpServers[0].timeout + - description: URL of the MCP server (HTTP/HTTPS) + displayName: URL + path: mcpServers[0].url + - displayName: OLS Settings + path: ols + - description: Additional CA certificates for TLS communication between OLS service and LLM Provider + displayName: Additional CA Configmap + path: ols.additionalCAConfigMapRef + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Only use BYOK RAG sources, ignore the OpenShift documentation RAG + displayName: Only use BYOK RAG sources + path: ols.byokRAGOnly + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - displayName: PostgreSQL Settings + path: ols.conversationCache.postgres + - description: 'Postgres maxconnections. Default: "2000"' + displayName: Maximum Connections + path: ols.conversationCache.postgres.maxConnections + - description: Postgres sharedbuffers + displayName: Shared Buffer Size + path: ols.conversationCache.postgres.sharedBuffers + - description: 'Conversation cache type. Default: "postgres"' + displayName: Cache Type + path: ols.conversationCache.type + - description: Default model for usage + displayName: Default Model + path: ols.defaultModel + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: Default provider for usage + displayName: Default Provider + path: ols.defaultProvider + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: API container settings. + displayName: API Deployment + path: ols.deployment.api + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.api.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Console container settings. + displayName: Console Deployment + path: ols.deployment.console + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.console.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Data Collector container settings. + displayName: Data Collector Container + path: ols.deployment.dataCollector + - description: Database container settings. + displayName: Database Deployment + path: ols.deployment.database + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.database.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Llama Stack container settings. + displayName: Llama Stack Container + path: ols.deployment.llamaStack + - description: MCP server container settings. + displayName: MCP Server Container + path: ols.deployment.mcpServer + - description: Pull secrets for BYOK RAG images from image registries requiring authentication + displayName: Image Pull Secrets + path: ols.imagePullSecrets + - description: |- + Enable introspection features (e.g. built-in OpenShift MCP server). Omitted means use the + CRD default (true); explicit false disables introspection. + displayName: Introspection Enabled + path: ols.introspectionEnabled + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: ols.logLevel + - description: 'Maximum number of iterations for agent execution. Default: 5' + displayName: Max Iterations + path: ols.maxIterations + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:number + - description: MCP Kubernetes server configuration + displayName: MCP Kube Server Configuration + path: ols.mcpKubeServerConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout for the MCP Kube server in seconds, default is 60 + displayName: Timeout (seconds) + path: ols.mcpKubeServerConfig.timeout + - description: Proxy settings for connecting to external servers, such as LLM providers. + displayName: Proxy Settings + path: ols.proxyConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: |- + The configmap and key holding proxy CA certificate. + The key is optional and defaults to "proxy-ca.crt" for backward compatibility. + If you use a different key name in your ConfigMap, specify it in the Key field of ProxyCACertConfigMapRef. + displayName: Proxy CA Certificate + path: ols.proxyConfig.proxyCACertificate + - description: |- + Proxy URL, e.g. https://proxy.example.com:8080 + If not specified, the cluster wide proxy will be used, through env var "https_proxy". + displayName: Proxy URL + path: ols.proxyConfig.proxyURL + - description: Query filters + displayName: Query Filters + path: ols.queryFilters + - description: Filter name. + displayName: Filter Name + path: ols.queryFilters[0].name + - description: Filter pattern. + displayName: The pattern to replace + path: ols.queryFilters[0].pattern + - description: Replacement for the matched pattern. + displayName: Replace With + path: ols.queryFilters[0].replaceWith + - description: Custom system prompt for LLM queries. If not specified, uses the default OpenShift Lightspeed prompt. + displayName: Query System Prompt + path: ols.querySystemPrompt + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: LLM Token Quota Configuration + displayName: LLM Token Quota Configuration + path: ols.quotaHandlersConfig + - description: Enable token history + displayName: Enable Token History + path: ols.quotaHandlersConfig.enableTokenHistory + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: Token quota limiters + displayName: Token Quota Limiters + path: ols.quotaHandlersConfig.limitersConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Initial value of the token quota + displayName: Initial Token Quota + path: ols.quotaHandlersConfig.limitersConfig[0].initialQuota + - description: Name of the limiter + displayName: Limiter Name + path: ols.quotaHandlersConfig.limitersConfig[0].name + - description: |- + Period of time the token quota is for + Examples: "1 hour", "30 minutes", "2 days", "1 h", "30 min", "2 d" + Accepts singular (e.g., "1 second") or plural (e.g., "2 seconds") forms + Supported units: second(s), minute(s), hour(s), day(s), month(s), year(s) or s, min, h, d, m, y + displayName: Period of Time the Token Quota Is For + path: ols.quotaHandlersConfig.limitersConfig[0].period + - description: Token quota increase step + displayName: Token Quota Increase Step + path: ols.quotaHandlersConfig.limitersConfig[0].quotaIncrease + - description: Type of the limiter + displayName: 'Limiter Type. Accepted Values: cluster_limiter, user_limiter.' + path: ols.quotaHandlersConfig.limitersConfig[0].type + - description: RAG databases + displayName: RAG Databases + path: ols.rag + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: The URL of the container image to use as a RAG source + displayName: Image + path: ols.rag[0].image + - description: The Index ID of the RAG database. Only needed if there are multiple indices in the database. + displayName: Index ID + path: ols.rag[0].indexID + - description: The path to the RAG database inside of the container image + displayName: Index Path in the Image + path: ols.rag[0].indexPath + - description: Persistent Storage Configuration + displayName: Persistent Storage Configuration + path: ols.storage + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Storage class of the requested volume + displayName: Storage Class of the Requested Volume + path: ols.storage.class + - description: Size of the requested volume + displayName: Size of the Requested Volume + path: ols.storage.size + - description: TLS configuration of the Lightspeed backend's HTTPS endpoint + displayName: TLS Configuration + path: ols.tlsConfig + - description: |- + KeyCertSecretRef references a Secret containing TLS certificate and key. + The Secret must contain the following keys: + - tls.crt: Server certificate (PEM format) - REQUIRED + - tls.key: Private key (PEM format) - REQUIRED + - ca.crt: CA certificate for console proxy trust (PEM format) - OPTIONAL + + + If ca.crt is not provided, the OpenShift Console proxy will use the default system trust store. + displayName: TLS Certificate Secret Reference + path: ols.tlsConfig.keyCertSecretRef + - description: TLS Security Profile used by API endpoints + displayName: TLS Security Profile + path: ols.tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Tool filtering configuration for hybrid RAG retrieval. If not specified, all tools are used. + displayName: Tool Filtering Configuration + path: ols.toolFilteringConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Weight for dense vs sparse retrieval (1.0 = full dense, 0.0 = full sparse) + displayName: Alpha Weight + path: ols.toolFilteringConfig.alpha + - description: Minimum similarity threshold for filtering results + displayName: Similarity Threshold + path: ols.toolFilteringConfig.threshold + - description: Number of tools to retrieve + displayName: Top K + path: ols.toolFilteringConfig.topK + - description: Tool execution approval configuration. Controls whether tool calls require user approval before execution. + displayName: Tools Approval Configuration + path: ols.toolsApprovalConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout in seconds for waiting for user approval + displayName: Approval Timeout (seconds) + path: ols.toolsApprovalConfig.approvalTimeout + - description: |- + Approval strategy for tool execution. + 'never' - tools execute without approval + 'always' - all tool calls require approval + 'tool_annotations' - approval based on per-tool annotations + displayName: Approval Type + path: ols.toolsApprovalConfig.approvalType + - description: User data collection switches + displayName: User Data Collection + path: ols.userDataCollection + - displayName: Do Not Collect User Feedback + path: ols.userDataCollection.feedbackDisabled + - displayName: Do Not Collect Transcripts + path: ols.userDataCollection.transcriptsDisabled + - displayName: OLS Data Collector Settings + path: olsDataCollector + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: olsDataCollector.logLevel + statusDescriptors: + - description: |- + Conditions represent the state of individual components + Always populated after first reconciliation + displayName: Conditions + path: conditions + - description: |- + DiagnosticInfo provides detailed troubleshooting information when deployments fail. + Each entry contains pod-level error details for a specific component. + This array is automatically populated when deployments fail and cleared when they recover. + Only present during deployment failures. + displayName: Diagnostic Info + path: diagnosticInfo + - description: |- + OverallStatus provides a high-level summary of the entire system's health. + Aggregates all component conditions into a single status value. + - Ready: All components are healthy + - NotReady: At least one component is not ready (check conditions for details) + Always set after first reconciliation + displayName: Overall Status + path: overallStatus + version: v1alpha1 + description: |- + OpenShift Lightspeed Operator provides generative AI-based virtual assistant which integrates into the OpenShift web console. OpenShift Lightspeed can answer natural language questions related to OpenShift Container Platform. + + To configure the OpenShift Lightspeed Operator, you need a Large Language Model (LLM) . You can host the LLM using RHELAI or RHOAI or use one of the models from the following Software-as-a-Service providers: + + - OpenAI + - Microsoft Azure OpenAI + - IBM WatsonX + + For more information, see [About OpenShift Lightspeed](https://docs.redhat.com/en/documentation/red_hat_openshift_lightspeed/1.0tp1/html/about/ols-about-openshift-lightspeed) in the official product documentation. + + Questions, comments, concerns, or just want to talk to the OpenShift Lightspeed team? [Email us](mailto:openshift-lightspeed-contact-requests@redhat.com)! + displayName: OpenShift Lightspeed Operator + installModes: + - supported: true + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: false + type: AllNamespaces + keywords: + - ai + - assistant + - openshift + - llm + links: + - name: Lightspeed Operator + url: https://github.com/openshift/lightspeed-operator + maturity: alpha + minKubeVersion: 1.28.0 + provider: + name: Red Hat, Inc + url: https://github.com/openshift/lightspeed-service +relatedImages: + - name: lightspeed-service-api + image: registry.redhat.io/openshift-lightspeed/lightspeed-service-api-rhel9@sha256:5287134ee84c4837e74db54a36f9abe71dcbd46d067b04d99bfaa972a4f149cd + - name: lightspeed-console-plugin + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-rhel9@sha256:c613e471cd3b77fb85dacb337b5b9c6b9fddd06563485b0189809690b142dd4f + - name: lightspeed-console-plugin-pf5 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-pf5-rhel9@sha256:86ac43e54a7d121762265cfbb9b32d3b75226e75ef25abaff2adb22c1171f00a + - name: lightspeed-console-plugin-4-19 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-419-rhel9@sha256:aac1f5610a446155dc65693b6a005ac613791117844ea61e98539ff06788f756 + - name: lightspeed-operator + image: registry.redhat.io/openshift-lightspeed/lightspeed-rhel9-operator@sha256:ac846577ffa0001f6f40f7b4c6885b96f615eb9da48cdd13c91b4eb7dc6c78d1 + - name: openshift-mcp-server + image: registry.redhat.io/openshift-lightspeed/openshift-mcp-server-rhel9@sha256:a7860fe67549e33f6f5bc517934cc28cc512e212b1d37ae4ee58b96cffcc530a + - name: lightspeed-to-dataverse-exporter + image: registry.redhat.io/lightspeed-core/dataverse-exporter-rhel9@sha256:dc071421c925dbe55fd03765f7a2ede7140e9a4d49aa95c0b4d2435cbee95f0f + - name: lightspeed-ocp-rag + image: registry.redhat.io/openshift-lightspeed/lightspeed-ocp-rag-rhel9@sha256:d3c3352ba9da396b3eaac3825d2fcd72843eb06e745ec406905d19e9530b567b + - name: lightspeed-postgresql + image: registry.redhat.io/rhel9/postgresql-16@sha256:42f385ac3c9b8913426da7c57e70bc6617cd237aaf697c667f6385a8c0b0118b + - name: lightspeed-operator-bundle + image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +schema: olm.bundle diff --git a/lightspeed-catalog-4.18/index.yaml b/lightspeed-catalog-4.18/index.yaml index aa8ae4bca..1e4faf26d 100644 --- a/lightspeed-catalog-4.18/index.yaml +++ b/lightspeed-catalog-4.18/index.yaml @@ -20,6 +20,8 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 --- schema: olm.channel package: lightspeed-operator @@ -35,3 +37,5 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 diff --git a/lightspeed-catalog-4.19/bundle-v1.0.13.yaml b/lightspeed-catalog-4.19/bundle-v1.0.13.yaml new file mode 100644 index 000000000..84dd476a3 --- /dev/null +++ b/lightspeed-catalog-4.19/bundle-v1.0.13.yaml @@ -0,0 +1,544 @@ +--- +image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +name: lightspeed-operator.v1.0.13 +package: lightspeed-operator +properties: + - type: olm.gvk + value: + group: ols.openshift.io + kind: OLSConfig + version: v1alpha1 + - type: olm.package + value: + packageName: lightspeed-operator + version: 1.0.13 + - type: olm.csv.metadata + value: + annotations: + alm-examples: |- + [ + { + "apiVersion": "ols.openshift.io/v1alpha1", + "kind": "OLSConfig", + "metadata": { + "labels": { + "app.kubernetes.io/created-by": "lightspeed-operator", + "app.kubernetes.io/instance": "olsconfig-sample", + "app.kubernetes.io/managed-by": "kustomize", + "app.kubernetes.io/name": "olsconfig", + "app.kubernetes.io/part-of": "lightspeed-operator" + }, + "name": "cluster" + }, + "spec": { + "llm": { + "providers": [ + { + "credentialsSecretRef": { + "name": "credentials" + }, + "models": [ + { + "name": "gpt-3.5-turbo-1106" + } + ], + "name": "OpenAI" + } + ] + } + } + } + ] + capabilities: Seamless Upgrades + console.openshift.io/operator-monitoring-default: "true" + createdAt: "2026-05-12T04:48:16Z" + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "false" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + operatorframework.io/cluster-monitoring: "true" + operatorframework.io/suggested-namespace: openshift-lightspeed + operators.openshift.io/valid-subscription: '["OpenShift Container Platform", "OpenShift Platform Plus", "OpenShift Kubernetes Engine", "OpenShift Virtualization Engine"]' + operators.operatorframework.io/builder: operator-sdk-v1.36.1 + operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 + repository: https://github.com/openshift/lightspeed-operator + apiServiceDefinitions: {} + crdDescriptions: + owned: + - description: Red Hat OpenShift Lightspeed instance. OLSConfig is the Schema for the olsconfigs API + displayName: OLSConfig + kind: OLSConfig + name: olsconfigs.ols.openshift.io + specDescriptors: + - description: Provider name + displayName: Name + path: llm.providers[0].name + - description: OLS deployment settings + displayName: Deployment + path: ols.deployment + - description: Provider API URL + displayName: URL + path: llm.providers[0].url + - description: Conversation cache settings + displayName: Conversation Cache + path: ols.conversationCache + - description: The name of the secret object that stores API provider credentials + displayName: Credential Secret + path: llm.providers[0].credentialsSecretRef + - description: |- + Feature Gates holds list of features to be enabled explicitly, otherwise they are disabled by default. + possible values: MCPServer, ToolFiltering + displayName: Feature Gates + path: featureGates + - displayName: LLM Settings + path: llm + - displayName: Providers + path: llm.providers + - description: API Version for Azure OpenAI provider + displayName: Azure OpenAI API Version + path: llm.providers[0].apiVersion + - description: |- + Arbitrary configuration for the provider (Llama Stack Generic mode only) + This map is passed directly to Llama Stack provider configuration. + Credentials are automatically injected as environment variable substitutions. + Example: {"url": "https://...", "custom_field": "value"} + displayName: Llama Stack Provider Config + path: llm.providers[0].config + - description: |- + Secret key name for provider credentials (defaults to "apitoken" if not set). + Specifies which key inside credentialsSecretRef to read the credential value from. + The credential value is always exposed to the container as env var {PROVIDER_NAME}_API_KEY + (derived from the provider name, not this field), and referenced in the Llama Stack config + YAML as ${env.PROVIDER_NAME_API_KEY}. This field only controls which secret data key is read. + displayName: Credential Key Name + path: llm.providers[0].credentialKey + - description: Deployment name for Azure OpenAI provider + displayName: Azure Deployment Name + path: llm.providers[0].deploymentName + - description: Fake Provider MCP Tool Call + displayName: Fake Provider MCP Tool Call + path: llm.providers[0].fakeProviderMCPToolCall + - description: Google Vertex Anthropic Config + displayName: Google Vertex Anthropic Config + path: llm.providers[0].googleVertexAnthropicConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexAnthropicConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexAnthropicConfig.projectID + - description: Google Vertex Config + displayName: Google Vertex Config + path: llm.providers[0].googleVertexConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexConfig.projectID + - description: List of models from the provider + displayName: Models + path: llm.providers[0].models + - description: Defines the model's context window size, in tokens. The default is 128k tokens. + displayName: Context Window Size + path: llm.providers[0].models[0].contextWindowSize + - description: Model name + displayName: Name + path: llm.providers[0].models[0].name + - description: Model API parameters + displayName: Parameters + path: llm.providers[0].models[0].parameters + - description: Max tokens for response. The default is 2048 tokens. + displayName: Max Tokens For Response + path: llm.providers[0].models[0].parameters.maxTokensForResponse + - description: Ratio of context window size allocated for tool token budget. Must be between 0.1 and 0.5. The default is 0.5. + displayName: Tool Budget Ratio + path: llm.providers[0].models[0].parameters.toolBudgetRatio + - description: Model API URL + displayName: URL + path: llm.providers[0].models[0].url + - description: Watsonx Project ID + displayName: Watsonx Project ID + path: llm.providers[0].projectID + - description: |- + Llama Stack Generic provider type for provider configuration (e.g., "remote::openai", "inline::sentence-transformers") + When set, this provider uses Llama Stack Generic mode instead of legacy mode. + Must follow pattern: (inline|remote):: + displayName: Llama Stack Provider Type + path: llm.providers[0].providerType + - description: TLS Security Profile used by connection to provider + displayName: TLS Security Profile + path: llm.providers[0].tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Provider type + displayName: Provider Type + path: llm.providers[0].type + - description: MCP Server settings + displayName: MCP Server Settings + path: mcpServers + - description: |- + Headers to send to the MCP server + Each header can reference a secret or use a special source (kubernetes token, client token) + displayName: Headers + path: mcpServers[0].headers + - description: Name of the header (e.g., "Authorization", "X-API-Key") + displayName: Header Name + path: mcpServers[0].headers[0].name + - description: Source of the header value + displayName: Value Source + path: mcpServers[0].headers[0].valueFrom + - description: |- + Reference to a secret containing the header value. + Required when Type is "secret". + The secret must exist in the operator's namespace. + displayName: Secret Reference + path: mcpServers[0].headers[0].valueFrom.secretRef + - description: Type specifies the source type for the header value + displayName: Source Type + path: mcpServers[0].headers[0].valueFrom.type + - description: Name of the MCP server + displayName: Name + path: mcpServers[0].name + - description: Timeout for the MCP server in seconds, default is 5 + displayName: Timeout (seconds) + path: mcpServers[0].timeout + - description: URL of the MCP server (HTTP/HTTPS) + displayName: URL + path: mcpServers[0].url + - displayName: OLS Settings + path: ols + - description: Additional CA certificates for TLS communication between OLS service and LLM Provider + displayName: Additional CA Configmap + path: ols.additionalCAConfigMapRef + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Only use BYOK RAG sources, ignore the OpenShift documentation RAG + displayName: Only use BYOK RAG sources + path: ols.byokRAGOnly + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - displayName: PostgreSQL Settings + path: ols.conversationCache.postgres + - description: 'Postgres maxconnections. Default: "2000"' + displayName: Maximum Connections + path: ols.conversationCache.postgres.maxConnections + - description: Postgres sharedbuffers + displayName: Shared Buffer Size + path: ols.conversationCache.postgres.sharedBuffers + - description: 'Conversation cache type. Default: "postgres"' + displayName: Cache Type + path: ols.conversationCache.type + - description: Default model for usage + displayName: Default Model + path: ols.defaultModel + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: Default provider for usage + displayName: Default Provider + path: ols.defaultProvider + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: API container settings. + displayName: API Deployment + path: ols.deployment.api + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.api.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Console container settings. + displayName: Console Deployment + path: ols.deployment.console + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.console.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Data Collector container settings. + displayName: Data Collector Container + path: ols.deployment.dataCollector + - description: Database container settings. + displayName: Database Deployment + path: ols.deployment.database + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.database.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Llama Stack container settings. + displayName: Llama Stack Container + path: ols.deployment.llamaStack + - description: MCP server container settings. + displayName: MCP Server Container + path: ols.deployment.mcpServer + - description: Pull secrets for BYOK RAG images from image registries requiring authentication + displayName: Image Pull Secrets + path: ols.imagePullSecrets + - description: |- + Enable introspection features (e.g. built-in OpenShift MCP server). Omitted means use the + CRD default (true); explicit false disables introspection. + displayName: Introspection Enabled + path: ols.introspectionEnabled + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: ols.logLevel + - description: 'Maximum number of iterations for agent execution. Default: 5' + displayName: Max Iterations + path: ols.maxIterations + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:number + - description: MCP Kubernetes server configuration + displayName: MCP Kube Server Configuration + path: ols.mcpKubeServerConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout for the MCP Kube server in seconds, default is 60 + displayName: Timeout (seconds) + path: ols.mcpKubeServerConfig.timeout + - description: Proxy settings for connecting to external servers, such as LLM providers. + displayName: Proxy Settings + path: ols.proxyConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: |- + The configmap and key holding proxy CA certificate. + The key is optional and defaults to "proxy-ca.crt" for backward compatibility. + If you use a different key name in your ConfigMap, specify it in the Key field of ProxyCACertConfigMapRef. + displayName: Proxy CA Certificate + path: ols.proxyConfig.proxyCACertificate + - description: |- + Proxy URL, e.g. https://proxy.example.com:8080 + If not specified, the cluster wide proxy will be used, through env var "https_proxy". + displayName: Proxy URL + path: ols.proxyConfig.proxyURL + - description: Query filters + displayName: Query Filters + path: ols.queryFilters + - description: Filter name. + displayName: Filter Name + path: ols.queryFilters[0].name + - description: Filter pattern. + displayName: The pattern to replace + path: ols.queryFilters[0].pattern + - description: Replacement for the matched pattern. + displayName: Replace With + path: ols.queryFilters[0].replaceWith + - description: Custom system prompt for LLM queries. If not specified, uses the default OpenShift Lightspeed prompt. + displayName: Query System Prompt + path: ols.querySystemPrompt + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: LLM Token Quota Configuration + displayName: LLM Token Quota Configuration + path: ols.quotaHandlersConfig + - description: Enable token history + displayName: Enable Token History + path: ols.quotaHandlersConfig.enableTokenHistory + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: Token quota limiters + displayName: Token Quota Limiters + path: ols.quotaHandlersConfig.limitersConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Initial value of the token quota + displayName: Initial Token Quota + path: ols.quotaHandlersConfig.limitersConfig[0].initialQuota + - description: Name of the limiter + displayName: Limiter Name + path: ols.quotaHandlersConfig.limitersConfig[0].name + - description: |- + Period of time the token quota is for + Examples: "1 hour", "30 minutes", "2 days", "1 h", "30 min", "2 d" + Accepts singular (e.g., "1 second") or plural (e.g., "2 seconds") forms + Supported units: second(s), minute(s), hour(s), day(s), month(s), year(s) or s, min, h, d, m, y + displayName: Period of Time the Token Quota Is For + path: ols.quotaHandlersConfig.limitersConfig[0].period + - description: Token quota increase step + displayName: Token Quota Increase Step + path: ols.quotaHandlersConfig.limitersConfig[0].quotaIncrease + - description: Type of the limiter + displayName: 'Limiter Type. Accepted Values: cluster_limiter, user_limiter.' + path: ols.quotaHandlersConfig.limitersConfig[0].type + - description: RAG databases + displayName: RAG Databases + path: ols.rag + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: The URL of the container image to use as a RAG source + displayName: Image + path: ols.rag[0].image + - description: The Index ID of the RAG database. Only needed if there are multiple indices in the database. + displayName: Index ID + path: ols.rag[0].indexID + - description: The path to the RAG database inside of the container image + displayName: Index Path in the Image + path: ols.rag[0].indexPath + - description: Persistent Storage Configuration + displayName: Persistent Storage Configuration + path: ols.storage + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Storage class of the requested volume + displayName: Storage Class of the Requested Volume + path: ols.storage.class + - description: Size of the requested volume + displayName: Size of the Requested Volume + path: ols.storage.size + - description: TLS configuration of the Lightspeed backend's HTTPS endpoint + displayName: TLS Configuration + path: ols.tlsConfig + - description: |- + KeyCertSecretRef references a Secret containing TLS certificate and key. + The Secret must contain the following keys: + - tls.crt: Server certificate (PEM format) - REQUIRED + - tls.key: Private key (PEM format) - REQUIRED + - ca.crt: CA certificate for console proxy trust (PEM format) - OPTIONAL + + + If ca.crt is not provided, the OpenShift Console proxy will use the default system trust store. + displayName: TLS Certificate Secret Reference + path: ols.tlsConfig.keyCertSecretRef + - description: TLS Security Profile used by API endpoints + displayName: TLS Security Profile + path: ols.tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Tool filtering configuration for hybrid RAG retrieval. If not specified, all tools are used. + displayName: Tool Filtering Configuration + path: ols.toolFilteringConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Weight for dense vs sparse retrieval (1.0 = full dense, 0.0 = full sparse) + displayName: Alpha Weight + path: ols.toolFilteringConfig.alpha + - description: Minimum similarity threshold for filtering results + displayName: Similarity Threshold + path: ols.toolFilteringConfig.threshold + - description: Number of tools to retrieve + displayName: Top K + path: ols.toolFilteringConfig.topK + - description: Tool execution approval configuration. Controls whether tool calls require user approval before execution. + displayName: Tools Approval Configuration + path: ols.toolsApprovalConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout in seconds for waiting for user approval + displayName: Approval Timeout (seconds) + path: ols.toolsApprovalConfig.approvalTimeout + - description: |- + Approval strategy for tool execution. + 'never' - tools execute without approval + 'always' - all tool calls require approval + 'tool_annotations' - approval based on per-tool annotations + displayName: Approval Type + path: ols.toolsApprovalConfig.approvalType + - description: User data collection switches + displayName: User Data Collection + path: ols.userDataCollection + - displayName: Do Not Collect User Feedback + path: ols.userDataCollection.feedbackDisabled + - displayName: Do Not Collect Transcripts + path: ols.userDataCollection.transcriptsDisabled + - displayName: OLS Data Collector Settings + path: olsDataCollector + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: olsDataCollector.logLevel + statusDescriptors: + - description: |- + Conditions represent the state of individual components + Always populated after first reconciliation + displayName: Conditions + path: conditions + - description: |- + DiagnosticInfo provides detailed troubleshooting information when deployments fail. + Each entry contains pod-level error details for a specific component. + This array is automatically populated when deployments fail and cleared when they recover. + Only present during deployment failures. + displayName: Diagnostic Info + path: diagnosticInfo + - description: |- + OverallStatus provides a high-level summary of the entire system's health. + Aggregates all component conditions into a single status value. + - Ready: All components are healthy + - NotReady: At least one component is not ready (check conditions for details) + Always set after first reconciliation + displayName: Overall Status + path: overallStatus + version: v1alpha1 + description: |- + OpenShift Lightspeed Operator provides generative AI-based virtual assistant which integrates into the OpenShift web console. OpenShift Lightspeed can answer natural language questions related to OpenShift Container Platform. + + To configure the OpenShift Lightspeed Operator, you need a Large Language Model (LLM) . You can host the LLM using RHELAI or RHOAI or use one of the models from the following Software-as-a-Service providers: + + - OpenAI + - Microsoft Azure OpenAI + - IBM WatsonX + + For more information, see [About OpenShift Lightspeed](https://docs.redhat.com/en/documentation/red_hat_openshift_lightspeed/1.0tp1/html/about/ols-about-openshift-lightspeed) in the official product documentation. + + Questions, comments, concerns, or just want to talk to the OpenShift Lightspeed team? [Email us](mailto:openshift-lightspeed-contact-requests@redhat.com)! + displayName: OpenShift Lightspeed Operator + installModes: + - supported: true + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: false + type: AllNamespaces + keywords: + - ai + - assistant + - openshift + - llm + links: + - name: Lightspeed Operator + url: https://github.com/openshift/lightspeed-operator + maturity: alpha + minKubeVersion: 1.28.0 + provider: + name: Red Hat, Inc + url: https://github.com/openshift/lightspeed-service +relatedImages: + - name: lightspeed-service-api + image: registry.redhat.io/openshift-lightspeed/lightspeed-service-api-rhel9@sha256:5287134ee84c4837e74db54a36f9abe71dcbd46d067b04d99bfaa972a4f149cd + - name: lightspeed-console-plugin + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-rhel9@sha256:c613e471cd3b77fb85dacb337b5b9c6b9fddd06563485b0189809690b142dd4f + - name: lightspeed-console-plugin-pf5 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-pf5-rhel9@sha256:86ac43e54a7d121762265cfbb9b32d3b75226e75ef25abaff2adb22c1171f00a + - name: lightspeed-console-plugin-4-19 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-419-rhel9@sha256:aac1f5610a446155dc65693b6a005ac613791117844ea61e98539ff06788f756 + - name: lightspeed-operator + image: registry.redhat.io/openshift-lightspeed/lightspeed-rhel9-operator@sha256:ac846577ffa0001f6f40f7b4c6885b96f615eb9da48cdd13c91b4eb7dc6c78d1 + - name: openshift-mcp-server + image: registry.redhat.io/openshift-lightspeed/openshift-mcp-server-rhel9@sha256:a7860fe67549e33f6f5bc517934cc28cc512e212b1d37ae4ee58b96cffcc530a + - name: lightspeed-to-dataverse-exporter + image: registry.redhat.io/lightspeed-core/dataverse-exporter-rhel9@sha256:dc071421c925dbe55fd03765f7a2ede7140e9a4d49aa95c0b4d2435cbee95f0f + - name: lightspeed-ocp-rag + image: registry.redhat.io/openshift-lightspeed/lightspeed-ocp-rag-rhel9@sha256:d3c3352ba9da396b3eaac3825d2fcd72843eb06e745ec406905d19e9530b567b + - name: lightspeed-postgresql + image: registry.redhat.io/rhel9/postgresql-16@sha256:42f385ac3c9b8913426da7c57e70bc6617cd237aaf697c667f6385a8c0b0118b + - name: lightspeed-operator-bundle + image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +schema: olm.bundle diff --git a/lightspeed-catalog-4.19/index.yaml b/lightspeed-catalog-4.19/index.yaml index aa8ae4bca..1e4faf26d 100644 --- a/lightspeed-catalog-4.19/index.yaml +++ b/lightspeed-catalog-4.19/index.yaml @@ -20,6 +20,8 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 --- schema: olm.channel package: lightspeed-operator @@ -35,3 +37,5 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 diff --git a/lightspeed-catalog-4.20/bundle-v1.0.13.yaml b/lightspeed-catalog-4.20/bundle-v1.0.13.yaml new file mode 100644 index 000000000..84dd476a3 --- /dev/null +++ b/lightspeed-catalog-4.20/bundle-v1.0.13.yaml @@ -0,0 +1,544 @@ +--- +image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +name: lightspeed-operator.v1.0.13 +package: lightspeed-operator +properties: + - type: olm.gvk + value: + group: ols.openshift.io + kind: OLSConfig + version: v1alpha1 + - type: olm.package + value: + packageName: lightspeed-operator + version: 1.0.13 + - type: olm.csv.metadata + value: + annotations: + alm-examples: |- + [ + { + "apiVersion": "ols.openshift.io/v1alpha1", + "kind": "OLSConfig", + "metadata": { + "labels": { + "app.kubernetes.io/created-by": "lightspeed-operator", + "app.kubernetes.io/instance": "olsconfig-sample", + "app.kubernetes.io/managed-by": "kustomize", + "app.kubernetes.io/name": "olsconfig", + "app.kubernetes.io/part-of": "lightspeed-operator" + }, + "name": "cluster" + }, + "spec": { + "llm": { + "providers": [ + { + "credentialsSecretRef": { + "name": "credentials" + }, + "models": [ + { + "name": "gpt-3.5-turbo-1106" + } + ], + "name": "OpenAI" + } + ] + } + } + } + ] + capabilities: Seamless Upgrades + console.openshift.io/operator-monitoring-default: "true" + createdAt: "2026-05-12T04:48:16Z" + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "false" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + operatorframework.io/cluster-monitoring: "true" + operatorframework.io/suggested-namespace: openshift-lightspeed + operators.openshift.io/valid-subscription: '["OpenShift Container Platform", "OpenShift Platform Plus", "OpenShift Kubernetes Engine", "OpenShift Virtualization Engine"]' + operators.operatorframework.io/builder: operator-sdk-v1.36.1 + operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 + repository: https://github.com/openshift/lightspeed-operator + apiServiceDefinitions: {} + crdDescriptions: + owned: + - description: Red Hat OpenShift Lightspeed instance. OLSConfig is the Schema for the olsconfigs API + displayName: OLSConfig + kind: OLSConfig + name: olsconfigs.ols.openshift.io + specDescriptors: + - description: Provider name + displayName: Name + path: llm.providers[0].name + - description: OLS deployment settings + displayName: Deployment + path: ols.deployment + - description: Provider API URL + displayName: URL + path: llm.providers[0].url + - description: Conversation cache settings + displayName: Conversation Cache + path: ols.conversationCache + - description: The name of the secret object that stores API provider credentials + displayName: Credential Secret + path: llm.providers[0].credentialsSecretRef + - description: |- + Feature Gates holds list of features to be enabled explicitly, otherwise they are disabled by default. + possible values: MCPServer, ToolFiltering + displayName: Feature Gates + path: featureGates + - displayName: LLM Settings + path: llm + - displayName: Providers + path: llm.providers + - description: API Version for Azure OpenAI provider + displayName: Azure OpenAI API Version + path: llm.providers[0].apiVersion + - description: |- + Arbitrary configuration for the provider (Llama Stack Generic mode only) + This map is passed directly to Llama Stack provider configuration. + Credentials are automatically injected as environment variable substitutions. + Example: {"url": "https://...", "custom_field": "value"} + displayName: Llama Stack Provider Config + path: llm.providers[0].config + - description: |- + Secret key name for provider credentials (defaults to "apitoken" if not set). + Specifies which key inside credentialsSecretRef to read the credential value from. + The credential value is always exposed to the container as env var {PROVIDER_NAME}_API_KEY + (derived from the provider name, not this field), and referenced in the Llama Stack config + YAML as ${env.PROVIDER_NAME_API_KEY}. This field only controls which secret data key is read. + displayName: Credential Key Name + path: llm.providers[0].credentialKey + - description: Deployment name for Azure OpenAI provider + displayName: Azure Deployment Name + path: llm.providers[0].deploymentName + - description: Fake Provider MCP Tool Call + displayName: Fake Provider MCP Tool Call + path: llm.providers[0].fakeProviderMCPToolCall + - description: Google Vertex Anthropic Config + displayName: Google Vertex Anthropic Config + path: llm.providers[0].googleVertexAnthropicConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexAnthropicConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexAnthropicConfig.projectID + - description: Google Vertex Config + displayName: Google Vertex Config + path: llm.providers[0].googleVertexConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexConfig.projectID + - description: List of models from the provider + displayName: Models + path: llm.providers[0].models + - description: Defines the model's context window size, in tokens. The default is 128k tokens. + displayName: Context Window Size + path: llm.providers[0].models[0].contextWindowSize + - description: Model name + displayName: Name + path: llm.providers[0].models[0].name + - description: Model API parameters + displayName: Parameters + path: llm.providers[0].models[0].parameters + - description: Max tokens for response. The default is 2048 tokens. + displayName: Max Tokens For Response + path: llm.providers[0].models[0].parameters.maxTokensForResponse + - description: Ratio of context window size allocated for tool token budget. Must be between 0.1 and 0.5. The default is 0.5. + displayName: Tool Budget Ratio + path: llm.providers[0].models[0].parameters.toolBudgetRatio + - description: Model API URL + displayName: URL + path: llm.providers[0].models[0].url + - description: Watsonx Project ID + displayName: Watsonx Project ID + path: llm.providers[0].projectID + - description: |- + Llama Stack Generic provider type for provider configuration (e.g., "remote::openai", "inline::sentence-transformers") + When set, this provider uses Llama Stack Generic mode instead of legacy mode. + Must follow pattern: (inline|remote):: + displayName: Llama Stack Provider Type + path: llm.providers[0].providerType + - description: TLS Security Profile used by connection to provider + displayName: TLS Security Profile + path: llm.providers[0].tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Provider type + displayName: Provider Type + path: llm.providers[0].type + - description: MCP Server settings + displayName: MCP Server Settings + path: mcpServers + - description: |- + Headers to send to the MCP server + Each header can reference a secret or use a special source (kubernetes token, client token) + displayName: Headers + path: mcpServers[0].headers + - description: Name of the header (e.g., "Authorization", "X-API-Key") + displayName: Header Name + path: mcpServers[0].headers[0].name + - description: Source of the header value + displayName: Value Source + path: mcpServers[0].headers[0].valueFrom + - description: |- + Reference to a secret containing the header value. + Required when Type is "secret". + The secret must exist in the operator's namespace. + displayName: Secret Reference + path: mcpServers[0].headers[0].valueFrom.secretRef + - description: Type specifies the source type for the header value + displayName: Source Type + path: mcpServers[0].headers[0].valueFrom.type + - description: Name of the MCP server + displayName: Name + path: mcpServers[0].name + - description: Timeout for the MCP server in seconds, default is 5 + displayName: Timeout (seconds) + path: mcpServers[0].timeout + - description: URL of the MCP server (HTTP/HTTPS) + displayName: URL + path: mcpServers[0].url + - displayName: OLS Settings + path: ols + - description: Additional CA certificates for TLS communication between OLS service and LLM Provider + displayName: Additional CA Configmap + path: ols.additionalCAConfigMapRef + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Only use BYOK RAG sources, ignore the OpenShift documentation RAG + displayName: Only use BYOK RAG sources + path: ols.byokRAGOnly + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - displayName: PostgreSQL Settings + path: ols.conversationCache.postgres + - description: 'Postgres maxconnections. Default: "2000"' + displayName: Maximum Connections + path: ols.conversationCache.postgres.maxConnections + - description: Postgres sharedbuffers + displayName: Shared Buffer Size + path: ols.conversationCache.postgres.sharedBuffers + - description: 'Conversation cache type. Default: "postgres"' + displayName: Cache Type + path: ols.conversationCache.type + - description: Default model for usage + displayName: Default Model + path: ols.defaultModel + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: Default provider for usage + displayName: Default Provider + path: ols.defaultProvider + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: API container settings. + displayName: API Deployment + path: ols.deployment.api + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.api.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Console container settings. + displayName: Console Deployment + path: ols.deployment.console + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.console.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Data Collector container settings. + displayName: Data Collector Container + path: ols.deployment.dataCollector + - description: Database container settings. + displayName: Database Deployment + path: ols.deployment.database + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.database.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Llama Stack container settings. + displayName: Llama Stack Container + path: ols.deployment.llamaStack + - description: MCP server container settings. + displayName: MCP Server Container + path: ols.deployment.mcpServer + - description: Pull secrets for BYOK RAG images from image registries requiring authentication + displayName: Image Pull Secrets + path: ols.imagePullSecrets + - description: |- + Enable introspection features (e.g. built-in OpenShift MCP server). Omitted means use the + CRD default (true); explicit false disables introspection. + displayName: Introspection Enabled + path: ols.introspectionEnabled + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: ols.logLevel + - description: 'Maximum number of iterations for agent execution. Default: 5' + displayName: Max Iterations + path: ols.maxIterations + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:number + - description: MCP Kubernetes server configuration + displayName: MCP Kube Server Configuration + path: ols.mcpKubeServerConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout for the MCP Kube server in seconds, default is 60 + displayName: Timeout (seconds) + path: ols.mcpKubeServerConfig.timeout + - description: Proxy settings for connecting to external servers, such as LLM providers. + displayName: Proxy Settings + path: ols.proxyConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: |- + The configmap and key holding proxy CA certificate. + The key is optional and defaults to "proxy-ca.crt" for backward compatibility. + If you use a different key name in your ConfigMap, specify it in the Key field of ProxyCACertConfigMapRef. + displayName: Proxy CA Certificate + path: ols.proxyConfig.proxyCACertificate + - description: |- + Proxy URL, e.g. https://proxy.example.com:8080 + If not specified, the cluster wide proxy will be used, through env var "https_proxy". + displayName: Proxy URL + path: ols.proxyConfig.proxyURL + - description: Query filters + displayName: Query Filters + path: ols.queryFilters + - description: Filter name. + displayName: Filter Name + path: ols.queryFilters[0].name + - description: Filter pattern. + displayName: The pattern to replace + path: ols.queryFilters[0].pattern + - description: Replacement for the matched pattern. + displayName: Replace With + path: ols.queryFilters[0].replaceWith + - description: Custom system prompt for LLM queries. If not specified, uses the default OpenShift Lightspeed prompt. + displayName: Query System Prompt + path: ols.querySystemPrompt + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: LLM Token Quota Configuration + displayName: LLM Token Quota Configuration + path: ols.quotaHandlersConfig + - description: Enable token history + displayName: Enable Token History + path: ols.quotaHandlersConfig.enableTokenHistory + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: Token quota limiters + displayName: Token Quota Limiters + path: ols.quotaHandlersConfig.limitersConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Initial value of the token quota + displayName: Initial Token Quota + path: ols.quotaHandlersConfig.limitersConfig[0].initialQuota + - description: Name of the limiter + displayName: Limiter Name + path: ols.quotaHandlersConfig.limitersConfig[0].name + - description: |- + Period of time the token quota is for + Examples: "1 hour", "30 minutes", "2 days", "1 h", "30 min", "2 d" + Accepts singular (e.g., "1 second") or plural (e.g., "2 seconds") forms + Supported units: second(s), minute(s), hour(s), day(s), month(s), year(s) or s, min, h, d, m, y + displayName: Period of Time the Token Quota Is For + path: ols.quotaHandlersConfig.limitersConfig[0].period + - description: Token quota increase step + displayName: Token Quota Increase Step + path: ols.quotaHandlersConfig.limitersConfig[0].quotaIncrease + - description: Type of the limiter + displayName: 'Limiter Type. Accepted Values: cluster_limiter, user_limiter.' + path: ols.quotaHandlersConfig.limitersConfig[0].type + - description: RAG databases + displayName: RAG Databases + path: ols.rag + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: The URL of the container image to use as a RAG source + displayName: Image + path: ols.rag[0].image + - description: The Index ID of the RAG database. Only needed if there are multiple indices in the database. + displayName: Index ID + path: ols.rag[0].indexID + - description: The path to the RAG database inside of the container image + displayName: Index Path in the Image + path: ols.rag[0].indexPath + - description: Persistent Storage Configuration + displayName: Persistent Storage Configuration + path: ols.storage + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Storage class of the requested volume + displayName: Storage Class of the Requested Volume + path: ols.storage.class + - description: Size of the requested volume + displayName: Size of the Requested Volume + path: ols.storage.size + - description: TLS configuration of the Lightspeed backend's HTTPS endpoint + displayName: TLS Configuration + path: ols.tlsConfig + - description: |- + KeyCertSecretRef references a Secret containing TLS certificate and key. + The Secret must contain the following keys: + - tls.crt: Server certificate (PEM format) - REQUIRED + - tls.key: Private key (PEM format) - REQUIRED + - ca.crt: CA certificate for console proxy trust (PEM format) - OPTIONAL + + + If ca.crt is not provided, the OpenShift Console proxy will use the default system trust store. + displayName: TLS Certificate Secret Reference + path: ols.tlsConfig.keyCertSecretRef + - description: TLS Security Profile used by API endpoints + displayName: TLS Security Profile + path: ols.tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Tool filtering configuration for hybrid RAG retrieval. If not specified, all tools are used. + displayName: Tool Filtering Configuration + path: ols.toolFilteringConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Weight for dense vs sparse retrieval (1.0 = full dense, 0.0 = full sparse) + displayName: Alpha Weight + path: ols.toolFilteringConfig.alpha + - description: Minimum similarity threshold for filtering results + displayName: Similarity Threshold + path: ols.toolFilteringConfig.threshold + - description: Number of tools to retrieve + displayName: Top K + path: ols.toolFilteringConfig.topK + - description: Tool execution approval configuration. Controls whether tool calls require user approval before execution. + displayName: Tools Approval Configuration + path: ols.toolsApprovalConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout in seconds for waiting for user approval + displayName: Approval Timeout (seconds) + path: ols.toolsApprovalConfig.approvalTimeout + - description: |- + Approval strategy for tool execution. + 'never' - tools execute without approval + 'always' - all tool calls require approval + 'tool_annotations' - approval based on per-tool annotations + displayName: Approval Type + path: ols.toolsApprovalConfig.approvalType + - description: User data collection switches + displayName: User Data Collection + path: ols.userDataCollection + - displayName: Do Not Collect User Feedback + path: ols.userDataCollection.feedbackDisabled + - displayName: Do Not Collect Transcripts + path: ols.userDataCollection.transcriptsDisabled + - displayName: OLS Data Collector Settings + path: olsDataCollector + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: olsDataCollector.logLevel + statusDescriptors: + - description: |- + Conditions represent the state of individual components + Always populated after first reconciliation + displayName: Conditions + path: conditions + - description: |- + DiagnosticInfo provides detailed troubleshooting information when deployments fail. + Each entry contains pod-level error details for a specific component. + This array is automatically populated when deployments fail and cleared when they recover. + Only present during deployment failures. + displayName: Diagnostic Info + path: diagnosticInfo + - description: |- + OverallStatus provides a high-level summary of the entire system's health. + Aggregates all component conditions into a single status value. + - Ready: All components are healthy + - NotReady: At least one component is not ready (check conditions for details) + Always set after first reconciliation + displayName: Overall Status + path: overallStatus + version: v1alpha1 + description: |- + OpenShift Lightspeed Operator provides generative AI-based virtual assistant which integrates into the OpenShift web console. OpenShift Lightspeed can answer natural language questions related to OpenShift Container Platform. + + To configure the OpenShift Lightspeed Operator, you need a Large Language Model (LLM) . You can host the LLM using RHELAI or RHOAI or use one of the models from the following Software-as-a-Service providers: + + - OpenAI + - Microsoft Azure OpenAI + - IBM WatsonX + + For more information, see [About OpenShift Lightspeed](https://docs.redhat.com/en/documentation/red_hat_openshift_lightspeed/1.0tp1/html/about/ols-about-openshift-lightspeed) in the official product documentation. + + Questions, comments, concerns, or just want to talk to the OpenShift Lightspeed team? [Email us](mailto:openshift-lightspeed-contact-requests@redhat.com)! + displayName: OpenShift Lightspeed Operator + installModes: + - supported: true + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: false + type: AllNamespaces + keywords: + - ai + - assistant + - openshift + - llm + links: + - name: Lightspeed Operator + url: https://github.com/openshift/lightspeed-operator + maturity: alpha + minKubeVersion: 1.28.0 + provider: + name: Red Hat, Inc + url: https://github.com/openshift/lightspeed-service +relatedImages: + - name: lightspeed-service-api + image: registry.redhat.io/openshift-lightspeed/lightspeed-service-api-rhel9@sha256:5287134ee84c4837e74db54a36f9abe71dcbd46d067b04d99bfaa972a4f149cd + - name: lightspeed-console-plugin + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-rhel9@sha256:c613e471cd3b77fb85dacb337b5b9c6b9fddd06563485b0189809690b142dd4f + - name: lightspeed-console-plugin-pf5 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-pf5-rhel9@sha256:86ac43e54a7d121762265cfbb9b32d3b75226e75ef25abaff2adb22c1171f00a + - name: lightspeed-console-plugin-4-19 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-419-rhel9@sha256:aac1f5610a446155dc65693b6a005ac613791117844ea61e98539ff06788f756 + - name: lightspeed-operator + image: registry.redhat.io/openshift-lightspeed/lightspeed-rhel9-operator@sha256:ac846577ffa0001f6f40f7b4c6885b96f615eb9da48cdd13c91b4eb7dc6c78d1 + - name: openshift-mcp-server + image: registry.redhat.io/openshift-lightspeed/openshift-mcp-server-rhel9@sha256:a7860fe67549e33f6f5bc517934cc28cc512e212b1d37ae4ee58b96cffcc530a + - name: lightspeed-to-dataverse-exporter + image: registry.redhat.io/lightspeed-core/dataverse-exporter-rhel9@sha256:dc071421c925dbe55fd03765f7a2ede7140e9a4d49aa95c0b4d2435cbee95f0f + - name: lightspeed-ocp-rag + image: registry.redhat.io/openshift-lightspeed/lightspeed-ocp-rag-rhel9@sha256:d3c3352ba9da396b3eaac3825d2fcd72843eb06e745ec406905d19e9530b567b + - name: lightspeed-postgresql + image: registry.redhat.io/rhel9/postgresql-16@sha256:42f385ac3c9b8913426da7c57e70bc6617cd237aaf697c667f6385a8c0b0118b + - name: lightspeed-operator-bundle + image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +schema: olm.bundle diff --git a/lightspeed-catalog-4.20/index.yaml b/lightspeed-catalog-4.20/index.yaml index aa8ae4bca..1e4faf26d 100644 --- a/lightspeed-catalog-4.20/index.yaml +++ b/lightspeed-catalog-4.20/index.yaml @@ -20,6 +20,8 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 --- schema: olm.channel package: lightspeed-operator @@ -35,3 +37,5 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 diff --git a/lightspeed-catalog-4.21/bundle-v1.0.13.yaml b/lightspeed-catalog-4.21/bundle-v1.0.13.yaml new file mode 100644 index 000000000..84dd476a3 --- /dev/null +++ b/lightspeed-catalog-4.21/bundle-v1.0.13.yaml @@ -0,0 +1,544 @@ +--- +image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +name: lightspeed-operator.v1.0.13 +package: lightspeed-operator +properties: + - type: olm.gvk + value: + group: ols.openshift.io + kind: OLSConfig + version: v1alpha1 + - type: olm.package + value: + packageName: lightspeed-operator + version: 1.0.13 + - type: olm.csv.metadata + value: + annotations: + alm-examples: |- + [ + { + "apiVersion": "ols.openshift.io/v1alpha1", + "kind": "OLSConfig", + "metadata": { + "labels": { + "app.kubernetes.io/created-by": "lightspeed-operator", + "app.kubernetes.io/instance": "olsconfig-sample", + "app.kubernetes.io/managed-by": "kustomize", + "app.kubernetes.io/name": "olsconfig", + "app.kubernetes.io/part-of": "lightspeed-operator" + }, + "name": "cluster" + }, + "spec": { + "llm": { + "providers": [ + { + "credentialsSecretRef": { + "name": "credentials" + }, + "models": [ + { + "name": "gpt-3.5-turbo-1106" + } + ], + "name": "OpenAI" + } + ] + } + } + } + ] + capabilities: Seamless Upgrades + console.openshift.io/operator-monitoring-default: "true" + createdAt: "2026-05-12T04:48:16Z" + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "false" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + operatorframework.io/cluster-monitoring: "true" + operatorframework.io/suggested-namespace: openshift-lightspeed + operators.openshift.io/valid-subscription: '["OpenShift Container Platform", "OpenShift Platform Plus", "OpenShift Kubernetes Engine", "OpenShift Virtualization Engine"]' + operators.operatorframework.io/builder: operator-sdk-v1.36.1 + operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 + repository: https://github.com/openshift/lightspeed-operator + apiServiceDefinitions: {} + crdDescriptions: + owned: + - description: Red Hat OpenShift Lightspeed instance. OLSConfig is the Schema for the olsconfigs API + displayName: OLSConfig + kind: OLSConfig + name: olsconfigs.ols.openshift.io + specDescriptors: + - description: Provider name + displayName: Name + path: llm.providers[0].name + - description: OLS deployment settings + displayName: Deployment + path: ols.deployment + - description: Provider API URL + displayName: URL + path: llm.providers[0].url + - description: Conversation cache settings + displayName: Conversation Cache + path: ols.conversationCache + - description: The name of the secret object that stores API provider credentials + displayName: Credential Secret + path: llm.providers[0].credentialsSecretRef + - description: |- + Feature Gates holds list of features to be enabled explicitly, otherwise they are disabled by default. + possible values: MCPServer, ToolFiltering + displayName: Feature Gates + path: featureGates + - displayName: LLM Settings + path: llm + - displayName: Providers + path: llm.providers + - description: API Version for Azure OpenAI provider + displayName: Azure OpenAI API Version + path: llm.providers[0].apiVersion + - description: |- + Arbitrary configuration for the provider (Llama Stack Generic mode only) + This map is passed directly to Llama Stack provider configuration. + Credentials are automatically injected as environment variable substitutions. + Example: {"url": "https://...", "custom_field": "value"} + displayName: Llama Stack Provider Config + path: llm.providers[0].config + - description: |- + Secret key name for provider credentials (defaults to "apitoken" if not set). + Specifies which key inside credentialsSecretRef to read the credential value from. + The credential value is always exposed to the container as env var {PROVIDER_NAME}_API_KEY + (derived from the provider name, not this field), and referenced in the Llama Stack config + YAML as ${env.PROVIDER_NAME_API_KEY}. This field only controls which secret data key is read. + displayName: Credential Key Name + path: llm.providers[0].credentialKey + - description: Deployment name for Azure OpenAI provider + displayName: Azure Deployment Name + path: llm.providers[0].deploymentName + - description: Fake Provider MCP Tool Call + displayName: Fake Provider MCP Tool Call + path: llm.providers[0].fakeProviderMCPToolCall + - description: Google Vertex Anthropic Config + displayName: Google Vertex Anthropic Config + path: llm.providers[0].googleVertexAnthropicConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexAnthropicConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexAnthropicConfig.projectID + - description: Google Vertex Config + displayName: Google Vertex Config + path: llm.providers[0].googleVertexConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexConfig.projectID + - description: List of models from the provider + displayName: Models + path: llm.providers[0].models + - description: Defines the model's context window size, in tokens. The default is 128k tokens. + displayName: Context Window Size + path: llm.providers[0].models[0].contextWindowSize + - description: Model name + displayName: Name + path: llm.providers[0].models[0].name + - description: Model API parameters + displayName: Parameters + path: llm.providers[0].models[0].parameters + - description: Max tokens for response. The default is 2048 tokens. + displayName: Max Tokens For Response + path: llm.providers[0].models[0].parameters.maxTokensForResponse + - description: Ratio of context window size allocated for tool token budget. Must be between 0.1 and 0.5. The default is 0.5. + displayName: Tool Budget Ratio + path: llm.providers[0].models[0].parameters.toolBudgetRatio + - description: Model API URL + displayName: URL + path: llm.providers[0].models[0].url + - description: Watsonx Project ID + displayName: Watsonx Project ID + path: llm.providers[0].projectID + - description: |- + Llama Stack Generic provider type for provider configuration (e.g., "remote::openai", "inline::sentence-transformers") + When set, this provider uses Llama Stack Generic mode instead of legacy mode. + Must follow pattern: (inline|remote):: + displayName: Llama Stack Provider Type + path: llm.providers[0].providerType + - description: TLS Security Profile used by connection to provider + displayName: TLS Security Profile + path: llm.providers[0].tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Provider type + displayName: Provider Type + path: llm.providers[0].type + - description: MCP Server settings + displayName: MCP Server Settings + path: mcpServers + - description: |- + Headers to send to the MCP server + Each header can reference a secret or use a special source (kubernetes token, client token) + displayName: Headers + path: mcpServers[0].headers + - description: Name of the header (e.g., "Authorization", "X-API-Key") + displayName: Header Name + path: mcpServers[0].headers[0].name + - description: Source of the header value + displayName: Value Source + path: mcpServers[0].headers[0].valueFrom + - description: |- + Reference to a secret containing the header value. + Required when Type is "secret". + The secret must exist in the operator's namespace. + displayName: Secret Reference + path: mcpServers[0].headers[0].valueFrom.secretRef + - description: Type specifies the source type for the header value + displayName: Source Type + path: mcpServers[0].headers[0].valueFrom.type + - description: Name of the MCP server + displayName: Name + path: mcpServers[0].name + - description: Timeout for the MCP server in seconds, default is 5 + displayName: Timeout (seconds) + path: mcpServers[0].timeout + - description: URL of the MCP server (HTTP/HTTPS) + displayName: URL + path: mcpServers[0].url + - displayName: OLS Settings + path: ols + - description: Additional CA certificates for TLS communication between OLS service and LLM Provider + displayName: Additional CA Configmap + path: ols.additionalCAConfigMapRef + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Only use BYOK RAG sources, ignore the OpenShift documentation RAG + displayName: Only use BYOK RAG sources + path: ols.byokRAGOnly + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - displayName: PostgreSQL Settings + path: ols.conversationCache.postgres + - description: 'Postgres maxconnections. Default: "2000"' + displayName: Maximum Connections + path: ols.conversationCache.postgres.maxConnections + - description: Postgres sharedbuffers + displayName: Shared Buffer Size + path: ols.conversationCache.postgres.sharedBuffers + - description: 'Conversation cache type. Default: "postgres"' + displayName: Cache Type + path: ols.conversationCache.type + - description: Default model for usage + displayName: Default Model + path: ols.defaultModel + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: Default provider for usage + displayName: Default Provider + path: ols.defaultProvider + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: API container settings. + displayName: API Deployment + path: ols.deployment.api + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.api.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Console container settings. + displayName: Console Deployment + path: ols.deployment.console + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.console.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Data Collector container settings. + displayName: Data Collector Container + path: ols.deployment.dataCollector + - description: Database container settings. + displayName: Database Deployment + path: ols.deployment.database + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.database.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Llama Stack container settings. + displayName: Llama Stack Container + path: ols.deployment.llamaStack + - description: MCP server container settings. + displayName: MCP Server Container + path: ols.deployment.mcpServer + - description: Pull secrets for BYOK RAG images from image registries requiring authentication + displayName: Image Pull Secrets + path: ols.imagePullSecrets + - description: |- + Enable introspection features (e.g. built-in OpenShift MCP server). Omitted means use the + CRD default (true); explicit false disables introspection. + displayName: Introspection Enabled + path: ols.introspectionEnabled + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: ols.logLevel + - description: 'Maximum number of iterations for agent execution. Default: 5' + displayName: Max Iterations + path: ols.maxIterations + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:number + - description: MCP Kubernetes server configuration + displayName: MCP Kube Server Configuration + path: ols.mcpKubeServerConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout for the MCP Kube server in seconds, default is 60 + displayName: Timeout (seconds) + path: ols.mcpKubeServerConfig.timeout + - description: Proxy settings for connecting to external servers, such as LLM providers. + displayName: Proxy Settings + path: ols.proxyConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: |- + The configmap and key holding proxy CA certificate. + The key is optional and defaults to "proxy-ca.crt" for backward compatibility. + If you use a different key name in your ConfigMap, specify it in the Key field of ProxyCACertConfigMapRef. + displayName: Proxy CA Certificate + path: ols.proxyConfig.proxyCACertificate + - description: |- + Proxy URL, e.g. https://proxy.example.com:8080 + If not specified, the cluster wide proxy will be used, through env var "https_proxy". + displayName: Proxy URL + path: ols.proxyConfig.proxyURL + - description: Query filters + displayName: Query Filters + path: ols.queryFilters + - description: Filter name. + displayName: Filter Name + path: ols.queryFilters[0].name + - description: Filter pattern. + displayName: The pattern to replace + path: ols.queryFilters[0].pattern + - description: Replacement for the matched pattern. + displayName: Replace With + path: ols.queryFilters[0].replaceWith + - description: Custom system prompt for LLM queries. If not specified, uses the default OpenShift Lightspeed prompt. + displayName: Query System Prompt + path: ols.querySystemPrompt + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: LLM Token Quota Configuration + displayName: LLM Token Quota Configuration + path: ols.quotaHandlersConfig + - description: Enable token history + displayName: Enable Token History + path: ols.quotaHandlersConfig.enableTokenHistory + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: Token quota limiters + displayName: Token Quota Limiters + path: ols.quotaHandlersConfig.limitersConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Initial value of the token quota + displayName: Initial Token Quota + path: ols.quotaHandlersConfig.limitersConfig[0].initialQuota + - description: Name of the limiter + displayName: Limiter Name + path: ols.quotaHandlersConfig.limitersConfig[0].name + - description: |- + Period of time the token quota is for + Examples: "1 hour", "30 minutes", "2 days", "1 h", "30 min", "2 d" + Accepts singular (e.g., "1 second") or plural (e.g., "2 seconds") forms + Supported units: second(s), minute(s), hour(s), day(s), month(s), year(s) or s, min, h, d, m, y + displayName: Period of Time the Token Quota Is For + path: ols.quotaHandlersConfig.limitersConfig[0].period + - description: Token quota increase step + displayName: Token Quota Increase Step + path: ols.quotaHandlersConfig.limitersConfig[0].quotaIncrease + - description: Type of the limiter + displayName: 'Limiter Type. Accepted Values: cluster_limiter, user_limiter.' + path: ols.quotaHandlersConfig.limitersConfig[0].type + - description: RAG databases + displayName: RAG Databases + path: ols.rag + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: The URL of the container image to use as a RAG source + displayName: Image + path: ols.rag[0].image + - description: The Index ID of the RAG database. Only needed if there are multiple indices in the database. + displayName: Index ID + path: ols.rag[0].indexID + - description: The path to the RAG database inside of the container image + displayName: Index Path in the Image + path: ols.rag[0].indexPath + - description: Persistent Storage Configuration + displayName: Persistent Storage Configuration + path: ols.storage + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Storage class of the requested volume + displayName: Storage Class of the Requested Volume + path: ols.storage.class + - description: Size of the requested volume + displayName: Size of the Requested Volume + path: ols.storage.size + - description: TLS configuration of the Lightspeed backend's HTTPS endpoint + displayName: TLS Configuration + path: ols.tlsConfig + - description: |- + KeyCertSecretRef references a Secret containing TLS certificate and key. + The Secret must contain the following keys: + - tls.crt: Server certificate (PEM format) - REQUIRED + - tls.key: Private key (PEM format) - REQUIRED + - ca.crt: CA certificate for console proxy trust (PEM format) - OPTIONAL + + + If ca.crt is not provided, the OpenShift Console proxy will use the default system trust store. + displayName: TLS Certificate Secret Reference + path: ols.tlsConfig.keyCertSecretRef + - description: TLS Security Profile used by API endpoints + displayName: TLS Security Profile + path: ols.tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Tool filtering configuration for hybrid RAG retrieval. If not specified, all tools are used. + displayName: Tool Filtering Configuration + path: ols.toolFilteringConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Weight for dense vs sparse retrieval (1.0 = full dense, 0.0 = full sparse) + displayName: Alpha Weight + path: ols.toolFilteringConfig.alpha + - description: Minimum similarity threshold for filtering results + displayName: Similarity Threshold + path: ols.toolFilteringConfig.threshold + - description: Number of tools to retrieve + displayName: Top K + path: ols.toolFilteringConfig.topK + - description: Tool execution approval configuration. Controls whether tool calls require user approval before execution. + displayName: Tools Approval Configuration + path: ols.toolsApprovalConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout in seconds for waiting for user approval + displayName: Approval Timeout (seconds) + path: ols.toolsApprovalConfig.approvalTimeout + - description: |- + Approval strategy for tool execution. + 'never' - tools execute without approval + 'always' - all tool calls require approval + 'tool_annotations' - approval based on per-tool annotations + displayName: Approval Type + path: ols.toolsApprovalConfig.approvalType + - description: User data collection switches + displayName: User Data Collection + path: ols.userDataCollection + - displayName: Do Not Collect User Feedback + path: ols.userDataCollection.feedbackDisabled + - displayName: Do Not Collect Transcripts + path: ols.userDataCollection.transcriptsDisabled + - displayName: OLS Data Collector Settings + path: olsDataCollector + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: olsDataCollector.logLevel + statusDescriptors: + - description: |- + Conditions represent the state of individual components + Always populated after first reconciliation + displayName: Conditions + path: conditions + - description: |- + DiagnosticInfo provides detailed troubleshooting information when deployments fail. + Each entry contains pod-level error details for a specific component. + This array is automatically populated when deployments fail and cleared when they recover. + Only present during deployment failures. + displayName: Diagnostic Info + path: diagnosticInfo + - description: |- + OverallStatus provides a high-level summary of the entire system's health. + Aggregates all component conditions into a single status value. + - Ready: All components are healthy + - NotReady: At least one component is not ready (check conditions for details) + Always set after first reconciliation + displayName: Overall Status + path: overallStatus + version: v1alpha1 + description: |- + OpenShift Lightspeed Operator provides generative AI-based virtual assistant which integrates into the OpenShift web console. OpenShift Lightspeed can answer natural language questions related to OpenShift Container Platform. + + To configure the OpenShift Lightspeed Operator, you need a Large Language Model (LLM) . You can host the LLM using RHELAI or RHOAI or use one of the models from the following Software-as-a-Service providers: + + - OpenAI + - Microsoft Azure OpenAI + - IBM WatsonX + + For more information, see [About OpenShift Lightspeed](https://docs.redhat.com/en/documentation/red_hat_openshift_lightspeed/1.0tp1/html/about/ols-about-openshift-lightspeed) in the official product documentation. + + Questions, comments, concerns, or just want to talk to the OpenShift Lightspeed team? [Email us](mailto:openshift-lightspeed-contact-requests@redhat.com)! + displayName: OpenShift Lightspeed Operator + installModes: + - supported: true + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: false + type: AllNamespaces + keywords: + - ai + - assistant + - openshift + - llm + links: + - name: Lightspeed Operator + url: https://github.com/openshift/lightspeed-operator + maturity: alpha + minKubeVersion: 1.28.0 + provider: + name: Red Hat, Inc + url: https://github.com/openshift/lightspeed-service +relatedImages: + - name: lightspeed-service-api + image: registry.redhat.io/openshift-lightspeed/lightspeed-service-api-rhel9@sha256:5287134ee84c4837e74db54a36f9abe71dcbd46d067b04d99bfaa972a4f149cd + - name: lightspeed-console-plugin + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-rhel9@sha256:c613e471cd3b77fb85dacb337b5b9c6b9fddd06563485b0189809690b142dd4f + - name: lightspeed-console-plugin-pf5 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-pf5-rhel9@sha256:86ac43e54a7d121762265cfbb9b32d3b75226e75ef25abaff2adb22c1171f00a + - name: lightspeed-console-plugin-4-19 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-419-rhel9@sha256:aac1f5610a446155dc65693b6a005ac613791117844ea61e98539ff06788f756 + - name: lightspeed-operator + image: registry.redhat.io/openshift-lightspeed/lightspeed-rhel9-operator@sha256:ac846577ffa0001f6f40f7b4c6885b96f615eb9da48cdd13c91b4eb7dc6c78d1 + - name: openshift-mcp-server + image: registry.redhat.io/openshift-lightspeed/openshift-mcp-server-rhel9@sha256:a7860fe67549e33f6f5bc517934cc28cc512e212b1d37ae4ee58b96cffcc530a + - name: lightspeed-to-dataverse-exporter + image: registry.redhat.io/lightspeed-core/dataverse-exporter-rhel9@sha256:dc071421c925dbe55fd03765f7a2ede7140e9a4d49aa95c0b4d2435cbee95f0f + - name: lightspeed-ocp-rag + image: registry.redhat.io/openshift-lightspeed/lightspeed-ocp-rag-rhel9@sha256:d3c3352ba9da396b3eaac3825d2fcd72843eb06e745ec406905d19e9530b567b + - name: lightspeed-postgresql + image: registry.redhat.io/rhel9/postgresql-16@sha256:42f385ac3c9b8913426da7c57e70bc6617cd237aaf697c667f6385a8c0b0118b + - name: lightspeed-operator-bundle + image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +schema: olm.bundle diff --git a/lightspeed-catalog-4.21/index.yaml b/lightspeed-catalog-4.21/index.yaml index aa8ae4bca..1e4faf26d 100644 --- a/lightspeed-catalog-4.21/index.yaml +++ b/lightspeed-catalog-4.21/index.yaml @@ -20,6 +20,8 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 --- schema: olm.channel package: lightspeed-operator @@ -35,3 +37,5 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 diff --git a/lightspeed-catalog-4.22/bundle-v1.0.13.yaml b/lightspeed-catalog-4.22/bundle-v1.0.13.yaml new file mode 100644 index 000000000..84dd476a3 --- /dev/null +++ b/lightspeed-catalog-4.22/bundle-v1.0.13.yaml @@ -0,0 +1,544 @@ +--- +image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +name: lightspeed-operator.v1.0.13 +package: lightspeed-operator +properties: + - type: olm.gvk + value: + group: ols.openshift.io + kind: OLSConfig + version: v1alpha1 + - type: olm.package + value: + packageName: lightspeed-operator + version: 1.0.13 + - type: olm.csv.metadata + value: + annotations: + alm-examples: |- + [ + { + "apiVersion": "ols.openshift.io/v1alpha1", + "kind": "OLSConfig", + "metadata": { + "labels": { + "app.kubernetes.io/created-by": "lightspeed-operator", + "app.kubernetes.io/instance": "olsconfig-sample", + "app.kubernetes.io/managed-by": "kustomize", + "app.kubernetes.io/name": "olsconfig", + "app.kubernetes.io/part-of": "lightspeed-operator" + }, + "name": "cluster" + }, + "spec": { + "llm": { + "providers": [ + { + "credentialsSecretRef": { + "name": "credentials" + }, + "models": [ + { + "name": "gpt-3.5-turbo-1106" + } + ], + "name": "OpenAI" + } + ] + } + } + } + ] + capabilities: Seamless Upgrades + console.openshift.io/operator-monitoring-default: "true" + createdAt: "2026-05-12T04:48:16Z" + features.operators.openshift.io/cnf: "false" + features.operators.openshift.io/cni: "false" + features.operators.openshift.io/csi: "false" + features.operators.openshift.io/disconnected: "true" + features.operators.openshift.io/fips-compliant: "true" + features.operators.openshift.io/proxy-aware: "false" + features.operators.openshift.io/tls-profiles: "false" + features.operators.openshift.io/token-auth-aws: "false" + features.operators.openshift.io/token-auth-azure: "false" + features.operators.openshift.io/token-auth-gcp: "false" + operatorframework.io/cluster-monitoring: "true" + operatorframework.io/suggested-namespace: openshift-lightspeed + operators.openshift.io/valid-subscription: '["OpenShift Container Platform", "OpenShift Platform Plus", "OpenShift Kubernetes Engine", "OpenShift Virtualization Engine"]' + operators.operatorframework.io/builder: operator-sdk-v1.36.1 + operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 + repository: https://github.com/openshift/lightspeed-operator + apiServiceDefinitions: {} + crdDescriptions: + owned: + - description: Red Hat OpenShift Lightspeed instance. OLSConfig is the Schema for the olsconfigs API + displayName: OLSConfig + kind: OLSConfig + name: olsconfigs.ols.openshift.io + specDescriptors: + - description: Provider name + displayName: Name + path: llm.providers[0].name + - description: OLS deployment settings + displayName: Deployment + path: ols.deployment + - description: Provider API URL + displayName: URL + path: llm.providers[0].url + - description: Conversation cache settings + displayName: Conversation Cache + path: ols.conversationCache + - description: The name of the secret object that stores API provider credentials + displayName: Credential Secret + path: llm.providers[0].credentialsSecretRef + - description: |- + Feature Gates holds list of features to be enabled explicitly, otherwise they are disabled by default. + possible values: MCPServer, ToolFiltering + displayName: Feature Gates + path: featureGates + - displayName: LLM Settings + path: llm + - displayName: Providers + path: llm.providers + - description: API Version for Azure OpenAI provider + displayName: Azure OpenAI API Version + path: llm.providers[0].apiVersion + - description: |- + Arbitrary configuration for the provider (Llama Stack Generic mode only) + This map is passed directly to Llama Stack provider configuration. + Credentials are automatically injected as environment variable substitutions. + Example: {"url": "https://...", "custom_field": "value"} + displayName: Llama Stack Provider Config + path: llm.providers[0].config + - description: |- + Secret key name for provider credentials (defaults to "apitoken" if not set). + Specifies which key inside credentialsSecretRef to read the credential value from. + The credential value is always exposed to the container as env var {PROVIDER_NAME}_API_KEY + (derived from the provider name, not this field), and referenced in the Llama Stack config + YAML as ${env.PROVIDER_NAME_API_KEY}. This field only controls which secret data key is read. + displayName: Credential Key Name + path: llm.providers[0].credentialKey + - description: Deployment name for Azure OpenAI provider + displayName: Azure Deployment Name + path: llm.providers[0].deploymentName + - description: Fake Provider MCP Tool Call + displayName: Fake Provider MCP Tool Call + path: llm.providers[0].fakeProviderMCPToolCall + - description: Google Vertex Anthropic Config + displayName: Google Vertex Anthropic Config + path: llm.providers[0].googleVertexAnthropicConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexAnthropicConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexAnthropicConfig.projectID + - description: Google Vertex Config + displayName: Google Vertex Config + path: llm.providers[0].googleVertexConfig + - description: Server region location + displayName: Server Region Location + path: llm.providers[0].googleVertexConfig.location + - description: Google Cloud project ID + displayName: Google Cloud Project ID + path: llm.providers[0].googleVertexConfig.projectID + - description: List of models from the provider + displayName: Models + path: llm.providers[0].models + - description: Defines the model's context window size, in tokens. The default is 128k tokens. + displayName: Context Window Size + path: llm.providers[0].models[0].contextWindowSize + - description: Model name + displayName: Name + path: llm.providers[0].models[0].name + - description: Model API parameters + displayName: Parameters + path: llm.providers[0].models[0].parameters + - description: Max tokens for response. The default is 2048 tokens. + displayName: Max Tokens For Response + path: llm.providers[0].models[0].parameters.maxTokensForResponse + - description: Ratio of context window size allocated for tool token budget. Must be between 0.1 and 0.5. The default is 0.5. + displayName: Tool Budget Ratio + path: llm.providers[0].models[0].parameters.toolBudgetRatio + - description: Model API URL + displayName: URL + path: llm.providers[0].models[0].url + - description: Watsonx Project ID + displayName: Watsonx Project ID + path: llm.providers[0].projectID + - description: |- + Llama Stack Generic provider type for provider configuration (e.g., "remote::openai", "inline::sentence-transformers") + When set, this provider uses Llama Stack Generic mode instead of legacy mode. + Must follow pattern: (inline|remote):: + displayName: Llama Stack Provider Type + path: llm.providers[0].providerType + - description: TLS Security Profile used by connection to provider + displayName: TLS Security Profile + path: llm.providers[0].tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Provider type + displayName: Provider Type + path: llm.providers[0].type + - description: MCP Server settings + displayName: MCP Server Settings + path: mcpServers + - description: |- + Headers to send to the MCP server + Each header can reference a secret or use a special source (kubernetes token, client token) + displayName: Headers + path: mcpServers[0].headers + - description: Name of the header (e.g., "Authorization", "X-API-Key") + displayName: Header Name + path: mcpServers[0].headers[0].name + - description: Source of the header value + displayName: Value Source + path: mcpServers[0].headers[0].valueFrom + - description: |- + Reference to a secret containing the header value. + Required when Type is "secret". + The secret must exist in the operator's namespace. + displayName: Secret Reference + path: mcpServers[0].headers[0].valueFrom.secretRef + - description: Type specifies the source type for the header value + displayName: Source Type + path: mcpServers[0].headers[0].valueFrom.type + - description: Name of the MCP server + displayName: Name + path: mcpServers[0].name + - description: Timeout for the MCP server in seconds, default is 5 + displayName: Timeout (seconds) + path: mcpServers[0].timeout + - description: URL of the MCP server (HTTP/HTTPS) + displayName: URL + path: mcpServers[0].url + - displayName: OLS Settings + path: ols + - description: Additional CA certificates for TLS communication between OLS service and LLM Provider + displayName: Additional CA Configmap + path: ols.additionalCAConfigMapRef + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Only use BYOK RAG sources, ignore the OpenShift documentation RAG + displayName: Only use BYOK RAG sources + path: ols.byokRAGOnly + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - displayName: PostgreSQL Settings + path: ols.conversationCache.postgres + - description: 'Postgres maxconnections. Default: "2000"' + displayName: Maximum Connections + path: ols.conversationCache.postgres.maxConnections + - description: Postgres sharedbuffers + displayName: Shared Buffer Size + path: ols.conversationCache.postgres.sharedBuffers + - description: 'Conversation cache type. Default: "postgres"' + displayName: Cache Type + path: ols.conversationCache.type + - description: Default model for usage + displayName: Default Model + path: ols.defaultModel + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: Default provider for usage + displayName: Default Provider + path: ols.defaultProvider + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - description: API container settings. + displayName: API Deployment + path: ols.deployment.api + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.api.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Console container settings. + displayName: Console Deployment + path: ols.deployment.console + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.console.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Data Collector container settings. + displayName: Data Collector Container + path: ols.deployment.dataCollector + - description: Database container settings. + displayName: Database Deployment + path: ols.deployment.database + - description: |- + Defines the number of desired OLS pods. Default: "1" + Note: Replicas can only be changed for APIContainer. For PostgreSQL and Console containers, + the number of replicas will always be set to 1. + displayName: Number of replicas + path: ols.deployment.database.replicas + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:podCount + - description: Llama Stack container settings. + displayName: Llama Stack Container + path: ols.deployment.llamaStack + - description: MCP server container settings. + displayName: MCP Server Container + path: ols.deployment.mcpServer + - description: Pull secrets for BYOK RAG images from image registries requiring authentication + displayName: Image Pull Secrets + path: ols.imagePullSecrets + - description: |- + Enable introspection features (e.g. built-in OpenShift MCP server). Omitted means use the + CRD default (true); explicit false disables introspection. + displayName: Introspection Enabled + path: ols.introspectionEnabled + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: ols.logLevel + - description: 'Maximum number of iterations for agent execution. Default: 5' + displayName: Max Iterations + path: ols.maxIterations + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:number + - description: MCP Kubernetes server configuration + displayName: MCP Kube Server Configuration + path: ols.mcpKubeServerConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout for the MCP Kube server in seconds, default is 60 + displayName: Timeout (seconds) + path: ols.mcpKubeServerConfig.timeout + - description: Proxy settings for connecting to external servers, such as LLM providers. + displayName: Proxy Settings + path: ols.proxyConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: |- + The configmap and key holding proxy CA certificate. + The key is optional and defaults to "proxy-ca.crt" for backward compatibility. + If you use a different key name in your ConfigMap, specify it in the Key field of ProxyCACertConfigMapRef. + displayName: Proxy CA Certificate + path: ols.proxyConfig.proxyCACertificate + - description: |- + Proxy URL, e.g. https://proxy.example.com:8080 + If not specified, the cluster wide proxy will be used, through env var "https_proxy". + displayName: Proxy URL + path: ols.proxyConfig.proxyURL + - description: Query filters + displayName: Query Filters + path: ols.queryFilters + - description: Filter name. + displayName: Filter Name + path: ols.queryFilters[0].name + - description: Filter pattern. + displayName: The pattern to replace + path: ols.queryFilters[0].pattern + - description: Replacement for the matched pattern. + displayName: Replace With + path: ols.queryFilters[0].replaceWith + - description: Custom system prompt for LLM queries. If not specified, uses the default OpenShift Lightspeed prompt. + displayName: Query System Prompt + path: ols.querySystemPrompt + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: LLM Token Quota Configuration + displayName: LLM Token Quota Configuration + path: ols.quotaHandlersConfig + - description: Enable token history + displayName: Enable Token History + path: ols.quotaHandlersConfig.enableTokenHistory + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:booleanSwitch + - description: Token quota limiters + displayName: Token Quota Limiters + path: ols.quotaHandlersConfig.limitersConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Initial value of the token quota + displayName: Initial Token Quota + path: ols.quotaHandlersConfig.limitersConfig[0].initialQuota + - description: Name of the limiter + displayName: Limiter Name + path: ols.quotaHandlersConfig.limitersConfig[0].name + - description: |- + Period of time the token quota is for + Examples: "1 hour", "30 minutes", "2 days", "1 h", "30 min", "2 d" + Accepts singular (e.g., "1 second") or plural (e.g., "2 seconds") forms + Supported units: second(s), minute(s), hour(s), day(s), month(s), year(s) or s, min, h, d, m, y + displayName: Period of Time the Token Quota Is For + path: ols.quotaHandlersConfig.limitersConfig[0].period + - description: Token quota increase step + displayName: Token Quota Increase Step + path: ols.quotaHandlersConfig.limitersConfig[0].quotaIncrease + - description: Type of the limiter + displayName: 'Limiter Type. Accepted Values: cluster_limiter, user_limiter.' + path: ols.quotaHandlersConfig.limitersConfig[0].type + - description: RAG databases + displayName: RAG Databases + path: ols.rag + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: The URL of the container image to use as a RAG source + displayName: Image + path: ols.rag[0].image + - description: The Index ID of the RAG database. Only needed if there are multiple indices in the database. + displayName: Index ID + path: ols.rag[0].indexID + - description: The path to the RAG database inside of the container image + displayName: Index Path in the Image + path: ols.rag[0].indexPath + - description: Persistent Storage Configuration + displayName: Persistent Storage Configuration + path: ols.storage + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Storage class of the requested volume + displayName: Storage Class of the Requested Volume + path: ols.storage.class + - description: Size of the requested volume + displayName: Size of the Requested Volume + path: ols.storage.size + - description: TLS configuration of the Lightspeed backend's HTTPS endpoint + displayName: TLS Configuration + path: ols.tlsConfig + - description: |- + KeyCertSecretRef references a Secret containing TLS certificate and key. + The Secret must contain the following keys: + - tls.crt: Server certificate (PEM format) - REQUIRED + - tls.key: Private key (PEM format) - REQUIRED + - ca.crt: CA certificate for console proxy trust (PEM format) - OPTIONAL + + + If ca.crt is not provided, the OpenShift Console proxy will use the default system trust store. + displayName: TLS Certificate Secret Reference + path: ols.tlsConfig.keyCertSecretRef + - description: TLS Security Profile used by API endpoints + displayName: TLS Security Profile + path: ols.tlsSecurityProfile + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Tool filtering configuration for hybrid RAG retrieval. If not specified, all tools are used. + displayName: Tool Filtering Configuration + path: ols.toolFilteringConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Weight for dense vs sparse retrieval (1.0 = full dense, 0.0 = full sparse) + displayName: Alpha Weight + path: ols.toolFilteringConfig.alpha + - description: Minimum similarity threshold for filtering results + displayName: Similarity Threshold + path: ols.toolFilteringConfig.threshold + - description: Number of tools to retrieve + displayName: Top K + path: ols.toolFilteringConfig.topK + - description: Tool execution approval configuration. Controls whether tool calls require user approval before execution. + displayName: Tools Approval Configuration + path: ols.toolsApprovalConfig + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:advanced + - description: Timeout in seconds for waiting for user approval + displayName: Approval Timeout (seconds) + path: ols.toolsApprovalConfig.approvalTimeout + - description: |- + Approval strategy for tool execution. + 'never' - tools execute without approval + 'always' - all tool calls require approval + 'tool_annotations' - approval based on per-tool annotations + displayName: Approval Type + path: ols.toolsApprovalConfig.approvalType + - description: User data collection switches + displayName: User Data Collection + path: ols.userDataCollection + - displayName: Do Not Collect User Feedback + path: ols.userDataCollection.feedbackDisabled + - displayName: Do Not Collect Transcripts + path: ols.userDataCollection.transcriptsDisabled + - displayName: OLS Data Collector Settings + path: olsDataCollector + - description: 'Log level. Valid options are DEBUG, INFO, WARNING, ERROR and CRITICAL. Default: "INFO".' + displayName: Log level + path: olsDataCollector.logLevel + statusDescriptors: + - description: |- + Conditions represent the state of individual components + Always populated after first reconciliation + displayName: Conditions + path: conditions + - description: |- + DiagnosticInfo provides detailed troubleshooting information when deployments fail. + Each entry contains pod-level error details for a specific component. + This array is automatically populated when deployments fail and cleared when they recover. + Only present during deployment failures. + displayName: Diagnostic Info + path: diagnosticInfo + - description: |- + OverallStatus provides a high-level summary of the entire system's health. + Aggregates all component conditions into a single status value. + - Ready: All components are healthy + - NotReady: At least one component is not ready (check conditions for details) + Always set after first reconciliation + displayName: Overall Status + path: overallStatus + version: v1alpha1 + description: |- + OpenShift Lightspeed Operator provides generative AI-based virtual assistant which integrates into the OpenShift web console. OpenShift Lightspeed can answer natural language questions related to OpenShift Container Platform. + + To configure the OpenShift Lightspeed Operator, you need a Large Language Model (LLM) . You can host the LLM using RHELAI or RHOAI or use one of the models from the following Software-as-a-Service providers: + + - OpenAI + - Microsoft Azure OpenAI + - IBM WatsonX + + For more information, see [About OpenShift Lightspeed](https://docs.redhat.com/en/documentation/red_hat_openshift_lightspeed/1.0tp1/html/about/ols-about-openshift-lightspeed) in the official product documentation. + + Questions, comments, concerns, or just want to talk to the OpenShift Lightspeed team? [Email us](mailto:openshift-lightspeed-contact-requests@redhat.com)! + displayName: OpenShift Lightspeed Operator + installModes: + - supported: true + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: false + type: AllNamespaces + keywords: + - ai + - assistant + - openshift + - llm + links: + - name: Lightspeed Operator + url: https://github.com/openshift/lightspeed-operator + maturity: alpha + minKubeVersion: 1.28.0 + provider: + name: Red Hat, Inc + url: https://github.com/openshift/lightspeed-service +relatedImages: + - name: lightspeed-service-api + image: registry.redhat.io/openshift-lightspeed/lightspeed-service-api-rhel9@sha256:5287134ee84c4837e74db54a36f9abe71dcbd46d067b04d99bfaa972a4f149cd + - name: lightspeed-console-plugin + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-rhel9@sha256:c613e471cd3b77fb85dacb337b5b9c6b9fddd06563485b0189809690b142dd4f + - name: lightspeed-console-plugin-pf5 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-pf5-rhel9@sha256:86ac43e54a7d121762265cfbb9b32d3b75226e75ef25abaff2adb22c1171f00a + - name: lightspeed-console-plugin-4-19 + image: registry.redhat.io/openshift-lightspeed/lightspeed-console-plugin-419-rhel9@sha256:aac1f5610a446155dc65693b6a005ac613791117844ea61e98539ff06788f756 + - name: lightspeed-operator + image: registry.redhat.io/openshift-lightspeed/lightspeed-rhel9-operator@sha256:ac846577ffa0001f6f40f7b4c6885b96f615eb9da48cdd13c91b4eb7dc6c78d1 + - name: openshift-mcp-server + image: registry.redhat.io/openshift-lightspeed/openshift-mcp-server-rhel9@sha256:a7860fe67549e33f6f5bc517934cc28cc512e212b1d37ae4ee58b96cffcc530a + - name: lightspeed-to-dataverse-exporter + image: registry.redhat.io/lightspeed-core/dataverse-exporter-rhel9@sha256:dc071421c925dbe55fd03765f7a2ede7140e9a4d49aa95c0b4d2435cbee95f0f + - name: lightspeed-ocp-rag + image: registry.redhat.io/openshift-lightspeed/lightspeed-ocp-rag-rhel9@sha256:d3c3352ba9da396b3eaac3825d2fcd72843eb06e745ec406905d19e9530b567b + - name: lightspeed-postgresql + image: registry.redhat.io/rhel9/postgresql-16@sha256:42f385ac3c9b8913426da7c57e70bc6617cd237aaf697c667f6385a8c0b0118b + - name: lightspeed-operator-bundle + image: registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760 +schema: olm.bundle diff --git a/lightspeed-catalog-4.22/index.yaml b/lightspeed-catalog-4.22/index.yaml index aa8ae4bca..1e4faf26d 100644 --- a/lightspeed-catalog-4.22/index.yaml +++ b/lightspeed-catalog-4.22/index.yaml @@ -20,6 +20,8 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 --- schema: olm.channel package: lightspeed-operator @@ -35,3 +37,5 @@ entries: replaces: lightspeed-operator.v1.0.10 - name: lightspeed-operator.v1.0.12 replaces: lightspeed-operator.v1.0.11 + - name: lightspeed-operator.v1.0.13 + replaces: lightspeed-operator.v1.0.12 diff --git a/related_images.json b/related_images.json index 7df06652f..32fed9880 100644 --- a/related_images.json +++ b/related_images.json @@ -45,7 +45,7 @@ }, { "name": "lightspeed-operator-bundle", - "image": "registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:ea36964266a98b0b85a7c68b2f6cc800e9b74ba078eb23d27174b89d7f5db5ca", - "revision": "d7a52d51d77fb399379f79a49179ac724f9dd396" + "image": "registry.redhat.io/openshift-lightspeed/lightspeed-operator-bundle@sha256:e025ab7af45795e675b0503328327af2259f3462f009ea82dfd6925ae2b75760", + "revision": "073d24aab8b29b94874096e184eb555664558c0c" } ]