From 3b145bcc91a3b93fc4f4628cc876a41fde3eecd2 Mon Sep 17 00:00:00 2001 From: Michael King Date: Mon, 29 Oct 2018 19:19:05 -0400 Subject: [PATCH 01/11] add test for upcoming launches --- spec/spacex/launches_spec.rb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/spec/spacex/launches_spec.rb b/spec/spacex/launches_spec.rb index dad65d0..57b7f53 100644 --- a/spec/spacex/launches_spec.rb +++ b/spec/spacex/launches_spec.rb @@ -393,6 +393,27 @@ end end + context '#upcoming', vcr: { cassette_name: 'launches/upcoming' } do + subject do + SPACEX::Launches.upcoming + end + + it 'returns and array of upcoming launch hashes' do + expect(subject).to be_an Array + expect(subject.first).to be_a Hash + expect(subject.all?(&:upcoming)).to be true + end + + it 'returns launches scheduled in the future' do + subject.each do |launch| + expect(launch.launch_year).to be >= Time.now.year.to_s + expect(Time.parse(launch.launch_date_utc)).to be >= Time.now.utc + expect(launch.rocket.first_stage.cores.first.land_success).to be nil + expect(launch.launch_success).to be nil + end + end + end + context '#all', vcr: { cassette_name: 'launches/all' } do subject do SPACEX::Launches.all From d513058970f71211984b71fb38ff7f5d48bb206f Mon Sep 17 00:00:00 2001 From: Michael King Date: Mon, 29 Oct 2018 19:19:29 -0400 Subject: [PATCH 02/11] implement upcoming launches endpoint --- lib/spacex/launches.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/spacex/launches.rb b/lib/spacex/launches.rb index bd656af..6bab291 100644 --- a/lib/spacex/launches.rb +++ b/lib/spacex/launches.rb @@ -16,6 +16,10 @@ def self.past SPACEX::BaseRequest.info('launches/past') end + def self.upcoming + SPACEX::BaseRequest.info('launches/upcoming') + end + def self.all info end From fcb52b0738b13822c9532b90f816b331b9d7ae9d Mon Sep 17 00:00:00 2001 From: Michael King Date: Mon, 29 Oct 2018 19:20:10 -0400 Subject: [PATCH 03/11] add upcoming launches cassette --- spec/fixtures/spacex/launches/upcoming.yml | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 spec/fixtures/spacex/launches/upcoming.yml diff --git a/spec/fixtures/spacex/launches/upcoming.yml b/spec/fixtures/spacex/launches/upcoming.yml new file mode 100644 index 0000000..153486e --- /dev/null +++ b/spec/fixtures/spacex/launches/upcoming.yml @@ -0,0 +1,64 @@ +--- +http_interactions: +- request: + method: get + uri: https://api.spacexdata.com/v3/launches/upcoming + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Faraday v0.15.3 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 29 Oct 2018 22:59:11 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Set-Cookie: + - __cfduid=dc63256bab7f88c06c55be07971c3b9cc1540853951; expires=Tue, 29-Oct-19 + 22:59:11 GMT; path=/; domain=.spacexdata.com; HttpOnly; Secure + Vary: + - Accept-Encoding, Origin + X-Dns-Prefetch-Control: + - 'off' + X-Frame-Options: + - SAMEORIGIN + Strict-Transport-Security: + - max-age=15552000; includeSubDomains + X-Download-Options: + - noopen + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Access-Control-Allow-Origin: + - "*" + X-Koa-Redis-Cache: + - 'true' + X-Response-Time: + - 2ms + Expect-Ct: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Server: + - cloudflare + Cf-Ray: + - 4719404aacf55e58-TPA + body: + encoding: ASCII-8BIT + string: !binary |- + W3siZmxpZ2h0X251bWJlciI6NzAsIm1pc3Npb25fbmFtZSI6IkVz4oCZaGFpbCAyIiwibWlzc2lvbl9pZCI6W10sImxhdW5jaF95ZWFyIjoiMjAxOCIsImxhdW5jaF9kYXRlX3VuaXgiOjE1NDIyMjgzNjAsImxhdW5jaF9kYXRlX3V0YyI6IjIwMTgtMTEtMTRUMjA6NDY6MDAuMDAwWiIsImxhdW5jaF9kYXRlX2xvY2FsIjoiMjAxOC0xMS0xNFQxNTo0NjowMC0wNTowMCIsImlzX3RlbnRhdGl2ZSI6dHJ1ZSwidGVudGF0aXZlX21heF9wcmVjaXNpb24iOiJob3VyIiwicm9ja2V0Ijp7InJvY2tldF9pZCI6ImZhbGNvbjkiLCJyb2NrZXRfbmFtZSI6IkZhbGNvbiA5Iiwicm9ja2V0X3R5cGUiOiJGVCIsImZpcnN0X3N0YWdlIjp7ImNvcmVzIjpbeyJjb3JlX3NlcmlhbCI6bnVsbCwiZmxpZ2h0IjpudWxsLCJibG9jayI6NSwiZ3JpZGZpbnMiOnRydWUsImxlZ3MiOnRydWUsInJldXNlZCI6ZmFsc2UsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOnRydWUsImxhbmRpbmdfdHlwZSI6IkFTRFMiLCJsYW5kaW5nX3ZlaGljbGUiOiJPQ0lTTFkifV19LCJzZWNvbmRfc3RhZ2UiOnsiYmxvY2siOjUsInBheWxvYWRzIjpbeyJwYXlsb2FkX2lkIjoiRXPigJloYWlsIDIiLCJub3JhZF9pZCI6W10sInJldXNlZCI6ZmFsc2UsImN1c3RvbWVycyI6WyJFc+KAmWhhaWxTYXQiXSwibmF0aW9uYWxpdHkiOiJRYXRhciIsIm1hbnVmYWN0dXJlciI6Ik1pdHN1YmlzaGkgRWxlY3RyaWMiLCJwYXlsb2FkX3R5cGUiOiJTYXRlbGxpdGUiLCJwYXlsb2FkX21hc3Nfa2ciOjMwMDAsInBheWxvYWRfbWFzc19sYnMiOjY2MTMuODY4LCJvcmJpdCI6IkdUTyIsIm9yYml0X3BhcmFtcyI6eyJyZWZlcmVuY2Vfc3lzdGVtIjoiZ2VvY2VudHJpYyIsInJlZ2ltZSI6Imdlb3N0YXRpb25hcnkiLCJsb25naXR1ZGUiOjI1LjUsInNlbWlfbWFqb3JfYXhpc19rbSI6bnVsbCwiZWNjZW50cmljaXR5IjpudWxsLCJwZXJpYXBzaXNfa20iOm51bGwsImFwb2Fwc2lzX2ttIjpudWxsLCJpbmNsaW5hdGlvbl9kZWciOm51bGwsInBlcmlvZF9taW4iOm51bGwsImxpZmVzcGFuX3llYXJzIjoxNSwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfX1dfSwiZmFpcmluZ3MiOnsicmV1c2VkIjpmYWxzZSwicmVjb3ZlcnlfYXR0ZW1wdCI6ZmFsc2UsInJlY292ZXJlZCI6ZmFsc2UsInNoaXAiOm51bGx9fSwic2hpcHMiOltdLCJ0ZWxlbWV0cnkiOnsiZmxpZ2h0X2NsdWIiOm51bGx9LCJsYXVuY2hfc2l0ZSI6eyJzaXRlX2lkIjoiY2NhZnNfc2xjXzQwIiwic2l0ZV9uYW1lIjoiQ0NBRlMgU0xDIDQwIiwic2l0ZV9uYW1lX2xvbmciOiJDYXBlIENhbmF2ZXJhbCBBaXIgRm9yY2UgU3RhdGlvbiBTcGFjZSBMYXVuY2ggQ29tcGxleCA0MCJ9LCJsYXVuY2hfc3VjY2VzcyI6bnVsbCwibGlua3MiOnsibWlzc2lvbl9wYXRjaCI6bnVsbCwibWlzc2lvbl9wYXRjaF9zbWFsbCI6bnVsbCwicmVkZGl0X2NhbXBhaWduIjoiaHR0cHM6Ly93d3cucmVkZGl0LmNvbS9yL3NwYWNleC9jb21tZW50cy85cDgyanQvZXNoYWlsXzJfbGF1bmNoX2NhbXBhaWduX3RocmVhZC8iLCJyZWRkaXRfbGF1bmNoIjpudWxsLCJyZWRkaXRfcmVjb3ZlcnkiOm51bGwsInJlZGRpdF9tZWRpYSI6bnVsbCwicHJlc3NraXQiOm51bGwsImFydGljbGVfbGluayI6bnVsbCwid2lraXBlZGlhIjpudWxsLCJ2aWRlb19saW5rIjpudWxsLCJmbGlja3JfaW1hZ2VzIjpbXX0sImRldGFpbHMiOiJTcGFjZVgncyBlaWdodGVlbnRoIGZsaWdodCBvZiAyMDE4IHdpbGwgYmUgaXRzIGZpcnN0IGZvciBFcydoYWlsU2F0LiBFcydoYWlsLTIgaXMgYSBjb21tdW5pY2F0aW9ucyBzYXRlbGxpdGUgdGhhdCB3aWxsIGRlbGl2ZXIgdGVsZXZpc2lvbiBhbmQgaW50ZXJuZXQgdG8gUWF0YXIgYW5kIHRoZSBzdXJyb3VuZGluZyByZWdpb24uIEl0IHdpbGwgYmUgbGF1bmNoZWQgaW50byBhIGdlb3N0YXRpb25hcnkgdHJhbnNmZXIgb3JiaXQgZnJvbSBMQy0zOUEgYXQgS2VubmVkeSBTcGFjZSBDZW50ZXIuIFRoZSBib29zdGVyIGlzIGV4cGVjdGVkIHRvIGxhbmQgb24gT0NJU0xZLiIsInVwY29taW5nIjp0cnVlLCJzdGF0aWNfZmlyZV9kYXRlX3V0YyI6bnVsbCwic3RhdGljX2ZpcmVfZGF0ZV91bml4IjpudWxsfSx7ImZsaWdodF9udW1iZXIiOjcxLCJtaXNzaW9uX25hbWUiOiJTU08tQSIsIm1pc3Npb25faWQiOltdLCJsYXVuY2hfeWVhciI6IjIwMTgiLCJsYXVuY2hfZGF0ZV91bml4IjoxNTQyNjUyMjAwLCJsYXVuY2hfZGF0ZV91dGMiOiIyMDE4LTExLTE5VDE4OjMwOjAwLjAwMFoiLCJsYXVuY2hfZGF0ZV9sb2NhbCI6IjIwMTgtMTEtMTlUMTA6MzA6MDAtMDg6MDAiLCJpc190ZW50YXRpdmUiOnRydWUsInRlbnRhdGl2ZV9tYXhfcHJlY2lzaW9uIjoiaG91ciIsInJvY2tldCI6eyJyb2NrZXRfaWQiOiJmYWxjb245Iiwicm9ja2V0X25hbWUiOiJGYWxjb24gOSIsInJvY2tldF90eXBlIjoiRlQiLCJmaXJzdF9zdGFnZSI6eyJjb3JlcyI6W3siY29yZV9zZXJpYWwiOiJCMTA0NiIsImZsaWdodCI6MywiYmxvY2siOjUsImdyaWRmaW5zIjp0cnVlLCJsZWdzIjp0cnVlLCJyZXVzZWQiOnRydWUsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOnRydWUsImxhbmRpbmdfdHlwZSI6IlJUTFMiLCJsYW5kaW5nX3ZlaGljbGUiOiJMWi00In1dfSwic2Vjb25kX3N0YWdlIjp7ImJsb2NrIjo1LCJwYXlsb2FkcyI6W3sicGF5bG9hZF9pZCI6IlNTTy1BIiwibm9yYWRfaWQiOltdLCJyZXVzZWQiOmZhbHNlLCJjdXN0b21lcnMiOlsiU3BhY2VmbGlnaHQgSW5kdXN0cmllcywgSW5jIl0sIm5hdGlvbmFsaXR5IjoiVW5pdGVkIFN0YXRlcyIsIm1hbnVmYWN0dXJlciI6IlNwYWNlZmxpZ2h0IEluZHVzdHJpZXMsIEluYyIsInBheWxvYWRfdHlwZSI6IlNhdGVsbGl0ZSIsInBheWxvYWRfbWFzc19rZyI6NDAwMCwicGF5bG9hZF9tYXNzX2xicyI6ODgxOC40OSwib3JiaXQiOiJTU08iLCJvcmJpdF9wYXJhbXMiOnsicmVmZXJlbmNlX3N5c3RlbSI6Imdlb2NlbnRyaWMiLCJyZWdpbWUiOiJzdW4tc3luY2hyb25vdXMiLCJsb25naXR1ZGUiOm51bGwsInNlbWlfbWFqb3JfYXhpc19rbSI6bnVsbCwiZWNjZW50cmljaXR5IjpudWxsLCJwZXJpYXBzaXNfa20iOm51bGwsImFwb2Fwc2lzX2ttIjpudWxsLCJpbmNsaW5hdGlvbl9kZWciOm51bGwsInBlcmlvZF9taW4iOm51bGwsImxpZmVzcGFuX3llYXJzIjpudWxsLCJlcG9jaCI6bnVsbCwibWVhbl9tb3Rpb24iOm51bGwsInJhYW4iOm51bGwsImFyZ19vZl9wZXJpY2VudGVyIjpudWxsLCJtZWFuX2Fub21hbHkiOm51bGx9fV19LCJmYWlyaW5ncyI6eyJyZXVzZWQiOmZhbHNlLCJyZWNvdmVyeV9hdHRlbXB0IjpudWxsLCJyZWNvdmVyZWQiOm51bGwsInNoaXAiOm51bGx9fSwic2hpcHMiOltdLCJ0ZWxlbWV0cnkiOnsiZmxpZ2h0X2NsdWIiOm51bGx9LCJsYXVuY2hfc2l0ZSI6eyJzaXRlX2lkIjoidmFmYl9zbGNfNGUiLCJzaXRlX25hbWUiOiJWQUZCIFNMQyA0RSIsInNpdGVfbmFtZV9sb25nIjoiVmFuZGVuYmVyZyBBaXIgRm9yY2UgQmFzZSBTcGFjZSBMYXVuY2ggQ29tcGxleCA0RSJ9LCJsYXVuY2hfc3VjY2VzcyI6bnVsbCwibGlua3MiOnsibWlzc2lvbl9wYXRjaCI6bnVsbCwibWlzc2lvbl9wYXRjaF9zbWFsbCI6bnVsbCwicmVkZGl0X2NhbXBhaWduIjoiaHR0cHM6Ly93d3cucmVkZGl0LmNvbS9yL3NwYWNleC9jb21tZW50cy85cmF5c2kvc3NvYV9sYXVuY2hfY2FtcGFpZ25fdGhyZWFkIiwicmVkZGl0X2xhdW5jaCI6bnVsbCwicmVkZGl0X3JlY292ZXJ5IjpudWxsLCJyZWRkaXRfbWVkaWEiOm51bGwsInByZXNza2l0IjpudWxsLCJhcnRpY2xlX2xpbmsiOm51bGwsIndpa2lwZWRpYSI6bnVsbCwidmlkZW9fbGluayI6bnVsbCwiZmxpY2tyX2ltYWdlcyI6W119LCJkZXRhaWxzIjoiU3BhY2VYJ3MgbmluZXRlZW50aCBmbGlnaHQgb2YgMjAxOCB3aWxsIGZseSBTU08tQTogU21hbGxTYXQgRXhwcmVzcyBvdXQgb2YgVmFuZGVuYmVyZyBTTEMtNEUgZm9yIFNwYWNlZmxpZ2h0LiBTU08tQSBpcyBhIHJpZGVzaGFyZSB0byBzdW4gc3luY2hyb251cyBsb3cgZWFydGggb3JiaXQgY29uc2lzdGluZyBvZiA3NCBpbmRpdmlkdWFsIG1pY3Jvc2F0ZWxsaXRlcyBhbmQgY3ViZXNhdHMuIEl0IGlzIGFsc28gbGlrZWx5IHRvIGJlIHRoZSB0aGlyZCBmbGlnaHQgb2YgY29yZSBCMTA0NiB3aGljaCBwcmV2aW91c2x5IGZsZXcgQmFuZ2FiYW5kaHUtMSBhbmQgTWVyYWggUHV0aWguIElmIHRoaXMgaGFwcGVucyBpdCB3aWxsIGJlIHRoZSBmaXJzdCB0aW1lIGEgRmFsY29uIDkgaGFzIGZsb3duIG1vcmUgdGhhbiB0d28gbWlzc2lvbnMuIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYSBSVExTIGxhbmRpbmcuIiwidXBjb21pbmciOnRydWUsInN0YXRpY19maXJlX2RhdGVfdXRjIjpudWxsLCJzdGF0aWNfZmlyZV9kYXRlX3VuaXgiOm51bGx9LHsiZmxpZ2h0X251bWJlciI6NzIsIm1pc3Npb25fbmFtZSI6IkNSUy0xNiIsIm1pc3Npb25faWQiOlsiRUU4NkY3NCJdLCJsYXVuY2hfeWVhciI6IjIwMTgiLCJsYXVuY2hfZGF0ZV91bml4IjoxNTQzNjIyNDAwLCJsYXVuY2hfZGF0ZV91dGMiOiIyMDE4LTEyLTAxVDAwOjAwOjAwLjAwMFoiLCJsYXVuY2hfZGF0ZV9sb2NhbCI6IjIwMTgtMTEtMzBUMTk6MDA6MDAtMDU6MDAiLCJpc190ZW50YXRpdmUiOnRydWUsInRlbnRhdGl2ZV9tYXhfcHJlY2lzaW9uIjoibW9udGgiLCJyb2NrZXQiOnsicm9ja2V0X2lkIjoiZmFsY29uOSIsInJvY2tldF9uYW1lIjoiRmFsY29uIDkiLCJyb2NrZXRfdHlwZSI6IkZUIiwiZmlyc3Rfc3RhZ2UiOnsiY29yZXMiOlt7ImNvcmVfc2VyaWFsIjpudWxsLCJmbGlnaHQiOm51bGwsImJsb2NrIjo1LCJncmlkZmlucyI6dHJ1ZSwibGVncyI6dHJ1ZSwicmV1c2VkIjpmYWxzZSwibGFuZF9zdWNjZXNzIjpudWxsLCJsYW5kaW5nX2ludGVudCI6bnVsbCwibGFuZGluZ190eXBlIjpudWxsLCJsYW5kaW5nX3ZlaGljbGUiOm51bGx9XX0sInNlY29uZF9zdGFnZSI6eyJibG9jayI6NSwicGF5bG9hZHMiOlt7InBheWxvYWRfaWQiOiJDUlMtMTYiLCJub3JhZF9pZCI6W10sImNhcF9zZXJpYWwiOm51bGwsInJldXNlZCI6dHJ1ZSwiY3VzdG9tZXJzIjpbIk5BU0EgKENSUykiXSwibmF0aW9uYWxpdHkiOiJVbml0ZWQgU3RhdGVzIiwibWFudWZhY3R1cmVyIjoiU3BhY2VYIiwicGF5bG9hZF90eXBlIjoiRHJhZ29uIDEuMSIsInBheWxvYWRfbWFzc19rZyI6bnVsbCwicGF5bG9hZF9tYXNzX2xicyI6bnVsbCwib3JiaXQiOiJJU1MiLCJvcmJpdF9wYXJhbXMiOnsicmVmZXJlbmNlX3N5c3RlbSI6Imdlb2NlbnRyaWMiLCJyZWdpbWUiOiJsb3ctZWFydGgiLCJsb25naXR1ZGUiOm51bGwsInNlbWlfbWFqb3JfYXhpc19rbSI6bnVsbCwiZWNjZW50cmljaXR5IjpudWxsLCJwZXJpYXBzaXNfa20iOm51bGwsImFwb2Fwc2lzX2ttIjpudWxsLCJpbmNsaW5hdGlvbl9kZWciOm51bGwsInBlcmlvZF9taW4iOm51bGwsImxpZmVzcGFuX3llYXJzIjpudWxsLCJlcG9jaCI6bnVsbCwibWVhbl9tb3Rpb24iOm51bGwsInJhYW4iOm51bGwsImFyZ19vZl9wZXJpY2VudGVyIjpudWxsLCJtZWFuX2Fub21hbHkiOm51bGx9LCJtYXNzX3JldHVybmVkX2tnIjpudWxsLCJtYXNzX3JldHVybmVkX2xicyI6bnVsbCwiZmxpZ2h0X3RpbWVfc2VjIjpudWxsLCJjYXJnb19tYW5pZmVzdCI6bnVsbH1dfSwiZmFpcmluZ3MiOm51bGx9LCJzaGlwcyI6W10sInRlbGVtZXRyeSI6eyJmbGlnaHRfY2x1YiI6bnVsbH0sImxhdW5jaF9zaXRlIjp7InNpdGVfaWQiOiJjY2Fmc19zbGNfNDAiLCJzaXRlX25hbWUiOiJDQ0FGUyBTTEMgNDAiLCJzaXRlX25hbWVfbG9uZyI6IkNhcGUgQ2FuYXZlcmFsIEFpciBGb3JjZSBTdGF0aW9uIFNwYWNlIExhdW5jaCBDb21wbGV4IDQwIn0sImxhdW5jaF9zdWNjZXNzIjpudWxsLCJsaW5rcyI6eyJtaXNzaW9uX3BhdGNoIjpudWxsLCJtaXNzaW9uX3BhdGNoX3NtYWxsIjpudWxsLCJyZWRkaXRfY2FtcGFpZ24iOm51bGwsInJlZGRpdF9sYXVuY2giOm51bGwsInJlZGRpdF9yZWNvdmVyeSI6bnVsbCwicmVkZGl0X21lZGlhIjpudWxsLCJwcmVzc2tpdCI6bnVsbCwiYXJ0aWNsZV9saW5rIjpudWxsLCJ3aWtpcGVkaWEiOm51bGwsInZpZGVvX2xpbmsiOm51bGwsImZsaWNrcl9pbWFnZXMiOltdfSwiZGV0YWlscyI6IlNwYWNlWCdzIDE2dGggQ3JldyBSZXN1cHBseSBNaXNzaW9uIG9uIGJlaGFsZiBvZiBOQVNBLCB3aXRoIGEgdG90YWwgb2YgMjAgY29udHJhY3RlZCBmbGlnaHRzLiBUaGlzIHdpbGwgYnJpbmcgZXNzZW50aWFsIHN1cHBsaWVzIHRvIHRoZSBJbnRlcm5hdGlvbmFsIFNwYWNlIFN0YXRpb24gdXNpbmcgU3BhY2VYJ3MgcmV1c2FibGUgRHJhZ29uIHNwYWNlY3JhZnQuIFRoZSBGYWxjb24gOSB3aWxsIGxhdW5jaCBmcm9tIFNMQy00MCBhdCBDYXBlIENhbmF2ZXJhbCBBaXIgRm9yY2UgU3RhdGlvbi4gVGhpcyBsYXVuY2ggY291bGQgYmUgYWZmZWN0ZWQgYnkgdGhlIHJlY2VudCBTb3l1eiBmYWlsdXJlLiAiLCJ1cGNvbWluZyI6dHJ1ZSwic3RhdGljX2ZpcmVfZGF0ZV91dGMiOm51bGwsInN0YXRpY19maXJlX2RhdGVfdW5peCI6bnVsbH0seyJmbGlnaHRfbnVtYmVyIjo3MywibWlzc2lvbl9uYW1lIjoiR1BTIElJSUEtMSIsIm1pc3Npb25faWQiOltdLCJsYXVuY2hfeWVhciI6IjIwMTgiLCJsYXVuY2hfZGF0ZV91bml4IjoxNTQ0ODgyODgwLCJsYXVuY2hfZGF0ZV91dGMiOiIyMDE4LTEyLTE1VDE0OjA4OjAwLjAwMFoiLCJsYXVuY2hfZGF0ZV9sb2NhbCI6IjIwMTgtMTItMTVUMDk6MDg6MDAtMDU6MDAiLCJpc190ZW50YXRpdmUiOnRydWUsInRlbnRhdGl2ZV9tYXhfcHJlY2lzaW9uIjoiaG91ciIsInJvY2tldCI6eyJyb2NrZXRfaWQiOiJmYWxjb245Iiwicm9ja2V0X25hbWUiOiJGYWxjb24gOSIsInJvY2tldF90eXBlIjoiRlQiLCJmaXJzdF9zdGFnZSI6eyJjb3JlcyI6W3siY29yZV9zZXJpYWwiOiJCMTA1MCIsImZsaWdodCI6MSwiYmxvY2siOjUsImdyaWRmaW5zIjp0cnVlLCJsZWdzIjp0cnVlLCJyZXVzZWQiOmZhbHNlLCJsYW5kX3N1Y2Nlc3MiOm51bGwsImxhbmRpbmdfaW50ZW50IjpudWxsLCJsYW5kaW5nX3R5cGUiOm51bGwsImxhbmRpbmdfdmVoaWNsZSI6bnVsbH1dfSwic2Vjb25kX3N0YWdlIjp7ImJsb2NrIjo1LCJwYXlsb2FkcyI6W3sicGF5bG9hZF9pZCI6IkdQUyBJSUlBLTEiLCJub3JhZF9pZCI6W10sInJldXNlZCI6ZmFsc2UsImN1c3RvbWVycyI6WyJVU0FGIl0sIm5hdGlvbmFsaXR5IjoiVW5pdGVkIFN0YXRlcyIsIm1hbnVmYWN0dXJlciI6IkxvY2toZWVkIE1hcnRpbiIsInBheWxvYWRfdHlwZSI6IlNhdGVsbGl0ZSIsInBheWxvYWRfbWFzc19rZyI6Mzg4MCwicGF5bG9hZF9tYXNzX2xicyI6ODU1My45NCwib3JiaXQiOiJNRU8iLCJvcmJpdF9wYXJhbXMiOnsicmVmZXJlbmNlX3N5c3RlbSI6bnVsbCwicmVnaW1lIjpudWxsLCJsb25naXR1ZGUiOm51bGwsInNlbWlfbWFqb3JfYXhpc19rbSI6bnVsbCwiZWNjZW50cmljaXR5IjpudWxsLCJwZXJpYXBzaXNfa20iOm51bGwsImFwb2Fwc2lzX2ttIjpudWxsLCJpbmNsaW5hdGlvbl9kZWciOm51bGwsInBlcmlvZF9taW4iOm51bGwsImxpZmVzcGFuX3llYXJzIjoxNSwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfX1dfSwiZmFpcmluZ3MiOnsicmV1c2VkIjpmYWxzZSwicmVjb3ZlcnlfYXR0ZW1wdCI6ZmFsc2UsInJlY292ZXJlZCI6ZmFsc2UsInNoaXAiOm51bGx9fSwic2hpcHMiOltdLCJ0ZWxlbWV0cnkiOnsiZmxpZ2h0X2NsdWIiOm51bGx9LCJsYXVuY2hfc2l0ZSI6eyJzaXRlX2lkIjoiY2NhZnNfc2xjXzQwIiwic2l0ZV9uYW1lIjoiQ0NBRlMgU0xDIDQwIiwic2l0ZV9uYW1lX2xvbmciOiJDYXBlIENhbmF2ZXJhbCBBaXIgRm9yY2UgU3RhdGlvbiBTcGFjZSBMYXVuY2ggQ29tcGxleCA0MCJ9LCJsYXVuY2hfc3VjY2VzcyI6bnVsbCwibGlua3MiOnsibWlzc2lvbl9wYXRjaCI6bnVsbCwibWlzc2lvbl9wYXRjaF9zbWFsbCI6bnVsbCwicmVkZGl0X2NhbXBhaWduIjpudWxsLCJyZWRkaXRfbGF1bmNoIjpudWxsLCJyZWRkaXRfcmVjb3ZlcnkiOm51bGwsInJlZGRpdF9tZWRpYSI6bnVsbCwicHJlc3NraXQiOm51bGwsImFydGljbGVfbGluayI6bnVsbCwid2lraXBlZGlhIjpudWxsLCJ2aWRlb19saW5rIjpudWxsLCJmbGlja3JfaW1hZ2VzIjpbXX0sImRldGFpbHMiOm51bGwsInVwY29taW5nIjp0cnVlLCJzdGF0aWNfZmlyZV9kYXRlX3V0YyI6bnVsbCwic3RhdGljX2ZpcmVfZGF0ZV91bml4IjpudWxsfSx7ImZsaWdodF9udW1iZXIiOjc0LCJtaXNzaW9uX25hbWUiOiJJcmlkaXVtIE5FWFQgTWlzc2lvbiA4IiwibWlzc2lvbl9pZCI6WyJGMzM2NEJGIl0sImxhdW5jaF95ZWFyIjoiMjAxOCIsImxhdW5jaF9kYXRlX3VuaXgiOjE1NDYxODc4ODAsImxhdW5jaF9kYXRlX3V0YyI6IjIwMTgtMTItMzBUMTY6Mzg6MDAuMDAwWiIsImxhdW5jaF9kYXRlX2xvY2FsIjoiMjAxOC0xMi0zMFQwODozODowMC0wODowMCIsImlzX3RlbnRhdGl2ZSI6dHJ1ZSwidGVudGF0aXZlX21heF9wcmVjaXNpb24iOiJob3VyIiwicm9ja2V0Ijp7InJvY2tldF9pZCI6ImZhbGNvbjkiLCJyb2NrZXRfbmFtZSI6IkZhbGNvbiA5Iiwicm9ja2V0X3R5cGUiOiJGVCIsImZpcnN0X3N0YWdlIjp7ImNvcmVzIjpbeyJjb3JlX3NlcmlhbCI6bnVsbCwiZmxpZ2h0IjpudWxsLCJibG9jayI6NSwiZ3JpZGZpbnMiOnRydWUsImxlZ3MiOnRydWUsInJldXNlZCI6bnVsbCwibGFuZF9zdWNjZXNzIjpudWxsLCJsYW5kaW5nX2ludGVudCI6bnVsbCwibGFuZGluZ190eXBlIjpudWxsLCJsYW5kaW5nX3ZlaGljbGUiOm51bGx9XX0sInNlY29uZF9zdGFnZSI6eyJibG9jayI6NSwicGF5bG9hZHMiOlt7InBheWxvYWRfaWQiOiJJcmlkaXVtIE5FWFQgOCIsIm5vcmFkX2lkIjpbXSwicmV1c2VkIjpmYWxzZSwiY3VzdG9tZXJzIjpbIklyaWRpdW0gQ29tbXVuaWNhdGlvbnMiXSwibmF0aW9uYWxpdHkiOiJVbml0ZWQgU3RhdGVzIiwibWFudWZhY3R1cmVyIjoiVGhhbGVzIEFsZW5pYSBTcGFjZSIsInBheWxvYWRfdHlwZSI6IlNhdGVsbGl0ZSIsInBheWxvYWRfbWFzc19rZyI6OTYwMCwicGF5bG9hZF9tYXNzX2xicyI6MjExNjQuMzgsIm9yYml0IjoiUE8iLCJvcmJpdF9wYXJhbXMiOnsicmVmZXJlbmNlX3N5c3RlbSI6Imdlb2NlbnRyaWMiLCJyZWdpbWUiOiJsb3ctZWFydGgiLCJsb25naXR1ZGUiOm51bGwsInNlbWlfbWFqb3JfYXhpc19rbSI6Njk5NC44NDMsImVjY2VudHJpY2l0eSI6MC4wMDEwMjIsInBlcmlhcHNpc19rbSI6NjA5LjU1OSwiYXBvYXBzaXNfa20iOjYyMy44NTYsImluY2xpbmF0aW9uX2RlZyI6ODYuNjc2MywicGVyaW9kX21pbiI6OTcuMDM0LCJsaWZlc3Bhbl95ZWFycyI6MTUsImVwb2NoIjoiMjAxOC0wNy0yNVQxOTowODozOC4wMDBaIiwibWVhbl9tb3Rpb24iOjE0Ljg0MDA2NSwicmFhbiI6MTgxLjcwNzEsImFyZ19vZl9wZXJpY2VudGVyIjpudWxsLCJtZWFuX2Fub21hbHkiOm51bGx9fV19LCJmYWlyaW5ncyI6eyJyZXVzZWQiOmZhbHNlLCJyZWNvdmVyeV9hdHRlbXB0IjpudWxsLCJyZWNvdmVyZWQiOm51bGwsInNoaXAiOm51bGx9fSwic2hpcHMiOltdLCJ0ZWxlbWV0cnkiOnsiZmxpZ2h0X2NsdWIiOm51bGx9LCJsYXVuY2hfc2l0ZSI6eyJzaXRlX2lkIjoidmFmYl9zbGNfNGUiLCJzaXRlX25hbWUiOiJWQUZCIFNMQyA0RSIsInNpdGVfbmFtZV9sb25nIjoiVmFuZGVuYmVyZyBBaXIgRm9yY2UgQmFzZSBTcGFjZSBMYXVuY2ggQ29tcGxleCA0RSJ9LCJsYXVuY2hfc3VjY2VzcyI6bnVsbCwibGlua3MiOnsibWlzc2lvbl9wYXRjaCI6bnVsbCwibWlzc2lvbl9wYXRjaF9zbWFsbCI6bnVsbCwicmVkZGl0X2NhbXBhaWduIjpudWxsLCJyZWRkaXRfbGF1bmNoIjpudWxsLCJyZWRkaXRfcmVjb3ZlcnkiOm51bGwsInJlZGRpdF9tZWRpYSI6bnVsbCwicHJlc3NraXQiOm51bGwsImFydGljbGVfbGluayI6bnVsbCwid2lraXBlZGlhIjpudWxsLCJ2aWRlb19saW5rIjpudWxsLCJmbGlja3JfaW1hZ2VzIjpbXX0sImRldGFpbHMiOm51bGwsInVwY29taW5nIjp0cnVlLCJzdGF0aWNfZmlyZV9kYXRlX3V0YyI6bnVsbCwic3RhdGljX2ZpcmVfZGF0ZV91bml4IjpudWxsfSx7ImZsaWdodF9udW1iZXIiOjc1LCJtaXNzaW9uX25hbWUiOiJDQ3RDYXAgRGVtbyBNaXNzaW9uIDEiLCJtaXNzaW9uX2lkIjpbIkVFODZGNzQiXSwibGF1bmNoX3llYXIiOiIyMDE5IiwibGF1bmNoX2RhdGVfdW5peCI6MTU0NjMwMDgwMCwibGF1bmNoX2RhdGVfdXRjIjoiMjAxOS0wMS0wMVQwMDowMDowMC4wMDBaIiwibGF1bmNoX2RhdGVfbG9jYWwiOiIyMDE4LTEyLTMxVDE5OjAwOjAwLTA1OjAwIiwiaXNfdGVudGF0aXZlIjp0cnVlLCJ0ZW50YXRpdmVfbWF4X3ByZWNpc2lvbiI6Im1vbnRoIiwicm9ja2V0Ijp7InJvY2tldF9pZCI6ImZhbGNvbjkiLCJyb2NrZXRfbmFtZSI6IkZhbGNvbiA5Iiwicm9ja2V0X3R5cGUiOiJGVCIsImZpcnN0X3N0YWdlIjp7ImNvcmVzIjpbeyJjb3JlX3NlcmlhbCI6IkIxMDUxIiwiZmxpZ2h0IjoxLCJibG9jayI6NSwiZ3JpZGZpbnMiOm51bGwsImxlZ3MiOm51bGwsInJldXNlZCI6ZmFsc2UsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOm51bGwsImxhbmRpbmdfdHlwZSI6bnVsbCwibGFuZGluZ192ZWhpY2xlIjpudWxsfV19LCJzZWNvbmRfc3RhZ2UiOnsiYmxvY2siOjUsInBheWxvYWRzIjpbeyJwYXlsb2FkX2lkIjoiQ0N0Q2FwIERlbW8gTWlzc2lvbiAxIiwibm9yYWRfaWQiOltdLCJjYXBfc2VyaWFsIjpudWxsLCJyZXVzZWQiOmZhbHNlLCJjdXN0b21lcnMiOlsiTkFTQSAoQ0N0Q2FwKSJdLCJuYXRpb25hbGl0eSI6IlVuaXRlZCBTdGF0ZXMiLCJtYW51ZmFjdHVyZXIiOiJTcGFjZVgiLCJwYXlsb2FkX3R5cGUiOiJDcmV3IERyYWdvbiIsInBheWxvYWRfbWFzc19rZyI6bnVsbCwicGF5bG9hZF9tYXNzX2xicyI6bnVsbCwib3JiaXQiOiJJU1MiLCJvcmJpdF9wYXJhbXMiOnsicmVmZXJlbmNlX3N5c3RlbSI6Imdlb2NlbnRyaWMiLCJyZWdpbWUiOiJsb3ctZWFydGgiLCJsb25naXR1ZGUiOm51bGwsInNlbWlfbWFqb3JfYXhpc19rbSI6bnVsbCwiZWNjZW50cmljaXR5IjpudWxsLCJwZXJpYXBzaXNfa20iOm51bGwsImFwb2Fwc2lzX2ttIjpudWxsLCJpbmNsaW5hdGlvbl9kZWciOm51bGwsInBlcmlvZF9taW4iOm51bGwsImxpZmVzcGFuX3llYXJzIjpudWxsLCJlcG9jaCI6bnVsbCwibWVhbl9tb3Rpb24iOm51bGwsInJhYW4iOm51bGwsImFyZ19vZl9wZXJpY2VudGVyIjpudWxsLCJtZWFuX2Fub21hbHkiOm51bGx9LCJtYXNzX3JldHVybmVkX2tnIjpudWxsLCJtYXNzX3JldHVybmVkX2xicyI6bnVsbCwiZmxpZ2h0X3RpbWVfc2VjIjpudWxsLCJjYXJnb19tYW5pZmVzdCI6bnVsbH1dfSwiZmFpcmluZ3MiOm51bGx9LCJzaGlwcyI6W10sInRlbGVtZXRyeSI6eyJmbGlnaHRfY2x1YiI6bnVsbH0sImxhdW5jaF9zaXRlIjp7InNpdGVfaWQiOiJrc2NfbGNfMzlhIiwic2l0ZV9uYW1lIjoiS1NDIExDIDM5QSIsInNpdGVfbmFtZV9sb25nIjoiS2VubmVkeSBTcGFjZSBDZW50ZXIgSGlzdG9yaWMgTGF1bmNoIENvbXBsZXggMzlBIn0sImxhdW5jaF9zdWNjZXNzIjpudWxsLCJsaW5rcyI6eyJtaXNzaW9uX3BhdGNoIjpudWxsLCJtaXNzaW9uX3BhdGNoX3NtYWxsIjpudWxsLCJyZWRkaXRfY2FtcGFpZ24iOm51bGwsInJlZGRpdF9sYXVuY2giOm51bGwsInJlZGRpdF9yZWNvdmVyeSI6bnVsbCwicmVkZGl0X21lZGlhIjpudWxsLCJwcmVzc2tpdCI6bnVsbCwiYXJ0aWNsZV9saW5rIjpudWxsLCJ3aWtpcGVkaWEiOm51bGwsInZpZGVvX2xpbmsiOm51bGwsImZsaWNrcl9pbWFnZXMiOltdfSwiZGV0YWlscyI6IkRlbW9uc3RyYXRpb24gbWlzc2lvbiB0byBJU1MgZm9yIE5BU0Egd2l0aCBhbiB1bmNyZXdlZCBEcmFnb24gMiBjYXBzdWxlLiIsInVwY29taW5nIjp0cnVlLCJzdGF0aWNfZmlyZV9kYXRlX3V0YyI6IjIwMTgtMTEtMDFUMDA6MDA6MDAuMDAwWiIsInN0YXRpY19maXJlX2RhdGVfdW5peCI6MTU0MTAzMDQwMH0seyJmbGlnaHRfbnVtYmVyIjo3NiwibWlzc2lvbl9uYW1lIjoiUFNOLTYgLyBHVE8tMSAvIFNwYWNlSUwgTW9vbiBMYW5kZXIiLCJtaXNzaW9uX2lkIjpbXSwibGF1bmNoX3llYXIiOiIyMDE5IiwibGF1bmNoX2RhdGVfdW5peCI6MTU0NjMwMDgwMCwibGF1bmNoX2RhdGVfdXRjIjoiMjAxOS0wMS0wMVQwMDowMDowMC4wMDBaIiwibGF1bmNoX2RhdGVfbG9jYWwiOiIyMDE4LTEyLTMxVDE5OjAwOjAwLTA1OjAwIiwiaXNfdGVudGF0aXZlIjp0cnVlLCJ0ZW50YXRpdmVfbWF4X3ByZWNpc2lvbiI6Im1vbnRoIiwicm9ja2V0Ijp7InJvY2tldF9pZCI6ImZhbGNvbjkiLCJyb2NrZXRfbmFtZSI6IkZhbGNvbiA5Iiwicm9ja2V0X3R5cGUiOiJGVCIsImZpcnN0X3N0YWdlIjp7ImNvcmVzIjpbeyJjb3JlX3NlcmlhbCI6bnVsbCwiZmxpZ2h0IjpudWxsLCJibG9jayI6NSwiZ3JpZGZpbnMiOm51bGwsImxlZ3MiOm51bGwsInJldXNlZCI6ZmFsc2UsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOm51bGwsImxhbmRpbmdfdHlwZSI6bnVsbCwibGFuZGluZ192ZWhpY2xlIjpudWxsfV19LCJzZWNvbmRfc3RhZ2UiOnsiYmxvY2siOjUsInBheWxvYWRzIjpbeyJwYXlsb2FkX2lkIjoiUFNOLTYiLCJub3JhZF9pZCI6W10sInJldXNlZCI6ZmFsc2UsImN1c3RvbWVycyI6WyJQYXNpZmlrIFNhdGVsaXQgTnVzYW50YXJhIl0sIm5hdGlvbmFsaXR5IjoiSW5kb25lc2lhIiwibWFudWZhY3R1cmVyIjoiU1NMIiwicGF5bG9hZF90eXBlIjoiU2F0ZWxsaXRlIiwicGF5bG9hZF9tYXNzX2tnIjo1MDAwLCJwYXlsb2FkX21hc3NfbGJzIjoxMTAyMy4xMSwib3JiaXQiOiJHVE8iLCJvcmJpdF9wYXJhbXMiOnsicmVmZXJlbmNlX3N5c3RlbSI6bnVsbCwicmVnaW1lIjpudWxsLCJsb25naXR1ZGUiOm51bGwsInNlbWlfbWFqb3JfYXhpc19rbSI6bnVsbCwiZWNjZW50cmljaXR5IjpudWxsLCJwZXJpYXBzaXNfa20iOm51bGwsImFwb2Fwc2lzX2ttIjpudWxsLCJpbmNsaW5hdGlvbl9kZWciOm51bGwsInBlcmlvZF9taW4iOm51bGwsImxpZmVzcGFuX3llYXJzIjoxNSwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfX0seyJwYXlsb2FkX2lkIjoiR1RPLTEiLCJub3JhZF9pZCI6W10sInJldXNlZCI6ZmFsc2UsImN1c3RvbWVycyI6WyJTcGFjZWZsaWdodCBJbmR1c3RyaWVzLCBJbmMiXSwibmF0aW9uYWxpdHkiOiJVbml0ZWQgU3RhdGVzIiwibWFudWZhY3R1cmVyIjpudWxsLCJwYXlsb2FkX3R5cGUiOm51bGwsInBheWxvYWRfbWFzc19rZyI6bnVsbCwicGF5bG9hZF9tYXNzX2xicyI6bnVsbCwib3JiaXQiOiJHVE8iLCJvcmJpdF9wYXJhbXMiOnsicmVmZXJlbmNlX3N5c3RlbSI6Imdlb2NlbnRyaWMiLCJyZWdpbWUiOiJnZW9zdGF0aW9uYXJ5IiwibG9uZ2l0dWRlIjpudWxsLCJzZW1pX21ham9yX2F4aXNfa20iOm51bGwsImVjY2VudHJpY2l0eSI6bnVsbCwicGVyaWFwc2lzX2ttIjpudWxsLCJhcG9hcHNpc19rbSI6bnVsbCwiaW5jbGluYXRpb25fZGVnIjpudWxsLCJwZXJpb2RfbWluIjpudWxsLCJsaWZlc3Bhbl95ZWFycyI6bnVsbCwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfX0seyJwYXlsb2FkX2lkIjoiU3BhY2VJTCBNb29uIExhbmRlciIsIm5vcmFkX2lkIjpbXSwicmV1c2VkIjpmYWxzZSwiY3VzdG9tZXJzIjpbIlNwYWNlSUwiXSwibmF0aW9uYWxpdHkiOiJJc3JhZWwiLCJtYW51ZmFjdHVyZXIiOiJTU0wiLCJwYXlsb2FkX3R5cGUiOiJMYW5kZXIiLCJwYXlsb2FkX21hc3Nfa2ciOjU4NSwicGF5bG9hZF9tYXNzX2xicyI6MTI4OS43LCJvcmJpdCI6IkdUTyIsIm9yYml0X3BhcmFtcyI6eyJyZWZlcmVuY2Vfc3lzdGVtIjpudWxsLCJyZWdpbWUiOm51bGwsImxvbmdpdHVkZSI6bnVsbCwic2VtaV9tYWpvcl9heGlzX2ttIjpudWxsLCJlY2NlbnRyaWNpdHkiOm51bGwsInBlcmlhcHNpc19rbSI6bnVsbCwiYXBvYXBzaXNfa20iOm51bGwsImluY2xpbmF0aW9uX2RlZyI6bnVsbCwicGVyaW9kX21pbiI6bnVsbCwibGlmZXNwYW5feWVhcnMiOjAuMDA1NDc5NDUsImVwb2NoIjpudWxsLCJtZWFuX21vdGlvbiI6bnVsbCwicmFhbiI6bnVsbCwiYXJnX29mX3BlcmljZW50ZXIiOm51bGwsIm1lYW5fYW5vbWFseSI6bnVsbH19XX0sImZhaXJpbmdzIjp7InJldXNlZCI6ZmFsc2UsInJlY292ZXJ5X2F0dGVtcHQiOmZhbHNlLCJyZWNvdmVyZWQiOmZhbHNlLCJzaGlwIjpudWxsfX0sInNoaXBzIjpbXSwidGVsZW1ldHJ5Ijp7ImZsaWdodF9jbHViIjpudWxsfSwibGF1bmNoX3NpdGUiOnsic2l0ZV9pZCI6ImNjYWZzX3NsY180MCIsInNpdGVfbmFtZSI6IkNDQUZTIFNMQyA0MCIsInNpdGVfbmFtZV9sb25nIjoiQ2FwZSBDYW5hdmVyYWwgQWlyIEZvcmNlIFN0YXRpb24gU3BhY2UgTGF1bmNoIENvbXBsZXggNDAifSwibGF1bmNoX3N1Y2Nlc3MiOm51bGwsImxpbmtzIjp7Im1pc3Npb25fcGF0Y2giOm51bGwsIm1pc3Npb25fcGF0Y2hfc21hbGwiOm51bGwsInJlZGRpdF9jYW1wYWlnbiI6bnVsbCwicmVkZGl0X2xhdW5jaCI6bnVsbCwicmVkZGl0X3JlY292ZXJ5IjpudWxsLCJyZWRkaXRfbWVkaWEiOm51bGwsInByZXNza2l0IjpudWxsLCJhcnRpY2xlX2xpbmsiOm51bGwsIndpa2lwZWRpYSI6bnVsbCwidmlkZW9fbGluayI6bnVsbCwiZmxpY2tyX2ltYWdlcyI6W119LCJkZXRhaWxzIjpudWxsLCJ1cGNvbWluZyI6dHJ1ZSwic3RhdGljX2ZpcmVfZGF0ZV91dGMiOm51bGwsInN0YXRpY19maXJlX2RhdGVfdW5peCI6bnVsbH0seyJmbGlnaHRfbnVtYmVyIjo3NywibWlzc2lvbl9uYW1lIjoiQXJhYlNhdCA2QSIsIm1pc3Npb25faWQiOltdLCJsYXVuY2hfeWVhciI6IjIwMTkiLCJsYXVuY2hfZGF0ZV91bml4IjoxNTQ2MzAwODAwLCJsYXVuY2hfZGF0ZV91dGMiOiIyMDE5LTAxLTAxVDAwOjAwOjAwLjAwMFoiLCJsYXVuY2hfZGF0ZV9sb2NhbCI6IjIwMTgtMTItMzFUMTk6MDA6MDAtMDU6MDAiLCJpc190ZW50YXRpdmUiOnRydWUsInRlbnRhdGl2ZV9tYXhfcHJlY2lzaW9uIjoibW9udGgiLCJyb2NrZXQiOnsicm9ja2V0X2lkIjoiZmFsY29uaGVhdnkiLCJyb2NrZXRfbmFtZSI6IkZhbGNvbiBIZWF2eSIsInJvY2tldF90eXBlIjoiRlQiLCJmaXJzdF9zdGFnZSI6eyJjb3JlcyI6W3siY29yZV9zZXJpYWwiOm51bGwsImZsaWdodCI6bnVsbCwiYmxvY2siOm51bGwsImdyaWRmaW5zIjpudWxsLCJsZWdzIjpudWxsLCJyZXVzZWQiOm51bGwsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOm51bGwsImxhbmRpbmdfdHlwZSI6bnVsbCwibGFuZGluZ192ZWhpY2xlIjpudWxsfSx7ImNvcmVfc2VyaWFsIjpudWxsLCJmbGlnaHQiOm51bGwsImJsb2NrIjpudWxsLCJncmlkZmlucyI6bnVsbCwibGVncyI6bnVsbCwicmV1c2VkIjpudWxsLCJsYW5kX3N1Y2Nlc3MiOm51bGwsImxhbmRpbmdfaW50ZW50IjpudWxsLCJsYW5kaW5nX3R5cGUiOm51bGwsImxhbmRpbmdfdmVoaWNsZSI6bnVsbH0seyJjb3JlX3NlcmlhbCI6bnVsbCwiZmxpZ2h0IjpudWxsLCJibG9jayI6bnVsbCwiZ3JpZGZpbnMiOm51bGwsImxlZ3MiOm51bGwsInJldXNlZCI6bnVsbCwibGFuZF9zdWNjZXNzIjpudWxsLCJsYW5kaW5nX2ludGVudCI6bnVsbCwibGFuZGluZ190eXBlIjpudWxsLCJsYW5kaW5nX3ZlaGljbGUiOm51bGx9XX0sInNlY29uZF9zdGFnZSI6eyJibG9jayI6bnVsbCwicGF5bG9hZHMiOlt7InBheWxvYWRfaWQiOiJBcmFiU2F0IDZBIiwibm9yYWRfaWQiOltdLCJyZXVzZWQiOmZhbHNlLCJjdXN0b21lcnMiOlsiQXJhYnNhdCJdLCJuYXRpb25hbGl0eSI6IlNhdWRpIEFyYWJpYSIsIm1hbnVmYWN0dXJlciI6IkxvY2toZWVkIE1hcnRpbiIsInBheWxvYWRfdHlwZSI6IlNhdGVsbGl0ZSIsInBheWxvYWRfbWFzc19rZyI6NjAwMCwicGF5bG9hZF9tYXNzX2xicyI6MTMyMjcuNzQsIm9yYml0IjoiR1RPIiwib3JiaXRfcGFyYW1zIjp7InJlZmVyZW5jZV9zeXN0ZW0iOiJnZW9jZW50cmljIiwicmVnaW1lIjoiZ2Vvc3RhdGlvbmFyeSIsImxvbmdpdHVkZSI6MzAuNSwic2VtaV9tYWpvcl9heGlzX2ttIjpudWxsLCJlY2NlbnRyaWNpdHkiOm51bGwsInBlcmlhcHNpc19rbSI6bnVsbCwiYXBvYXBzaXNfa20iOm51bGwsImluY2xpbmF0aW9uX2RlZyI6bnVsbCwicGVyaW9kX21pbiI6bnVsbCwibGlmZXNwYW5feWVhcnMiOjE1LCJlcG9jaCI6bnVsbCwibWVhbl9tb3Rpb24iOm51bGwsInJhYW4iOm51bGwsImFyZ19vZl9wZXJpY2VudGVyIjpudWxsLCJtZWFuX2Fub21hbHkiOm51bGx9fV19LCJmYWlyaW5ncyI6bnVsbH0sInNoaXBzIjpbXSwidGVsZW1ldHJ5Ijp7ImZsaWdodF9jbHViIjpudWxsfSwibGF1bmNoX3NpdGUiOnsic2l0ZV9pZCI6ImtzY19sY18zOWEiLCJzaXRlX25hbWUiOiJLU0MgTEMgMzlBIiwic2l0ZV9uYW1lX2xvbmciOiJLZW5uZWR5IFNwYWNlIENlbnRlciBIaXN0b3JpYyBMYXVuY2ggQ29tcGxleCAzOUEifSwibGF1bmNoX3N1Y2Nlc3MiOm51bGwsImxpbmtzIjp7Im1pc3Npb25fcGF0Y2giOm51bGwsIm1pc3Npb25fcGF0Y2hfc21hbGwiOm51bGwsInJlZGRpdF9jYW1wYWlnbiI6bnVsbCwicmVkZGl0X2xhdW5jaCI6bnVsbCwicmVkZGl0X3JlY292ZXJ5IjpudWxsLCJyZWRkaXRfbWVkaWEiOm51bGwsInByZXNza2l0IjpudWxsLCJhcnRpY2xlX2xpbmsiOm51bGwsIndpa2lwZWRpYSI6bnVsbCwidmlkZW9fbGluayI6bnVsbCwiZmxpY2tyX2ltYWdlcyI6W119LCJkZXRhaWxzIjpudWxsLCJ1cGNvbWluZyI6dHJ1ZSwic3RhdGljX2ZpcmVfZGF0ZV91dGMiOm51bGwsInN0YXRpY19maXJlX2RhdGVfdW5peCI6bnVsbH0seyJmbGlnaHRfbnVtYmVyIjo3OCwibWlzc2lvbl9uYW1lIjoiQ1JTLTE3IiwibWlzc2lvbl9pZCI6WyJFRTg2Rjc0Il0sImxhdW5jaF95ZWFyIjoiMjAxOSIsImxhdW5jaF9kYXRlX3VuaXgiOjE1NTAzNjE2MDAsImxhdW5jaF9kYXRlX3V0YyI6IjIwMTktMDItMTdUMDA6MDA6MDAuMDAwWiIsImxhdW5jaF9kYXRlX2xvY2FsIjoiMjAxOS0wMi0xNlQxOTowMDowMC0wNTowMCIsImlzX3RlbnRhdGl2ZSI6dHJ1ZSwidGVudGF0aXZlX21heF9wcmVjaXNpb24iOiJkYXkiLCJyb2NrZXQiOnsicm9ja2V0X2lkIjoiZmFsY29uOSIsInJvY2tldF9uYW1lIjoiRmFsY29uIDkiLCJyb2NrZXRfdHlwZSI6IkZUIiwiZmlyc3Rfc3RhZ2UiOnsiY29yZXMiOlt7ImNvcmVfc2VyaWFsIjpudWxsLCJmbGlnaHQiOm51bGwsImJsb2NrIjpudWxsLCJncmlkZmlucyI6bnVsbCwibGVncyI6bnVsbCwicmV1c2VkIjp0cnVlLCJsYW5kX3N1Y2Nlc3MiOm51bGwsImxhbmRpbmdfaW50ZW50IjpudWxsLCJsYW5kaW5nX3R5cGUiOm51bGwsImxhbmRpbmdfdmVoaWNsZSI6bnVsbH1dfSwic2Vjb25kX3N0YWdlIjp7ImJsb2NrIjpudWxsLCJwYXlsb2FkcyI6W3sicGF5bG9hZF9pZCI6IkNSUy0xNyIsIm5vcmFkX2lkIjpbXSwiY2FwX3NlcmlhbCI6bnVsbCwicmV1c2VkIjp0cnVlLCJjdXN0b21lcnMiOlsiTkFTQSAoQ1JTKSJdLCJuYXRpb25hbGl0eSI6IlVuaXRlZCBTdGF0ZXMiLCJtYW51ZmFjdHVyZXIiOiJTcGFjZVgiLCJwYXlsb2FkX3R5cGUiOiJEcmFnb24gMS4xIiwicGF5bG9hZF9tYXNzX2tnIjpudWxsLCJwYXlsb2FkX21hc3NfbGJzIjpudWxsLCJvcmJpdCI6IklTUyIsIm9yYml0X3BhcmFtcyI6eyJyZWZlcmVuY2Vfc3lzdGVtIjoiZ2VvY2VudHJpYyIsInJlZ2ltZSI6Imxvdy1lYXJ0aCIsImxvbmdpdHVkZSI6bnVsbCwic2VtaV9tYWpvcl9heGlzX2ttIjpudWxsLCJlY2NlbnRyaWNpdHkiOm51bGwsInBlcmlhcHNpc19rbSI6bnVsbCwiYXBvYXBzaXNfa20iOm51bGwsImluY2xpbmF0aW9uX2RlZyI6bnVsbCwicGVyaW9kX21pbiI6bnVsbCwibGlmZXNwYW5feWVhcnMiOm51bGwsImVwb2NoIjpudWxsLCJtZWFuX21vdGlvbiI6bnVsbCwicmFhbiI6bnVsbCwiYXJnX29mX3BlcmljZW50ZXIiOm51bGwsIm1lYW5fYW5vbWFseSI6bnVsbH0sIm1hc3NfcmV0dXJuZWRfa2ciOm51bGwsIm1hc3NfcmV0dXJuZWRfbGJzIjpudWxsLCJmbGlnaHRfdGltZV9zZWMiOm51bGwsImNhcmdvX21hbmlmZXN0IjpudWxsfV19LCJmYWlyaW5ncyI6eyJyZXVzZWQiOmZhbHNlLCJyZWNvdmVyeV9hdHRlbXB0IjpudWxsLCJyZWNvdmVyZWQiOm51bGwsInNoaXAiOm51bGx9fSwic2hpcHMiOltdLCJ0ZWxlbWV0cnkiOnsiZmxpZ2h0X2NsdWIiOm51bGx9LCJsYXVuY2hfc2l0ZSI6eyJzaXRlX2lkIjoiY2NhZnNfc2xjXzQwIiwic2l0ZV9uYW1lIjoiQ0NBRlMgU0xDIDQwIiwic2l0ZV9uYW1lX2xvbmciOiJDYXBlIENhbmF2ZXJhbCBBaXIgRm9yY2UgU3RhdGlvbiBTcGFjZSBMYXVuY2ggQ29tcGxleCA0MCJ9LCJsYXVuY2hfc3VjY2VzcyI6bnVsbCwibGlua3MiOnsibWlzc2lvbl9wYXRjaCI6bnVsbCwibWlzc2lvbl9wYXRjaF9zbWFsbCI6bnVsbCwicmVkZGl0X2NhbXBhaWduIjpudWxsLCJyZWRkaXRfbGF1bmNoIjpudWxsLCJyZWRkaXRfcmVjb3ZlcnkiOm51bGwsInJlZGRpdF9tZWRpYSI6bnVsbCwicHJlc3NraXQiOm51bGwsImFydGljbGVfbGluayI6bnVsbCwid2lraXBlZGlhIjpudWxsLCJ2aWRlb19saW5rIjpudWxsLCJmbGlja3JfaW1hZ2VzIjpbXX0sImRldGFpbHMiOm51bGwsInVwY29taW5nIjp0cnVlLCJzdGF0aWNfZmlyZV9kYXRlX3V0YyI6bnVsbCwic3RhdGljX2ZpcmVfZGF0ZV91bml4IjpudWxsfSx7ImZsaWdodF9udW1iZXIiOjc5LCJtaXNzaW9uX25hbWUiOiJSQURBUlNBVCBDLTEsIEMtMiwgQy0zIiwibWlzc2lvbl9pZCI6W10sImxhdW5jaF95ZWFyIjoiMjAxOSIsImxhdW5jaF9kYXRlX3VuaXgiOjE1NTA0NDgwMDAsImxhdW5jaF9kYXRlX3V0YyI6IjIwMTktMDItMThUMDA6MDA6MDAuMDAwWiIsImxhdW5jaF9kYXRlX2xvY2FsIjoiMjAxOS0wMi0xN1QxNjowMDowMC0wODowMCIsImlzX3RlbnRhdGl2ZSI6dHJ1ZSwidGVudGF0aXZlX21heF9wcmVjaXNpb24iOiJkYXkiLCJyb2NrZXQiOnsicm9ja2V0X2lkIjoiZmFsY29uOSIsInJvY2tldF9uYW1lIjoiRmFsY29uIDkiLCJyb2NrZXRfdHlwZSI6IkZUIiwiZmlyc3Rfc3RhZ2UiOnsiY29yZXMiOlt7ImNvcmVfc2VyaWFsIjpudWxsLCJmbGlnaHQiOm51bGwsImJsb2NrIjpudWxsLCJncmlkZmlucyI6bnVsbCwibGVncyI6bnVsbCwicmV1c2VkIjp0cnVlLCJsYW5kX3N1Y2Nlc3MiOm51bGwsImxhbmRpbmdfaW50ZW50IjpudWxsLCJsYW5kaW5nX3R5cGUiOm51bGwsImxhbmRpbmdfdmVoaWNsZSI6bnVsbH1dfSwic2Vjb25kX3N0YWdlIjp7ImJsb2NrIjpudWxsLCJwYXlsb2FkcyI6W3sicGF5bG9hZF9pZCI6IlJBREFSU0FUIEMtMSwgQy0yLCBDLTMiLCJub3JhZF9pZCI6W10sInJldXNlZCI6ZmFsc2UsImN1c3RvbWVycyI6WyJDU0EiXSwibmF0aW9uYWxpdHkiOiJDYW5hZGEiLCJtYW51ZmFjdHVyZXIiOiJNYXhhciBUZWNobm9sb2dpZXMiLCJwYXlsb2FkX3R5cGUiOiJTYXRlbGxpdGUiLCJwYXlsb2FkX21hc3Nfa2ciOjE0MjUsInBheWxvYWRfbWFzc19sYnMiOjMxNDEuNTksIm9yYml0IjoiU1NPIiwib3JiaXRfcGFyYW1zIjp7InJlZmVyZW5jZV9zeXN0ZW0iOiJnZW9jZW50cmljIiwicmVnaW1lIjoic3VuLXN5bmNocm9ub3VzIiwibG9uZ2l0dWRlIjpudWxsLCJzZW1pX21ham9yX2F4aXNfa20iOm51bGwsImVjY2VudHJpY2l0eSI6bnVsbCwicGVyaWFwc2lzX2ttIjpudWxsLCJhcG9hcHNpc19rbSI6bnVsbCwiaW5jbGluYXRpb25fZGVnIjpudWxsLCJwZXJpb2RfbWluIjpudWxsLCJsaWZlc3Bhbl95ZWFycyI6bnVsbCwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfX1dfSwiZmFpcmluZ3MiOnsicmV1c2VkIjpmYWxzZSwicmVjb3ZlcnlfYXR0ZW1wdCI6bnVsbCwicmVjb3ZlcmVkIjpudWxsLCJzaGlwIjpudWxsfX0sInNoaXBzIjpbXSwidGVsZW1ldHJ5Ijp7ImZsaWdodF9jbHViIjpudWxsfSwibGF1bmNoX3NpdGUiOnsic2l0ZV9pZCI6InZhZmJfc2xjXzRlIiwic2l0ZV9uYW1lIjoiVkFGQiBTTEMgNEUiLCJzaXRlX25hbWVfbG9uZyI6IlZhbmRlbmJlcmcgQWlyIEZvcmNlIEJhc2UgU3BhY2UgTGF1bmNoIENvbXBsZXggNEUifSwibGF1bmNoX3N1Y2Nlc3MiOm51bGwsImxpbmtzIjp7Im1pc3Npb25fcGF0Y2giOm51bGwsIm1pc3Npb25fcGF0Y2hfc21hbGwiOm51bGwsInJlZGRpdF9jYW1wYWlnbiI6bnVsbCwicmVkZGl0X2xhdW5jaCI6bnVsbCwicmVkZGl0X3JlY292ZXJ5IjpudWxsLCJyZWRkaXRfbWVkaWEiOm51bGwsInByZXNza2l0IjpudWxsLCJhcnRpY2xlX2xpbmsiOm51bGwsIndpa2lwZWRpYSI6bnVsbCwidmlkZW9fbGluayI6bnVsbCwiZmxpY2tyX2ltYWdlcyI6W119LCJkZXRhaWxzIjpudWxsLCJ1cGNvbWluZyI6dHJ1ZSwic3RhdGljX2ZpcmVfZGF0ZV91dGMiOm51bGwsInN0YXRpY19maXJlX2RhdGVfdW5peCI6bnVsbH0seyJmbGlnaHRfbnVtYmVyIjo4MCwibWlzc2lvbl9uYW1lIjoiU1RQLTIiLCJtaXNzaW9uX2lkIjpbXSwibGF1bmNoX3llYXIiOiIyMDE5IiwibGF1bmNoX2RhdGVfdW5peCI6MTU1MTM5ODQwMCwibGF1bmNoX2RhdGVfdXRjIjoiMjAxOS0wMy0wMVQwMDowMDowMC4wMDBaIiwibGF1bmNoX2RhdGVfbG9jYWwiOiIyMDE5LTAyLTI4VDE5OjAwOjAwLTA1OjAwIiwiaXNfdGVudGF0aXZlIjp0cnVlLCJ0ZW50YXRpdmVfbWF4X3ByZWNpc2lvbiI6Im1vbnRoIiwicm9ja2V0Ijp7InJvY2tldF9pZCI6ImZhbGNvbmhlYXZ5Iiwicm9ja2V0X25hbWUiOiJGYWxjb24gSGVhdnkiLCJyb2NrZXRfdHlwZSI6IkZUIiwiZmlyc3Rfc3RhZ2UiOnsiY29yZXMiOlt7ImNvcmVfc2VyaWFsIjpudWxsLCJmbGlnaHQiOm51bGwsImJsb2NrIjpudWxsLCJncmlkZmlucyI6bnVsbCwibGVncyI6bnVsbCwicmV1c2VkIjpudWxsLCJsYW5kX3N1Y2Nlc3MiOm51bGwsImxhbmRpbmdfaW50ZW50IjpudWxsLCJsYW5kaW5nX3R5cGUiOm51bGwsImxhbmRpbmdfdmVoaWNsZSI6bnVsbH0seyJjb3JlX3NlcmlhbCI6bnVsbCwiZmxpZ2h0IjpudWxsLCJibG9jayI6bnVsbCwiZ3JpZGZpbnMiOm51bGwsImxlZ3MiOm51bGwsInJldXNlZCI6bnVsbCwibGFuZF9zdWNjZXNzIjpudWxsLCJsYW5kaW5nX2ludGVudCI6bnVsbCwibGFuZGluZ190eXBlIjpudWxsLCJsYW5kaW5nX3ZlaGljbGUiOm51bGx9LHsiY29yZV9zZXJpYWwiOm51bGwsImZsaWdodCI6bnVsbCwiYmxvY2siOm51bGwsImdyaWRmaW5zIjpudWxsLCJsZWdzIjpudWxsLCJyZXVzZWQiOm51bGwsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOm51bGwsImxhbmRpbmdfdHlwZSI6bnVsbCwibGFuZGluZ192ZWhpY2xlIjpudWxsfV19LCJzZWNvbmRfc3RhZ2UiOnsiYmxvY2siOm51bGwsInBheWxvYWRzIjpbeyJwYXlsb2FkX2lkIjoiU1RQLTIiLCJub3JhZF9pZCI6W10sInJldXNlZCI6ZmFsc2UsImN1c3RvbWVycyI6WyJVU0FGIl0sIm5hdGlvbmFsaXR5IjoiVW5pdGVkIFN0YXRlcyIsIm1hbnVmYWN0dXJlciI6bnVsbCwicGF5bG9hZF90eXBlIjoiU2F0ZWxsaXRlIiwicGF5bG9hZF9tYXNzX2tnIjpudWxsLCJwYXlsb2FkX21hc3NfbGJzIjpudWxsLCJvcmJpdCI6IkdUTyIsIm9yYml0X3BhcmFtcyI6eyJyZWZlcmVuY2Vfc3lzdGVtIjoiZ2VvY2VudHJpYyIsInJlZ2ltZSI6Imxvdy1lYXJ0aCIsImxvbmdpdHVkZSI6bnVsbCwic2VtaV9tYWpvcl9heGlzX2ttIjpudWxsLCJlY2NlbnRyaWNpdHkiOm51bGwsInBlcmlhcHNpc19rbSI6bnVsbCwiYXBvYXBzaXNfa20iOm51bGwsImluY2xpbmF0aW9uX2RlZyI6bnVsbCwicGVyaW9kX21pbiI6bnVsbCwibGlmZXNwYW5feWVhcnMiOm51bGwsImVwb2NoIjpudWxsLCJtZWFuX21vdGlvbiI6bnVsbCwicmFhbiI6bnVsbCwiYXJnX29mX3BlcmljZW50ZXIiOm51bGwsIm1lYW5fYW5vbWFseSI6bnVsbH19XX0sImZhaXJpbmdzIjpudWxsfSwic2hpcHMiOltdLCJ0ZWxlbWV0cnkiOnsiZmxpZ2h0X2NsdWIiOm51bGx9LCJsYXVuY2hfc2l0ZSI6eyJzaXRlX2lkIjoia3NjX2xjXzM5YSIsInNpdGVfbmFtZSI6IktTQyBMQyAzOUEiLCJzaXRlX25hbWVfbG9uZyI6Iktlbm5lZHkgU3BhY2UgQ2VudGVyIEhpc3RvcmljIExhdW5jaCBDb21wbGV4IDM5QSJ9LCJsYXVuY2hfc3VjY2VzcyI6bnVsbCwibGlua3MiOnsibWlzc2lvbl9wYXRjaCI6bnVsbCwibWlzc2lvbl9wYXRjaF9zbWFsbCI6bnVsbCwicmVkZGl0X2NhbXBhaWduIjpudWxsLCJyZWRkaXRfbGF1bmNoIjpudWxsLCJyZWRkaXRfcmVjb3ZlcnkiOm51bGwsInJlZGRpdF9tZWRpYSI6bnVsbCwicHJlc3NraXQiOm51bGwsImFydGljbGVfbGluayI6bnVsbCwid2lraXBlZGlhIjpudWxsLCJ2aWRlb19saW5rIjpudWxsLCJmbGlja3JfaW1hZ2VzIjpbXX0sImRldGFpbHMiOm51bGwsInVwY29taW5nIjp0cnVlLCJzdGF0aWNfZmlyZV9kYXRlX3V0YyI6bnVsbCwic3RhdGljX2ZpcmVfZGF0ZV91bml4IjpudWxsfSx7ImZsaWdodF9udW1iZXIiOjgxLCJtaXNzaW9uX25hbWUiOiJTQVJhaCAxIiwibWlzc2lvbl9pZCI6W10sImxhdW5jaF95ZWFyIjoiMjAxOSIsImxhdW5jaF9kYXRlX3VuaXgiOjE1NDYzMDA4MDAsImxhdW5jaF9kYXRlX3V0YyI6IjIwMTktMDEtMDFUMDA6MDA6MDAuMDAwWiIsImxhdW5jaF9kYXRlX2xvY2FsIjoiMjAxOC0xMi0zMVQxNjowMDowMC0wODowMCIsImlzX3RlbnRhdGl2ZSI6dHJ1ZSwidGVudGF0aXZlX21heF9wcmVjaXNpb24iOiJxdWFydGVyIiwicm9ja2V0Ijp7InJvY2tldF9pZCI6ImZhbGNvbjkiLCJyb2NrZXRfbmFtZSI6IkZhbGNvbiA5Iiwicm9ja2V0X3R5cGUiOiJGVCIsImZpcnN0X3N0YWdlIjp7ImNvcmVzIjpbeyJjb3JlX3NlcmlhbCI6bnVsbCwiZmxpZ2h0IjpudWxsLCJibG9jayI6bnVsbCwiZ3JpZGZpbnMiOm51bGwsImxlZ3MiOm51bGwsInJldXNlZCI6bnVsbCwibGFuZF9zdWNjZXNzIjpudWxsLCJsYW5kaW5nX2ludGVudCI6bnVsbCwibGFuZGluZ190eXBlIjpudWxsLCJsYW5kaW5nX3ZlaGljbGUiOm51bGx9XX0sInNlY29uZF9zdGFnZSI6eyJibG9jayI6bnVsbCwicGF5bG9hZHMiOlt7InBheWxvYWRfaWQiOiJTQVJhaCAxIiwibm9yYWRfaWQiOltdLCJyZXVzZWQiOmZhbHNlLCJjdXN0b21lcnMiOlsiT0hCLVN5c3RlbSBBRyAiXSwibmF0aW9uYWxpdHkiOiJHZXJtYW55IiwibWFudWZhY3R1cmVyIjpudWxsLCJwYXlsb2FkX3R5cGUiOiJTYXRlbGxpdGUiLCJwYXlsb2FkX21hc3Nfa2ciOjIyMDAsInBheWxvYWRfbWFzc19sYnMiOjQ4NTAuMTcsIm9yYml0IjoiU1NPIiwib3JiaXRfcGFyYW1zIjp7InJlZmVyZW5jZV9zeXN0ZW0iOiJnZW9jZW50cmljIiwicmVnaW1lIjoic3VuLXN5bmNocm9ub3VzIiwibG9uZ2l0dWRlIjpudWxsLCJzZW1pX21ham9yX2F4aXNfa20iOm51bGwsImVjY2VudHJpY2l0eSI6bnVsbCwicGVyaWFwc2lzX2ttIjpudWxsLCJhcG9hcHNpc19rbSI6bnVsbCwiaW5jbGluYXRpb25fZGVnIjpudWxsLCJwZXJpb2RfbWluIjpudWxsLCJsaWZlc3Bhbl95ZWFycyI6bnVsbCwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfX1dfSwiZmFpcmluZ3MiOnsicmV1c2VkIjpmYWxzZSwicmVjb3ZlcnlfYXR0ZW1wdCI6bnVsbCwicmVjb3ZlcmVkIjpudWxsLCJzaGlwIjpudWxsfX0sInNoaXBzIjpbXSwidGVsZW1ldHJ5Ijp7ImZsaWdodF9jbHViIjpudWxsfSwibGF1bmNoX3NpdGUiOnsic2l0ZV9pZCI6InZhZmJfc2xjXzRlIiwic2l0ZV9uYW1lIjoiVkFGQiBTTEMgNEUiLCJzaXRlX25hbWVfbG9uZyI6IlZhbmRlbmJlcmcgQWlyIEZvcmNlIEJhc2UgU3BhY2UgTGF1bmNoIENvbXBsZXggNEUifSwibGF1bmNoX3N1Y2Nlc3MiOm51bGwsImxpbmtzIjp7Im1pc3Npb25fcGF0Y2giOm51bGwsIm1pc3Npb25fcGF0Y2hfc21hbGwiOm51bGwsInJlZGRpdF9jYW1wYWlnbiI6bnVsbCwicmVkZGl0X2xhdW5jaCI6bnVsbCwicmVkZGl0X3JlY292ZXJ5IjpudWxsLCJyZWRkaXRfbWVkaWEiOm51bGwsInByZXNza2l0IjpudWxsLCJhcnRpY2xlX2xpbmsiOm51bGwsIndpa2lwZWRpYSI6bnVsbCwidmlkZW9fbGluayI6bnVsbCwiZmxpY2tyX2ltYWdlcyI6W119LCJkZXRhaWxzIjpudWxsLCJ1cGNvbWluZyI6dHJ1ZSwic3RhdGljX2ZpcmVfZGF0ZV91dGMiOm51bGwsInN0YXRpY19maXJlX2RhdGVfdW5peCI6bnVsbH0seyJmbGlnaHRfbnVtYmVyIjo4MiwibWlzc2lvbl9uYW1lIjoiQ1JTLTE4IiwibWlzc2lvbl9pZCI6WyJFRTg2Rjc0Il0sImxhdW5jaF95ZWFyIjoiMjAxOSIsImxhdW5jaF9kYXRlX3VuaXgiOjE1NTcxODcyMDAsImxhdW5jaF9kYXRlX3V0YyI6IjIwMTktMDUtMDdUMDA6MDA6MDAuMDAwWiIsImxhdW5jaF9kYXRlX2xvY2FsIjoiMjAxOS0wNS0wNlQyMDowMDowMC0wNDowMCIsImlzX3RlbnRhdGl2ZSI6dHJ1ZSwidGVudGF0aXZlX21heF9wcmVjaXNpb24iOiJkYXkiLCJyb2NrZXQiOnsicm9ja2V0X2lkIjoiZmFsY29uOSIsInJvY2tldF9uYW1lIjoiRmFsY29uIDkiLCJyb2NrZXRfdHlwZSI6IkZUIiwiZmlyc3Rfc3RhZ2UiOnsiY29yZXMiOlt7ImNvcmVfc2VyaWFsIjpudWxsLCJmbGlnaHQiOm51bGwsImJsb2NrIjpudWxsLCJncmlkZmlucyI6bnVsbCwibGVncyI6bnVsbCwicmV1c2VkIjp0cnVlLCJsYW5kX3N1Y2Nlc3MiOm51bGwsImxhbmRpbmdfaW50ZW50IjpudWxsLCJsYW5kaW5nX3R5cGUiOm51bGwsImxhbmRpbmdfdmVoaWNsZSI6bnVsbH1dfSwic2Vjb25kX3N0YWdlIjp7ImJsb2NrIjpudWxsLCJwYXlsb2FkcyI6W3sicGF5bG9hZF9pZCI6IkNSUy0xOCIsIm5vcmFkX2lkIjpbXSwiY2FwX3NlcmlhbCI6bnVsbCwicmV1c2VkIjp0cnVlLCJjdXN0b21lcnMiOlsiTkFTQSAoQ1JTKSJdLCJuYXRpb25hbGl0eSI6IlVuaXRlZCBTdGF0ZXMiLCJtYW51ZmFjdHVyZXIiOiJTcGFjZVgiLCJwYXlsb2FkX3R5cGUiOiJEcmFnb24gMS4xIiwicGF5bG9hZF9tYXNzX2tnIjpudWxsLCJwYXlsb2FkX21hc3NfbGJzIjpudWxsLCJvcmJpdCI6IklTUyIsIm9yYml0X3BhcmFtcyI6eyJyZWZlcmVuY2Vfc3lzdGVtIjoiZ2VvY2VudHJpYyIsInJlZ2ltZSI6Imxvdy1lYXJ0aCIsImxvbmdpdHVkZSI6bnVsbCwic2VtaV9tYWpvcl9heGlzX2ttIjpudWxsLCJlY2NlbnRyaWNpdHkiOm51bGwsInBlcmlhcHNpc19rbSI6bnVsbCwiYXBvYXBzaXNfa20iOm51bGwsImluY2xpbmF0aW9uX2RlZyI6bnVsbCwicGVyaW9kX21pbiI6bnVsbCwibGlmZXNwYW5feWVhcnMiOm51bGwsImVwb2NoIjpudWxsLCJtZWFuX21vdGlvbiI6bnVsbCwicmFhbiI6bnVsbCwiYXJnX29mX3BlcmljZW50ZXIiOm51bGwsIm1lYW5fYW5vbWFseSI6bnVsbH0sIm1hc3NfcmV0dXJuZWRfa2ciOm51bGwsIm1hc3NfcmV0dXJuZWRfbGJzIjpudWxsLCJmbGlnaHRfdGltZV9zZWMiOm51bGwsImNhcmdvX21hbmlmZXN0IjpudWxsfV19LCJmYWlyaW5ncyI6bnVsbH0sInNoaXBzIjpbXSwidGVsZW1ldHJ5Ijp7ImZsaWdodF9jbHViIjpudWxsfSwibGF1bmNoX3NpdGUiOnsic2l0ZV9pZCI6ImtzY19sY18zOWEiLCJzaXRlX25hbWUiOiJLU0MgTEMgMzlBIiwic2l0ZV9uYW1lX2xvbmciOiJLZW5uZWR5IFNwYWNlIENlbnRlciBIaXN0b3JpYyBMYXVuY2ggQ29tcGxleCAzOUEifSwibGF1bmNoX3N1Y2Nlc3MiOm51bGwsImxpbmtzIjp7Im1pc3Npb25fcGF0Y2giOm51bGwsIm1pc3Npb25fcGF0Y2hfc21hbGwiOm51bGwsInJlZGRpdF9jYW1wYWlnbiI6bnVsbCwicmVkZGl0X2xhdW5jaCI6bnVsbCwicmVkZGl0X3JlY292ZXJ5IjpudWxsLCJyZWRkaXRfbWVkaWEiOm51bGwsInByZXNza2l0IjpudWxsLCJhcnRpY2xlX2xpbmsiOm51bGwsIndpa2lwZWRpYSI6bnVsbCwidmlkZW9fbGluayI6bnVsbCwiZmxpY2tyX2ltYWdlcyI6W119LCJkZXRhaWxzIjpudWxsLCJ1cGNvbWluZyI6dHJ1ZSwic3RhdGljX2ZpcmVfZGF0ZV91dGMiOm51bGwsInN0YXRpY19maXJlX2RhdGVfdW5peCI6bnVsbH0seyJmbGlnaHRfbnVtYmVyIjo4MywibWlzc2lvbl9uYW1lIjoiQ3JldyBEcmFnb24gSW4gRmxpZ2h0IEFib3J0IFRlc3QiLCJtaXNzaW9uX2lkIjpbIkVFODZGNzQiXSwibGF1bmNoX3llYXIiOiIyMDE5IiwibGF1bmNoX2RhdGVfdW5peCI6MTU1NjY2ODgwMCwibGF1bmNoX2RhdGVfdXRjIjoiMjAxOS0wNS0wMVQwMDowMDowMC4wMDBaIiwibGF1bmNoX2RhdGVfbG9jYWwiOiIyMDE5LTA0LTMwVDIwOjAwOjAwLTA0OjAwIiwiaXNfdGVudGF0aXZlIjp0cnVlLCJ0ZW50YXRpdmVfbWF4X3ByZWNpc2lvbiI6Im1vbnRoIiwicm9ja2V0Ijp7InJvY2tldF9pZCI6ImZhbGNvbjkiLCJyb2NrZXRfbmFtZSI6IkZhbGNvbiA5Iiwicm9ja2V0X3R5cGUiOiJGVCIsImZpcnN0X3N0YWdlIjp7ImNvcmVzIjpbeyJjb3JlX3NlcmlhbCI6bnVsbCwiZmxpZ2h0IjpudWxsLCJibG9jayI6bnVsbCwiZ3JpZGZpbnMiOm51bGwsImxlZ3MiOm51bGwsInJldXNlZCI6dHJ1ZSwibGFuZF9zdWNjZXNzIjpudWxsLCJsYW5kaW5nX2ludGVudCI6bnVsbCwibGFuZGluZ190eXBlIjpudWxsLCJsYW5kaW5nX3ZlaGljbGUiOm51bGx9XX0sInNlY29uZF9zdGFnZSI6eyJibG9jayI6bnVsbCwicGF5bG9hZHMiOlt7InBheWxvYWRfaWQiOiJDcmV3IERyYWdvbiBJbiBGbGlnaHQgQWJvcnQgVGVzdCIsIm5vcmFkX2lkIjpbXSwiY2FwX3NlcmlhbCI6bnVsbCwicmV1c2VkIjp0cnVlLCJjdXN0b21lcnMiOlsiTkFTQSAoQ0N0Q2FwKSJdLCJuYXRpb25hbGl0eSI6IlVuaXRlZCBTdGF0ZXMiLCJtYW51ZmFjdHVyZXIiOiJTcGFjZVgiLCJwYXlsb2FkX3R5cGUiOiJDcmV3IERyYWdvbiIsInBheWxvYWRfbWFzc19rZyI6bnVsbCwicGF5bG9hZF9tYXNzX2xicyI6bnVsbCwib3JiaXQiOiJTTyIsIm9yYml0X3BhcmFtcyI6eyJyZWZlcmVuY2Vfc3lzdGVtIjoiZ2VvY2VudHJpYyIsInJlZ2ltZSI6InN1Yi1vcmJpdGFsIiwibG9uZ2l0dWRlIjpudWxsLCJzZW1pX21ham9yX2F4aXNfa20iOm51bGwsImVjY2VudHJpY2l0eSI6bnVsbCwicGVyaWFwc2lzX2ttIjpudWxsLCJhcG9hcHNpc19rbSI6bnVsbCwiaW5jbGluYXRpb25fZGVnIjpudWxsLCJwZXJpb2RfbWluIjpudWxsLCJsaWZlc3Bhbl95ZWFycyI6bnVsbCwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfSwibWFzc19yZXR1cm5lZF9rZyI6bnVsbCwibWFzc19yZXR1cm5lZF9sYnMiOm51bGwsImZsaWdodF90aW1lX3NlYyI6bnVsbCwiY2FyZ29fbWFuaWZlc3QiOm51bGx9XX0sImZhaXJpbmdzIjpudWxsfSwic2hpcHMiOltdLCJ0ZWxlbWV0cnkiOnsiZmxpZ2h0X2NsdWIiOm51bGx9LCJsYXVuY2hfc2l0ZSI6eyJzaXRlX2lkIjoia3NjX2xjXzM5YSIsInNpdGVfbmFtZSI6IktTQyBMQyAzOUEiLCJzaXRlX25hbWVfbG9uZyI6Iktlbm5lZHkgU3BhY2UgQ2VudGVyIEhpc3RvcmljIExhdW5jaCBDb21wbGV4IDM5QSJ9LCJsYXVuY2hfc3VjY2VzcyI6bnVsbCwibGlua3MiOnsibWlzc2lvbl9wYXRjaCI6bnVsbCwibWlzc2lvbl9wYXRjaF9zbWFsbCI6bnVsbCwicmVkZGl0X2NhbXBhaWduIjpudWxsLCJyZWRkaXRfbGF1bmNoIjpudWxsLCJyZWRkaXRfcmVjb3ZlcnkiOm51bGwsInJlZGRpdF9tZWRpYSI6bnVsbCwicHJlc3NraXQiOm51bGwsImFydGljbGVfbGluayI6bnVsbCwid2lraXBlZGlhIjpudWxsLCJ2aWRlb19saW5rIjpudWxsLCJmbGlja3JfaW1hZ2VzIjpbXX0sImRldGFpbHMiOm51bGwsInVwY29taW5nIjp0cnVlLCJzdGF0aWNfZmlyZV9kYXRlX3V0YyI6bnVsbCwic3RhdGljX2ZpcmVfZGF0ZV91bml4IjpudWxsfSx7ImZsaWdodF9udW1iZXIiOjg0LCJtaXNzaW9uX25hbWUiOiJDQ3RDYXAgRGVtbyBNaXNzaW9uIDIiLCJtaXNzaW9uX2lkIjpbIkVFODZGNzQiXSwibGF1bmNoX3llYXIiOiIyMDE5IiwibGF1bmNoX2RhdGVfdW5peCI6MTU1OTM0NzIwMCwibGF1bmNoX2RhdGVfdXRjIjoiMjAxOS0wNi0wMVQwMDowMDowMC4wMDBaIiwibGF1bmNoX2RhdGVfbG9jYWwiOiIyMDE5LTA1LTMxVDIwOjAwOjAwLTA0OjAwIiwiaXNfdGVudGF0aXZlIjp0cnVlLCJ0ZW50YXRpdmVfbWF4X3ByZWNpc2lvbiI6Im1vbnRoIiwicm9ja2V0Ijp7InJvY2tldF9pZCI6ImZhbGNvbjkiLCJyb2NrZXRfbmFtZSI6IkZhbGNvbiA5Iiwicm9ja2V0X3R5cGUiOiJGVCIsImZpcnN0X3N0YWdlIjp7ImNvcmVzIjpbeyJjb3JlX3NlcmlhbCI6bnVsbCwiZmxpZ2h0IjpudWxsLCJibG9jayI6NSwiZ3JpZGZpbnMiOm51bGwsImxlZ3MiOm51bGwsInJldXNlZCI6ZmFsc2UsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOm51bGwsImxhbmRpbmdfdHlwZSI6bnVsbCwibGFuZGluZ192ZWhpY2xlIjpudWxsfV19LCJzZWNvbmRfc3RhZ2UiOnsiYmxvY2siOm51bGwsInBheWxvYWRzIjpbeyJwYXlsb2FkX2lkIjoiQ0N0Q2FwIERlbW8gTWlzc2lvbiAyIiwibm9yYWRfaWQiOltdLCJjYXBfc2VyaWFsIjpudWxsLCJyZXVzZWQiOmZhbHNlLCJjdXN0b21lcnMiOlsiTkFTQSAoQ0N0Q2FwKSJdLCJuYXRpb25hbGl0eSI6IlVuaXRlZCBTdGF0ZXMiLCJtYW51ZmFjdHVyZXIiOiJTcGFjZVgiLCJwYXlsb2FkX3R5cGUiOiJDcmV3IERyYWdvbiIsInBheWxvYWRfbWFzc19rZyI6bnVsbCwicGF5bG9hZF9tYXNzX2xicyI6bnVsbCwib3JiaXQiOiJJU1MiLCJvcmJpdF9wYXJhbXMiOnsicmVmZXJlbmNlX3N5c3RlbSI6Imdlb2NlbnRyaWMiLCJyZWdpbWUiOiJsb3ctZWFydGgiLCJsb25naXR1ZGUiOm51bGwsInNlbWlfbWFqb3JfYXhpc19rbSI6bnVsbCwiZWNjZW50cmljaXR5IjpudWxsLCJwZXJpYXBzaXNfa20iOm51bGwsImFwb2Fwc2lzX2ttIjpudWxsLCJpbmNsaW5hdGlvbl9kZWciOm51bGwsInBlcmlvZF9taW4iOm51bGwsImxpZmVzcGFuX3llYXJzIjpudWxsLCJlcG9jaCI6bnVsbCwibWVhbl9tb3Rpb24iOm51bGwsInJhYW4iOm51bGwsImFyZ19vZl9wZXJpY2VudGVyIjpudWxsLCJtZWFuX2Fub21hbHkiOm51bGx9LCJtYXNzX3JldHVybmVkX2tnIjpudWxsLCJtYXNzX3JldHVybmVkX2xicyI6bnVsbCwiZmxpZ2h0X3RpbWVfc2VjIjpudWxsLCJjYXJnb19tYW5pZmVzdCI6bnVsbH1dfSwiZmFpcmluZ3MiOm51bGx9LCJzaGlwcyI6W10sInRlbGVtZXRyeSI6eyJmbGlnaHRfY2x1YiI6bnVsbH0sImxhdW5jaF9zaXRlIjp7InNpdGVfaWQiOiJrc2NfbGNfMzlhIiwic2l0ZV9uYW1lIjoiS1NDIExDIDM5QSIsInNpdGVfbmFtZV9sb25nIjoiS2VubmVkeSBTcGFjZSBDZW50ZXIgSGlzdG9yaWMgTGF1bmNoIENvbXBsZXggMzlBIn0sImxhdW5jaF9zdWNjZXNzIjpudWxsLCJsaW5rcyI6eyJtaXNzaW9uX3BhdGNoIjpudWxsLCJtaXNzaW9uX3BhdGNoX3NtYWxsIjpudWxsLCJyZWRkaXRfY2FtcGFpZ24iOm51bGwsInJlZGRpdF9sYXVuY2giOm51bGwsInJlZGRpdF9yZWNvdmVyeSI6bnVsbCwicmVkZGl0X21lZGlhIjpudWxsLCJwcmVzc2tpdCI6bnVsbCwiYXJ0aWNsZV9saW5rIjpudWxsLCJ3aWtpcGVkaWEiOm51bGwsInZpZGVvX2xpbmsiOm51bGwsImZsaWNrcl9pbWFnZXMiOltdfSwiZGV0YWlscyI6bnVsbCwidXBjb21pbmciOnRydWUsInN0YXRpY19maXJlX2RhdGVfdXRjIjpudWxsLCJzdGF0aWNfZmlyZV9kYXRlX3VuaXgiOm51bGx9LHsiZmxpZ2h0X251bWJlciI6ODUsIm1pc3Npb25fbmFtZSI6IkFtb3MtMTciLCJtaXNzaW9uX2lkIjpbXSwibGF1bmNoX3llYXIiOiIyMDE5IiwibGF1bmNoX2RhdGVfdW5peCI6MTU1NDA3NjgwMCwibGF1bmNoX2RhdGVfdXRjIjoiMjAxOS0wNC0wMVQwMDowMDowMC4wMDBaIiwibGF1bmNoX2RhdGVfbG9jYWwiOiIyMDE5LTAzLTMxVDIwOjAwOjAwLTA0OjAwIiwiaXNfdGVudGF0aXZlIjp0cnVlLCJ0ZW50YXRpdmVfbWF4X3ByZWNpc2lvbiI6InF1YXJ0ZXIiLCJyb2NrZXQiOnsicm9ja2V0X2lkIjoiZmFsY29uOSIsInJvY2tldF9uYW1lIjoiRmFsY29uIDkiLCJyb2NrZXRfdHlwZSI6IkZUIiwiZmlyc3Rfc3RhZ2UiOnsiY29yZXMiOlt7ImNvcmVfc2VyaWFsIjpudWxsLCJmbGlnaHQiOm51bGwsImJsb2NrIjpudWxsLCJncmlkZmlucyI6bnVsbCwibGVncyI6bnVsbCwicmV1c2VkIjpudWxsLCJsYW5kX3N1Y2Nlc3MiOm51bGwsImxhbmRpbmdfaW50ZW50IjpudWxsLCJsYW5kaW5nX3R5cGUiOm51bGwsImxhbmRpbmdfdmVoaWNsZSI6bnVsbH1dfSwic2Vjb25kX3N0YWdlIjp7ImJsb2NrIjpudWxsLCJwYXlsb2FkcyI6W3sicGF5bG9hZF9pZCI6IkFtb3MtMTciLCJub3JhZF9pZCI6W10sInJldXNlZCI6ZmFsc2UsImN1c3RvbWVycyI6WyJTcGFjZWNvbSJdLCJuYXRpb25hbGl0eSI6IklzcmFlbCIsIm1hbnVmYWN0dXJlciI6IkJvZWluZyBTYXRlbGxpdGUgU3lzdGVtcyIsInBheWxvYWRfdHlwZSI6IlNhdGVsbGl0ZSIsInBheWxvYWRfbWFzc19rZyI6NTUwMCwicGF5bG9hZF9tYXNzX2xicyI6MTIxMjUuNDIsIm9yYml0IjoiR1RPIiwib3JiaXRfcGFyYW1zIjp7InJlZmVyZW5jZV9zeXN0ZW0iOiJnZW9jZW50cmljIiwicmVnaW1lIjoiZ2Vvc3RhdGlvbmFyeSIsImxvbmdpdHVkZSI6MTcsInNlbWlfbWFqb3JfYXhpc19rbSI6bnVsbCwiZWNjZW50cmljaXR5IjpudWxsLCJwZXJpYXBzaXNfa20iOm51bGwsImFwb2Fwc2lzX2ttIjpudWxsLCJpbmNsaW5hdGlvbl9kZWciOm51bGwsInBlcmlvZF9taW4iOm51bGwsImxpZmVzcGFuX3llYXJzIjoxNSwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfX1dfSwiZmFpcmluZ3MiOnsicmV1c2VkIjpmYWxzZSwicmVjb3ZlcnlfYXR0ZW1wdCI6ZmFsc2UsInJlY292ZXJlZCI6ZmFsc2UsInNoaXAiOm51bGx9fSwic2hpcHMiOltdLCJ0ZWxlbWV0cnkiOnsiZmxpZ2h0X2NsdWIiOm51bGx9LCJsYXVuY2hfc2l0ZSI6eyJzaXRlX2lkIjoiY2NhZnNfc2xjXzQwIiwic2l0ZV9uYW1lIjoiQ0NBRlMgU0xDIDQwIiwic2l0ZV9uYW1lX2xvbmciOiJDYXBlIENhbmF2ZXJhbCBBaXIgRm9yY2UgU3RhdGlvbiBTcGFjZSBMYXVuY2ggQ29tcGxleCA0MCJ9LCJsYXVuY2hfc3VjY2VzcyI6bnVsbCwibGlua3MiOnsibWlzc2lvbl9wYXRjaCI6bnVsbCwibWlzc2lvbl9wYXRjaF9zbWFsbCI6bnVsbCwicmVkZGl0X2NhbXBhaWduIjpudWxsLCJyZWRkaXRfbGF1bmNoIjpudWxsLCJyZWRkaXRfcmVjb3ZlcnkiOm51bGwsInJlZGRpdF9tZWRpYSI6bnVsbCwicHJlc3NraXQiOm51bGwsImFydGljbGVfbGluayI6bnVsbCwid2lraXBlZGlhIjpudWxsLCJ2aWRlb19saW5rIjpudWxsLCJmbGlja3JfaW1hZ2VzIjpbXX0sImRldGFpbHMiOm51bGwsInVwY29taW5nIjp0cnVlLCJzdGF0aWNfZmlyZV9kYXRlX3V0YyI6bnVsbCwic3RhdGljX2ZpcmVfZGF0ZV91bml4IjpudWxsfSx7ImZsaWdodF9udW1iZXIiOjg2LCJtaXNzaW9uX25hbWUiOiJTU08tQiIsIm1pc3Npb25faWQiOltdLCJsYXVuY2hfeWVhciI6IjIwMTkiLCJsYXVuY2hfZGF0ZV91bml4IjoxNTU0MDc2ODAwLCJsYXVuY2hfZGF0ZV91dGMiOiIyMDE5LTA0LTAxVDAwOjAwOjAwLjAwMFoiLCJsYXVuY2hfZGF0ZV9sb2NhbCI6IjIwMTktMDMtMzFUMTc6MDA6MDAtMDc6MDAiLCJpc190ZW50YXRpdmUiOnRydWUsInRlbnRhdGl2ZV9tYXhfcHJlY2lzaW9uIjoicXVhcnRlciIsInJvY2tldCI6eyJyb2NrZXRfaWQiOiJmYWxjb245Iiwicm9ja2V0X25hbWUiOiJGYWxjb24gOSIsInJvY2tldF90eXBlIjoiRlQiLCJmaXJzdF9zdGFnZSI6eyJjb3JlcyI6W3siY29yZV9zZXJpYWwiOm51bGwsImZsaWdodCI6bnVsbCwiYmxvY2siOm51bGwsImdyaWRmaW5zIjpudWxsLCJsZWdzIjpudWxsLCJyZXVzZWQiOm51bGwsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOm51bGwsImxhbmRpbmdfdHlwZSI6bnVsbCwibGFuZGluZ192ZWhpY2xlIjpudWxsfV19LCJzZWNvbmRfc3RhZ2UiOnsiYmxvY2siOm51bGwsInBheWxvYWRzIjpbeyJwYXlsb2FkX2lkIjoiU1NPLUIiLCJub3JhZF9pZCI6W10sInJldXNlZCI6ZmFsc2UsImN1c3RvbWVycyI6WyJTcGFjZWZsaWdodCBJbmR1c3RyaWVzLCBJbmMiXSwibmF0aW9uYWxpdHkiOiJVbml0ZWQgU3RhdGVzIiwibWFudWZhY3R1cmVyIjpudWxsLCJwYXlsb2FkX3R5cGUiOiJTYXRlbGxpdGUiLCJwYXlsb2FkX21hc3Nfa2ciOm51bGwsInBheWxvYWRfbWFzc19sYnMiOm51bGwsIm9yYml0IjoiU1NPIiwib3JiaXRfcGFyYW1zIjp7InJlZmVyZW5jZV9zeXN0ZW0iOiJnZW9jZW50cmljIiwicmVnaW1lIjoic3VuLXN5bmNocm9ub3VzIiwibG9uZ2l0dWRlIjpudWxsLCJzZW1pX21ham9yX2F4aXNfa20iOm51bGwsImVjY2VudHJpY2l0eSI6bnVsbCwicGVyaWFwc2lzX2ttIjpudWxsLCJhcG9hcHNpc19rbSI6bnVsbCwiaW5jbGluYXRpb25fZGVnIjpudWxsLCJwZXJpb2RfbWluIjpudWxsLCJsaWZlc3Bhbl95ZWFycyI6bnVsbCwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfX1dfSwiZmFpcmluZ3MiOnsicmV1c2VkIjpmYWxzZSwicmVjb3ZlcnlfYXR0ZW1wdCI6bnVsbCwicmVjb3ZlcmVkIjpudWxsLCJzaGlwIjpudWxsfX0sInNoaXBzIjpbXSwidGVsZW1ldHJ5Ijp7ImZsaWdodF9jbHViIjpudWxsfSwibGF1bmNoX3NpdGUiOnsic2l0ZV9pZCI6InZhZmJfc2xjXzRlIiwic2l0ZV9uYW1lIjoiVkFGQiBTTEMgNEUiLCJzaXRlX25hbWVfbG9uZyI6IlZhbmRlbmJlcmcgQWlyIEZvcmNlIEJhc2UgU3BhY2UgTGF1bmNoIENvbXBsZXggNEUifSwibGF1bmNoX3N1Y2Nlc3MiOm51bGwsImxpbmtzIjp7Im1pc3Npb25fcGF0Y2giOm51bGwsIm1pc3Npb25fcGF0Y2hfc21hbGwiOm51bGwsInJlZGRpdF9jYW1wYWlnbiI6bnVsbCwicmVkZGl0X2xhdW5jaCI6bnVsbCwicmVkZGl0X3JlY292ZXJ5IjpudWxsLCJyZWRkaXRfbWVkaWEiOm51bGwsInByZXNza2l0IjpudWxsLCJhcnRpY2xlX2xpbmsiOm51bGwsIndpa2lwZWRpYSI6bnVsbCwidmlkZW9fbGluayI6bnVsbCwiZmxpY2tyX2ltYWdlcyI6W119LCJkZXRhaWxzIjpudWxsLCJ1cGNvbWluZyI6dHJ1ZSwic3RhdGljX2ZpcmVfZGF0ZV91dGMiOm51bGwsInN0YXRpY19maXJlX2RhdGVfdW5peCI6bnVsbH0seyJmbGlnaHRfbnVtYmVyIjo4NywibWlzc2lvbl9uYW1lIjoiR2lTQVQtMSIsIm1pc3Npb25faWQiOltdLCJsYXVuY2hfeWVhciI6IjIwMTkiLCJsYXVuY2hfZGF0ZV91bml4IjoxNTQ2MzAwODAwLCJsYXVuY2hfZGF0ZV91dGMiOiIyMDE5LTAxLTAxVDAwOjAwOjAwLjAwMFoiLCJsYXVuY2hfZGF0ZV9sb2NhbCI6IjIwMTgtMTItMzFUMTk6MDA6MDAtMDU6MDAiLCJpc190ZW50YXRpdmUiOnRydWUsInRlbnRhdGl2ZV9tYXhfcHJlY2lzaW9uIjoiaGFsZiIsInJvY2tldCI6eyJyb2NrZXRfaWQiOiJmYWxjb245Iiwicm9ja2V0X25hbWUiOiJGYWxjb24gOSIsInJvY2tldF90eXBlIjoiRlQiLCJmaXJzdF9zdGFnZSI6eyJjb3JlcyI6W3siY29yZV9zZXJpYWwiOm51bGwsImZsaWdodCI6bnVsbCwiYmxvY2siOjUsImdyaWRmaW5zIjpudWxsLCJsZWdzIjpudWxsLCJyZXVzZWQiOm51bGwsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOm51bGwsImxhbmRpbmdfdHlwZSI6bnVsbCwibGFuZGluZ192ZWhpY2xlIjpudWxsfV19LCJzZWNvbmRfc3RhZ2UiOnsiYmxvY2siOjUsInBheWxvYWRzIjpbeyJwYXlsb2FkX2lkIjoiR2lTQVQtMSIsIm5vcmFkX2lkIjpbXSwicmV1c2VkIjpmYWxzZSwiY3VzdG9tZXJzIjpbIkdsb2JhbCBJUCBDYXltYW4iXSwibmF0aW9uYWxpdHkiOiJDYXltYW4gSXNsYW5kcyIsIm1hbnVmYWN0dXJlciI6IkJvZWluZyIsInBheWxvYWRfdHlwZSI6IlNhdGVsbGl0ZSIsInBheWxvYWRfbWFzc19rZyI6NjAwMCwicGF5bG9hZF9tYXNzX2xicyI6MTMyMjcuNzQsIm9yYml0IjoiR1RPIiwib3JiaXRfcGFyYW1zIjp7InJlZmVyZW5jZV9zeXN0ZW0iOiJnZW9jZW50cmljIiwicmVnaW1lIjoiZ2Vvc3RhdGlvbmFyeSIsImxvbmdpdHVkZSI6bnVsbCwic2VtaV9tYWpvcl9heGlzX2ttIjpudWxsLCJlY2NlbnRyaWNpdHkiOm51bGwsInBlcmlhcHNpc19rbSI6bnVsbCwiYXBvYXBzaXNfa20iOm51bGwsImluY2xpbmF0aW9uX2RlZyI6bnVsbCwicGVyaW9kX21pbiI6bnVsbCwibGlmZXNwYW5feWVhcnMiOjE1LCJlcG9jaCI6bnVsbCwibWVhbl9tb3Rpb24iOm51bGwsInJhYW4iOm51bGwsImFyZ19vZl9wZXJpY2VudGVyIjpudWxsLCJtZWFuX2Fub21hbHkiOm51bGx9fV19LCJmYWlyaW5ncyI6eyJyZXVzZWQiOmZhbHNlLCJyZWNvdmVyeV9hdHRlbXB0IjpmYWxzZSwicmVjb3ZlcmVkIjpmYWxzZSwic2hpcCI6bnVsbH19LCJzaGlwcyI6W10sInRlbGVtZXRyeSI6eyJmbGlnaHRfY2x1YiI6bnVsbH0sImxhdW5jaF9zaXRlIjp7InNpdGVfaWQiOiJjY2Fmc19zbGNfNDAiLCJzaXRlX25hbWUiOiJDQ0FGUyBTTEMgNDAiLCJzaXRlX25hbWVfbG9uZyI6IkNhcGUgQ2FuYXZlcmFsIEFpciBGb3JjZSBTdGF0aW9uIFNwYWNlIExhdW5jaCBDb21wbGV4IDQwIn0sImxhdW5jaF9zdWNjZXNzIjpudWxsLCJsaW5rcyI6eyJtaXNzaW9uX3BhdGNoIjpudWxsLCJtaXNzaW9uX3BhdGNoX3NtYWxsIjpudWxsLCJyZWRkaXRfY2FtcGFpZ24iOm51bGwsInJlZGRpdF9sYXVuY2giOm51bGwsInJlZGRpdF9yZWNvdmVyeSI6bnVsbCwicmVkZGl0X21lZGlhIjpudWxsLCJwcmVzc2tpdCI6bnVsbCwiYXJ0aWNsZV9saW5rIjpudWxsLCJ3aWtpcGVkaWEiOm51bGwsInZpZGVvX2xpbmsiOm51bGwsImZsaWNrcl9pbWFnZXMiOltdfSwiZGV0YWlscyI6bnVsbCwidXBjb21pbmciOnRydWUsInN0YXRpY19maXJlX2RhdGVfdXRjIjpudWxsLCJzdGF0aWNfZmlyZV9kYXRlX3VuaXgiOm51bGx9LHsiZmxpZ2h0X251bWJlciI6ODgsIm1pc3Npb25fbmFtZSI6IlVTQ1YtMSAoTkFTQSBDcmV3IEZsaWdodCAxKSIsIm1pc3Npb25faWQiOlsiRUU4NkY3NCJdLCJsYXVuY2hfeWVhciI6IjIwMTkiLCJsYXVuY2hfZGF0ZV91bml4IjoxNTY0NjE3NjAwLCJsYXVuY2hfZGF0ZV91dGMiOiIyMDE5LTA4LTAxVDAwOjAwOjAwLjAwMFoiLCJsYXVuY2hfZGF0ZV9sb2NhbCI6IjIwMTktMDctMzFUMjA6MDA6MDAtMDQ6MDAiLCJpc190ZW50YXRpdmUiOnRydWUsInRlbnRhdGl2ZV9tYXhfcHJlY2lzaW9uIjoibW9udGgiLCJyb2NrZXQiOnsicm9ja2V0X2lkIjoiZmFsY29uOSIsInJvY2tldF9uYW1lIjoiRmFsY29uIDkiLCJyb2NrZXRfdHlwZSI6IkZUIiwiZmlyc3Rfc3RhZ2UiOnsiY29yZXMiOlt7ImNvcmVfc2VyaWFsIjpudWxsLCJmbGlnaHQiOm51bGwsImJsb2NrIjo1LCJncmlkZmlucyI6bnVsbCwibGVncyI6bnVsbCwicmV1c2VkIjpmYWxzZSwibGFuZF9zdWNjZXNzIjpudWxsLCJsYW5kaW5nX2ludGVudCI6bnVsbCwibGFuZGluZ190eXBlIjpudWxsLCJsYW5kaW5nX3ZlaGljbGUiOm51bGx9XX0sInNlY29uZF9zdGFnZSI6eyJibG9jayI6NSwicGF5bG9hZHMiOlt7InBheWxvYWRfaWQiOiJVU0NWLTEgKE5BU0EgQ3JldyBGbGlnaHQgMSkiLCJub3JhZF9pZCI6W10sImNhcF9zZXJpYWwiOm51bGwsInJldXNlZCI6ZmFsc2UsImN1c3RvbWVycyI6WyJOQVNBIChDQ3RDYXApIl0sIm5hdGlvbmFsaXR5IjoiVW5pdGVkIFN0YXRlcyIsIm1hbnVmYWN0dXJlciI6IlNwYWNlWCIsInBheWxvYWRfdHlwZSI6IkNyZXcgRHJhZ29uIiwicGF5bG9hZF9tYXNzX2tnIjpudWxsLCJwYXlsb2FkX21hc3NfbGJzIjpudWxsLCJvcmJpdCI6IklTUyIsIm9yYml0X3BhcmFtcyI6eyJyZWZlcmVuY2Vfc3lzdGVtIjoiZ2VvY2VudHJpYyIsInJlZ2ltZSI6Imxvdy1lYXJ0aCIsImxvbmdpdHVkZSI6bnVsbCwic2VtaV9tYWpvcl9heGlzX2ttIjpudWxsLCJlY2NlbnRyaWNpdHkiOm51bGwsInBlcmlhcHNpc19rbSI6bnVsbCwiYXBvYXBzaXNfa20iOm51bGwsImluY2xpbmF0aW9uX2RlZyI6bnVsbCwicGVyaW9kX21pbiI6bnVsbCwibGlmZXNwYW5feWVhcnMiOm51bGwsImVwb2NoIjpudWxsLCJtZWFuX21vdGlvbiI6bnVsbCwicmFhbiI6bnVsbCwiYXJnX29mX3BlcmljZW50ZXIiOm51bGwsIm1lYW5fYW5vbWFseSI6bnVsbH0sIm1hc3NfcmV0dXJuZWRfa2ciOm51bGwsIm1hc3NfcmV0dXJuZWRfbGJzIjpudWxsLCJmbGlnaHRfdGltZV9zZWMiOm51bGwsImNhcmdvX21hbmlmZXN0IjpudWxsfV19LCJmYWlyaW5ncyI6bnVsbH0sInNoaXBzIjpbXSwidGVsZW1ldHJ5Ijp7ImZsaWdodF9jbHViIjpudWxsfSwibGF1bmNoX3NpdGUiOnsic2l0ZV9pZCI6ImtzY19sY18zOWEiLCJzaXRlX25hbWUiOiJLU0MgTEMgMzlBIiwic2l0ZV9uYW1lX2xvbmciOiJLZW5uZWR5IFNwYWNlIENlbnRlciBIaXN0b3JpYyBMYXVuY2ggQ29tcGxleCAzOUEifSwibGF1bmNoX3N1Y2Nlc3MiOm51bGwsImxpbmtzIjp7Im1pc3Npb25fcGF0Y2giOm51bGwsIm1pc3Npb25fcGF0Y2hfc21hbGwiOm51bGwsInJlZGRpdF9jYW1wYWlnbiI6bnVsbCwicmVkZGl0X2xhdW5jaCI6bnVsbCwicmVkZGl0X3JlY292ZXJ5IjpudWxsLCJyZWRkaXRfbWVkaWEiOm51bGwsInByZXNza2l0IjpudWxsLCJhcnRpY2xlX2xpbmsiOm51bGwsIndpa2lwZWRpYSI6bnVsbCwidmlkZW9fbGluayI6bnVsbCwiZmxpY2tyX2ltYWdlcyI6W119LCJkZXRhaWxzIjpudWxsLCJ1cGNvbWluZyI6dHJ1ZSwic3RhdGljX2ZpcmVfZGF0ZV91dGMiOm51bGwsInN0YXRpY19maXJlX2RhdGVfdW5peCI6bnVsbH0seyJmbGlnaHRfbnVtYmVyIjo4OSwibWlzc2lvbl9uYW1lIjoiU0FPQ09NIDFCIiwibWlzc2lvbl9pZCI6W10sImxhdW5jaF95ZWFyIjoiMjAxOSIsImxhdW5jaF9kYXRlX3VuaXgiOjE1NjcyOTYwMDAsImxhdW5jaF9kYXRlX3V0YyI6IjIwMTktMDktMDFUMDA6MDA6MDAuMDAwWiIsImxhdW5jaF9kYXRlX2xvY2FsIjoiMjAxOS0wOC0zMVQxNzowMDowMC0wNzowMCIsImlzX3RlbnRhdGl2ZSI6dHJ1ZSwidGVudGF0aXZlX21heF9wcmVjaXNpb24iOiJtb250aCIsInJvY2tldCI6eyJyb2NrZXRfaWQiOiJmYWxjb245Iiwicm9ja2V0X25hbWUiOiJGYWxjb24gOSIsInJvY2tldF90eXBlIjoiRlQiLCJmaXJzdF9zdGFnZSI6eyJjb3JlcyI6W3siY29yZV9zZXJpYWwiOm51bGwsImZsaWdodCI6bnVsbCwiYmxvY2siOm51bGwsImdyaWRmaW5zIjpudWxsLCJsZWdzIjpudWxsLCJyZXVzZWQiOm51bGwsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOm51bGwsImxhbmRpbmdfdHlwZSI6bnVsbCwibGFuZGluZ192ZWhpY2xlIjpudWxsfV19LCJzZWNvbmRfc3RhZ2UiOnsiYmxvY2siOm51bGwsInBheWxvYWRzIjpbeyJwYXlsb2FkX2lkIjoiU0FPQ09NIDFCIiwibm9yYWRfaWQiOltdLCJyZXVzZWQiOmZhbHNlLCJjdXN0b21lcnMiOlsiQ09OQUUiXSwibmF0aW9uYWxpdHkiOiJBcmdlbnRpbmEiLCJtYW51ZmFjdHVyZXIiOm51bGwsInBheWxvYWRfdHlwZSI6IlNhdGVsbGl0ZSIsInBheWxvYWRfbWFzc19rZyI6MTYwMCwicGF5bG9hZF9tYXNzX2xicyI6MzUyNy4zOTYsIm9yYml0IjoiU1NPIiwib3JiaXRfcGFyYW1zIjp7InJlZmVyZW5jZV9zeXN0ZW0iOiJnZW9jZW50cmljIiwicmVnaW1lIjoic3VuLXN5bmNocm9ub3VzIiwibG9uZ2l0dWRlIjpudWxsLCJzZW1pX21ham9yX2F4aXNfa20iOm51bGwsImVjY2VudHJpY2l0eSI6bnVsbCwicGVyaWFwc2lzX2ttIjpudWxsLCJhcG9hcHNpc19rbSI6bnVsbCwiaW5jbGluYXRpb25fZGVnIjpudWxsLCJwZXJpb2RfbWluIjpudWxsLCJsaWZlc3Bhbl95ZWFycyI6bnVsbCwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfX1dfSwiZmFpcmluZ3MiOnsicmV1c2VkIjpmYWxzZSwicmVjb3ZlcnlfYXR0ZW1wdCI6bnVsbCwicmVjb3ZlcmVkIjpudWxsLCJzaGlwIjpudWxsfX0sInNoaXBzIjpbXSwidGVsZW1ldHJ5Ijp7ImZsaWdodF9jbHViIjpudWxsfSwibGF1bmNoX3NpdGUiOnsic2l0ZV9pZCI6InZhZmJfc2xjXzRlIiwic2l0ZV9uYW1lIjoiVkFGQiBTTEMgNEUiLCJzaXRlX25hbWVfbG9uZyI6IlZhbmRlbmJlcmcgQWlyIEZvcmNlIEJhc2UgU3BhY2UgTGF1bmNoIENvbXBsZXggNEUifSwibGF1bmNoX3N1Y2Nlc3MiOm51bGwsImxpbmtzIjp7Im1pc3Npb25fcGF0Y2giOm51bGwsIm1pc3Npb25fcGF0Y2hfc21hbGwiOm51bGwsInJlZGRpdF9jYW1wYWlnbiI6bnVsbCwicmVkZGl0X2xhdW5jaCI6bnVsbCwicmVkZGl0X3JlY292ZXJ5IjpudWxsLCJyZWRkaXRfbWVkaWEiOm51bGwsInByZXNza2l0IjpudWxsLCJhcnRpY2xlX2xpbmsiOm51bGwsIndpa2lwZWRpYSI6bnVsbCwidmlkZW9fbGluayI6bnVsbCwiZmxpY2tyX2ltYWdlcyI6W119LCJkZXRhaWxzIjpudWxsLCJ1cGNvbWluZyI6dHJ1ZSwic3RhdGljX2ZpcmVfZGF0ZV91dGMiOm51bGwsInN0YXRpY19maXJlX2RhdGVfdW5peCI6bnVsbH0seyJmbGlnaHRfbnVtYmVyIjo5MCwibWlzc2lvbl9uYW1lIjoiQ1JTLTE5IiwibWlzc2lvbl9pZCI6WyJFRTg2Rjc0Il0sImxhdW5jaF95ZWFyIjoiMjAxOSIsImxhdW5jaF9kYXRlX3VuaXgiOjE1Njk4ODgwMDAsImxhdW5jaF9kYXRlX3V0YyI6IjIwMTktMTAtMDFUMDA6MDA6MDAuMDAwWiIsImxhdW5jaF9kYXRlX2xvY2FsIjoiMjAxOS0wOS0zMFQyMDowMDowMC0wNDowMCIsImlzX3RlbnRhdGl2ZSI6dHJ1ZSwidGVudGF0aXZlX21heF9wcmVjaXNpb24iOiJtb250aCIsInJvY2tldCI6eyJyb2NrZXRfaWQiOiJmYWxjb245Iiwicm9ja2V0X25hbWUiOiJGYWxjb24gOSIsInJvY2tldF90eXBlIjoiRlQiLCJmaXJzdF9zdGFnZSI6eyJjb3JlcyI6W3siY29yZV9zZXJpYWwiOm51bGwsImZsaWdodCI6bnVsbCwiYmxvY2siOm51bGwsImdyaWRmaW5zIjpudWxsLCJsZWdzIjpudWxsLCJyZXVzZWQiOnRydWUsImxhbmRfc3VjY2VzcyI6bnVsbCwibGFuZGluZ19pbnRlbnQiOm51bGwsImxhbmRpbmdfdHlwZSI6bnVsbCwibGFuZGluZ192ZWhpY2xlIjpudWxsfV19LCJzZWNvbmRfc3RhZ2UiOnsiYmxvY2siOm51bGwsInBheWxvYWRzIjpbeyJwYXlsb2FkX2lkIjoiQ1JTLTE5Iiwibm9yYWRfaWQiOltdLCJjYXBfc2VyaWFsIjpudWxsLCJyZXVzZWQiOnRydWUsImN1c3RvbWVycyI6WyJOQVNBIChDUlMpIl0sIm5hdGlvbmFsaXR5IjoiVW5pdGVkIFN0YXRlcyIsIm1hbnVmYWN0dXJlciI6IlNwYWNlWCIsInBheWxvYWRfdHlwZSI6IkRyYWdvbiAxLjEiLCJwYXlsb2FkX21hc3Nfa2ciOm51bGwsInBheWxvYWRfbWFzc19sYnMiOm51bGwsIm9yYml0IjoiSVNTIiwib3JiaXRfcGFyYW1zIjp7InJlZmVyZW5jZV9zeXN0ZW0iOiJnZW9jZW50cmljIiwicmVnaW1lIjoibG93LWVhcnRoIiwibG9uZ2l0dWRlIjpudWxsLCJzZW1pX21ham9yX2F4aXNfa20iOm51bGwsImVjY2VudHJpY2l0eSI6bnVsbCwicGVyaWFwc2lzX2ttIjpudWxsLCJhcG9hcHNpc19rbSI6bnVsbCwiaW5jbGluYXRpb25fZGVnIjpudWxsLCJwZXJpb2RfbWluIjpudWxsLCJsaWZlc3Bhbl95ZWFycyI6bnVsbCwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfSwibWFzc19yZXR1cm5lZF9rZyI6bnVsbCwibWFzc19yZXR1cm5lZF9sYnMiOm51bGwsImZsaWdodF90aW1lX3NlYyI6bnVsbCwiY2FyZ29fbWFuaWZlc3QiOm51bGx9XX0sImZhaXJpbmdzIjpudWxsfSwic2hpcHMiOltdLCJ0ZWxlbWV0cnkiOnsiZmxpZ2h0X2NsdWIiOm51bGx9LCJsYXVuY2hfc2l0ZSI6eyJzaXRlX2lkIjoia3NjX2xjXzM5YSIsInNpdGVfbmFtZSI6IktTQyBMQyAzOUEiLCJzaXRlX25hbWVfbG9uZyI6Iktlbm5lZHkgU3BhY2UgQ2VudGVyIEhpc3RvcmljIExhdW5jaCBDb21wbGV4IDM5QSJ9LCJsYXVuY2hfc3VjY2VzcyI6bnVsbCwibGlua3MiOnsibWlzc2lvbl9wYXRjaCI6bnVsbCwibWlzc2lvbl9wYXRjaF9zbWFsbCI6bnVsbCwicmVkZGl0X2NhbXBhaWduIjpudWxsLCJyZWRkaXRfbGF1bmNoIjpudWxsLCJyZWRkaXRfcmVjb3ZlcnkiOm51bGwsInJlZGRpdF9tZWRpYSI6bnVsbCwicHJlc3NraXQiOm51bGwsImFydGljbGVfbGluayI6bnVsbCwid2lraXBlZGlhIjpudWxsLCJ2aWRlb19saW5rIjpudWxsLCJmbGlja3JfaW1hZ2VzIjpbXX0sImRldGFpbHMiOm51bGwsInVwY29taW5nIjp0cnVlLCJzdGF0aWNfZmlyZV9kYXRlX3V0YyI6bnVsbCwic3RhdGljX2ZpcmVfZGF0ZV91bml4IjpudWxsfSx7ImZsaWdodF9udW1iZXIiOjkxLCJtaXNzaW9uX25hbWUiOiJHUFMgSUlJQS0zIiwibWlzc2lvbl9pZCI6W10sImxhdW5jaF95ZWFyIjoiMjAxOSIsImxhdW5jaF9kYXRlX3VuaXgiOjE1Njk4ODgwMDAsImxhdW5jaF9kYXRlX3V0YyI6IjIwMTktMTAtMDFUMDA6MDA6MDAuMDAwWiIsImxhdW5jaF9kYXRlX2xvY2FsIjoiMjAxOS0wOS0zMFQyMDowMDowMC0wNDowMCIsImlzX3RlbnRhdGl2ZSI6dHJ1ZSwidGVudGF0aXZlX21heF9wcmVjaXNpb24iOiJtb250aCIsInJvY2tldCI6eyJyb2NrZXRfaWQiOiJmYWxjb245Iiwicm9ja2V0X25hbWUiOiJGYWxjb24gOSIsInJvY2tldF90eXBlIjoiRlQiLCJmaXJzdF9zdGFnZSI6eyJjb3JlcyI6W3siY29yZV9zZXJpYWwiOm51bGwsImZsaWdodCI6bnVsbCwiYmxvY2siOm51bGwsImdyaWRmaW5zIjpudWxsLCJsZWdzIjpudWxsLCJyZXVzZWQiOmZhbHNlLCJsYW5kX3N1Y2Nlc3MiOm51bGwsImxhbmRpbmdfaW50ZW50IjpudWxsLCJsYW5kaW5nX3R5cGUiOm51bGwsImxhbmRpbmdfdmVoaWNsZSI6bnVsbH1dfSwic2Vjb25kX3N0YWdlIjp7ImJsb2NrIjpudWxsLCJwYXlsb2FkcyI6W3sicGF5bG9hZF9pZCI6IkdQUyBJSUlBLTMiLCJub3JhZF9pZCI6W10sInJldXNlZCI6ZmFsc2UsImN1c3RvbWVycyI6WyJVU0FGIl0sIm5hdGlvbmFsaXR5IjoiVW5pdGVkIFN0YXRlcyIsIm1hbnVmYWN0dXJlciI6IkxvY2toZWVkIE1hcnRpbiIsInBheWxvYWRfdHlwZSI6IlNhdGVsbGl0ZSIsInBheWxvYWRfbWFzc19rZyI6Mzg4MCwicGF5bG9hZF9tYXNzX2xicyI6ODU1My45NCwib3JiaXQiOiJNRU8iLCJvcmJpdF9wYXJhbXMiOnsicmVmZXJlbmNlX3N5c3RlbSI6bnVsbCwicmVnaW1lIjpudWxsLCJsb25naXR1ZGUiOm51bGwsInNlbWlfbWFqb3JfYXhpc19rbSI6bnVsbCwiZWNjZW50cmljaXR5IjpudWxsLCJwZXJpYXBzaXNfa20iOm51bGwsImFwb2Fwc2lzX2ttIjpudWxsLCJpbmNsaW5hdGlvbl9kZWciOm51bGwsInBlcmlvZF9taW4iOm51bGwsImxpZmVzcGFuX3llYXJzIjoxNSwiZXBvY2giOm51bGwsIm1lYW5fbW90aW9uIjpudWxsLCJyYWFuIjpudWxsLCJhcmdfb2ZfcGVyaWNlbnRlciI6bnVsbCwibWVhbl9hbm9tYWx5IjpudWxsfX1dfSwiZmFpcmluZ3MiOnsicmV1c2VkIjpmYWxzZSwicmVjb3ZlcnlfYXR0ZW1wdCI6bnVsbCwicmVjb3ZlcmVkIjpudWxsLCJzaGlwIjpudWxsfX0sInNoaXBzIjpbXSwidGVsZW1ldHJ5Ijp7ImZsaWdodF9jbHViIjpudWxsfSwibGF1bmNoX3NpdGUiOnsic2l0ZV9pZCI6ImNjYWZzX3NsY180MCIsInNpdGVfbmFtZSI6IkNDQUZTIFNMQyA0MCIsInNpdGVfbmFtZV9sb25nIjoiQ2FwZSBDYW5hdmVyYWwgQWlyIEZvcmNlIFN0YXRpb24gU3BhY2UgTGF1bmNoIENvbXBsZXggNDAifSwibGF1bmNoX3N1Y2Nlc3MiOm51bGwsImxpbmtzIjp7Im1pc3Npb25fcGF0Y2giOm51bGwsIm1pc3Npb25fcGF0Y2hfc21hbGwiOm51bGwsInJlZGRpdF9jYW1wYWlnbiI6bnVsbCwicmVkZGl0X2xhdW5jaCI6bnVsbCwicmVkZGl0X3JlY292ZXJ5IjpudWxsLCJyZWRkaXRfbWVkaWEiOm51bGwsInByZXNza2l0IjpudWxsLCJhcnRpY2xlX2xpbmsiOm51bGwsIndpa2lwZWRpYSI6bnVsbCwidmlkZW9fbGluayI6bnVsbCwiZmxpY2tyX2ltYWdlcyI6W119LCJkZXRhaWxzIjpudWxsLCJ1cGNvbWluZyI6dHJ1ZSwic3RhdGljX2ZpcmVfZGF0ZV91dGMiOm51bGwsInN0YXRpY19maXJlX2RhdGVfdW5peCI6bnVsbH1d + http_version: + recorded_at: Mon, 29 Oct 2018 22:59:11 GMT +recorded_with: VCR 4.0.0 From 01c3d32e11a283c488892217a344e0793948538c Mon Sep 17 00:00:00 2001 From: Michael King Date: Mon, 29 Oct 2018 19:20:56 -0400 Subject: [PATCH 04/11] update rubocop todo --- .rubocop_todo.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index edafff7..09dbc90 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2018-10-23 18:08:15 -0400 using RuboCop version 0.51.0. +# on 2018-10-29 19:01:14 -0400 using RuboCop version 0.51.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -12,10 +12,10 @@ Lint/ParenthesesAsGroupedExpression: - 'spec/spacex/dragon_capsules_spec.rb' - 'spec/spacex/ships_spec.rb' -# Offense count: 30 +# Offense count: 32 # Configuration parameters: CountComments, ExcludedMethods. Metrics/BlockLength: - Max: 423 + Max: 441 # Offense count: 128 # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. From b4d930c834bf0404bfb5ce50a0b019964d004ffc Mon Sep 17 00:00:00 2001 From: Michael King Date: Mon, 29 Oct 2018 19:21:12 -0400 Subject: [PATCH 05/11] update README --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 137a006..ce16715 100644 --- a/README.md +++ b/README.md @@ -214,6 +214,7 @@ first_event.links['wikipedia'] # https://en.wikipedia.org/wiki/Falcon_1 - Get information on the next launch: `SPACEX::Launches.next` - Get the latest launch information: `SPACEX::Launches.latest` - Get information on past launches: `SPACEX::Launches.past` +- Get information on upcoming launches: `SPACEX::Launches.upcoming` The following code snippet shows the latest launch information and the data fields available on the Launch object: @@ -314,6 +315,22 @@ past_launches.last.rocket.first_stage.cores.first.land_success # true past_launches.last.launch_success # true ``` +This code snippet shows how to get information on upcoming launches: +```ruby +upcoming_launches = SPACEX::Launches.upcoming + +upcoming_launches.all?(&:upcoming) # true +upcoming_launches.all? {|launch| Time.parse(launch.launch_date_utc) >= Time.now.utc} # true + +upcoming_launches.each do |launch| + puts "Flight #{launch.flight_number} (#{launch.mission_name}) is scheduled to launch at #{launch.launch_date_local} from #{launch.launch_site.site_name_long}" +end +# Flight 70 (Es’hail 2) is scheduled to launch at 2018-11-14T15:46:00-05:00 from Cape Canaveral Air Force Station Space Launch Complex 40 +# Flight 71 (SSO-A) is scheduled to launch at 2018-11-19T10:30:00-08:00 from Vandenberg Air Force Base Space Launch Complex 4E +# Flight 72 (CRS-16) is scheduled to launch at 2018-11-30T19:00:00-05:00 from Cape Canaveral Air Force Station Space Launch Complex 40 +# ... +``` + ### Missions - Get all mission information: `SPACEX::Missions.info` From 8ee9739351f822dad8da2838014965a903184f3c Mon Sep 17 00:00:00 2001 From: Michael King Date: Mon, 29 Oct 2018 19:21:27 -0400 Subject: [PATCH 06/11] update CHANGELOG --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a220c4d..c828ce4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ * [#48](https://github.com/rodolfobandeira/spacex/pull/48): Add ability to query specific Launch via `.info('flight_number')` - [@mtking2](http://github.com/mtking2). * [#51](https://github.com/rodolfobandeira/spacex/pull/51): Added payloads endpoint [@maiafernando](http://github.com/maiafernando). * [#52](https://github.com/rodolfobandeira/spacex/pull/52): Add ability to query Past Launches - [@mtking2](http://github.com/mtking2). -* [#52](https://github.com/rodolfobandeira/spacex/pull/54): Refactor ENDPOINT_URI - [@ludamillion](http://github.com/ludamillion). +* [#54](https://github.com/rodolfobandeira/spacex/pull/54): Refactor ENDPOINT_URI - [@ludamillion](http://github.com/ludamillion). +* [#56](https://github.com/rodolfobandeira/spacex/pull/56): Add ability to query upcoming launches - [@mtking2](http://github.com/mtking2). * Your contribution here. ### 1.0.0 (2018/10/15) From 0be5e9e2d12a97ab7e0e398d4e08087f0c250eb8 Mon Sep 17 00:00:00 2001 From: Michael King Date: Thu, 1 Nov 2018 19:57:52 -0400 Subject: [PATCH 07/11] add tests to verify all fields for upcoming launches --- spec/spacex/launches_spec.rb | 187 +++++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) diff --git a/spec/spacex/launches_spec.rb b/spec/spacex/launches_spec.rb index 57b7f53..bee0b92 100644 --- a/spec/spacex/launches_spec.rb +++ b/spec/spacex/launches_spec.rb @@ -412,6 +412,193 @@ expect(launch.launch_success).to be nil end end + + context 'returns upcoming launches' do + it 'returns the next upcoming launch' do + expect(subject.first.flight_number).to eq 70 + expect(subject.first.mission_name).to eq 'Es’hail 2' + expect(subject.first.mission_id).to eq [] + expect(subject.first.launch_year).to eq '2018' + expect(subject.first.launch_date_unix).to eq 1_542_228_360 + expect(subject.first.launch_date_utc).to eq '2018-11-14T20:46:00.000Z' + expect(subject.first.launch_date_local).to eq '2018-11-14T15:46:00-05:00' + expect(subject.first.is_tentative).to eq true + expect(subject.first.tentative_max_precision).to eq 'hour' + expect(subject.first.rocket.rocket_id).to eq 'falcon9' + expect(subject.first.rocket.rocket_name).to eq 'Falcon 9' + expect(subject.first.rocket.rocket_type).to eq 'FT' + expect(subject.first.rocket.first_stage.cores).to be_an(Array) + expect(subject.first.rocket.first_stage.cores.first).to eq( + "core_serial" => nil, + "flight" => nil, + "block" => 5, + "gridfins" => true, + "legs" => true, + "reused" => false, + "land_success" => nil, + "landing_intent" => true, + "landing_type" => "ASDS", + "landing_vehicle" => "OCISLY" + ) + expect(subject.first.rocket.second_stage.block).to eq 5 + expect(subject.first.rocket.second_stage.payloads).to be_an(Array) + expect(subject.first.rocket.second_stage.payloads.first).to eq( + "payload_id" => "Es’hail 2", + "norad_id" => [], + "reused" => false, + "customers" => ["Es’hailSat"], + "nationality" => "Qatar", + "manufacturer" => "Mitsubishi Electric", + "payload_type" => "Satellite", + "payload_mass_kg" => 3000, + "payload_mass_lbs" => 6613.868, + "orbit" => "GTO", + "orbit_params" => { + "reference_system" => "geocentric", + "regime" => "geostationary", + "longitude" => 25.5, + "semi_major_axis_km" => nil, + "eccentricity" => nil, + "periapsis_km" => nil, + "apoapsis_km" => nil, + "inclination_deg" => nil, + "period_min" => nil, + "lifespan_years" => 15, + "epoch" => nil, + "mean_motion" => nil, + "raan" => nil, + "arg_of_pericenter" => nil, + "mean_anomaly" => nil + } + ) + expect(subject.first.rocket.fairings).to eq( + "reused" => false, + "recovery_attempt" => false, + "recovered" => false, + "ship" => nil + ) + expect(subject.first.ships).to eq [] + expect(subject.first.telemetry.flight_club).to eq nil + expect(subject.first.launch_site).to eq( + "site_id" => "ccafs_slc_40", + "site_name" => "CCAFS SLC 40", + "site_name_long" => "Cape Canaveral Air Force Station Space Launch Complex 40" + ) + expect(subject.first.launch_success).to eq nil + expect(subject.first.links).to eq( + "mission_patch" => nil, + "mission_patch_small" => nil, + "reddit_campaign" => "https://www.reddit.com/r/spacex/comments/9p82jt/eshail_2_launch_campaign_thread/", + "reddit_launch" => nil, + "reddit_recovery" => nil, + "reddit_media" => nil, + "presskit" => nil, + "article_link" => nil, + "wikipedia" => nil, + "video_link" => nil, + "flickr_images" => [] + ) + expect(subject.first.details).to eq "SpaceX's eighteenth flight of 2018 will "\ + "be its first for Es'hailSat. Es'hail-2 is a communications satellite "\ + "that will deliver television and internet to Qatar and the surrounding "\ + "region. It will be launched into a geostationary transfer orbit from "\ + "LC-39A at Kennedy Space Center. The booster is expected to land on OCISLY." + expect(subject.first.upcoming).to eq true + expect(subject.first.static_fire_date_utc).to eq nil + expect(subject.first.static_fire_date_unix).to eq nil + end + + it 'returns the last upcoming launch' do + expect(subject.last.flight_number).to eq 91 + expect(subject.last.mission_name).to eq 'GPS IIIA-3' + expect(subject.last.mission_id).to eq [] + expect(subject.last.launch_year).to eq '2019' + expect(subject.last.launch_date_unix).to eq 1_569_888_000 + expect(subject.last.launch_date_utc).to eq '2019-10-01T00:00:00.000Z' + expect(subject.last.launch_date_local).to eq '2019-09-30T20:00:00-04:00' + expect(subject.last.is_tentative).to eq true + expect(subject.last.tentative_max_precision).to eq 'month' + expect(subject.last.rocket.rocket_id).to eq 'falcon9' + expect(subject.last.rocket.rocket_name).to eq 'Falcon 9' + expect(subject.last.rocket.rocket_type).to eq 'FT' + expect(subject.last.rocket.first_stage.cores).to be_an(Array) + expect(subject.last.rocket.first_stage.cores.first).to eq( + "core_serial" => nil, + "flight" => nil, + "block" => nil, + "gridfins" => nil, + "legs" => nil, + "reused" => false, + "land_success" => nil, + "landing_intent" => nil, + "landing_type" => nil, + "landing_vehicle" => nil + ) + expect(subject.last.rocket.second_stage.block).to eq nil + expect(subject.last.rocket.second_stage.payloads).to be_an(Array) + expect(subject.last.rocket.second_stage.payloads.first).to eq( + "payload_id" => "GPS IIIA-3", + "norad_id" => [], + "reused" => false, + "customers" => ["USAF"], + "nationality" => "United States", + "manufacturer" => "Lockheed Martin", + "payload_type" => "Satellite", + "payload_mass_kg" => 3880, + "payload_mass_lbs" => 8553.94, + "orbit" => "MEO", + "orbit_params" => { + "reference_system" => nil, + "regime" => nil, + "longitude" => nil, + "semi_major_axis_km" => nil, + "eccentricity" => nil, + "periapsis_km" => nil, + "apoapsis_km" => nil, + "inclination_deg" => nil, + "period_min" => nil, + "lifespan_years" => 15, + "epoch" => nil, + "mean_motion" => nil, + "raan" => nil, + "arg_of_pericenter" => nil, + "mean_anomaly" => nil + } + ) + expect(subject.last.rocket.fairings).to eq( + "reused" => false, + "recovery_attempt" => nil, + "recovered" => nil, + "ship" => nil + ) + expect(subject.last.ships).to eq [] + expect(subject.last.telemetry.flight_club).to eq nil + expect(subject.last.launch_site).to eq( + "site_id" => "ccafs_slc_40", + "site_name" => "CCAFS SLC 40", + "site_name_long" => "Cape Canaveral Air Force Station Space Launch Complex 40" + ) + expect(subject.last.launch_success).to eq nil + expect(subject.last.links).to eq( + "mission_patch" => nil, + "mission_patch_small" => nil, + "reddit_campaign" => nil, + "reddit_launch" => nil, + "reddit_recovery" => nil, + "reddit_media" => nil, + "presskit" => nil, + "article_link" => nil, + "wikipedia" => nil, + "video_link" => nil, + "flickr_images" => [] + ) + expect(subject.last.details).to eq nil + expect(subject.last.upcoming).to eq true + expect(subject.last.static_fire_date_utc).to eq nil + expect(subject.last.static_fire_date_unix).to eq nil + end + + end end context '#all', vcr: { cassette_name: 'launches/all' } do From 2ff9162b40447637e3eb92b6681292dfd6e03a8f Mon Sep 17 00:00:00 2001 From: Michael King Date: Thu, 1 Nov 2018 20:03:14 -0400 Subject: [PATCH 08/11] update README to make examples consistent --- README.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 9950a8a..af289ad 100644 --- a/README.md +++ b/README.md @@ -351,16 +351,13 @@ This code snippet shows how to get information on upcoming launches: ```ruby upcoming_launches = SPACEX::Launches.upcoming -upcoming_launches.all?(&:upcoming) # true -upcoming_launches.all? {|launch| Time.parse(launch.launch_date_utc) >= Time.now.utc} # true - -upcoming_launches.each do |launch| - puts "Flight #{launch.flight_number} (#{launch.mission_name}) is scheduled to launch at #{launch.launch_date_local} from #{launch.launch_site.site_name_long}" -end -# Flight 70 (Es’hail 2) is scheduled to launch at 2018-11-14T15:46:00-05:00 from Cape Canaveral Air Force Station Space Launch Complex 40 -# Flight 71 (SSO-A) is scheduled to launch at 2018-11-19T10:30:00-08:00 from Vandenberg Air Force Base Space Launch Complex 4E -# Flight 72 (CRS-16) is scheduled to launch at 2018-11-30T19:00:00-05:00 from Cape Canaveral Air Force Station Space Launch Complex 40 -# ... +upcoming_launches.first.flight_number # 70 +upcoming_launches.first.mission_name # 'Es’hail 2' +upcoming_launches.first.launch_date_utc # '2018-11-14T20:46:00.000Z' + +upcoming_launches.last.flight_number # 91 +upcoming_launches.last.mission_name # 'GPS IIIA-3' +upcoming_launches.last.launch_date_utc # '2019-10-01T00:00:00.000Z' ``` ### Missions From 0d514bea8f7750ead048477a4db63d8240ff96e5 Mon Sep 17 00:00:00 2001 From: Michael King Date: Thu, 1 Nov 2018 20:10:52 -0400 Subject: [PATCH 09/11] use single quoted string to satisfy rubocop --- .rubocop_todo.yml | 8 +- spec/spacex/launches_spec.rb | 227 +++++++++++++++++------------------ 2 files changed, 117 insertions(+), 118 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 09dbc90..21ede23 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2018-10-29 19:01:14 -0400 using RuboCop version 0.51.0. +# on 2018-11-01 20:09:44 -0400 using RuboCop version 0.51.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -12,12 +12,12 @@ Lint/ParenthesesAsGroupedExpression: - 'spec/spacex/dragon_capsules_spec.rb' - 'spec/spacex/ships_spec.rb' -# Offense count: 32 +# Offense count: 36 # Configuration parameters: CountComments, ExcludedMethods. Metrics/BlockLength: - Max: 441 + Max: 625 -# Offense count: 128 +# Offense count: 136 # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. # URISchemes: http, https Metrics/LineLength: diff --git a/spec/spacex/launches_spec.rb b/spec/spacex/launches_spec.rb index bee0b92..84036ef 100644 --- a/spec/spacex/launches_spec.rb +++ b/spec/spacex/launches_spec.rb @@ -429,80 +429,80 @@ expect(subject.first.rocket.rocket_type).to eq 'FT' expect(subject.first.rocket.first_stage.cores).to be_an(Array) expect(subject.first.rocket.first_stage.cores.first).to eq( - "core_serial" => nil, - "flight" => nil, - "block" => 5, - "gridfins" => true, - "legs" => true, - "reused" => false, - "land_success" => nil, - "landing_intent" => true, - "landing_type" => "ASDS", - "landing_vehicle" => "OCISLY" + 'core_serial' => nil, + 'flight' => nil, + 'block' => 5, + 'gridfins' => true, + 'legs' => true, + 'reused' => false, + 'land_success' => nil, + 'landing_intent' => true, + 'landing_type' => 'ASDS', + 'landing_vehicle' => 'OCISLY' ) expect(subject.first.rocket.second_stage.block).to eq 5 expect(subject.first.rocket.second_stage.payloads).to be_an(Array) expect(subject.first.rocket.second_stage.payloads.first).to eq( - "payload_id" => "Es’hail 2", - "norad_id" => [], - "reused" => false, - "customers" => ["Es’hailSat"], - "nationality" => "Qatar", - "manufacturer" => "Mitsubishi Electric", - "payload_type" => "Satellite", - "payload_mass_kg" => 3000, - "payload_mass_lbs" => 6613.868, - "orbit" => "GTO", - "orbit_params" => { - "reference_system" => "geocentric", - "regime" => "geostationary", - "longitude" => 25.5, - "semi_major_axis_km" => nil, - "eccentricity" => nil, - "periapsis_km" => nil, - "apoapsis_km" => nil, - "inclination_deg" => nil, - "period_min" => nil, - "lifespan_years" => 15, - "epoch" => nil, - "mean_motion" => nil, - "raan" => nil, - "arg_of_pericenter" => nil, - "mean_anomaly" => nil + 'payload_id' => 'Es’hail 2', + 'norad_id' => [], + 'reused' => false, + 'customers' => ['Es’hailSat'], + 'nationality' => 'Qatar', + 'manufacturer' => 'Mitsubishi Electric', + 'payload_type' => 'Satellite', + 'payload_mass_kg' => 3000, + 'payload_mass_lbs' => 6613.868, + 'orbit' => 'GTO', + 'orbit_params' => { + 'reference_system' => 'geocentric', + 'regime' => 'geostationary', + 'longitude' => 25.5, + 'semi_major_axis_km' => nil, + 'eccentricity' => nil, + 'periapsis_km' => nil, + 'apoapsis_km' => nil, + 'inclination_deg' => nil, + 'period_min' => nil, + 'lifespan_years' => 15, + 'epoch' => nil, + 'mean_motion' => nil, + 'raan' => nil, + 'arg_of_pericenter' => nil, + 'mean_anomaly' => nil } ) expect(subject.first.rocket.fairings).to eq( - "reused" => false, - "recovery_attempt" => false, - "recovered" => false, - "ship" => nil + 'reused' => false, + 'recovery_attempt' => false, + 'recovered' => false, + 'ship' => nil ) expect(subject.first.ships).to eq [] expect(subject.first.telemetry.flight_club).to eq nil expect(subject.first.launch_site).to eq( - "site_id" => "ccafs_slc_40", - "site_name" => "CCAFS SLC 40", - "site_name_long" => "Cape Canaveral Air Force Station Space Launch Complex 40" + 'site_id' => 'ccafs_slc_40', + 'site_name' => 'CCAFS SLC 40', + 'site_name_long' => 'Cape Canaveral Air Force Station Space Launch Complex 40' ) expect(subject.first.launch_success).to eq nil expect(subject.first.links).to eq( - "mission_patch" => nil, - "mission_patch_small" => nil, - "reddit_campaign" => "https://www.reddit.com/r/spacex/comments/9p82jt/eshail_2_launch_campaign_thread/", - "reddit_launch" => nil, - "reddit_recovery" => nil, - "reddit_media" => nil, - "presskit" => nil, - "article_link" => nil, - "wikipedia" => nil, - "video_link" => nil, - "flickr_images" => [] + 'mission_patch' => nil, + 'mission_patch_small' => nil, + 'reddit_campaign' => 'https://www.reddit.com/r/spacex/comments/9p82jt/eshail_2_launch_campaign_thread/', + 'reddit_launch' => nil, + 'reddit_recovery' => nil, + 'reddit_media' => nil, + 'presskit' => nil, + 'article_link' => nil, + 'wikipedia' => nil, + 'video_link' => nil, + 'flickr_images' => [] ) - expect(subject.first.details).to eq "SpaceX's eighteenth flight of 2018 will "\ - "be its first for Es'hailSat. Es'hail-2 is a communications satellite "\ - "that will deliver television and internet to Qatar and the surrounding "\ - "region. It will be launched into a geostationary transfer orbit from "\ - "LC-39A at Kennedy Space Center. The booster is expected to land on OCISLY." + expect(subject.first.details).to eq 'SpaceX\'s eighteenth flight of 2018 will '\ + 'be its first for Es\'hailSat. Es\'hail-2 is a communications satellite '\ + 'that will deliver television and internet to Qatar and the surrounding '\ + 'region. It will be launched into a geostationary transfer orbit from '\ + 'LC-39A at Kennedy Space Center. The booster is expected to land on OCISLY.' expect(subject.first.upcoming).to eq true expect(subject.first.static_fire_date_utc).to eq nil expect(subject.first.static_fire_date_unix).to eq nil @@ -523,81 +523,80 @@ expect(subject.last.rocket.rocket_type).to eq 'FT' expect(subject.last.rocket.first_stage.cores).to be_an(Array) expect(subject.last.rocket.first_stage.cores.first).to eq( - "core_serial" => nil, - "flight" => nil, - "block" => nil, - "gridfins" => nil, - "legs" => nil, - "reused" => false, - "land_success" => nil, - "landing_intent" => nil, - "landing_type" => nil, - "landing_vehicle" => nil + 'core_serial' => nil, + 'flight' => nil, + 'block' => nil, + 'gridfins' => nil, + 'legs' => nil, + 'reused' => false, + 'land_success' => nil, + 'landing_intent' => nil, + 'landing_type' => nil, + 'landing_vehicle' => nil ) expect(subject.last.rocket.second_stage.block).to eq nil expect(subject.last.rocket.second_stage.payloads).to be_an(Array) expect(subject.last.rocket.second_stage.payloads.first).to eq( - "payload_id" => "GPS IIIA-3", - "norad_id" => [], - "reused" => false, - "customers" => ["USAF"], - "nationality" => "United States", - "manufacturer" => "Lockheed Martin", - "payload_type" => "Satellite", - "payload_mass_kg" => 3880, - "payload_mass_lbs" => 8553.94, - "orbit" => "MEO", - "orbit_params" => { - "reference_system" => nil, - "regime" => nil, - "longitude" => nil, - "semi_major_axis_km" => nil, - "eccentricity" => nil, - "periapsis_km" => nil, - "apoapsis_km" => nil, - "inclination_deg" => nil, - "period_min" => nil, - "lifespan_years" => 15, - "epoch" => nil, - "mean_motion" => nil, - "raan" => nil, - "arg_of_pericenter" => nil, - "mean_anomaly" => nil + 'payload_id' => 'GPS IIIA-3', + 'norad_id' => [], + 'reused' => false, + 'customers' => ['USAF'], + 'nationality' => 'United States', + 'manufacturer' => 'Lockheed Martin', + 'payload_type' => 'Satellite', + 'payload_mass_kg' => 3880, + 'payload_mass_lbs' => 8553.94, + 'orbit' => 'MEO', + 'orbit_params' => { + 'reference_system' => nil, + 'regime' => nil, + 'longitude' => nil, + 'semi_major_axis_km' => nil, + 'eccentricity' => nil, + 'periapsis_km' => nil, + 'apoapsis_km' => nil, + 'inclination_deg' => nil, + 'period_min' => nil, + 'lifespan_years' => 15, + 'epoch' => nil, + 'mean_motion' => nil, + 'raan' => nil, + 'arg_of_pericenter' => nil, + 'mean_anomaly' => nil } ) expect(subject.last.rocket.fairings).to eq( - "reused" => false, - "recovery_attempt" => nil, - "recovered" => nil, - "ship" => nil + 'reused' => false, + 'recovery_attempt' => nil, + 'recovered' => nil, + 'ship' => nil ) expect(subject.last.ships).to eq [] expect(subject.last.telemetry.flight_club).to eq nil expect(subject.last.launch_site).to eq( - "site_id" => "ccafs_slc_40", - "site_name" => "CCAFS SLC 40", - "site_name_long" => "Cape Canaveral Air Force Station Space Launch Complex 40" + 'site_id' => 'ccafs_slc_40', + 'site_name' => 'CCAFS SLC 40', + 'site_name_long' => 'Cape Canaveral Air Force Station Space Launch Complex 40' ) expect(subject.last.launch_success).to eq nil expect(subject.last.links).to eq( - "mission_patch" => nil, - "mission_patch_small" => nil, - "reddit_campaign" => nil, - "reddit_launch" => nil, - "reddit_recovery" => nil, - "reddit_media" => nil, - "presskit" => nil, - "article_link" => nil, - "wikipedia" => nil, - "video_link" => nil, - "flickr_images" => [] + 'mission_patch' => nil, + 'mission_patch_small' => nil, + 'reddit_campaign' => nil, + 'reddit_launch' => nil, + 'reddit_recovery' => nil, + 'reddit_media' => nil, + 'presskit' => nil, + 'article_link' => nil, + 'wikipedia' => nil, + 'video_link' => nil, + 'flickr_images' => [] ) expect(subject.last.details).to eq nil expect(subject.last.upcoming).to eq true expect(subject.last.static_fire_date_utc).to eq nil expect(subject.last.static_fire_date_unix).to eq nil end - end end From f78fd565123656dda7a291352e7bfa455676cbcd Mon Sep 17 00:00:00 2001 From: Michael King Date: Fri, 2 Nov 2018 12:56:46 -0400 Subject: [PATCH 10/11] update README, remove duplicate examples --- README.md | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index af289ad..adb8e3a 100644 --- a/README.md +++ b/README.md @@ -213,6 +213,10 @@ first_event.links['wikipedia'] # https://en.wikipedia.org/wiki/Falcon_1 - Get information for all launches: `SPACEX::Launches.all` or `SPACEX::Launches.info` - Get information about a specific launch: `SPACEX::Launches.info('flight_number')` +- Get information on past launches: `SPACEX::Launches.past` +- Get information on the next launch: `SPACEX::Launches.next` +- Get the latest launch information: `SPACEX::Launches.latest` +- Get information on upcoming launches: `SPACEX::Launches.upcoming` This code snippet shows how to get information for a specific launch by flight number and list the fields: @@ -242,11 +246,7 @@ past_launches.last.rocket.first_stage.cores.first.land_success # true past_launches.last.launch_success # true ``` -- Get information on past launches: `SPACEX::Launches.past` -- Get information on the next launch: `SPACEX::Launches.next` -- Get the latest launch information: `SPACEX::Launches.latest` -- Get information on past launches: `SPACEX::Launches.past` -- Get information on upcoming launches: `SPACEX::Launches.upcoming` + The following code snippet shows the latest launch information and the data fields available on the Launch object: @@ -320,33 +320,6 @@ latest_launch.upcoming # false latest_launch.static_fire_date_utc # '2018-08-02T15:53:00.000Z' ``` -This code snippet shows how to get information for a specific launch by flight number and list the fields: -```ruby -require 'spacex' -launch_68 = SPACEX::Launches.info(68) - -launch_68.flight_number # 68 -launch_68.mission_name # 'Telstar 18V' -launch_68.rocket.rocket_name # 'Falcon 9' -launch_68.rocket.first_stage.cores.first.land_success # true -``` - -This code snippet shows how to get information on past launches: -```ruby -past_launches = SPACEX::Launches.past - -past_launches.first.flight_number # 1 -past_launches.first.mission_name # 'FalconSat' -past_launches.first.rocket.rocket_name # 'Falcon 1' -past_launches.first.launch_success # false - -past_launches.last.flight_number # 69 -past_launches.last.mission_name # 'SAOCOM 1A' -past_launches.last.rocket.rocket_name # 'Falcon 9' -past_launches.last.rocket.first_stage.cores.first.land_success # true -past_launches.last.launch_success # true -``` - This code snippet shows how to get information on upcoming launches: ```ruby upcoming_launches = SPACEX::Launches.upcoming From 4cd014b5fa984c1e3bc9055479f2ddb27f003939 Mon Sep 17 00:00:00 2001 From: Michael King Date: Fri, 2 Nov 2018 13:02:13 -0400 Subject: [PATCH 11/11] update README, remove duplicate examples --- README.md | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index af289ad..adb8e3a 100644 --- a/README.md +++ b/README.md @@ -213,6 +213,10 @@ first_event.links['wikipedia'] # https://en.wikipedia.org/wiki/Falcon_1 - Get information for all launches: `SPACEX::Launches.all` or `SPACEX::Launches.info` - Get information about a specific launch: `SPACEX::Launches.info('flight_number')` +- Get information on past launches: `SPACEX::Launches.past` +- Get information on the next launch: `SPACEX::Launches.next` +- Get the latest launch information: `SPACEX::Launches.latest` +- Get information on upcoming launches: `SPACEX::Launches.upcoming` This code snippet shows how to get information for a specific launch by flight number and list the fields: @@ -242,11 +246,7 @@ past_launches.last.rocket.first_stage.cores.first.land_success # true past_launches.last.launch_success # true ``` -- Get information on past launches: `SPACEX::Launches.past` -- Get information on the next launch: `SPACEX::Launches.next` -- Get the latest launch information: `SPACEX::Launches.latest` -- Get information on past launches: `SPACEX::Launches.past` -- Get information on upcoming launches: `SPACEX::Launches.upcoming` + The following code snippet shows the latest launch information and the data fields available on the Launch object: @@ -320,33 +320,6 @@ latest_launch.upcoming # false latest_launch.static_fire_date_utc # '2018-08-02T15:53:00.000Z' ``` -This code snippet shows how to get information for a specific launch by flight number and list the fields: -```ruby -require 'spacex' -launch_68 = SPACEX::Launches.info(68) - -launch_68.flight_number # 68 -launch_68.mission_name # 'Telstar 18V' -launch_68.rocket.rocket_name # 'Falcon 9' -launch_68.rocket.first_stage.cores.first.land_success # true -``` - -This code snippet shows how to get information on past launches: -```ruby -past_launches = SPACEX::Launches.past - -past_launches.first.flight_number # 1 -past_launches.first.mission_name # 'FalconSat' -past_launches.first.rocket.rocket_name # 'Falcon 1' -past_launches.first.launch_success # false - -past_launches.last.flight_number # 69 -past_launches.last.mission_name # 'SAOCOM 1A' -past_launches.last.rocket.rocket_name # 'Falcon 9' -past_launches.last.rocket.first_stage.cores.first.land_success # true -past_launches.last.launch_success # true -``` - This code snippet shows how to get information on upcoming launches: ```ruby upcoming_launches = SPACEX::Launches.upcoming