filmaffinity 1.1.0 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +34 -0
  3. data/.rubocop.yml +6 -3
  4. data/Gemfile +10 -2
  5. data/Gemfile.lock +55 -20
  6. data/README.md +3 -1
  7. data/Rakefile +2 -0
  8. data/filmaffinity.gemspec +25 -19
  9. data/lib/constants/constants.rb +55 -50
  10. data/lib/filmaffinity/configuration.rb +1 -0
  11. data/lib/filmaffinity/{json-movie-parser.rb → json_movie_parser.rb} +5 -2
  12. data/lib/filmaffinity/{json-movies-parser.rb → json_movies_parser.rb} +5 -7
  13. data/lib/filmaffinity/movie.rb +30 -34
  14. data/lib/filmaffinity/{poster-manager.rb → poster_manager.rb} +7 -4
  15. data/lib/filmaffinity/search.rb +17 -12
  16. data/lib/filmaffinity/top.rb +24 -16
  17. data/lib/filmaffinity/version.rb +5 -0
  18. data/lib/filmaffinity.rb +14 -11
  19. data/spec/filmaffinity/{json-movie-parser_spec.rb → json_movie_parser_spec.rb} +6 -3
  20. data/spec/filmaffinity/{json-movies-parser_spec.rb → json_movies_parser_spec.rb} +6 -3
  21. data/spec/filmaffinity/movie_spec.rb +65 -130
  22. data/spec/filmaffinity/search_spec.rb +13 -20
  23. data/spec/filmaffinity/top_spec.rb +65 -72
  24. data/spec/filmaffinity/version_spec.rb +15 -0
  25. data/spec/{filmaffinity/matchers/include-movie.rb → matchers/include_movie.rb} +3 -1
  26. data/spec/spec_helper.rb +8 -1
  27. data/spec/vcr/FilmAffinity_Movie/english_version/_cast/includes_the_passed_cast.yml +59 -0
  28. data/spec/vcr/FilmAffinity_Movie/english_version/_cast/returns_an_Array.yml +59 -0
  29. data/spec/vcr/FilmAffinity_Movie/english_version/_company/returns_Paramount_Pictures_Scott_Rudin_Productions_.yml +59 -0
  30. data/spec/vcr/FilmAffinity_Movie/english_version/_company/returns_a_String.yml +59 -0
  31. data/spec/vcr/FilmAffinity_Movie/english_version/_country/returns_United_States_.yml +59 -0
  32. data/spec/vcr/FilmAffinity_Movie/english_version/_country/returns_a_String.yml +59 -0
  33. data/spec/vcr/FilmAffinity_Movie/english_version/_director/returns_Peter_Weir_.yml +59 -0
  34. data/spec/vcr/FilmAffinity_Movie/english_version/_director/returns_a_String.yml +59 -0
  35. data/spec/vcr/FilmAffinity_Movie/english_version/_duration/returns_103.yml +59 -0
  36. data/spec/vcr/FilmAffinity_Movie/english_version/_duration/returns_an_Integer.yml +59 -0
  37. data/spec/vcr/FilmAffinity_Movie/english_version/_genres/includes_the_passed_genres.yml +59 -0
  38. data/spec/vcr/FilmAffinity_Movie/english_version/_genres/returns_an_Array.yml +59 -0
  39. data/spec/vcr/FilmAffinity_Movie/english_version/_poster/returns_a_String.yml +59 -0
  40. data/spec/vcr/FilmAffinity_Movie/english_version/_poster/returns_a_jpg_address.yml +59 -0
  41. data/spec/vcr/FilmAffinity_Movie/english_version/_rating/returns_an_Float.yml +59 -0
  42. data/spec/vcr/FilmAffinity_Movie/english_version/_script/returns_Andrew_Niccol_.yml +59 -0
  43. data/spec/vcr/FilmAffinity_Movie/english_version/_script/returns_a_String.yml +59 -0
  44. data/spec/vcr/FilmAffinity_Movie/english_version/_title/returns_an_valid_title_when_initializes_with_no_title.yml +59 -0
  45. data/spec/vcr/FilmAffinity_Movie/english_version/_year/returns_1998.yml +59 -0
  46. data/spec/vcr/FilmAffinity_Movie/english_version/_year/returns_an_Integer.yml +59 -0
  47. data/spec/vcr/FilmAffinity_Movie/spanish_version/_cast/includes_the_passed_cast.yml +59 -0
  48. data/spec/vcr/FilmAffinity_Movie/spanish_version/_cast/returns_an_Array.yml +59 -0
  49. data/spec/vcr/FilmAffinity_Movie/spanish_version/_company/returns_Paramount_Pictures_Scott_Rudin_Productions_.yml +59 -0
  50. data/spec/vcr/FilmAffinity_Movie/spanish_version/_company/returns_a_String.yml +59 -0
  51. data/spec/vcr/FilmAffinity_Movie/spanish_version/_country/returns_Estados_Unidos_.yml +59 -0
  52. data/spec/vcr/FilmAffinity_Movie/spanish_version/_country/returns_a_String.yml +59 -0
  53. data/spec/vcr/FilmAffinity_Movie/spanish_version/_director/returns_Peter_Weir_.yml +59 -0
  54. data/spec/vcr/FilmAffinity_Movie/spanish_version/_director/returns_a_String.yml +59 -0
  55. data/spec/vcr/FilmAffinity_Movie/spanish_version/_duration/returns_103.yml +59 -0
  56. data/spec/vcr/FilmAffinity_Movie/spanish_version/_duration/returns_an_Integer.yml +59 -0
  57. data/spec/vcr/FilmAffinity_Movie/spanish_version/_genres/includes_the_passed_genres.yml +59 -0
  58. data/spec/vcr/FilmAffinity_Movie/spanish_version/_genres/returns_an_Array.yml +59 -0
  59. data/spec/vcr/FilmAffinity_Movie/spanish_version/_poster/returns_a_String.yml +59 -0
  60. data/spec/vcr/FilmAffinity_Movie/spanish_version/_poster/returns_a_jpg_address.yml +59 -0
  61. data/spec/vcr/FilmAffinity_Movie/spanish_version/_rating/returns_an_Float.yml +59 -0
  62. data/spec/vcr/FilmAffinity_Movie/spanish_version/_script/returns_Andrew_Niccol_.yml +59 -0
  63. data/spec/vcr/FilmAffinity_Movie/spanish_version/_script/returns_a_String.yml +59 -0
  64. data/spec/vcr/FilmAffinity_Movie/spanish_version/_title/returns_an_valid_title_when_initializes_with_no_title.yml +59 -0
  65. data/spec/vcr/FilmAffinity_Movie/spanish_version/_year/returns_1998.yml +59 -0
  66. data/spec/vcr/FilmAffinity_Movie/spanish_version/_year/returns_an_Integer.yml +59 -0
  67. data/spec/vcr/FilmAffinity_Search/_movies/includes_the_The_Truman_Show_.yml +63 -0
  68. data/spec/vcr/FilmAffinity_Search/_movies/includes_the_Truman_Show_.yml +63 -0
  69. data/spec/vcr/FilmAffinity_Search/_movies/returns_FilmAffinity_Movie_objects_only.yml +63 -0
  70. data/spec/vcr/FilmAffinity_Search/_movies/returns_an_array.yml +63 -0
  71. data/spec/vcr/FilmAffinity_Search/_parse_movie/parses_the_id.yml +114 -0
  72. data/spec/vcr/FilmAffinity_Search/_parse_movie/parses_the_title.yml +114 -0
  73. data/spec/vcr/FilmAffinity_Top/_movies/no_options/includes_El_Padrino_.yml +63 -0
  74. data/spec/vcr/FilmAffinity_Top/_movies/no_options/includes_The_Godfather_.yml +63 -0
  75. data/spec/vcr/FilmAffinity_Top/_movies/no_options/returns_30_movies.yml +63 -0
  76. data/spec/vcr/FilmAffinity_Top/_movies/no_options/returns_FilmAffinity_Movie_objects_only.yml +63 -0
  77. data/spec/vcr/FilmAffinity_Top/_movies/no_options/returns_an_array.yml +63 -0
  78. data/spec/vcr/FilmAffinity_Top/_movies/with_options/only_with_limit/set_to_10/returns_10_movies.yml +63 -0
  79. data/spec/vcr/FilmAffinity_Top/_movies/with_options/only_with_limit/set_to_132/returns_132_movies.yml +303 -0
  80. data/spec/vcr/FilmAffinity_Top/_movies/with_options/only_with_limit/set_to_60/does_not_include_Con_la_muerte_en_los_talones_.yml +123 -0
  81. data/spec/vcr/FilmAffinity_Top/_movies/with_options/only_with_limit/set_to_60/includes_American_History_X_.yml +123 -0
  82. data/spec/vcr/FilmAffinity_Top/_movies/with_options/only_with_limit/set_to_60/returns_60_movies.yml +123 -0
  83. data/spec/vcr/FilmAffinity_Top/_movies/with_options/with_genre_BE_and_country_code_DE_/includes_Generation_War_TV_Miniseries_.yml +125 -0
  84. data/spec/vcr/FilmAffinity_Top/_movies/with_options/with_genre_BE_and_country_code_DE_/includes_Hijos_del_Tercer_Reich_Miniserie_de_TV_.yml +125 -0
  85. data/spec/vcr/FilmAffinity_Top/_movies/with_options/with_genre_BE_and_country_code_DE_/returns_FilmAffinity_Movie_objects_only.yml +125 -0
  86. data/spec/vcr/FilmAffinity_Top/_movies/with_options/with_genre_BE_and_country_code_DE_/returns_an_array.yml +125 -0
  87. data/spec/vcr/JsonMovieParser/_to_hash/returns_the_right_director_for_the_given_movie.yml +59 -0
  88. data/spec/vcr/JsonMoviesParser/_to_hashes/returns_some_valid_ids_for_a_given_search.yml +63 -0
  89. metadata +163 -32
  90. data/.rubocop_todo.yml +0 -48
@@ -0,0 +1,59 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://www.filmaffinity.com/en/film504889.html
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Mon, 12 Oct 2020 21:40:44 GMT
23
+ Server:
24
+ - Apache
25
+ Expires:
26
+ - Thu, 19 Nov 1981 08:52:00 GMT
27
+ Pragma:
28
+ - no-cache
29
+ Cache-Control:
30
+ - public, max-age=0, must-revalidate
31
+ Set-Cookie:
32
+ - FCD=0qyANZJhJjd6lNrebyAG8Z9kVHDUSL-Jp2kfSnkNNOl9ambEh1Eh4QEnpkClKEaQ2npx_f8XqOkE0q1VUr4skJZ--uikR7Tc6aeALJfJMpTApq-cEvFikMpnCK7Dq7Ucdm3Db2uuholWV4dAy2mALIjbHL_1CAtw;
33
+ expires=Sun, 09-Jul-2023 21:40:44 GMT; Max-Age=86400000; path=/; domain=.filmaffinity.com;
34
+ secure; HttpOnly
35
+ - FSID=dkbpsaucabj4283decja7grsc8kh5d5nhmpo0cfls1vp5bv8js71dksu1o1cp3mk; path=/;
36
+ domain=.filmaffinity.com; secure; HttpOnly
37
+ - client-data=%7B%22ism%22%3Afalse%2C%22showm%22%3Afalse%2C%22ts%22%3A1602538844%7D;
38
+ expires=Tue, 27-Oct-2020 21:40:44 GMT; Max-Age=1296000
39
+ - client-data=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
40
+ X-Frame-Options:
41
+ - SAMEORIGIN
42
+ Upgrade:
43
+ - h2,h2c
44
+ Connection:
45
+ - Upgrade
46
+ Vary:
47
+ - Accept-Encoding
48
+ X-Xss-Protection:
49
+ - 1; mode=block
50
+ Content-Length:
51
+ - '14173'
52
+ Content-Type:
53
+ - text/html; charset=utf-8
54
+ body:
55
+ encoding: ASCII-8BIT
56
+ string: !binary |-
57
+ PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+Cjx0aXRsZT5UaGUgVHJ1bWFuIFNob3cgICgxOTk4KSAtIEZpbG1BZmZpbml0eTwvdGl0bGU+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBUcnVtYW4gU2hvdyBpcyBhIGZpbG0gZGlyZWN0ZWQgYnkgUGV0ZXIgV2VpciB3aXRoIEppbSBDYXJyZXksIExhdXJhIExpbm5leSwgTm9haCBFbW1lcmljaCwgRWQgSGFycmlzLCBOYXRhc2NoYSBNY0VsaG9uZSAuLi4uIFllYXI6IDE5OTguIE9yaWdpbmFsIHRpdGxlOiBUaGUgVHJ1bWFuIFNob3cuIFN5bm9wc2lzOiBIZSdzIHRoZSBzdGFyIG9mIHRoZSBzaG93IC0gYnV0IGhlIGRvZXNuJ3Qga25vdyBpdCEgSmltIENhcmV5IHBsYXlzIHVud2l0dGluZyBUcnVtYW4gQnVyYmFuaywgYW4gb3JkaW5hcnkgbWFuIGluIGEgbm90LXNvLW9yZGluYXJ5IGxpZmUuIEZyb20gdGhlIHRpbWUgaGUgd2FzIGJvcm4gdG8gdGhlIHByZXNlbnQsIFRydW1hbidzIGVudGlyZSBsaWZlIC4uLiI+CjxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNvbnRlbnQ9IkZpbG1BZmZpbml0eSI+CjxtZXRhIG5hbWU9InR3aXR0ZXI6Y2FyZCIgY29udGVudD0ic3VtbWFyeSIgPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0idmlkZW8ubW92aWUiID4KPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiB2YWx1ZT0iQEZpbG1hZmZpbml0eSIgPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2ZpbG01MDQ4ODkuaHRtbCIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJUaGUgVHJ1bWFuIFNob3cgICgxOTk4KSIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJEaXJlY3RvcjogUGV0ZXIgV2VpciB8IENhc3Q6IEppbSBDYXJyZXksIExhdXJhIExpbm5leSwgTm9haCBFbW1lcmljaCwgRWQgSGFycmlzIC4uLiB8IEdlbnJlOiBEcmFtYSB8IFN5bm9wc2lzOiBIZSdzIHRoZSBzdGFyIG9mIHRoZSBzaG93IC0gYnV0IGhlIGRvZXNuJ3Qga25vdyBpdCEgSmltIENhcmV5IHBsYXlzIHVud2l0dGluZyBUcnVtYW4gQnVyYmFuaywgYW4gb3JkaW5hcnkgbWFuIGluIGEgbm90LXNvLW9yZGluYXJ5IGxpZmUuIEZyb20gdGhlIHRpbWUgaGUgd2FzIGJvcm4gdG8gdGhlIHByZXNlbnQsIFRydW1hbidzIGVudGlyZSBsaWZlIC4uLiIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL3BpY3MuZmlsbWFmZmluaXR5LmNvbS90aGVfdHJ1bWFuX3Nob3ctMTMwMDkxNTU3LW1tZWQuanBnIiAvPgo8bGluayByZWw9ImNhbm9uaWNhbCIgaHJlZj0iaHR0cDovL3d3dy5maWxtYWZmaW5pdHkuY29tL3VzL2ZpbG01MDQ4ODkuaHRtbCI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBtZWRpYT0ib25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY0MHB4KSIgaHJlZj0iaHR0cHM6Ly9tLmZpbG1hZmZpbml0eS5jb20vZW4vbW92aWUucGhwP2lkPTUwNDg4OSI+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBocmVmPSIvZmF2aWNvbi5wbmciPgo8bGluayBocmVmPSIvc3R5bGUvZmlsbS4xNTg5NDcwNDAzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CjxsaW5rIGhyZWY9Ii9zdHlsZS9zaGFyZS4xNTM5MDk2MjkxLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CjxsaW5rIGhyZWY9Ii9zdHlsZS9qcXVlcnkvZmEtdWktdGhlbWUvanF1ZXJ5LXVpLm1pbi4xNTM5MDk2MzA2LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CjxsaW5rIGhyZWY9Ii9zdHlsZS9qcXVlcnkvZmEtdWktdGhlbWUvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uMTUzOTA5NjMwNi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvanF1ZXJ5L2ZhLXVpLXRoZW1lL2pxdWVyeS11aS50aGVtZS5taW4uMTUzOTA5NjMwNi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvanF1ZXJ5L2NvbG9yYm94L2NvbG9yYm94LTEuNi4xNTM5MDk2MzA1LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CjxsaW5rIGhyZWY9Ii9zdHlsZS9qcXVlcnkvY29sb3Jib3gvY29sb3Jib3gtZmEuMTUzOTA5NjMwNS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvanF1ZXJ5L2pxdm1hcC9qcXZtYXAubWluLjE1NjE0NTA4NjEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KPGxpbmsgaHJlZj0iL3N0eWxlL21haW4zLjE2MDE2NDExNDEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KPGxpbmsgaHJlZj0iL3N0eWxlL21vdmllY2FyZHMzLjE1ODU3MzQzNDMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KPGxpbmsgaHJlZj0iL3N0eWxlL2ZhLWF3ZXNvbWUuMTUzOTA5NjI5MS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvZm9udC1hd2Vzb21lLjUuMTEuMS5taW4uMTU3OTE3NDY5MS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvZmEtaWNvbnMuMTU4MjI4ODQ3Ny5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvbWFnaWMtY2hlY2subWluLjE1MzkwOTYyOTEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KPGxpbmsgaHJlZj0iL3N0eWxlL3JhdGluZzIuMTUzOTA5NjI5Mi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvbG9jYWxfZW4uMTUzOTA5NjI5My5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvanF1ZXJ5LTMuMS4wLm1pbi4xNTM5MDk2MzAyLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2pxdWVyeS9qcXVlcnktbWlncmF0ZS0xLjQuMS5taW4uMTUzOTA5NjMwMi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvdWkvanF1ZXJ5LXVpLTEuMTIuMS5taW4uMTUzOTA5NjMwOC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvcGx1Z2luL2pxdWVyeS5jb2xvcmJveC0xLjYuMTUzOTA5NjMwOC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9mb3RvLjE1NTI2NTg1NjMuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvY3JjMzIuMTUzOTA5NjI5My5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy90cmFuc2xhdGUtY29udGV4dC4xNTM5MDk2MjkzLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2xvY2FsZS9mcmllbmRzLXRleHRzLWVuX1VTLjE1NTgwMTI1MjEuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvanF1ZXJ5L3BsdWdpbi9qcXVlcnkuY29va2llLjE1MzkwOTYzMDguanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvanF1ZXJ5L3BsdWdpbi9yYXRpbmctYmFycy4xNTM5MDk2MzA5LmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2pxdWVyeS9wbHVnaW4vY2hhcnRqcy9jaGFydC5taW4uMTU2ODM2MzgyNS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvcGx1Z2luL2pxdm1hcC9qcXVlcnkudm1hcC5taW4uMTU2MTQ1MDgzNC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvcGx1Z2luL2pxdm1hcC9qcXVlcnkudm1hcC53b3JsZC4xNTYxNDUwODM2LmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2xvY2FsZS90ZXh0cy1lbl9VUy4xNjAxOTA3MDcxLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2Fkcy4xNTM5MDk2MjkzLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL21haW4uMTYwMDcwMjA0Ny5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9wYWdldG9wLjE1ODEzNDQ4MzQuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvei1pbmRleC1maXguMTUzOTA5NjI5Mi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvcGx1Z2luL2xhenlzaXplcy9sYXp5c2l6ZXMubWluLjE2MDIwNjgzNzUuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvZmEtbGlzdHMtdGlwLjE1MzkwOTYyOTIuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvZmFfcmF0aW5nMi4xNTM5MDk2MjkzLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2hpZGUtcXQuMTU4NDQ1NjQxMi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9vbGQtYXV0b2NvbXBsZXRlLjE1ODU2NjczMDcuanMiPjwvc2NyaXB0PgoKPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZXMvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZXMiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlbiI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL214L2ZpbG01MDQ4ODkuaHRtbCIgaHJlZmxhbmc9ImVzLU1YIj4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vYXIvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZXMtQVIiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9jbC9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlcy1DTCI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2NvL2ZpbG01MDQ4ODkuaHRtbCIgaHJlZmxhbmc9ImVzLUNPIj4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vdXkvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZXMtVVkiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9wZS9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlcy1QRSI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VjL2ZpbG01MDQ4ODkuaHRtbCIgaHJlZmxhbmc9ImVzLUVDIj4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vdmUvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZXMtVkUiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9jci9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlcy1DUiI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2JvL2ZpbG01MDQ4ODkuaHRtbCIgaHJlZmxhbmc9ImVzLUJPIj4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vdXMvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZW4tVVMiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS91ay9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlbi1HQiI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2llL2ZpbG01MDQ4ODkuaHRtbCIgaHJlZmxhbmc9ImVuLUlFIj4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vYXUvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZW4tQVUiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9jYS9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlbi1DQSI+CgoKPHNjcmlwdD4KICAgICQoZnVuY3Rpb24oKXsKICAgICAgICBzZXNzUGluZygiMDE1Zjg0Y2Q1Y2M3Y2FhNGJiOTc3YWJkNWJmMmMwZTkwNjYxMDAxNGZmIiwgMjQwMCk7CiAgICAgICAgdmFyIHRjVGV4dHMgPSBUcmFuc2xhdGVDb250ZXh0LmdldEluc3RhbmNlKGNvbW1vblRleHRzSnMpOwogICAgfSk7Cjwvc2NyaXB0Pgo8c2NyaXB0IGFzeW5jPSdhc3luYycgc3JjPSdodHRwczovL3NjLWRldmVsLnMzLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tL3NjLXRhZ21hbmFnZXIvc2NfZ3B0X2xzdGFwYy5qcyc+PC9zY3JpcHQ+DQoNCiA8c2NyaXB0Pg0KDQogICAgICAgIHZhciBnb29nbGV0YWcgPSBnb29nbGV0YWcgfHwge307DQoNCiAgICAgICAgZ29vZ2xldGFnLmNtZCA9IGdvb2dsZXRhZy5jbWQgfHwgW107DQoNCiA8L3NjcmlwdD4NCg0KIDxzY3JpcHQgc3JjPSJodHRwczovL3MzLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tL3NjLWRldmVsL1NraW5zL1NNQ1NlcnZpY2UuanMiPjwvc2NyaXB0Pg0KDQogPHNjcmlwdCBzcmM9Imh0dHBzOi8vczMuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20vc2MtZGV2ZWwvc2MtdGFnbWFuYWdlci9maWxtYWZmaW5pdHkuanMiPjwvc2NyaXB0Pg0KDQogPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLnNtYXJ0Y2xpcC1zZXJ2aWNlcy5jb20vdjEvU3RvcmFnZS1hNDgyMzIzL3NtYXJ0Y2xpcC1zZXJ2aWNlcy9IZWFkZXJCaWRkaW5nL2pzL1NtYXJ0Y2xpcENvbmZpZy5qcyIgYXN5bmM9ImFzeW5jIj48L3NjcmlwdD4NCjwhLS0gUXVhbnRjYXN0IENob2ljZS4gQ29uc2VudCBNYW5hZ2VyIFRhZyB2Mi4wIChmb3IgVENGIDIuMCkgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBhc3luYz10cnVlPgooZnVuY3Rpb24oKSB7CiAgdmFyIGhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7CiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICB2YXIgZmlyc3RTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07CiAgdmFyIHVybCA9ICdodHRwczovL3F1YW50Y2FzdC5tZ3IuY29uc2Vuc3Uub3JnJwogICAgLmNvbmNhdCgnL2Nob2ljZS8nLCAnTEJCckYtYmRBdGt1RicsICcvJywgaG9zdCwgJy9jaG9pY2UuanMnKQogIHZhciB1c3BUcmllcyA9IDA7CiAgdmFyIHVzcFRyaWVzTGltaXQgPSAzOwogIGVsZW1lbnQuYXN5bmMgPSB0cnVlOwogIGVsZW1lbnQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogIGVsZW1lbnQuc3JjID0gdXJsOwoKICBmaXJzdFNjcmlwdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtZW50LCBmaXJzdFNjcmlwdCk7CgogIGZ1bmN0aW9uIG1ha2VTdHViKCkgewogICAgdmFyIFRDRl9MT0NBVE9SX05BTUUgPSAnX190Y2ZhcGlMb2NhdG9yJzsKICAgIHZhciBxdWV1ZSA9IFtdOwogICAgdmFyIHdpbiA9IHdpbmRvdzsKICAgIHZhciBjbXBGcmFtZTsKCiAgICBmdW5jdGlvbiBhZGRGcmFtZSgpIHsKICAgICAgdmFyIGRvYyA9IHdpbi5kb2N1bWVudDsKICAgICAgdmFyIG90aGVyQ01QID0gISEod2luLmZyYW1lc1tUQ0ZfTE9DQVRPUl9OQU1FXSk7CgogICAgICBpZiAoIW90aGVyQ01QKSB7CiAgICAgICAgaWYgKGRvYy5ib2R5KSB7CiAgICAgICAgICB2YXIgaWZyYW1lID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwoKICAgICAgICAgIGlmcmFtZS5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6bm9uZSc7CiAgICAgICAgICBpZnJhbWUubmFtZSA9IFRDRl9MT0NBVE9SX05BTUU7CiAgICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRUaW1lb3V0KGFkZEZyYW1lLCA1KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICFvdGhlckNNUDsKICAgIH0KCiAgICBmdW5jdGlvbiB0Y2ZBUElIYW5kbGVyKCkgewogICAgICB2YXIgZ2RwckFwcGxpZXM7CiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzOwoKICAgICAgaWYgKCFhcmdzLmxlbmd0aCkgewogICAgICAgIHJldHVybiBxdWV1ZTsKICAgICAgfSBlbHNlIGlmIChhcmdzWzBdID09PSAnc2V0R2RwckFwcGxpZXMnKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgYXJncy5sZW5ndGggPiAzICYmCiAgICAgICAgICBhcmdzWzJdID09PSAyICYmCiAgICAgICAgICB0eXBlb2YgYXJnc1szXSA9PT0gJ2Jvb2xlYW4nCiAgICAgICAgKSB7CiAgICAgICAgICBnZHByQXBwbGllcyA9IGFyZ3NbM107CiAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMl0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgYXJnc1syXSgnc2V0JywgdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFyZ3NbMF0gPT09ICdwaW5nJykgewogICAgICAgIHZhciByZXRyID0gewogICAgICAgICAgZ2RwckFwcGxpZXM6IGdkcHJBcHBsaWVzLAogICAgICAgICAgY21wTG9hZGVkOiBmYWxzZSwKICAgICAgICAgIGNtcFN0YXR1czogJ3N0dWInCiAgICAgICAgfTsKCiAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzJdID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICBhcmdzWzJdKHJldHIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBxdWV1ZS5wdXNoKGFyZ3MpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcG9zdE1lc3NhZ2VFdmVudEhhbmRsZXIoZXZlbnQpIHsKICAgICAgdmFyIG1zZ0lzU3RyaW5nID0gdHlwZW9mIGV2ZW50LmRhdGEgPT09ICdzdHJpbmcnOwogICAgICB2YXIganNvbiA9IHt9OwoKICAgICAgdHJ5IHsKICAgICAgICBpZiAobXNnSXNTdHJpbmcpIHsKICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBqc29uID0gZXZlbnQuZGF0YTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge30KCiAgICAgIHZhciBwYXlsb2FkID0ganNvbi5fX3RjZmFwaUNhbGw7CgogICAgICBpZiAocGF5bG9hZCkgewogICAgICAgIHdpbmRvdy5fX3RjZmFwaSgKICAgICAgICAgIHBheWxvYWQuY29tbWFuZCwKICAgICAgICAgIHBheWxvYWQudmVyc2lvbiwKICAgICAgICAgIGZ1bmN0aW9uKHJldFZhbHVlLCBzdWNjZXNzKSB7CiAgICAgICAgICAgIHZhciByZXR1cm5Nc2cgPSB7CiAgICAgICAgICAgICAgX190Y2ZhcGlSZXR1cm46IHsKICAgICAgICAgICAgICAgIHJldHVyblZhbHVlOiByZXRWYWx1ZSwKICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsCiAgICAgICAgICAgICAgICBjYWxsSWQ6IHBheWxvYWQuY2FsbElkCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAobXNnSXNTdHJpbmcpIHsKICAgICAgICAgICAgICByZXR1cm5Nc2cgPSBKU09OLnN0cmluZ2lmeShyZXR1cm5Nc2cpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5wb3N0TWVzc2FnZShyZXR1cm5Nc2csICcqJyk7CiAgICAgICAgICB9LAogICAgICAgICAgcGF5bG9hZC5wYXJhbWV0ZXIKICAgICAgICApOwogICAgICB9CiAgICB9CgogICAgd2hpbGUgKHdpbikgewogICAgICB0cnkgewogICAgICAgIGlmICh3aW4uZnJhbWVzW1RDRl9MT0NBVE9SX05BTUVdKSB7CiAgICAgICAgICBjbXBGcmFtZSA9IHdpbjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fQoKICAgICAgaWYgKHdpbiA9PT0gd2luZG93LnRvcCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHdpbiA9IHdpbi5wYXJlbnQ7CiAgICB9CiAgICBpZiAoIWNtcEZyYW1lKSB7CiAgICAgIGFkZEZyYW1lKCk7CiAgICAgIHdpbi5fX3RjZmFwaSA9IHRjZkFQSUhhbmRsZXI7CiAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgcG9zdE1lc3NhZ2VFdmVudEhhbmRsZXIsIGZhbHNlKTsKICAgIH0KICB9OwoKICBtYWtlU3R1YigpOwoKICB2YXIgdXNwU3R1YkZ1bmN0aW9uID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgYXJnID0gYXJndW1lbnRzOwogICAgaWYgKHR5cGVvZiB3aW5kb3cuX191c3BhcGkgIT09IHVzcFN0dWJGdW5jdGlvbikgewogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0eXBlb2Ygd2luZG93Ll9fdXNwYXBpICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgd2luZG93Ll9fdXNwYXBpLmFwcGx5KHdpbmRvdy5fX3VzcGFwaSwgYXJnKTsKICAgICAgICB9CiAgICAgIH0sIDUwMCk7CiAgICB9CiAgfTsKCiAgdmFyIGNoZWNrSWZVc3BJc1JlYWR5ID0gZnVuY3Rpb24oKSB7CiAgICB1c3BUcmllcysrOwogICAgaWYgKHdpbmRvdy5fX3VzcGFwaSA9PT0gdXNwU3R1YkZ1bmN0aW9uICYmIHVzcFRyaWVzIDwgdXNwVHJpZXNMaW1pdCkgewogICAgICBjb25zb2xlLndhcm4oJ1VTUCBpcyBub3QgYWNjZXNzaWJsZScpOwogICAgfSBlbHNlIHsKICAgICAgY2xlYXJJbnRlcnZhbCh1c3BJbnRlcnZhbCk7CiAgICB9CiAgfTsKCiAgaWYgKHR5cGVvZiB3aW5kb3cuX191c3BhcGkgPT09ICd1bmRlZmluZWQnKSB7CiAgICB3aW5kb3cuX191c3BhcGkgPSB1c3BTdHViRnVuY3Rpb247CiAgICB2YXIgdXNwSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChjaGVja0lmVXNwSXNSZWFkeSwgNjAwMCk7CiAgfQp9KSgpOwo8L3NjcmlwdD4KPCEtLSBFbmQgUXVhbnRjYXN0IENob2ljZS4gQ29uc2VudCBNYW5hZ2VyIFRhZyB2Mi4wIChmb3IgVENGIDIuMCkgLS0+CjxzY3JpcHQ+CiAgdmFyIF9jb21zY29yZSA9IF9jb21zY29yZSB8fCBbXTsKICBfY29tc2NvcmUucHVzaCh7IGMxOiAiMiIsIGMyOiAiMTMxODExMjEiIH0pOwogIChmdW5jdGlvbigpIHsKICAgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdOyBzLmFzeW5jID0gdHJ1ZTsKICAgIHMuc3JjID0gKGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sID09ICJodHRwczoiID8gImh0dHBzOi8vc2IiIDogImh0dHA6Ly9iIikgKyAiLnNjb3JlY2FyZHJlc2VhcmNoLmNvbS9iZWFjb24uanMiOwogICAgZWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocywgZWwpOwogIH0pKCk7Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+CiAgPGltZyBzcmM9Imh0dHA6Ly9iLnNjb3JlY2FyZHJlc2VhcmNoLmNvbS9wP2MxPTImYzI9MTMxODExMjEmY3Y9Mi4wJmNqPTEiIC8+Cjwvbm9zY3JpcHQ+CjxzY3JpcHQ+JChmdW5jdGlvbigpe3NlbmRwdigiMWY1MDZlNDJiYmFmOTYxYzc4NjVlYTc3MzIzMWFlOGMiKTt9KTs8L3NjcmlwdD4NCjwvaGVhZD4KPGJvZHk+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXsKICAgICAgICAgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLAogICAgICAgICAgbT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKG8pWzBdO2EuYXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxtKQogICAgICAgICAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCcvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpOwogICAgICAgICAgZ2EoJ2NyZWF0ZScsICdVQS03NDE1NTUwNC0xJywgJ2F1dG8nKTsKICAgICAgICAgIGdhKCdzZW5kJywgJ3BhZ2V2aWV3Jyk7CiAgICAgICAgPC9zY3JpcHQ+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KICAgIDxkaXYgaWQ9ImhlYWRlci10b3AiID4KICAgICAgICA8ZGl2IGNsYXNzPSJjcGFuZWwgdG9wLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGl2IGlkPSJsb2dvLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL21haW4uaHRtbCI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9ImxvZ28iIHNyYz0iL2ltYWdlcy9sb2dvNC5wbmciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tc2l0ZWxvYyI+VVNBIHwgVUs8L2Rpdj4KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+PCEtLSBsb2dvLWNvbnRhaW5lciAtLT4KCiAgICAgICAgICAgIDxkaXYgaWQ9InRvcHNlYXJjaCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocCIgbWV0aG9kPSJnZXQiIGFjY2VwdC1jaGFyc2V0PSJVVEYtOCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJ0b3Atc2VhcmNoLWlucHV0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzdGV4dCIgc2l6ZT0iMjAiIHZhbHVlPSIiIHRhYmluZGV4PSIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS10aW1lcyBjbGVhci1zZWFyY2giPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iYnV0dG9uLXNlYXJjaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXNlYXJjaCI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBpZD0iYnV0dG9uLXNlYXJjaCIgdmFsdWU9IiZuYnNwOyI+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZHZzZWFyY2giPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYWR2c2VhcmNoLnBocCI+QWR2YW5jZWQgc2VhcmNoIDxpIGNsYXNzPSJmYXMgZmEtYW5nbGUtZG91YmxlLXJpZ2h0Ij48L2k+PC9hPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj48IS0tIHRvcHNlYXJjaCAtLT4KICAgICAgICAgICAgPGRpdiBpZD0idXNlci1sb2dpbi1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBpZD0ibG9naW4tcmVnaXN0ZXIiPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaWduLWluIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xvZ2luLnBocCI+PHN0cm9uZz5TaWduIGluPC9zdHJvbmc+PC9hPiAvIDxhIGNsYXNzPSJyZWdpc3RlciIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9yZWdpc3Rlci5waHAiPlJlZ2lzdGVyPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1tZW51LXdyIj4KPHVsPgogICAgPGxpPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vdXNlcnJhdGluZ3MucGhwP3VzZXJfaWQ9Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImljLXciPjxpIGNsYXNzPSJmYSBmYS1yYXRpbmdzLWZhIj48L2k+PC9zcGFuPgogICAgICAgICAgICAgICAgTXkgUmF0aW5ncyAgICAgICAgPC9hPgogICAgPC9saT4KICAgIDxsaT4KICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL215cmV2aWV3cy5waHAiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWMtdyI+PGkgY2xhc3M9ImZhIGZhLXJldmlld3MtZmEiPjwvaT48L3NwYW4+CiAgICAgICAgICAgIFJldmlld3MgICAgICAgIDwvYT4KICAgIDwvbGk+CiAgICA8bGk+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9teWxpc3RzLnBocCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpYy13Ij48aSBjbGFzcz0iZmEgZmEtbGlzdCI+PC9pPjwvc3Bhbj4KICAgICAgICAgICAgTGlzdHMgPHNwYW4gY2xhc3M9Im5ici13Ij5OZXc8L3NwYW4+CiAgICAgICAgPC9hPgogICAgPC9saT4KICAgIDxsaT4KICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL215ZnJpZW5kcy5waHAiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWMtdyI+PGkgY2xhc3M9ImZhIGZhIGZhLWZyaWVuZHMtZmEiPjwvaT48L3NwYW4+CiAgICAgICAgICAgIEZyaWVuZHMgLyBHcm91cHMgICAgICAgIDwvYT4KICAgIDwvbGk+CiAgICA8bGk+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zb3VsbWF0ZXMucGhwIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImljLXciPjxpIGNsYXNzPSJmYSBmYS1zb3VsbWF0ZXMtZmEiPjwvaT48L3NwYW4+CiAgICAgICAgICAgIE1vdmllIFNvdWxtYXRlcyYjODQ4MjsgICAgICAgIDwvYT4KICAgIDwvbGk+CiAgICA8bGk+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zbXNyZWMucGhwIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImljLXciPjxpIGNsYXNzPSJmYSBmYS1oZWFydCI+PC9pPjwvc3Bhbj4KICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkIE1vdmllcyAgICAgICAgPC9hPgogICAgPC9saT4KICAgIDxsaSBjbGFzcz0idXNlci1wcm9mLWxpbmsiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbXlkYXRhLnBocCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpYy13Ij48aSBjbGFzcz0iZmEgZmEtYWRkcmVzcy1jYXJkLW8iPjwvaT48L3NwYW4+CiAgICAgICAgICAgICAgICBQcm9maWxlICAgICAgICA8L2E+CiAgICA8L2xpPgogICAgICAgIDxsaT4KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3Vycy5waHAiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImljLXciPjxpIGNsYXNzPSJmYSBmYS1yYXRpbmdzLWZhIj48L2k+PC9zcGFuPgogICAgICAgICAgICAgICAgU3RhcnQgUmF0aW5nISAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2xpPgogICAgICAgIDxsaSBjbGFzcz0ibGctb3V0LWxpIj4KICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9InNpZ24tb3V0Ij4KICAgICAgICAgICAgICAgIFNpZ24gb3V0ICAgICAgICAgICAgPC9hPgogICAgICAgIDwvbGk+CjwvdWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+PCEtLSB1c2VyLWxvZ2luIC1jb250YWluZXIgLS0+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImhlYWRlci1ib3R0b20iICA+CiAgICAgICAgPGRpdiBjbGFzcz0iY3BhbmVsIG5ld3Mtd3JhcHBlciI+Cgo8dWwgaWQ9ImF3YXJkc21lbnUiPgogICAgICAgICAgICA8bGkgPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY2F0ZWdvcnkucGhwP2lkPWxhdGVzdF9yZXZpZXdzIj5SZXZpZXdzPC9hPjwvbGk+PGxpIGNsYXNzPSJzZXAiPnw8L2xpPgogICAgICAgICAgICA8bGkgPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY2F0ZWdvcnkucGhwP2lkPVRSQUlMRVJTIj5UcmFpbGVyczwvYT48L2xpPjxsaSBjbGFzcz0ic2VwIj58PC9saT4KICAgICAgICAgICAgPGxpID48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2Jlc3RfMjAxOS5waHAiPjIwMTk8L2E+PC9saT48bGkgY2xhc3M9InNlcCI+fDwvbGk+CiAgICAgICAgICAgIDxsaSA+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3BnZW4ucGhwP2dlbnJlPSZmcm9teWVhcj0mdG95ZWFyPSZjb3VudHJ5PSZub2RvYyI+VG9wIEZBPC9hPjwvbGk+PGxpIGNsYXNzPSJzZXAiPnw8L2xpPgogICAgICAgICAgICA8bGkgPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYWxsX2F3YXJkcy5waHAiPkF3YXJkczwvYT48L2xpPjxsaSBjbGFzcz0ic2VwIj58PC9saT4KICAgICAgICAgICAgPGxpID48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2F3YXJkcy5waHA/YXdhcmRfaWQ9ZW1teSZ5ZWFyPTIwMjAiPkVNTVkgQXdhcmRzIDIwMjA8L2E+PC9saT48bGkgY2xhc3M9InNlcCI+fDwvbGk+CjwvdWw+CgoKCiAgICAgICAgPGRpdiBjbGFzcz0idmVyc2lvbi1zZWxlY3RvciI+CiAgICAgICAgICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAgICAgICAgIHZhciByZW1pbmRlclRleHQgPSAnRmlsbWFmZmluaXR5IGlzIGF2YWlsYWJsZSBpbiB5b3VyIGNvdW50cnkuIMKhVHJ5IG91dCB0aGlzIHZlcnNpb24hPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9tYWluLmh0bWwiIGNsYXNzPSJmYS1idXR0b24iIGRhdGEtdmVyc2lvbj0iZXMiPkdvIHRvIFNwYWluIHZlcnNpb248aSBjbGFzcz0iZmEgZmEtYW5nbGUtZG91YmxlLXJpZ2h0Ij48L2k+PC9hPjxkaXYgY2xhc3M9ImRpc2Nsb3N1cmUiPk5vLCBJIHdhbnQgdG8gc3RheSBpbiBVU0EgfCBVSyB2ZXJzaW9uPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICByZW5kZXJWZXJzaW9uUmVtaW5kZXIocmVtaW5kZXJUZXh0KTsKICAgICAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgICAgICA8dWwgY2xhc3M9InZlcnNpb24iPgogICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0iZW4iIGNsYXNzPSJmaXhlZCIgdGl0bGU9IkNoYW5nZSBsYXlvdXQiPlVTQSB8IFVLIDxpIGNsYXNzPSJmYXMgZmEtY2hldnJvbi1kb3duIj48L2k+PC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgPC9kaXY+Cg0KICAgIDxkaXYgY2xhc3M9InBhZ2UtdmVyc2lvbnMtcG9wIGZhLXNoYWRvdyI+DQogICAgICAgIDxkaXYgaWQ9InZtYXAiIHN0eWxlPSJ3aWR0aDogNjMwcHg7IGhlaWdodDogNDAwcHg7Ij48L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY291bnRyeS1uYW1lcyI+DQogICAgICAgICAgICA8dWwgY2xhc3M9ImNvbnRpbmVudHMiPg0KICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS1jb250aW5lbnQ9ImFtZXJpY2Etbm9ydGgiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj5Ob3J0aCBBbWVyaWNhIDxpIGNsYXNzPSJmYXMgZmEtc2VhcmNoLXBsdXMgbWFwLXpvb20iPjwvaT48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iY291bnRyaWVzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0idXMiIGRhdGEtY291bnRyeS1pZD0idXMiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvVVMucG5nIiBhbHQ9IlVuaXRlZCBTdGF0ZXMiIHRpdGxlPSJVbml0ZWQgU3RhdGVzIj4gVVNBIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLXZlcnNpb249ImNhIiBkYXRhLWNvdW50cnktaWQ9ImNhIj48aW1nIGNsYXNzPSJuZmxhZyIgc3JjPSIvaW1ncy9jb3VudHJpZXMyL0NBLnBuZyIgYWx0PSJDYW5hZGEiIHRpdGxlPSJDYW5hZGEiPiBDYW5hZGEgPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0ibXgiIGRhdGEtY291bnRyeS1pZD0ibXgiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvTVgucG5nIiBhbHQ9Ik1leGljbyIgdGl0bGU9Ik1leGljbyI+IE3DqXhpY28gPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLWNvbnRpbmVudD0iZXVyb3BlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+RXVyb3BlIDxpIGNsYXNzPSJmYXMgZmEtc2VhcmNoLXBsdXMgbWFwLXpvb20iPjwvaT48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iY291bnRyaWVzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0iZXMiIGRhdGEtY291bnRyeS1pZD0iZXMiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvRVMucG5nIiBhbHQ9IlNwYWluIiB0aXRsZT0iU3BhaW4iPiBTcGFpbiA8aSBjbGFzcz0iZmFzIGZhLWFycm93LXJpZ2h0IGdvLXRvLXZlcnNpb24iPjwvaT48L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJ1ayIgZGF0YS1jb3VudHJ5LWlkPSJnYiI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9HQi5wbmciIGFsdD0iVW5pdGVkIEtpbmdkb20iIHRpdGxlPSJVbml0ZWQgS2luZ2RvbSI+IFVLIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLXZlcnNpb249ImllIiBkYXRhLWNvdW50cnktaWQ9ImllIj48aW1nIGNsYXNzPSJuZmxhZyIgc3JjPSIvaW1ncy9jb3VudHJpZXMyL0lFLnBuZyIgYWx0PSJJcmVsYW5kIiB0aXRsZT0iSXJlbGFuZCI+IElyZWxhbmQgPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLWNvbnRpbmVudD0ib2NlYW5pYSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPk9jZWFuaWEgPGkgY2xhc3M9ImZhcyBmYS1zZWFyY2gtcGx1cyBtYXAtem9vbSI+PC9pPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJjb3VudHJpZXMiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJhdSIgZGF0YS1jb3VudHJ5LWlkPSJhdSI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9BVS5wbmciIGFsdD0iQXVzdHJhbGlhIiB0aXRsZT0iQXVzdHJhbGlhIj4gQXVzdHJhbGlhIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPg0KICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgIDx1bCBjbGFzcz0iY29udGluZW50cyI+DQogICAgICAgICAgICAgICAgPGxpIGRhdGEtY29udGluZW50PSJhbWVyaWNhLXNvdXRoIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj5Tb3V0aCBBbWVyaWNhIDxpIGNsYXNzPSJmYXMgZmEtc2VhcmNoLXBsdXMgbWFwLXpvb20iPjwvaT4gPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iY291bnRyaWVzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJhciIgZGF0YS1jb3VudHJ5LWlkPSJhciI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9BUi5wbmciIGFsdD0iQXJnZW50aW5hIiB0aXRsZT0iQXJnZW50aW5hIj4gQXJnZW50aW5hIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0iY2wiIGRhdGEtY291bnRyeS1pZD0iY2wiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvQ0wucG5nIiBhbHQ9IkNoaWxlIiB0aXRsZT0iQ2hpbGUiPiBDaGlsZSA8aSBjbGFzcz0iZmFzIGZhLWFycm93LXJpZ2h0IGdvLXRvLXZlcnNpb24iPjwvaT48L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLXZlcnNpb249ImNvIiBkYXRhLWNvdW50cnktaWQ9ImNvIj48aW1nIGNsYXNzPSJuZmxhZyIgc3JjPSIvaW1ncy9jb3VudHJpZXMyL0NPLnBuZyIgYWx0PSJDb2xvbWJpYSIgdGl0bGU9IkNvbG9tYmlhIj4gQ29sb21iaWEgPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJ1eSIgZGF0YS1jb3VudHJ5LWlkPSJ1eSI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9VWS5wbmciIGFsdD0iVXJ1Z3VheSIgdGl0bGU9IlVydWd1YXkiPiBVcnVndWF5IDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0icGUiIGRhdGEtY291bnRyeS1pZD0icGUiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvUEUucG5nIiBhbHQ9IlBlcnUiIHRpdGxlPSJQZXJ1Ij4gUGVyw7ogPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJlYyIgZGF0YS1jb3VudHJ5LWlkPSJlYyI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9FQy5wbmciIGFsdD0iRWN1YWRvciIgdGl0bGU9IkVjdWFkb3IiPiBFY3VhZG9yIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0idmUiIGRhdGEtY291bnRyeS1pZD0idmUiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvVkUucG5nIiBhbHQ9IlZlbmV6dWVsYSIgdGl0bGU9IlZlbmV6dWVsYSI+IFZlbmV6dWVsYSA8aSBjbGFzcz0iZmFzIGZhLWFycm93LXJpZ2h0IGdvLXRvLXZlcnNpb24iPjwvaT48L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLXZlcnNpb249ImNyIiBkYXRhLWNvdW50cnktaWQ9ImNyIj48aW1nIGNsYXNzPSJuZmxhZyIgc3JjPSIvaW1ncy9jb3VudHJpZXMyL0NSLnBuZyIgYWx0PSJDb3N0YSBSaWNhIiB0aXRsZT0iQ29zdGEgUmljYSI+IENvc3RhIFJpY2EgPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJibyIgZGF0YS1jb3VudHJ5LWlkPSJibyI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9CTy5wbmciIGFsdD0iQm9saXZpYSIgdGl0bGU9IkJvbGl2aWEiPiBCb2xpdmlhIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vZmEtaW50ZXJuYXRpb25hbC5waHAiIGNsYXNzPSJtb3JlLWluZm8iPjxpIGNsYXNzPSJmYXMgZmEtaW5mby1jaXJjbGUiPjwvaT4gTW9yZSBpbmZvcm1hdGlvbjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQoNCg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KDQogICAgdmFyIG1hcFZlcnNpb25zID0geyJ1cyI6IiMzQzZFOTkiLCJjYSI6IiMzQzZFOTkiLCJteCI6IiMzQzZFOTkiLCJlcyI6IiMzQzZFOTkiLCJnYiI6IiMzQzZFOTkiLCJpZSI6IiMzQzZFOTkiLCJhdSI6IiMzQzZFOTkiLCJhciI6IiMzQzZFOTkiLCJjbCI6IiMzQzZFOTkiLCJjbyI6IiMzQzZFOTkiLCJ1eSI6IiMzQzZFOTkiLCJwZSI6IiMzQzZFOTkiLCJlYyI6IiMzQzZFOTkiLCJ2ZSI6IiMzQzZFOTkiLCJjciI6IiMzQzZFOTkiLCJibyI6IiMzQzZFOTkifTsNCiAgICANCi8qICAvL3BhcmEgc2FjYXIgdHJhemFzIGRlIGNvb3JkZW5hZGFzLg0KICAgIGpRdWVyeSgnI3ZtYXAnKS5vbignZHJhZycsIGZ1bmN0aW9uKGV2ZW50KQ0KICAgIHsNCiAgICAgICAgY29uc29sZS5sb2coanF2bWFwLnRyYW5zWCk7DQogICAgICAgIGNvbnNvbGUubG9nKGpxdm1hcC50cmFuc1kpOw0KICAgICAgICBjb25zb2xlLmxvZyhqcXZtYXAuc2NhbGUpOw0KICAgICAgICBjb25zb2xlLmxvZyhqcXZtYXAuem9vbUN1clN0ZXApOw0KICAgIH0pOw0KKi8gICAgDQogICAgDQoNCjwvc2NyaXB0Pg0KCiAgICA8L2Rpdj4KPC9kaXY+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0iY3BhbmVsIGFkdmVyLXdyYXBwZXIiPgo8ZGl2IGlkPSJ0b3AtYWQiIGNsYXNzPSJhZHZlci1maXgiPgogICAgPGRpdiBpZD0nc2MtdG9wJyBjbGFzcz0ic2MtdG9wIj4KCiAgICAgICAgICAgPHNjcmlwdD4KCiAgICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5kaXNwbGF5KCdzYy10b3AnKTsKCiAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgIDwvc2NyaXB0PgoKICAgIDwvZGl2PgoKICAgIDwhLS0gc2Mtb29wLS0+CgogICAgPGRpdiBpZD0nc2Mtb29wJyBjbGFzcz0ic2Mtb29wIj4KCiAgICAgICAgICAgPHNjcmlwdD4KCiAgICAgICAgICAgICAgICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgZ29vZ2xldGFnLmRpc3BsYXkoJ3NjLW9vcCcpOwoKICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgPC9zY3JpcHQ+CgogICAgPC9kaXY+CjwvZGl2PgoNCg0KDQoNCg0KDQoNCg0KPC9kaXY+Cgo8ZGl2IGlkPSJ0b3AtYW5jaCI+CiAgICA8YSB0aXRsZT0iQmFjayB0byB0b3AiIGhyZWY9IiNoZWFkZXItdG9wIj4KICAgICAgICA8aW1nIGFsdD0iYXJyb3ciIHNyYz0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9pbWFnZXMvYXJyb3ctdXAyLnBuZyI+CiAgICA8L2E+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjcGFuZWwiPgogIDx0YWJsZSBpZD0ibWFpbi1jb250ZW50LXRhYmxlIj4KICAgIDx0cj4KICAgICAgPHRkIGlkPSJtdC1sZWZ0LWNlbGwiPgogICAgICAgIDxkaXYgaWQ9ImxzbWVudSI+CjxkaXYgY2xhc3M9ImNhdC1jb250YWluZXIiPgo8ZGl2IGNsYXNzPSJsc21oZWFkZXIiPlVzZXJzPC9kaXY+Cjx1bD4KPGxpID48YSBjbGFzcz0icmF0ZS10b3VycyIgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vdG91cnMucGhwIj5TdGFydCBSYXRpbmchPC9hPjwvbGk+PGxpID48YSBjbGFzcz0ic2lnbi1pbiIgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbG9naW4ucGhwIj5TaWduIGluPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9yZWdpc3Rlci5waHAiPlJlZ2lzdGVyPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0iY2F0LWNvbnRhaW5lciI+CjxkaXYgY2xhc3M9ImxzbWhlYWRlciI+Tm93IFBsYXlpbmc8L2Rpdj4KPHVsPgo8bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2NhdF9uZXdfdGhfdXMuaHRtbCI+VVMgLSBOZXcgUmVsZWFzZXM8L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3JkY2F0LnBocD9pZD11cGNfdGhfdXMiPlVTIC0gQ29taW5nIFNvb248L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2NhdF9uZXdfdGhfdWsuaHRtbCI+VUsgLSBOZXcgUmVsZWFzZXM8L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3JkY2F0LnBocD9pZD11cGNfdGhfdWsiPlVLIC0gVXBjLiBSZWxlYXNlczwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY2F0X2VzdHJfZnIuaHRtbCI+RnJhbmNlIC0gTmV3IFJlbGVhc2VzPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9jYXRfbmV3X25ldGZsaXguaHRtbCI+TmV0ZmxpeDwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vcmRjYXQucGhwP2lkPXVwY19uZXRmbGl4Ij5OZXRmbGl4IChjb21pbmcgc29vbik8L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2NhdF9uZXdfaGJvLmh0bWwiPkhCTzwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY2F0X25ld19hbWF6b24uaHRtbCI+QW1hem9uPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9jYXRfZGlzbmV5cGx1cy5odG1sIj5EaXNuZXkrPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9jYXRfYXBwbGVfdHZfcGx1cy5odG1sIj5BcHBsZSBUVis8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJjYXQtY29udGFpbmVyIj4KPGRpdiBjbGFzcz0ibHNtaGVhZGVyIj5TZWUgTW9yZTwvZGl2Pgo8dWw+CjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYm94b2ZmaWNlLnBocCI+Qm94IE9mZmljZTwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vdHJhaWxlcnMucGhwIj5UcmFpbGVyczwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGF0ZXN0ZXZpZGVvcy5waHAiPkxhdGVzdCBUcmFpbGVyczwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY2F0ZWdvcnkucGhwP2lkPWxhdGVzdF9yZXZpZXdzIj5XaGF0IENyaXRpY3MgU2F5PC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3BpY3MucGhwIj5GaWxtcyBieSBLZXl3b3JkPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9tb3ZpZS1ncm91cHMtYWxsLnBocCI+U2FnYXMgJiBGcmFuY2hpc2VzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0iY2F0LWNvbnRhaW5lciI+CjxkaXYgY2xhc3M9ImxzbWhlYWRlciI+VFYgU2VyaWVzPC9kaXY+Cjx1bD4KPGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9jYXRfY3VycmVudF90di5odG1sIj5Qb3B1bGFyIFRWIFNob3dzPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3BnZW4ucGhwP2dlbnJlPVRWX1NFJmNvdW50cnk9JmZyb215ZWFyPSZ0b3llYXI9Jm5vZG9jIj5Ub3AgVFYgU2VyaWVzPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3VyLnBocD9pZHRvdXI9MjYiPlJhdGUgVFYgU2VyaWVzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0iY2F0LWNvbnRhaW5lciI+CjxkaXYgY2xhc3M9ImxzbWhlYWRlciI+VE9QczwvZGl2Pgo8dWw+CjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vdG9wZ2VuLnBocCI+VG9wIEZpbG1hZmZpbml0eTwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYmVzdF90b3BzLnBocCI+VG9wIG9mIHRoZSBUb3BzPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3BjYXRfbmV3X3RoX3VzLmh0bWwiPlRvcCBOZXcgUmVsZWFzZXM8L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3RzcmFuay5waHAiPlRvcCBvZiB0aGUgTGlzdHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJjYXQtY29udGFpbmVyIj4KPGRpdiBjbGFzcz0ibHNtaGVhZGVyIj5Bd2FyZHMgJiBGZXN0aXZhbHM8L2Rpdj4KPHVsPgo8bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2FsbF9hd2FyZHMucGhwIj5Bd2FyZHMgJiBGZXN0aXZhbHM8L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL29zY2FyX2RhdGEucGhwIj5BbGwgT3NjYXJzPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9iZXN0XzIwMTkucGhwIj5CZXN0IG9mIDIwMTk8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJjYXQtY29udGFpbmVyIj4KPGRpdiBjbGFzcz0ibHNtaGVhZGVyIj5BYm91dCBGaWxtYWZmaW5pdHk8L2Rpdj4KPHVsPgo8bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3NpdGUtZ3VpZGUucGhwIj5BYm91dCBGQTwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY29udGFjdF91cy5waHAiPkNvbnRhY3QgVXM8L2E+PC9saT48L3VsPjwvZGl2Pgo8L2Rpdj4KICAgICAgPC90ZD4KICAgICAgPHRkPgogICAgICAgIDxkaXYgaWQ9Im10LWNvbnRlbnQtY2VsbCI+CiAgICAgICAgICAgIDxkaXYgaWQ9InNoLXBvcy1hYnMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2gtaGVhZGVyIiB0aXRsZT0iU2hhcmUiPjxpIGNsYXNzPSJmYXMgZmEtc2hhcmUtYWx0Ij48L2k+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8c3R5bGU+CiAgICAjaGlkZGVuLXVybCB7cG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiA2NXB4OyB0b3A6IDJweDsgZGlzcGxheTogbm9uZTsgcGFkZGluZzogMnB4IDZweCA0cHggNnB4OyBiYWNrZ3JvdW5kOiAjZmRjYzFhOyBtYXJnaW4tdG9wOiA1cHg7IHdpZHRoOiA0ODVweDsgYm9yZGVyLXJhZGl1czogNXB4OyBhbmltYXRpb24tZHVyYXRpb246IC4zczsgei1pbmRleDogMTAwO30KICAgICNoaWRkZW4tdXJsIGlucHV0eyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyBvdXRsaW5lOiBub25lOyBib3JkZXI6IDFweCBzb2xpZCAjREREREREOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDhweCA0cHg7IHdpZHRoOiA0MzVweDsgbWFyZ2luLWxlZnQ6IDVweDsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTt9CiAgICAjaGlkZGVuLXVybCAuaGlkZS11cmwge2N1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAyMnB4OyBtYXJnaW46IDAgNXB4OyBjb2xvcjogIzAwMDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTt9CiAgICAjY29weS1jbGlwYm9hcmQge3Bvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMHB4OyB0b3A6IDMxcHg7IHBhZGRpbmc6IDJweCA2cHg7IGJhY2tncm91bmQ6ICNmZGNjMWE7IG1hcmdpbi10b3A6IDVweDsgYW5pbWF0aW9uLWR1cmF0aW9uOiAuM3M7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDsgd2lkdGg6IDIwMHB4OyBjdXJzb3I6IHBvaW50ZXI7IHBhZGRpbmctbGVmdDogMTVweDt9Cjwvc3R5bGU+Cgo8c2NyaXB0PgoKICAgIGZ1bmN0aW9uIGhpZGVPbkNsaWNrKCApewogICAgICAgICQoZG9jdW1lbnQpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICAgIGlmKCEkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLmhkLXNoLXdyYXBwZXInKS5sZW5ndGggJiYgISQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCcjaGlkZGVuLXVybCcpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgaWYoJCgnLmhkLXNoLXdyYXBwZXInKS5pcygiOnZpc2libGUiKSkgewogICAgICAgICAgICAgICAgICAgIC8vJCgnLmhpZGRlbi1zaGFyZS13cmFwcGVyJykuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICQoJy5zaC1oZWFkZXInKS50cmlnZ2VyKCdjbGljaycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9ICAgICAgICAKICAgICAgICB9KTsKICAgIH0gIAogCiAgICAkKGZ1bmN0aW9uKCkgewogICAgICAgICQoJy5oZC1zaC13cmFwcGVyJykuYmluZCgnYW5pbWF0aW9uRW5kIG9BbmltYXRpb25FbmQgbXNBbmltYXRpb25FbmQgbW96QW5pbWF0aW9uRW5kIHdlYmtpdEFuaW1hdGlvbkVuZCcsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgaWYoICAkKGV2ZW50LnRhcmdldCkuaGFzQ2xhc3MoJ25rb291dCcpICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJCgnLmhkLXNoLXdyYXBwZXInKS5oaWRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgIH0pOyAgICAgICAgCgogICAgICAgICQoJyNzaC1wb3MtYWJzJykudG9nZ2xlKCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgJCgnLnNoLWhlYWRlcicpLmFkZENsYXNzKCdjbGlja2VkJyk7CiAgICAgICAgICAgICAgICAkKCcuaGQtc2gtd3JhcHBlcicpLnJlbW92ZUNsYXNzKCdua29vdXQnKS5hZGRDbGFzcygnbmtvaW4nKS5zaG93KCk7CiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkKCcuaGQtc2gtd3JhcHBlcicpLnJlbW92ZUNsYXNzKCdua29pbicpLmFkZENsYXNzKCdua29vdXQnKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJCgnLm1haW4tc2gnKS5yZW1vdmVDbGFzcygnY2xpY2tlZCcpOwogICAgICAgICAgICAgICAgaWYoICQoJyNoaWRkZW4tdXJsJykuaXMoIjp2aXNpYmxlIikgKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI2NvcHktdG8tY2xpcCcpLmNsaWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgLy92YXIgcGF0aG5hbWUgPSAnaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbScgKyBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaDsKICAgICAgICB2YXIgcGF0aG5hbWUgPSBlbmNvZGVVUkkoJ2h0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vZmlsbTUwNDg4OS5odG1sJyk7CiAgICAgICAgdmFyIHNsaWRlT3B0aW9ucyA9IHsgZGlyZWN0aW9uOiAnbGVmdCcgfTsKCiAgICAgICAgJCgnI2NvcHktdG8tY2xpcCcpLnRvZ2dsZSgKICAgICAgICAgICAgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICQoJyNoaWRkZW4tdXJsJykuc2hvdygpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgJCgnI2hpZGRlbi11cmwnKS5maW5kKCc6aW5wdXQnKS52YWwocGF0aG5hbWUpOwogICAgICAgICAgICAgICAgICAgIC8vJCgnI2hpZGRlbi11cmwnKS5maW5kKCc6aW5wdXQnKS5zZWxlY3QoKTsKICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dCA9ICQoJyNoaWRkZW4tdXJsJykuZmluZCgnOmlucHV0JykudGV4dCgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICQoJyNoaWRkZW4tdXJsJykuaGlkZSgpOwogICAgICAgIH0pOwoKICAgICAgICAkKCcjaGlkZGVuLXVybCcpLm9uKCdjbGljaycsICcjY29weS1jbGlwYm9hcmQnLCBmdW5jdGlvbigpewogICAgICAgICAgICAkKHRoaXMpLnRleHQoICQoJyNjb3B5LWNsaXBib2FyZCcpLmF0dHIoJ2RhdGEtdGV4dCcpICk7CiAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KCBwYXRobmFtZSApCiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIHBhdGhuYW1lICk7CiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvcHkgdGV4dDogJywgZXJyKTsKICAgICAgICAgICAgfSk7ICAKICAgICAgICB9KQoKICAgICAgICAkKCcjaGlkZGVuLXVybCcpLmZpbmQoJy5oaWRlLXVybCcpLmNsaWNrKGZ1bmN0aW9uKCkKICAgICAgICB7CiAgICAgICAgICAgICQoJyNjb3B5LXRvLWNsaXAnKS50cmlnZ2VyKCdjbGljaycpCiAgICAgICAgfSk7CgogICAgICAgIGhpZGVPbkNsaWNrKCk7CiAgICB9KTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPSJoZC1zaC1tYWluLXdyYXBwZXIiPgogICAgPGRpdiBjbGFzcz0iaGQtc2gtd3JhcHBlciI+CiAgICAgICAgPGEgaWQ9ImNvcHktdG8tY2xpcCIgdGl0bGU9IkNvcHkgVVJMIiBocmVmPSIjIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhcmUtaWNvbiIgaWQ9ImNvcHktdG8tY2xpcC1jb250YWluZXIiPjxpIGNsYXNzPSJmYXMgZmEtbGluayI+PC9pPjwvZGl2PgogICAgICAgIDwvYT4KICAgICAgICAgICAgCiAgICAgICAgPGEgY2xhc3M9ImZiLXNoIiB0YXJnZXQ9Il9CTEFOSyIgaHJlZj0iaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3NoYXJlci5waHA/dT1odHRwcyUzQSUyRiUyRnd3dy5maWxtYWZmaW5pdHkuY29tJTJGZW4lMkZmaWxtNTA0ODg5Lmh0bWwmdD1UaGUgVHJ1bWFuIFNob3cgICgxOTk4KSIgdGl0bGU9IlNoYXJlIG9uIEZhY2Vib29rIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhcmUtaWNvbiI+PGkgY2xhc3M9ImZhYiBmYS1mYWNlYm9vay1mIj48L2k+PC9kaXY+CiAgICAgICAgPC9hPgogICAgCiAgICAgICAgPGEgY2xhc3M9InR3LXNoIiB0YXJnZXQ9Il9CTEFOSyIgdGl0bGU9IlNoYXJlIG9uIFR3aXR0ZXIiIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vaW50ZW50L3R3ZWV0P3RleHQ9VGhlJTIwVHJ1bWFuJTIwU2hvdyUyMCUyMCUyODE5OTglMjkmbmJzcDtpbiBAZmlsbWFmZmluaXR5IGh0dHBzJTNBJTJGJTJGd3d3LmZpbG1hZmZpbml0eS5jb20lMkZlbiUyRmZpbG01MDQ4ODkuaHRtbCIgdGl0bGU9IlNoYXJlIG9uIFR3aXR0ZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFyZS1pY29uIj48aSBjbGFzcz0iZmFiIGZhLXR3aXR0ZXIiPjwvaT48L2Rpdj4KICAgICAgICA8L2E+CiAgICAgICAgPGEgY2xhc3M9IndoLXNoIiB0YXJnZXQ9Il9CTEFOSyIgdGl0bGU9IlNoYXJlIG9uIHdoYXRzYXBwIiBocmVmPSJodHRwczovL2FwaS53aGF0c2FwcC5jb20vc2VuZD90ZXh0PVRoZSUyMFRydW1hbiUyMFNob3clMjAlMjAlMjgxOTk4JTI5Jm5ic3A7aW4gQGZpbG1hZmZpbml0eSBodHRwcyUzQSUyRiUyRnd3dy5maWxtYWZmaW5pdHkuY29tJTJGZW4lMkZmaWxtNTA0ODg5Lmh0bWwiIHRpdGxlPSJTaGFyZSBvbiB3aGF0c2FwcCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYXJlLWljb24iPjxpIGNsYXNzPSJmYWIgZmEtd2hhdHNhcHAiPjwvaT48L2Rpdj4KICAgICAgICA8L2E+CiAKPC9kaXY+CjwvZGl2PgoKICAgIDxkaXYgaWQ9ImhpZGRlbi11cmwiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI1NSI+PGkgY2xhc3M9ImZhcyBmYS10aW1lcy1jaXJjbGUgaGlkZS11cmwiPjwvaT4KICAgICAgICA8ZGl2IGlkPSJjb3B5LWNsaXBib2FyZCIgZGF0YS10ZXh0PSJjb3BpZWQiPmNvcHkgdG8gY2xpcGJvYXJkPC9kaXY+CiAgICA8L2Rpdj4KCgogICAgCgoKCjxkaXYgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9Nb3ZpZSI+CiAgICA8aDEgaWQ9Im1haW4tdGl0bGUiPgogICAgICAgIDxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5UaGUgVHJ1bWFuIFNob3cgPC9zcGFuPgogICAgPC9oMT4KCgoKCjxzY3JpcHQ+CiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAgICAkKCIjc2hvdy1hbGwtcHJvIikuY2xpY2soZnVuY3Rpb24oZXZlbnQpewogICAgICAgICQodGhpcykucGFyZW50KCdsaScpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAkKCIuaGlkZGVuIikuc2xpZGVEb3duKCdzbG93Jyk7CiAgICB9KTsKCiAgICAkKCIjc2hvdy1hbGwtYXdhcmRzIikuY2xpY2soZnVuY3Rpb24oZXZlbnQpewogICAgICAgICQodGhpcykucGFyZW50KCdkaXYnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgJCgiLmhpZGRlbi1hd2FyZHMiKS5zbGlkZURvd24oJ3Nsb3cnKTsKICAgIH0pOwoKICAgICQoJy56LW1vdmllIC5jcmVkaXRzJykub24oJ2NsaWNrJywgJy5zZWUtbW9yZS1jcmVkaXRzJyAsZnVuY3Rpb24oKXsKICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2RpdicpLmZpbmQoJy5oaWRkZW4tY3JlZGl0JykuY3NzKCdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpOwogICAgICAgIHZhciAkbGFzdCA9ICQodGhpcykuY2xvc2VzdCgnZGl2JykuZmluZCgnLm5iOmxhc3QgYScpOwogICAgICAgIGlmKCAkbGFzdC5sZW5ndGggPT0gMCApewogICAgICAgICAgICB2YXIgJGxhc3QgPSAkKHRoaXMpLmNsb3Nlc3QoJ2RpdicpLmZpbmQoJy5uYjpsYXN0IHNwYW4nKTsKICAgICAgICB9CgogICAgICAgICQodGhpcykuY2xvc2VzdCgnZGl2JykuZmluZCgnLm5iOmxhc3QnKS5odG1sKCRsYXN0WzBdLm91dGVySFRNTCk7CiAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCdkaXYnKS5maW5kKCcudC1wJykuaGlkZSgpOwoKICAgICAgICAkKHRoaXMpLmh0bWwoIlNlZSBsZXNzIikuYWRkQ2xhc3MoJ3NlZS1sZXNzLWNyZWRpdHMnKS5yZW1vdmVDbGFzcygnc2VlLW1vcmUtY3JlZGl0cycpOwogICAgfSkKCiAgICAkKCcuei1tb3ZpZSAuY3JlZGl0cycpLm9uKCdjbGljaycsICcuc2VlLWxlc3MtY3JlZGl0cycgLCBmdW5jdGlvbigpewogICAgICAgICQodGhpcykuY2xvc2VzdCgnZGl2JykuZmluZCgnLmhpZGRlbi1jcmVkaXQnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgICAgICQodGhpcykuaHRtbCgiU2VlIE1vcmUiKS5hZGRDbGFzcygnc2VlLW1vcmUtY3JlZGl0cycpLnJlbW92ZUNsYXNzKCdzZWUtbGVzcy1jcmVkaXRzJyk7CiAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCdkaXYnKS5maW5kKCcudC1wJykuc2hvdygpOwogICAgfSkKCiAgICAkKCIjY2JveE92ZXJsYXkiKS5vbignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgICQoJy5zaG93LWFrYXMnKS5vbignY2xpY2snLCBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgdmFyIGljb24gPSAkKHRoaXMpLmZpbmQoJ2knKTsKICAgICAgICBpZihpY29uLmhhc0NsYXNzKCdmYS1jYXJldC1kb3duJykpCiAgICAgICAgewogICAgICAgICAgICAkKCcuYWthcycpLnNsaWRlRG93bigpOwogICAgICAgICAgICBpY29uLnJlbW92ZUNsYXNzKCdmYS1jYXJldC1kb3duJykuYWRkQ2xhc3MoJ2ZhLWNhcmV0LXVwJyk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICQoJy5ha2FzJykuc2xpZGVVcCgpOwogICAgICAgICAgICBpY29uLnJlbW92ZUNsYXNzKCdmYS1jYXJldC11cCcpLmFkZENsYXNzKCdmYS1jYXJldC1kb3duJyk7CiAgICAgICAgfQoKICAgIH0pOwp9KTsKPC9zY3JpcHQ+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIG5ldyBSYXRpbmdCYXJzKCQoJyNyYXQtZGlzcCcpLCBbMTUsNTQsMTAwLDc2LDMxLDgsMywxLDEsMF0pOwogICAgICAgICAgICB9KTsKICAgICAgICA8L3NjcmlwdD4KCjxkaXYgY2xhc3M9InotbW92aWUiPgoKPHNjcmlwdD4NCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgJCgiI21vcmUtY2F0ZWdvcmllcyIpLmNsaWNrKGZ1bmN0aW9uKGUpew0KICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsNCiAgICAgICAgJCgiLmhpZGRlbi1tZW51IikudG9nZ2xlKCk7DQogICAgfSk7DQoNCiAgICAvL3BhcmEgcG9uZXIgZWwgbGV0cmVyaXRvIGRlIG5vdmVkYWQNCiAgICAvLyQoIi5uZXciKS5hcHBlbmQoJzxkaXYgaWQ9InRvb2x0aXAtbmV3Ij5ub3ZlZGFkPC9kaXY+Jyk7DQp9KTsNCg0KJChkb2N1bWVudCkuY2xpY2soZnVuY3Rpb24oKSB7DQogICAgJCgiLmhpZGRlbi1tZW51IikuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsNCn0pOw0KDQo8L3NjcmlwdD4NCg0KPGRpdiBjbGFzcz0ibWFyZ2luLW50YWJzIj4NCiAgICANCiAgICANCiAgICANCg0KPHVsIGNsYXNzPSJudGFicyI+DQogICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vZmlsbTUwNDg4OS5odG1sIj5Nb3ZpZSZuYnNwOzwvYT48L2xpPg0KICAgIDxsaSA+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9ldmlkZW9zLnBocD9tb3ZpZV9pZD01MDQ4ODkiPlRyYWlsZXJzJm5ic3A7PGVtPlsxXTwvZW0+PC9hPjwvbGk+DQogICAgPGxpID48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2ZpbG1pbWFnZXMucGhwP21vdmllX2lkPTUwNDg4OSI+SW1hZ2UgZ2FsbGVyeSZuYnNwOzxlbT5bMTRdPC9lbT48L2E+PC9saT4NCjwvdWw+DQo8L2Rpdj4NCgogICAgPGRpdiBpZD0icmlnaHQtY29sdW1uIj4KICAgICAgICA8ZGl2IGlkPSJtb3ZpZS1tYWluLWltYWdlLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGlnaHRib3giIHN0eWxlPSJkaXNwbGF5OiBibG9jazsiIGhyZWY9Imh0dHBzOi8vcGljcy5maWxtYWZmaW5pdHkuY29tL3RoZV90cnVtYW5fc2hvdy0xMzAwOTE1NTctbGFyZ2UuanBnIiB0aXRsZT0iVGhlIFRydW1hbiBTaG93ICIgZGF0YS10PSI8cCBzdHlsZT1mb250LXNpemU6OXB4O2ZvbnQtZmFtaWx5OmFyaWFsO2NvbG9yOiM2NjY2NjY7PkFsbCBpbWFnZXMgYXJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIHJlc3BlY3RpdmUgY29weXJpZ2h0IGhvbGRlcnMgYW5kL29yIHByb2R1Y2Vycy9kaXN0cmlidXRvcnMuPC9wPiIgZGF0YS1tb3ZpZS1pZD0iNTA0ODg5Ij4KICAgICAgICA8aW1nIGl0ZW1wcm9wPSJpbWFnZSIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIyMzgiIHNyYz0iaHR0cHM6Ly9waWNzLmZpbG1hZmZpbml0eS5jb20vdGhlX3RydW1hbl9zaG93LTEzMDA5MTU1Ny1tbWVkLmpwZyIgYWx0PSJUaGUgVHJ1bWFuIFNob3cgIj4gICAgICAgIDxzcGFuIHRpdGxlPSJTZWUgdHJhaWxlciIgY2xhc3M9InNlZS10cmFpbGVyIj48aSBjbGFzcz0iZmFzIGZhLXBsYXktY2lyY2xlIj48L2k+PC9zcGFuPgogICAgPC9hPgogICAgICAgIDwvZGl2PgoKCiAgICAgICAgPGRpdiBpZD0icmF0LWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxkaXYgaWQ9InJhdC1hdmctY291bnQiIGl0ZW1wcm9wPSJhZ2dyZWdhdGVSYXRpbmciIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvQWdncmVnYXRlUmF0aW5nIj4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1vdmllLXJhdC1pbWFnZSI+PHNwYW4gaWQ9InN0YXJzIj48aW1nIHNyYz0iL2ltZ3MvcmF0aW5ncy84LnBuZyI+PC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBpZD0icmF0LWF2Zy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1vdmllLXJhdC1hdmciIGl0ZW1wcm9wPSJyYXRpbmdWYWx1ZSIgY29udGVudD0iNy43Ij4KICAgICAgICAgICAgICAgICAgICAgICAgNy43ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8bWV0YSBpdGVtcHJvcD0iYmVzdFJhdGluZyIgY29udGVudD0iMTAiLz4KICAgICAgICAgICAgICAgICAgICA8bWV0YSBpdGVtcHJvcD0id29yc3RSYXRpbmciIGNvbnRlbnQ9IjEiLz4KICAgICAgICAgICAgICAgICAgICA8bWV0YSBpdGVtcHJvcD0icmV2aWV3Q291bnQiIGNvbnRlbnQ9IjIwMSIvPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1vdmllLWNvdW50LXJhdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGl0ZW1wcm9wPSJyYXRpbmdDb3VudCIgY29udGVudD0iMTIwMTIyIj4xMjAsMTIyPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJtb3ZpZS1jb3VudC1yYXQtdGV4dCI+UmF0aW5nczwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCgogICAgICAgICAgICA8ZGl2IGlkPSJyYXQtZ3JhcGgiPgogICAgICAgICAgICAgICAgPGNhbnZhcyBzdHlsZT0icGFkZGluZzogM3B4OyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXI6IDFweCBzb2xpZCAjQ0REQ0VCIiBoZWlnaHQ9IjgxIiB3aWR0aD0iMTIwIiBpZD0icmF0LWRpc3AiPgogICAgICAgICAgICAgICAgICAgIFBsdWdpbiBub3Qgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICA8L2NhbnZhcz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgPC9kaXY+CjxkaXYgY2xhc3M9InJhdGUtbW92aWUtYm94IiBkYXRhLW1vdmllLWlkPSI1MDQ4ODkiIGRhdGEtdXNlci1yYXRpbmc9IiI+DQogICAgPGRpdiBjbGFzcz0icmF0ZS13cmFwcGVyIj4NCiAgICAgIDxkaXYgY2xhc3M9InJ0LWJveCI+PGEgY2xhc3M9InNpZ24taW4iIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbG9naW4ucGhwIj5SYXRlIHRoaXMgbW92aWU8L2E+PC9kaXY+DQogICAgICAgIDwvZGl2Pg0KPC9kaXY+DQoKCgoKPGRpdiBjbGFzcz0iYWRkLW1vdmllLWxpc3QtY29udCI+CiAgICA8ZGl2IGNsYXNzPSJhZGQtdGV4dC1jb250ZW50Ij4KICAgIDxkaXYgY2xhc3M9ImFkZC1tb3ZpZS1saXN0LWluZm8gYWRkLXRvLWxpc3QtYnV0dG9uIj4KPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9lZHRtb3ZpZWxpc3RzLnBocD9tb3ZpZV9pZD01MDQ4ODkiPkFkZCB0byBsaXN0czwvYT4gICAgPC9kaXY+CiAgICA8L2Rpdj4KCjxkaXYgY2xhc3M9Imxpc3RzLWJveCI+PC9kaXY+Cgo8L2Rpdj4KPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9wcm8tcmV2aWV3cy5waHA/bW92aWUtaWQ9NTA0ODg5Ij4KICAgIDxkaXYgY2xhc3M9ImZpbG0tcmlnaHQtYm94IHByby1yZXZpZXdzLWNoYXJ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+UHJvIHJldmlld3M8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvLXJldmlld3MtY2hhcnQtd3JhcHBlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b3RhbC1hYnMiIHRpdGxlPSIxMCBjcsOtdGljYXMgcHJvZmVzaW9uYWxlcyI+CiAgICAgICAgICAgICAgICAgICAgMTAgPHNtYWxsPjxpIGNsYXNzPSJmYSBmYS1zaW1wbGUtdXNlci1vLWZhIj48L2k+PC9zbWFsbD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0ibXlDaGFydCIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMTBweDsgd2lkdGg6IDcwcHg7IGhlaWdodDogNzBweDsiPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZyI+OTxpIGNsYXNzPSJmYSBmYS1zaW1wbGUtdXNlci1vLWZhIj48L2k+IDxpIGNsYXNzPSJmYXMgZmEtY2lyY2xlICBwb3MiIHRpdGxlPSJQb3NpdGl2ZSByZXZpZXciIHN0eWxlPSJjb2xvcjogIzRDQUY1MCI+PC9pPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZyI+MTxpIGNsYXNzPSJmYSBmYS1zaW1wbGUtdXNlci1vLWZhIj48L2k+IDxpIGNsYXNzPSJmYXMgZmEtY2lyY2xlICBuZXUiIHRpdGxlPSJOZXV0cmFsIFJldmlldyIgc3R5bGU9ImNvbG9yOiAjRkZCRjAwIj48L2k+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnIj4wPGkgY2xhc3M9ImZhIGZhLXNpbXBsZS11c2VyLW8tZmEiPjwvaT4gPGkgY2xhc3M9ImZhcyBmYS1jaXJjbGUgIG5lZyIgdGl0bGU9Ik5lZ2F0aXZlIFJldmlldyIgc3R5bGU9ImNvbG9yOiAjRjQ0MzM2Ij48L2k+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+PCEtLSBib2R5IC0tPgogICAgPC9kaXY+CjwvYT4KPHNjcmlwdD4KICAgICAgICB2YXIgcmFuZG9tU2NhbGluZ0ZhY3RvciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwKTsKICAgICAgICB9OwoKICAgIHZhciBjdHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlDaGFydCcpOwogICAgICAgIHZhciBjb25maWcgPSB7CiAgICAgICAgICAgIHR5cGU6ICdkb3VnaG51dCcsCiAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgIGRhdGFzZXRzOiBbewogICAgICAgICAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICAgICAgICAgICAgMzYwLAogICAgICAgICAgICAgICAgICAgICAgICA0MCwKICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogWwogICAgICAgICAgICAgICAgICAgICAgICAnIzAwODAwMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICcjRkZBNTAwJywKICAgICAgICAgICAgICAgICAgICAgICAgJyNGRjAwMDAnLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdEYXRhc2V0IDEnCiAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgIGxhYmVsczogWwogICAgICAgICAgICAgICAgICAgICdQb3NpdGl2YXMnLAogICAgICAgICAgICAgICAgICAgICdOZXV0cmFzJywKICAgICAgICAgICAgICAgICAgICAnTmVnYXRpdmFzJywKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgcmVzcG9uc2l2ZTogZmFsc2UsCiAgICAgICAgICAgICAgICBsZWdlbmQ6IHsKICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB0aXRsZTogewogICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogewogICAgICAgICAgICAgICAgICAgIGFuaW1hdGVTY2FsZTogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBhbmltYXRlUm90YXRlOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgY3V0b3V0UGVyY2VudGFnZTogNzUsCiAgICAgICAgICAgICAgICB0b29sdGlwczogewogICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB2YXIgbXlDaGFydCA9IG5ldyBDaGFydChjdHgsIGNvbmZpZyk7Cjwvc2NyaXB0PgoKCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJsZWZ0LWNvbHVtbiI+CiAgICAgICAgPGRsIGNsYXNzPSJtb3ZpZS1pbmZvIj4KICAgICAgICAgICAgPGR0Pk9yaWdpbmFsIHRpdGxlPC9kdD4KICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIFRydW1hbiBTaG93ICAgICAgICAgICAgIDwvZGQ+CgoKCgogICAgICAgICAgICA8ZHQ+WWVhcjwvZHQ+CiAgICAgICAgICAgIDxkZCBpdGVtcHJvcD0iZGF0ZVB1Ymxpc2hlZCI+MTk5ODwvZGQ+CgogICAgICAgICAgICA8ZHQ+UnVubmluZyB0aW1lPC9kdD4KICAgICAgICAgICAgPGRkIGl0ZW1wcm9wPSJkdXJhdGlvbiI+MTAzIG1pbi48L2RkPgoKICAgICAgICAgICAgPGR0PkNvdW50cnk8L2R0PgogICAgICAgICAgICA8ZGQ+PHNwYW4gaWQ9ImNvdW50cnktaW1nIj48aW1nIGNsYXNzPSJuZmxhZyIgc3JjPSIvaW1ncy9jb3VudHJpZXMyL1VTLnBuZyIgYWx0PSJVbml0ZWQgU3RhdGVzIiB0aXRsZT0iVW5pdGVkIFN0YXRlcyI+PC9zcGFuPiZuYnNwO1VuaXRlZCBTdGF0ZXM8L2RkPgogICAgICAgICAgICA8ZHQ+RGlyZWN0b3I8L2R0PgogICAgICAgICAgICA8ZGQgY2xhc3M9ImRpcmVjdG9ycyI+CjxkaXYgY2xhc3M9ImNyZWRpdHMiPjxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJkaXJlY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1kaXJlY3RvciZzbiZzdGV4dD1QZXRlciUyMFdlaXIiIHRpdGxlPSJQZXRlciBXZWlyIj48c3BhbiBpdGVtcHJvcD0ibmFtZSI+UGV0ZXIgV2Vpcjwvc3Bhbj48L2E+PC9zcGFuPjwvZGl2PiAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDxkdD5TY3JlZW53cml0ZXI8L2R0PgogICAgICAgICAgICA8ZGQ+PGRpdiBjbGFzcz0iY3JlZGl0cyI+PHNwYW4gY2xhc3M9Im5iIj48c3Bhbj5BbmRyZXcgTmljY29sPC9zcGFuPjwvc3Bhbj48L2Rpdj48L2RkPgogICAgICAgICAgICA8ZHQ+TXVzaWM8L2R0PgogICAgICAgICAgICA8ZGQ+PGRpdiBjbGFzcz0iY3JlZGl0cyI+PHNwYW4gY2xhc3M9Im5iIj48c3Bhbj5CdXJraGFyZCBEYWxsd2l0ejwvc3Bhbj48L3NwYW4+PC9kaXY+PC9kZD4KICAgICAgICAgICAgPGR0PkNpbmVtYXRvZ3JhcGh5PC9kdD4KICAgICAgICAgICAgPGRkPjxkaXYgY2xhc3M9ImNyZWRpdHMiPjxzcGFuIGNsYXNzPSJuYiI+PHNwYW4+UGV0ZXIgQml6aW91PC9zcGFuPjwvc3Bhbj48L2Rpdj48L2RkPgogICAgICAgICAgICA8ZHQ+Q2FzdDwvZHQ+CiAgICAgICAgICAgIDxkZCBjbGFzcz0iY2FyZC1jYXN0Ij4KPGRpdiBjbGFzcz0iY3JlZGl0cyI+PHNwYW4gY2xhc3M9Im5iIiAgaXRlbXByb3A9ImFjdG9yIiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1BlcnNvbiI+PGEgaXRlbXByb3A9InVybCIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zZWFyY2gucGhwP3N0eXBlPWNhc3Qmc24mc3RleHQ9SmltJTIwQ2FycmV5IiB0aXRsZT0iSmltIENhcnJleSI+PHNwYW4gaXRlbXByb3A9Im5hbWUiPkppbSBDYXJyZXk8L3NwYW4+PC9hPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJhY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1jYXN0JnNuJnN0ZXh0PUxhdXJhJTIwTGlubmV5IiB0aXRsZT0iTGF1cmEgTGlubmV5Ij48c3BhbiBpdGVtcHJvcD0ibmFtZSI+TGF1cmEgTGlubmV5PC9zcGFuPjwvYT4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmIiICBpdGVtcHJvcD0iYWN0b3IiIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUGVyc29uIj48YSBpdGVtcHJvcD0idXJsIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3NlYXJjaC5waHA/c3R5cGU9Y2FzdCZzbiZzdGV4dD1Ob2FoJTIwRW1tZXJpY2giIHRpdGxlPSJOb2FoIEVtbWVyaWNoIj48c3BhbiBpdGVtcHJvcD0ibmFtZSI+Tm9haCBFbW1lcmljaDwvc3Bhbj48L2E+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5iIiAgaXRlbXByb3A9ImFjdG9yIiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1BlcnNvbiI+PGEgaXRlbXByb3A9InVybCIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zZWFyY2gucGhwP3N0eXBlPWNhc3Qmc24mc3RleHQ9RWQlMjBIYXJyaXMiIHRpdGxlPSJFZCBIYXJyaXMiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5FZCBIYXJyaXM8L3NwYW4+PC9hPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJhY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1jYXN0JnNuJnN0ZXh0PU5hdGFzY2hhJTIwTWNFbGhvbmUiIHRpdGxlPSJOYXRhc2NoYSBNY0VsaG9uZSI+PHNwYW4gaXRlbXByb3A9Im5hbWUiPk5hdGFzY2hhIE1jRWxob25lPC9zcGFuPjwvYT4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmIiICBpdGVtcHJvcD0iYWN0b3IiIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUGVyc29uIj48YSBpdGVtcHJvcD0idXJsIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3NlYXJjaC5waHA/c3R5cGU9Y2FzdCZzbiZzdGV4dD1Ib2xsYW5kJTIwVGF5bG9yIiB0aXRsZT0iSG9sbGFuZCBUYXlsb3IiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5Ib2xsYW5kIFRheWxvcjwvc3Bhbj48L2E+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5iIiAgaXRlbXByb3A9ImFjdG9yIiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1BlcnNvbiI+PGEgaXRlbXByb3A9InVybCIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zZWFyY2gucGhwP3N0eXBlPWNhc3Qmc24mc3RleHQ9UGF1bCUyMEdpYW1hdHRpIiB0aXRsZT0iUGF1bCBHaWFtYXR0aSI+PHNwYW4gaXRlbXByb3A9Im5hbWUiPlBhdWwgR2lhbWF0dGk8L3NwYW4+PC9hPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJhY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1jYXN0JnNuJnN0ZXh0PUFkYW0lMjBUb21laSIgdGl0bGU9IkFkYW0gVG9tZWkiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5BZGFtIFRvbWVpPC9zcGFuPjwvYT4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmIiICBpdGVtcHJvcD0iYWN0b3IiIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUGVyc29uIj48YSBpdGVtcHJvcD0idXJsIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3NlYXJjaC5waHA/c3R5cGU9Y2FzdCZzbiZzdGV4dD1IYXJyeSUyMFNoZWFyZXIiIHRpdGxlPSJIYXJyeSBTaGVhcmVyIj48c3BhbiBpdGVtcHJvcD0ibmFtZSI+SGFycnkgU2hlYXJlcjwvc3Bhbj48L2E+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5iIiAgaXRlbXByb3A9ImFjdG9yIiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1BlcnNvbiI+PGEgaXRlbXByb3A9InVybCIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zZWFyY2gucGhwP3N0eXBlPWNhc3Qmc24mc3RleHQ9QnJpYW4lMjBEZWxhdGUiIHRpdGxlPSJCcmlhbiBEZWxhdGUiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5CcmlhbiBEZWxhdGU8L3NwYW4+PC9hPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJhY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1jYXN0JnNuJnN0ZXh0PVBoaWxpcCUyMEJha2VyJTIwSGFsbCIgdGl0bGU9IlBoaWxpcCBCYWtlciBIYWxsIj48c3BhbiBpdGVtcHJvcD0ibmFtZSI+UGhpbGlwIEJha2VyIEhhbGw8L3NwYW4+PC9hPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJhY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1jYXN0JnNuJnN0ZXh0PVBldGVyJTIwS3JhdXNlIiB0aXRsZT0iUGV0ZXIgS3JhdXNlIj48c3BhbiBpdGVtcHJvcD0ibmFtZSI+UGV0ZXIgS3JhdXNlPC9zcGFuPjwvYT4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmIiICBpdGVtcHJvcD0iYWN0b3IiIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUGVyc29uIj48YSBpdGVtcHJvcD0idXJsIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3NlYXJjaC5waHA/c3R5cGU9Y2FzdCZzbiZzdGV4dD1PLUxhbiUyMEpvbmVzIiB0aXRsZT0iTy1MYW4gSm9uZXMiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5PLUxhbiBKb25lczwvc3Bhbj48L2E+PC9zcGFuPjwvZGl2PiAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDxkdD5Qcm9kdWNlcjwvZHQ+CiAgICAgICAgICAgIDxkZCBjbGFzcz0iY2FyZC1wcm9kdWNlciI+PGRpdiBjbGFzcz0iY3JlZGl0cyI+PHNwYW4gY2xhc3M9Im5iIj48c3Bhbj5QYXJhbW91bnQgUGljdHVyZXM8L3NwYW4+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5iIj48c3Bhbj5TY290dCBSdWRpbiBQcm9kdWN0aW9uczwvc3Bhbj48L3NwYW4+PC9kaXY+PC9kZD4KCiAgICAgICAgICAgIDxkdD5HZW5yZTwvZHQ+CiAgICAgICAgICAgIDxkZCBjbGFzcz0iY2FyZC1nZW5yZXMiPgogICAgICAgICAgICAgICAgPHNwYW4gaXRlbXByb3A9ImdlbnJlIj48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL21vdmllZ2VucmUucGhwP2dlbnJlPURSJmF0dHI9cmF0X2NvdW50Jm5vZG9jIj5EcmFtYTwvYT48L3NwYW4+LiAgICAgICAgICAgICAgICAgPHNwYW4gaXRlbXByb3A9ImdlbnJlIj48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL21vdmllZ2VucmUucGhwP2dlbnJlPUNPJmF0dHI9cmF0X2NvdW50Jm5vZG9jIj5Db21lZHk8L2E+PC9zcGFuPiB8ICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL21vdmlldG9waWMucGhwP3RvcGljPTg5OTc3NiZhdHRyPXJhdF9jb3VudCZub2RvYyI+Q29tZWR5LURyYW1hPC9hPi4gICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbW92aWV0b3BpYy5waHA/dG9waWM9MzMzNjkyJmF0dHI9cmF0X2NvdW50Jm5vZG9jIj5TYXRpcmU8L2E+LiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9tb3ZpZXRvcGljLnBocD90b3BpYz0xNjIwMTcmYXR0cj1yYXRfY291bnQmbm9kb2MiPlRlbGV2aXNpb248L2E+LiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9tb3ZpZXRvcGljLnBocD90b3BpYz00MzY0NDcmYXR0cj1yYXRfY291bnQmbm9kb2MiPkN1bHQgTW92aWU8L2E+ICAgICAgICAgICAgPC9kZD4KCgogICAgICAgIDxkdD5TeW5vcHNpcyAvIFBsb3Q8L2R0PgogICAgICAgIDxkZCBjbGFzcz0iIiBpdGVtcHJvcD0iZGVzY3JpcHRpb24iPkhlJ3MgdGhlIHN0YXIgb2YgdGhlIHNob3cgLSBidXQgaGUgZG9lc24ndCBrbm93IGl0ISBKaW0gQ2FyZXkgcGxheXMgdW53aXR0aW5nIFRydW1hbiBCdXJiYW5rLCBhbiBvcmRpbmFyeSBtYW4gaW4gYSBub3Qtc28tb3JkaW5hcnkgbGlmZS4gRnJvbSB0aGUgdGltZSBoZSB3YXMgYm9ybiB0byB0aGUgcHJlc2VudCwgVHJ1bWFuJ3MgZW50aXJlIGxpZmUgaGFzIGJlZW4gYnJvYWRjYXN0IGxpdmUgb24gbmF0aW9uYWwgVFYuIFRydW1hbiBkb2Vzbid0IHJlYWxpemUgdGhhdCBoaXMgcXVhaW50IGhvbWV0b3duIGlzIGFjdHVhbGx5IGEgZ2lhbnQgc3R1ZGlvIHNldCAtIGJpZyBlbm91Z2ggdG8gYmUgc2VlbiBmcm9tIHNwYWNlIC0gYW5kIHRoYXQgdGhlIGZvbGtzIGxpdmluZyBhbmQgd29ya2luZyB0aGVyZSBhcmUgSG9sbHl3b29kIGFjdG9ycy4gRXZlbiBUcnVtYW4ncyBpbmNlc3NhbnRseSBidWJibHkgd2lmZSBpcyBhIGNvbnRyYWN0IHBsYXllci4gR3JhZHVhbGx5LCBUcnVtYW4gZ2V0cyB3aXNlLiBBbmQgd2hhdCBoZSBkb2VzIGFib3V0IGhpcyBkaXNjb3Zlcnkgd2lsbCBoYXZlIHlvdSBsYXVnaGluZywgY3J5aW5nIGFuZCBjaGVlcmluZyBhcyBoZSBmaW5kcyBoaXMgd2F5IHRvIHRoZSB0cnV0aC48L2RkPgogICAgPC9kbD4KICAgIDxkbCBjbGFzcz0ibWFyZ2luLXRvcCBtb3ZpZS1pbmZvIj4KICAgICAgICA8ZHQ+QXdhcmRzPC9kdD4KICAgICAgICA8ZGQgY2xhc3M9ImF3YXJkIj4KICAgICAgICA8ZGl2ICBjbGFzcz0ibWFyZ2luLWJvdHRvbSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9hd2FyZHMucGhwP2F3YXJkX2lkPWFjYWRlbXlfYXdhcmRzJnllYXI9MTk5OSI+MTk5ODwvYT46IDMgTm9taW5hdGlvbnMgZm9yIE9zY2FyOiBCZXN0IERpcmVjdG9yIChQZXRlciBXZWlyKSwgU3VwcG9ydGluZyBBY3RvciwgU2NyZWVucGxheTwvZGl2PgogICAgICAgIDxkaXYgIGNsYXNzPSJtYXJnaW4tYm90dG9tIj4KPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9hd2FyZHMucGhwP2F3YXJkX2lkPWdvbGRlbmdsb2JlcyZ5ZWFyPTE5OTkiPjE5OTg8L2E+OiAzIEdvbGRlbiBHbG9iZXM6IEFjdG9yIERyYW1hIChDYXJyZXkpLCBTdXBwb3J0aW5nIEFjdG9yIGFuZCBPU1QuIDYgTm9taW5hdGlvbnM8L2Rpdj4KICAgICAgICA8ZGl2ICBjbGFzcz0ibWFyZ2luLWJvdHRvbSI+CjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYXdhcmRzLnBocD9hd2FyZF9pZD1iYWZ0YSZ5ZWFyPTE5OTkiPjE5OTg8L2E+OiAzIEJBRlRBIEF3YXJkczogQmVzdCBEaXJlY3RvciwgUHJvZHVjdGlvbiBEZXNpZ24gYW5kIE9yaWdpbmFsIFNjcmVlbnBsYXkuIDcgTm9tLjwvZGl2PgogICAgICAgIDxkaXYgIGNsYXNzPSJtYXJnaW4tYm90dG9tIj4KPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9hd2FyZHMucGhwP2F3YXJkX2lkPW5iciZ5ZWFyPTE5OTgiPjE5OTg8L2E+OiBOYXRpb25hbCBCb2FyZCBvZiBSZXZpZXc6IFN1cHBvcnRpbmcgQWN0b3IgKEVkIEhhcnJpcyk8L2Rpdj4KICAgICAgICA8ZGl2ICBjbGFzcz0ibWFyZ2luLWJvdHRvbSI+CjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYXdhcmRzLnBocD9hd2FyZF9pZD1sYWZjYSZ5ZWFyPTE5OTgiPjE5OTg8L2E+OiBMb3MgQW5nZWxlcyBGaWxtIENyaXRpY3MgQXNzb2NpYXRpb246IE5vbWluYXRlZCBmb3IgQmVzdCBQcm9kdWN0aW9uIERlc2lnbiAgPC9kaXY+CiAgICAgICAgPGRpdiAgY2xhc3M9Im1hcmdpbi1ib3R0b20iPgo8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2F3YXJkcy5waHA/YXdhcmRfaWQ9Y3JpdGljc19jaG9pY2VfYXdhcmRzJnllYXI9MTk5OCI+MTk5ODwvYT46IENyaXRpY3MnIENob2ljZSBBd2FyZHM6IE5vbWluYXRlZCBmb3IgQmVzdCBGaWxtPC9kaXY+CiAgICAgICAgPGRpdj48c3BhbiBpZD0ic2hvdy1hbGwtYXdhcmRzIj48YSBocmVmPSIjIj5TaG93IDQgbW9yZSBhd2FyZHM8L2E+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtY2hldnJvbi1kb3duIHN0cmlwLWRvd24iPjwvaT48L3NwYW4+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGlkZGVuLWF3YXJkcyBtYXJnaW4tYm90dG9tIiBjbGFzcz0ibWFyZ2luLWJvdHRvbSI+CjE5OTg6IENoaWNhZ28gRmlsbSBDcml0aWNzIEF3YXJkczogQmVzdCBPcmlnaW5hbCBTY29yZS4gNSBOb21pbmF0aW9uczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImhpZGRlbi1hd2FyZHMgbWFyZ2luLWJvdHRvbSIgY2xhc3M9Im1hcmdpbi1ib3R0b20iPgo8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2F3YXJkcy5waHA/YXdhcmRfaWQ9cGdhJnllYXI9MTk5OSI+MTk5ODwvYT46IFByb2R1Y2VycyBHdWlsZCBBd2FyZHMgKFBHQSk6IE5vbWluYXRlZCBmb3IgQmVzdCBGaWxtPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGlkZGVuLWF3YXJkcyBtYXJnaW4tYm90dG9tIiBjbGFzcz0ibWFyZ2luLWJvdHRvbSI+CjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYXdhcmRzLnBocD9hd2FyZF9pZD1kZ2EmeWVhcj0xOTk5Ij4xOTk4PC9hPjogRGlyZWN0b3JzIEd1aWxkIG9mIEFtZXJpY2EgKERHQSk6IE5vbWluYXRlZCBmb3IgQmVzdCBEaXJlY3RvcjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImhpZGRlbi1hd2FyZHMgbWFyZ2luLWJvdHRvbSIgY2xhc3M9Im1hcmdpbi1ib3R0b20iPgo8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2F3YXJkcy5waHA/YXdhcmRfaWQ9d2dhJnllYXI9MTk5OSI+MTk5ODwvYT46IFdyaXRlcnMgR3VpbGQgb2YgQW1lcmljYSAoV0dBKTogTm9taW5hdGVkIGZvciBCZXN0IE9yaWdpbmFsIFNjcmVlbnBsYXk8L2Rpdj4KICAgICAgICA8L2RkPgogICAgPC9kbD4KCiAgICA8ZGwgY2xhc3M9Im1hcmdpbi10b3AgbW92aWUtaW5mbyI+CiAgICAgICAgPGR0PkNyaXRpY3MnIHJldmlld3M8L2R0PgogICAgICAgIDxkZD4KICAgICAgICAgICAgPHVsIGlkPSJwcm8tcmV2aWV3cyI+CiAgICAgICAgICAgPGxpID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByby1yZXZpZXciIGl0ZW1wcm9wPSJyZXZpZXciIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUmV2aWV3Ij4KCiAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9IlJlYWQgZnVsbCByZXZpZXciIGhyZWY9Imh0dHBzOi8vd3d3LnJvZ2VyZWJlcnQuY29tL3Jldmlld3MvdGhlLXRydW1hbi1zaG93LTE5OTgiIHRhcmdldD0iX0JMQU5LIiA+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpdGVtcHJvcD0icmV2aWV3Qm9keSI+JnF1b3Q7VGhlIHVuZGVybHlpbmcgaWRlYXMgbWFkZSB0aGUgbW92aWUgbW9yZSB0aGFuIGp1c3QgZW50ZXJ0YWlubWVudCAoLi4uKSBJdCBicmluZ3MgaW50byBmb2N1cyB0aGUgbmV3IHZhbHVlcyB0aGF0IHRlY2hub2xvZ3kgaXMgZm9yY2luZyBvbiBodW1hbml0eSAo4oCmKSBSYXRpbmc6ICYjOTczMzsmIzk3MzM7JiM5NzMzOyYjOTczMzsgKG91dCBvZiA0KSZxdW90OyZuYnNwOzxpIGNsYXNzPSdmYXMgZmEtZXh0ZXJuYWwtbGluay1hbHQnPjwvaT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tY3JpdC1tZWQiIGl0ZW1wcm9wPSJhdXRob3IiPlJvZ2VyIEViZXJ0OiByb2dlcmViZXJ0LmNvbSA8aSBhbHQ9IlBvc2l0aXZlIHJldmlldyIgdGl0bGU9IlBvc2l0aXZlIHJldmlldyIgY2xhc3M9ImZhcyBmYS1jaXJjbGUgIHBvcyI+PC9pPjwvZGl2PgoKCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICA8bGkgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvLXJldmlldyIgaXRlbXByb3A9InJldmlldyIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9SZXZpZXciPgoKICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iUmVhZCBmdWxsIHJldmlldyIgaHJlZj0iaHR0cDovL2FydGljbGVzLmNoaWNhZ290cmlidW5lLmNvbS8xOTk4LTA2LTA1L2VudGVydGFpbm1lbnQvOTgwNjA1MDA5OF8xX3RydW1hbi1idXJiYW5rLXRydW1hbi1zaG93LXNlYWhhdmVuIiB0YXJnZXQ9Il9CTEFOSyIgPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9InJldmlld0JvZHkiPiZxdW90O0l0J3MgYSBzYXRpcmUvY29tZWR5L2ZhbnRhc3kgYWJvdXQgdGhlIGZ1dHVyZSBvZiB0ZWxldmlzaW9uIGFuZCB0aGUgcGVvcGxlIGNhdWdodCBpbiBpdHMgb21uaXByZXNlbnQgZWxlY3Ryb25pYyBuZXQgKOKApikgUmF0aW5nOiAmIzk3MzM7JiM5NzMzOyYjOTczMzsmIzk3MzM7IChvdXQgb2YgNCkmcXVvdDsmbmJzcDs8aSBjbGFzcz0nZmFzIGZhLWV4dGVybmFsLWxpbmstYWx0Jz48L2k+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9hPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvLWNyaXQtbWVkIiBpdGVtcHJvcD0iYXV0aG9yIj5NaWNoYWVsIFdpbG1pbmd0b246IENoaWNhZ28gVHJpYnVuZSA8aSBhbHQ9IlBvc2l0aXZlIHJldmlldyIgdGl0bGU9IlBvc2l0aXZlIHJldmlldyIgY2xhc3M9ImZhcyBmYS1jaXJjbGUgIHBvcyI+PC9pPjwvZGl2PgoKCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICA8bGkgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvLXJldmlldyIgaXRlbXByb3A9InJldmlldyIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9SZXZpZXciPgoKICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iUmVhZCBmdWxsIHJldmlldyIgaHJlZj0iaHR0cDovL2NvbW11bml0eS5zZWF0dGxldGltZXMubndzb3VyY2UuY29tL2FyY2hpdmUvP2RhdGU9MTk5ODA2MDUmc2x1Zz0yNzU0NDg4IiB0YXJnZXQ9Il9CTEFOSyIgPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9InJldmlld0JvZHkiPiZxdW90O1RoaXMgaXMgYSBmaWxtIHRoYXQgY2FuIHN0YXkgd2l0aCBvbmUgZm9yIGEgdmVyeSBsb25nIHRpbWUsIGFuZCBldmVuIHNsaWdodGx5IGNoYW5nZSB0aGUgd2F5IG9uZSBsb29rcyBhdCBsaWZlIGFuZCB0aGUgd29ybGQuJnF1b3Q7Jm5ic3A7PGkgY2xhc3M9J2ZhcyBmYS1leHRlcm5hbC1saW5rLWFsdCc+PC9pPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByby1jcml0LW1lZCIgaXRlbXByb3A9ImF1dGhvciI+VG9tIEtlb2doOiBTZWF0dGxlIFRpbWVzIDxpIGFsdD0iUG9zaXRpdmUgcmV2aWV3IiB0aXRsZT0iUG9zaXRpdmUgcmV2aWV3IiBjbGFzcz0iZmFzIGZhLWNpcmNsZSAgcG9zIj48L2k+PC9kaXY+CgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgIDxsaSA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tcmV2aWV3IiBpdGVtcHJvcD0icmV2aWV3IiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1JldmlldyI+CgogICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSJSZWFkIGZ1bGwgcmV2aWV3IiBocmVmPSJodHRwczovL3d3dy5jaGljYWdvcmVhZGVyLmNvbS9jaGljYWdvL3RoZS10cnVtYW4tc2hvdy9GaWxtP29pZD0xMDU1MjI0IiB0YXJnZXQ9Il9CTEFOSyIgPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9InJldmlld0JvZHkiPiZxdW90O1ByZXRlbmRzIHRvIGJlIGRhcmluZyB3aGlsZSBwYXJyb3Rpbmcgd2hhdCBtdWNoIG9mIHRoZSBUViBpbmR1c3RyeSBhbHJlYWR5IHRoaW5rcyBhYm91dCBpdHNlbGYgYW5kIGl0cyBhdWRpZW5jZS4gQnV0IGl0J3Mgc3RpbGwgcHJldHR5IG11Y2ggZnVuIHRvIHdhdGNoLiZxdW90OyZuYnNwOzxpIGNsYXNzPSdmYXMgZmEtZXh0ZXJuYWwtbGluay1hbHQnPjwvaT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tY3JpdC1tZWQiIGl0ZW1wcm9wPSJhdXRob3IiPkpvbmF0aGFuIFJvc2VuYmF1bTogQ2hpY2FnbyBSZWFkZXIgPGkgYWx0PSJOZXV0cmFsIFJldmlldyIgdGl0bGU9Ik5ldXRyYWwgUmV2aWV3IiBjbGFzcz0iZmFzIGZhLWNpcmNsZSAgbmV1Ij48L2k+PC9kaXY+CgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgIDxsaSA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tcmV2aWV3IiBpdGVtcHJvcD0icmV2aWV3IiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1JldmlldyI+CgogICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSJSZWFkIGZ1bGwgcmV2aWV3IiBocmVmPSJodHRwczovL2V3LmNvbS9hcnRpY2xlLzE5OTgvMDYvMDUvdHJ1bWFuLXNob3cvIiB0YXJnZXQ9Il9CTEFOSyIgPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9InJldmlld0JvZHkiPiZxdW90O0EgYmVhdXRpZnVsbHkgc2luaXN0ZXIgYW5kIHRyYW5zZml4aW5nIGVudGVydGFpbm1lbnQgKC4uLikgQ2FycmV5IHR1cm5zIFRydW1hbiBpbnRvIGEgcG9zdG1vZGVybiBDYXByYSBoZXJvLiZxdW90OyZuYnNwOzxpIGNsYXNzPSdmYXMgZmEtZXh0ZXJuYWwtbGluay1hbHQnPjwvaT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tY3JpdC1tZWQiIGl0ZW1wcm9wPSJhdXRob3IiPk93ZW4gR2xlaWJlcm1hbjogRW50ZXJ0YWlubWVudCBXZWVrbHkgPGkgYWx0PSJQb3NpdGl2ZSByZXZpZXciIHRpdGxlPSJQb3NpdGl2ZSByZXZpZXciIGNsYXNzPSJmYXMgZmEtY2lyY2xlICBwb3MiPjwvaT48L2Rpdj4KCgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgPGxpID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByby1yZXZpZXciIGl0ZW1wcm9wPSJyZXZpZXciIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUmV2aWV3Ij4KCiAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9IlJlYWQgZnVsbCByZXZpZXciIGhyZWY9Imh0dHBzOi8vd3d3Lndhc2hpbmd0b25wb3N0LmNvbS93cC1zcnYvc3R5bGUvbG9uZ3Rlcm0vbW92aWVzL3ZpZGVvcy90cnVtYW5zaG93a2VtcGxleS5odG0/P25vcmVkaXJlY3Q9b24iIHRhcmdldD0iX0JMQU5LIiA+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpdGVtcHJvcD0icmV2aWV3Qm9keSI+JnF1b3Q7T25lIG9mIHRoZSBzbWFydGVzdCwgbW9zdCBpbnZlbnRpdmUgbW92aWVzIGluIG1lbW9yeSwgaXQgbWFuYWdlcyB0byBiZSBhcyBlbmRlYXJpbmcgYXMgaXQgaXMgcHJvdm9jYXRpdmUuJnF1b3Q7Jm5ic3A7PGkgY2xhc3M9J2ZhcyBmYS1leHRlcm5hbC1saW5rLWFsdCc+PC9pPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByby1jcml0LW1lZCIgaXRlbXByb3A9ImF1dGhvciI+Uml0YSBLZW1wbGV5OiBUaGUgV2FzaGluZ3RvbiBQb3N0IDxpIGFsdD0iUG9zaXRpdmUgcmV2aWV3IiB0aXRsZT0iUG9zaXRpdmUgcmV2aWV3IiBjbGFzcz0iZmFzIGZhLWNpcmNsZSAgcG9zIj48L2k+PC9kaXY+CgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgIDxsaSA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tcmV2aWV3IiBpdGVtcHJvcD0icmV2aWV3IiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1JldmlldyI+CgogICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSJSZWFkIGZ1bGwgcmV2aWV3IiBocmVmPSJodHRwczovL3d3dy5ueXRpbWVzLmNvbS8xOTk4LzA2LzA1L21vdmllcy9maWxtLXJldmlldy1zby13aGF0LXMtd3Jvbmctd2l0aC10aGlzLXBpY3R1cmUuaHRtbCIgdGFyZ2V0PSJfQkxBTksiID4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGl0ZW1wcm9wPSJyZXZpZXdCb2R5Ij4mcXVvdDtKaW0gQ2FycmV5J3MgaW5zdGFudGx5IGljb25pYyBwZXJmb3JtYW5jZSBhcyB0aGUgc3dlZXQsIHVuc3VzcGVjdGluZyBUcnVtYW4gd2lsbCBnaXZlIGhpcyBjYXJlZXIgZGVzZXJ2ZWQgbmV3IGltcGV0dXMsIGJ1dCB0aGUgcmVhbCBzdGFyIG9mICdUaGUgVHJ1bWFuIFNob3cnIGlzIGl0cyBwcmVtaXNlLiZxdW90OyZuYnNwOzxpIGNsYXNzPSdmYXMgZmEtZXh0ZXJuYWwtbGluay1hbHQnPjwvaT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tY3JpdC1tZWQiIGl0ZW1wcm9wPSJhdXRob3IiPkphbmV0IE1hc2xpbjogVGhlIE5ldyBZb3JrIFRpbWVzIDxpIGFsdD0iUG9zaXRpdmUgcmV2aWV3IiB0aXRsZT0iUG9zaXRpdmUgcmV2aWV3IiBjbGFzcz0iZmFzIGZhLWNpcmNsZSAgcG9zIj48L2k+PC9kaXY+CgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48ZW0+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9wcm8tcmV2aWV3cy5waHA/bW92aWUtaWQ9NTA0ODg5Ij5TaG93IDMgbW9yZSByZXZpZXdzIDxpIGNsYXNzPSJmYXMgZmEtY2hldnJvbi1yaWdodCBzdHJpcC1kb3duIj48L2k+PC9hPjwvZW0+PC9saT4KCiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kZD4KICAgIDwvZGw+CgoKCiAgICA8ZGwgY2xhc3M9Im1hcmdpbi10b3AgbW92aWUtaW5mbyI+CiAgICAgICAgPGR0IHN0eWxlPSJwYWRkaW5nLWJvdHRvbTogNTBweDsiPk1vdmllIFNvdWxtYXRlcycgcmF0aW5nczwvZHQ+CiAgICAgICAgPGRkIHN0eWxlPSJwYWRkaW5nLWJvdHRvbTogNTBweDsiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJnaW4tYm90dG9tIiBpZD0ic20tbS1yYXQiPgogICAgICAgICAgICAgICAgDQogICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9yZWdpc3Rlci5waHAiPlJlZ2lzdGVyPC9hPiBzbyB5b3UgY2FuIGFjY2VzcyBtb3ZpZSByZWNvbW1lbmRhdGlvbnMgdGFpbG9yZWQgdG8geW91ciBtb3ZpZSB0YXN0ZS4gICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2RkPgoKICAgICAgICA8ZHQ+RnJpZW5kcycgcmF0aW5nczwvZHQ+CiAgICAgICAgPGRkPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJnaW4tYm90dG9tIiBpZD0iZnItbS1yYXQiPgogICAgICAgICAgICAgICAgPGRpdj48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3JlZ2lzdGVyLnBocCI+UmVnaXN0ZXI8L2E+IHNvIHlvdSBjYW4gY2hlY2sgb3V0IHJhdGluZ3MgYnkgeW91ciBmcmllbmRzLCBmYW1pbHkgbWVtYmVycywgYW5kIGxpa2UtbWluZGVkIG1lbWJlcnMgb2YgdGhlIEZBIGNvbW11bml0eS48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGQ+CiAgICA8L2RsPgoKICAgIDxzY3JpcHQ+CiAgICAgICAgJChmdW5jdGlvbigpewogICAgICAgICAgICAkKCcjbGlzdC10b3AtcmFuayAuc2hvdy1hbGwgYScpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICQoJyNsaXN0LXRvcC1yYW5rIC5zaG93LWFsbCcpLmhpZGUoKTsKICAgICAgICAgICAgICAgJCgnI2xpc3QtdG9wLXJhbmsgbGknKS5zaG93KCk7CiAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAkKCcjbGlzdC10b3AtcmFuayBsaScpLmVhY2goZnVuY3Rpb24oaW5keCwgdmFsdWUpewogICAgICAgICAgICAgICAgJCh2YWx1ZSkuYXR0cigndGl0bGUnLCAkKHZhbHVlKS5maW5kKCdlbScpLnRleHQoKS5tYXRjaCgvXGQrLykgKyAnIEFwcGVhcmFuY2VzIG9uIHRoaXMgbGlzdCcpOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIDwvc2NyaXB0PgogICAgPGRsIGNsYXNzPSJtYXJnaW4tdG9wIG1vdmllLWluZm8iPgogICAgICAgIDxkdD5SYW5raW5nIExpc3RzIFBvc2l0aW9uPC9kdD4KICAgICAgICA8ZGQgaWQ9Imxpc3QtdG9wLXJhbmsiIGNsYXNzPSJuby1wYWRkaW5nIj4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpID48c3Ryb25nPjEyPC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGlzdHRvcG1vdmllcy5waHA/bGlzdF9pZD01MTkiPlVuZGVycmF0ZWQgTW92aWVzPC9hPiA8ZW0+KDExMyk8L2VtPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgPjxzdHJvbmc+MTU8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTUwMCI+TW92aWVzIHRoYXQgRG9uJ3QgU2VlbSB0aGF0IFNwZWNpYWwgYnV0IGFyZSBWZXJ5IFNwZWNpYWwgdG8gTWU8L2E+IDxlbT4oMTA3KTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSA+PHN0cm9uZz4xNjwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3R0b3Btb3ZpZXMucGhwP2xpc3RfaWQ9ODMwIj5Nb3N0IE9yaWdpbmFsIE1vdmllIFBvc3RlcnMgRXZlcjwvYT4gPGVtPig3KTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSA+PHN0cm9uZz4xOTwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3R0b3Btb3ZpZXMucGhwP2xpc3RfaWQ9NTA5Ij5NeSBGYXZvcml0ZXMgZnJvbSB0aGUgOTBzPC9hPiA8ZW0+KDMwOCk8L2VtPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgPjxzdHJvbmc+MjE8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTUzMCI+TW92aWVzIHdpdGggR3JlYXQgU2NyZWVucGxheXM8L2E+IDxlbT4oOTYpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpID48c3Ryb25nPjI3PC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGlzdHRvcG1vdmllcy5waHA/bGlzdF9pZD01MTciPk1vdmllcyBJIExpa2VkIE1vcmUgdGhlIFNlY29uZCBUaW1lIEkgV2F0Y2hlZCBUaGVtPC9hPiA8ZW0+KDM2KTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSA+PHN0cm9uZz4zNDwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3R0b3Btb3ZpZXMucGhwP2xpc3RfaWQ9MzAwIj5NeSBGYXZvcml0ZSBEcmFtYXM8L2E+IDxlbT4oMjY3KTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSA+PHN0cm9uZz4zODwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3R0b3Btb3ZpZXMucGhwP2xpc3RfaWQ9NjAwIj5Nb3ZpZXMgd2l0aCB0aGUgQmVzdCBFbmRpbmdzPC9hPiA8ZW0+KDIwNCk8L2VtPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgPjxzdHJvbmc+NDQ8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTUyNiI+TW92aWVzIHdpdGggYSBHcmVhdCBNYWxlIExlYWQ8L2E+IDxlbT4oODcpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpID48c3Ryb25nPjUxPC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGlzdHRvcG1vdmllcy5waHA/bGlzdF9pZD04MDAiPkJlc3QgTW92aWUgUG9zdGVycyBFdmVyICAoTXkgRmF2b3JpdGUgUG9zdGVycyk8L2E+IDxlbT4oMjkpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+NTI8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTg5MCI+V2VpcmQgRmlsbXMgSSBBY3R1YWxseSBMb3ZlIC0gTm90IEV2ZXJ5Ym9keSdzIFRoaW5nPC9hPiA8ZW0+KDEwKTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBzdHlsZT0iZGlzcGxheTpub25lIj48c3Ryb25nPjYxPC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGlzdHRvcG1vdmllcy5waHA/bGlzdF9pZD0zMDEiPk15IEZhdm9yaXRlIENvbWVkaWVzPC9hPiA8ZW0+KDIwMyk8L2VtPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PHN0cm9uZz42Mzwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3R0b3Btb3ZpZXMucGhwP2xpc3RfaWQ9NjIwIj5Nb3N0IE1vdmluZyBNb3ZpZXM8L2E+IDxlbT4oNjMpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+Njk8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTEwMCI+TXkgRmF2b3JpdGUgTW92aWVzPC9hPiA8ZW0+KDI5MTgpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+NzE8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTcwMCI+TW92aWVzIEkgSGF2ZSBTZWVuIEEgQmlsbGlvbiBUaW1lczwvYT4gPGVtPigxMDcpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+NzE8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTg4MCI+QWJzb2x1dGUgTXVzdHM8L2E+IDxlbT4oMjEpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+ODE8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTIwMiI+TW92aWVzIEkgV2FudCB0byBPd248L2E+IDxlbT4oMTA2KTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBzdHlsZT0iZGlzcGxheTpub25lIj48c3Ryb25nPjg1PC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGlzdHRvcG1vdmllcy5waHA/bGlzdF9pZD01MTEiPk15IEZhdm9yaXRlIEZhbWlseSBNb3ZpZXM8L2E+IDxlbT4oMjApPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+OTA8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTM2NSI+VGhlIFdlaXJkZXN0IE1vdmllcyBJIEhhdmUgRXZlciBXYXRjaGVkPC9hPiA8ZW0+KDQyKTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvdy1hbGwiPjxhIGhyZWY9IiMiPlNob3cgMTkgbGlzdHM8L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kZD4KICAgIDwvZGw+CgogICAgPGRpdiBjbGFzcz0ibW92aWUtZGlzY2xhaW1lciIgc3R5bGU9Im1hcmdpbi10b3A6IDYwcHg7ICI+CgoKCiAgICAgICAgSXMgdGhlIHN5bm9wc2lzL3Bsb3Qgc3VtbWFyeSBtaXNzaW5nPyBEbyB5b3Ugd2FudCB0byByZXBvcnQgYSBzcG9pbGVyLCBlcnJvciBvciBvbWlzc2lvbj8gUGxlYXNlIHNlbmQgdXMgYSA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2ltc2VuZG1zZy5waHA/dG89OTg1NDYyIj5tZXNzYWdlPC9hPi48YnI+DQpJZiB5b3UgYXJlIG5vdCBhIHJlZ2lzdGVyZWQgdXNlciBwbGVhc2Ugc2VuZCB1cyBhbiBlbWFpbCB0byBpbmZvQGZpbG1hZmZpbml0eS5jb20NCjxwPg0KQWxsIGNvcHlyaWdodGVkIG1hdGVyaWFsIChtb3ZpZSBwb3N0ZXJzLCBEVkQgY292ZXJzLCBzdGlsbHMsIHRyYWlsZXJzKSBhbmQgdHJhZGVtYXJrcyBiZWxvbmcgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwcm9kdWNlcnMgYW5kL29yIGRpc3RyaWJ1dG9ycy48L3A+CkZvciBVUyByYXRpbmdzIGluZm9ybWF0aW9uIHBsZWFzZSB2aXNpdDogICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3Lm1wYWEub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3Lm1wYWEub3JnPC9hPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cuZmlsbXJhdGluZ3MuY29tIiB0YXJnZXQ9Il9ibGFuayI+d3d3LmZpbG1yYXRpbmdzLmNvbTwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LnBhcmVudGFsZ3VpZGUub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnBhcmVudGFsZ3VpZGUub3JnPC9hPgogICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+CjwvZGl2PgogICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOiA1MHB4OyBjbGVhcjogYm90aDsiPjxkaXY+DQogICAgICAgICAgICAgIDwvdGQ+DQogICAgPC90cj4NCjwvdGFibGU+DQo8L2Rpdj4NCjxkaXYgaWQ9ImJwYW5lbCI+DQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZzogMTBweCI+DQogICAgICA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2ZhcS5waHAiPkZBUXM8L2E+DQogICAgfCA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3ByaXZhdGUucGhwIiA+UHJpdmFjeSBwb2xpY3kgLyB1c2UgY29uZGl0aW9uczwvYT4NCiAgICB8IDxhIG9uY2xpY2s9IndpbmRvdy5fX3RjZmFwaSgnZGlzcGxheUNvbnNlbnRVaScsIDIsIGZ1bmN0aW9uKCkge30gKTsiIGlkPSJwcml2YWN5LWNvbmZpZy0yIiBocmVmPSIjIj5Qcml2YWN5IGNvbmZpZ3VyYXRpb248L2E+DQo8L2Rpdj4NCjxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOiAxMHB4IDJweCI+DQogICAgPHNwYW4gY2xhc3M9InN1YnRleHQiPiZjb3B5OyAyMDAyLTIwMjAgRmlsbWFmZmluaXR5IC0gTW92aWVhZmZpbml0eSB8IEZpbG1hZmZpbml0eSBpcyBhIG1vdmllIHJlY29tbWVuZGF0aW9uIHNpdGUgYmFzZWQgb24gdGhlIGNvbmNlcHQgb2YgTW92aWUgU291bG1hdGVzLiA8YnI+V2UgYXJlIGFuIGluZGVwZW5kZW50IG1vdmllIGxvdmVycyBjbHViIHdvcmxkd2lkZSB3aXRoIDY0Ni4wMDAgdXNlcnMgKyAxMzMuMDAwLjAwMCByYXRpbmdzLiBOb3QgcmVsYXRlZCB0byBhbnkgTWVkaWEgb3IgQ29ycG9yYXRpb24uPGJyPiBBbGwgUmlnaHRzIFJlc2VydmVkIHwgTW92aWUgU291bG1hdGVzJiM4NDgyOyBpcyBhIFJlZ2lzdGVyZWQgVHJhZGVtYXJrPC9zcGFuPg0KPC9kaXY+DQo8L2Rpdj4NCg0KDQoNCg0KDQoNCg0KCgoKCgoNCjwvYm9keT4NCjwvaHRtbD4NCg==
58
+ recorded_at: Mon, 12 Oct 2020 21:40:44 GMT
59
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,59 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://www.filmaffinity.com/en/film504889.html
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Mon, 12 Oct 2020 21:40:45 GMT
23
+ Server:
24
+ - Apache
25
+ Expires:
26
+ - Thu, 19 Nov 1981 08:52:00 GMT
27
+ Pragma:
28
+ - no-cache
29
+ Cache-Control:
30
+ - public, max-age=0, must-revalidate
31
+ Set-Cookie:
32
+ - FCD=wRCWzeoh2INHTu6FD4q-Me2QD9JnGSMjgKgZzyGxQxMCiS2FHyCsvgA0Aw-DKUi1Svs0Qr3y6x_qb_MYj_MTizMZ5qlu_2p9Y5vvciEHxF4Z9Kkfn9rRPKKOEeT_GnnGFNm9W8W9wyIiiUYfkprSHb1mozSWsw3A;
33
+ expires=Sun, 09-Jul-2023 21:40:45 GMT; Max-Age=86400000; path=/; domain=.filmaffinity.com;
34
+ secure; HttpOnly
35
+ - FSID=m747ocu56vhhbj7qhi9psvd5ldsv1ol4qcva0k6f69577s0bit4agq0dv9rbr3ls; path=/;
36
+ domain=.filmaffinity.com; secure; HttpOnly
37
+ - client-data=%7B%22ism%22%3Afalse%2C%22showm%22%3Afalse%2C%22ts%22%3A1602538845%7D;
38
+ expires=Tue, 27-Oct-2020 21:40:45 GMT; Max-Age=1296000
39
+ - client-data=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
40
+ X-Frame-Options:
41
+ - SAMEORIGIN
42
+ Upgrade:
43
+ - h2,h2c
44
+ Connection:
45
+ - Upgrade
46
+ Vary:
47
+ - Accept-Encoding
48
+ X-Xss-Protection:
49
+ - 1; mode=block
50
+ Content-Length:
51
+ - '14172'
52
+ Content-Type:
53
+ - text/html; charset=utf-8
54
+ body:
55
+ encoding: ASCII-8BIT
56
+ string: !binary |-
57
+ PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+Cjx0aXRsZT5UaGUgVHJ1bWFuIFNob3cgICgxOTk4KSAtIEZpbG1BZmZpbml0eTwvdGl0bGU+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBUcnVtYW4gU2hvdyBpcyBhIGZpbG0gZGlyZWN0ZWQgYnkgUGV0ZXIgV2VpciB3aXRoIEppbSBDYXJyZXksIExhdXJhIExpbm5leSwgTm9haCBFbW1lcmljaCwgRWQgSGFycmlzLCBOYXRhc2NoYSBNY0VsaG9uZSAuLi4uIFllYXI6IDE5OTguIE9yaWdpbmFsIHRpdGxlOiBUaGUgVHJ1bWFuIFNob3cuIFN5bm9wc2lzOiBIZSdzIHRoZSBzdGFyIG9mIHRoZSBzaG93IC0gYnV0IGhlIGRvZXNuJ3Qga25vdyBpdCEgSmltIENhcmV5IHBsYXlzIHVud2l0dGluZyBUcnVtYW4gQnVyYmFuaywgYW4gb3JkaW5hcnkgbWFuIGluIGEgbm90LXNvLW9yZGluYXJ5IGxpZmUuIEZyb20gdGhlIHRpbWUgaGUgd2FzIGJvcm4gdG8gdGhlIHByZXNlbnQsIFRydW1hbidzIGVudGlyZSBsaWZlIC4uLiI+CjxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNvbnRlbnQ9IkZpbG1BZmZpbml0eSI+CjxtZXRhIG5hbWU9InR3aXR0ZXI6Y2FyZCIgY29udGVudD0ic3VtbWFyeSIgPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0idmlkZW8ubW92aWUiID4KPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiB2YWx1ZT0iQEZpbG1hZmZpbml0eSIgPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2ZpbG01MDQ4ODkuaHRtbCIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJUaGUgVHJ1bWFuIFNob3cgICgxOTk4KSIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJEaXJlY3RvcjogUGV0ZXIgV2VpciB8IENhc3Q6IEppbSBDYXJyZXksIExhdXJhIExpbm5leSwgTm9haCBFbW1lcmljaCwgRWQgSGFycmlzIC4uLiB8IEdlbnJlOiBEcmFtYSB8IFN5bm9wc2lzOiBIZSdzIHRoZSBzdGFyIG9mIHRoZSBzaG93IC0gYnV0IGhlIGRvZXNuJ3Qga25vdyBpdCEgSmltIENhcmV5IHBsYXlzIHVud2l0dGluZyBUcnVtYW4gQnVyYmFuaywgYW4gb3JkaW5hcnkgbWFuIGluIGEgbm90LXNvLW9yZGluYXJ5IGxpZmUuIEZyb20gdGhlIHRpbWUgaGUgd2FzIGJvcm4gdG8gdGhlIHByZXNlbnQsIFRydW1hbidzIGVudGlyZSBsaWZlIC4uLiIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL3BpY3MuZmlsbWFmZmluaXR5LmNvbS90aGVfdHJ1bWFuX3Nob3ctMTMwMDkxNTU3LW1tZWQuanBnIiAvPgo8bGluayByZWw9ImNhbm9uaWNhbCIgaHJlZj0iaHR0cDovL3d3dy5maWxtYWZmaW5pdHkuY29tL3VzL2ZpbG01MDQ4ODkuaHRtbCI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBtZWRpYT0ib25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY0MHB4KSIgaHJlZj0iaHR0cHM6Ly9tLmZpbG1hZmZpbml0eS5jb20vZW4vbW92aWUucGhwP2lkPTUwNDg4OSI+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBocmVmPSIvZmF2aWNvbi5wbmciPgo8bGluayBocmVmPSIvc3R5bGUvZmlsbS4xNTg5NDcwNDAzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CjxsaW5rIGhyZWY9Ii9zdHlsZS9zaGFyZS4xNTM5MDk2MjkxLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CjxsaW5rIGhyZWY9Ii9zdHlsZS9qcXVlcnkvZmEtdWktdGhlbWUvanF1ZXJ5LXVpLm1pbi4xNTM5MDk2MzA2LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CjxsaW5rIGhyZWY9Ii9zdHlsZS9qcXVlcnkvZmEtdWktdGhlbWUvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uMTUzOTA5NjMwNi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvanF1ZXJ5L2ZhLXVpLXRoZW1lL2pxdWVyeS11aS50aGVtZS5taW4uMTUzOTA5NjMwNi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvanF1ZXJ5L2NvbG9yYm94L2NvbG9yYm94LTEuNi4xNTM5MDk2MzA1LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+CjxsaW5rIGhyZWY9Ii9zdHlsZS9qcXVlcnkvY29sb3Jib3gvY29sb3Jib3gtZmEuMTUzOTA5NjMwNS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvanF1ZXJ5L2pxdm1hcC9qcXZtYXAubWluLjE1NjE0NTA4NjEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KPGxpbmsgaHJlZj0iL3N0eWxlL21haW4zLjE2MDE2NDExNDEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KPGxpbmsgaHJlZj0iL3N0eWxlL21vdmllY2FyZHMzLjE1ODU3MzQzNDMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KPGxpbmsgaHJlZj0iL3N0eWxlL2ZhLWF3ZXNvbWUuMTUzOTA5NjI5MS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvZm9udC1hd2Vzb21lLjUuMTEuMS5taW4uMTU3OTE3NDY5MS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvZmEtaWNvbnMuMTU4MjI4ODQ3Ny5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8bGluayBocmVmPSIvc3R5bGUvbWFnaWMtY2hlY2subWluLjE1MzkwOTYyOTEuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KPGxpbmsgaHJlZj0iL3N0eWxlL3JhdGluZzIuMTUzOTA5NjI5Mi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvbG9jYWxfZW4uMTUzOTA5NjI5My5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvanF1ZXJ5LTMuMS4wLm1pbi4xNTM5MDk2MzAyLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2pxdWVyeS9qcXVlcnktbWlncmF0ZS0xLjQuMS5taW4uMTUzOTA5NjMwMi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvdWkvanF1ZXJ5LXVpLTEuMTIuMS5taW4uMTUzOTA5NjMwOC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvcGx1Z2luL2pxdWVyeS5jb2xvcmJveC0xLjYuMTUzOTA5NjMwOC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9mb3RvLjE1NTI2NTg1NjMuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvY3JjMzIuMTUzOTA5NjI5My5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy90cmFuc2xhdGUtY29udGV4dC4xNTM5MDk2MjkzLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2xvY2FsZS9mcmllbmRzLXRleHRzLWVuX1VTLjE1NTgwMTI1MjEuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvanF1ZXJ5L3BsdWdpbi9qcXVlcnkuY29va2llLjE1MzkwOTYzMDguanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvanF1ZXJ5L3BsdWdpbi9yYXRpbmctYmFycy4xNTM5MDk2MzA5LmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2pxdWVyeS9wbHVnaW4vY2hhcnRqcy9jaGFydC5taW4uMTU2ODM2MzgyNS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvcGx1Z2luL2pxdm1hcC9qcXVlcnkudm1hcC5taW4uMTU2MTQ1MDgzNC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvcGx1Z2luL2pxdm1hcC9qcXVlcnkudm1hcC53b3JsZC4xNTYxNDUwODM2LmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2xvY2FsZS90ZXh0cy1lbl9VUy4xNjAxOTA3MDcxLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2Fkcy4xNTM5MDk2MjkzLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL21haW4uMTYwMDcwMjA0Ny5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9wYWdldG9wLjE1ODEzNDQ4MzQuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvei1pbmRleC1maXguMTUzOTA5NjI5Mi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9qcXVlcnkvcGx1Z2luL2xhenlzaXplcy9sYXp5c2l6ZXMubWluLjE2MDIwNjgzNzUuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvZmEtbGlzdHMtdGlwLjE1MzkwOTYyOTIuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvZmFfcmF0aW5nMi4xNTM5MDk2MjkzLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL2hpZGUtcXQuMTU4NDQ1NjQxMi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9qcy9vbGQtYXV0b2NvbXBsZXRlLjE1ODU2NjczMDcuanMiPjwvc2NyaXB0PgoKPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZXMvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZXMiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlbiI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL214L2ZpbG01MDQ4ODkuaHRtbCIgaHJlZmxhbmc9ImVzLU1YIj4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vYXIvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZXMtQVIiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9jbC9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlcy1DTCI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2NvL2ZpbG01MDQ4ODkuaHRtbCIgaHJlZmxhbmc9ImVzLUNPIj4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vdXkvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZXMtVVkiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9wZS9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlcy1QRSI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VjL2ZpbG01MDQ4ODkuaHRtbCIgaHJlZmxhbmc9ImVzLUVDIj4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vdmUvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZXMtVkUiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9jci9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlcy1DUiI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2JvL2ZpbG01MDQ4ODkuaHRtbCIgaHJlZmxhbmc9ImVzLUJPIj4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vdXMvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZW4tVVMiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS91ay9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlbi1HQiI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2llL2ZpbG01MDQ4ODkuaHRtbCIgaHJlZmxhbmc9ImVuLUlFIj4KPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vYXUvZmlsbTUwNDg4OS5odG1sIiBocmVmbGFuZz0iZW4tQVUiPgo8bGluayByZWw9ImFsdGVybmF0ZSIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9jYS9maWxtNTA0ODg5Lmh0bWwiIGhyZWZsYW5nPSJlbi1DQSI+CgoKPHNjcmlwdD4KICAgICQoZnVuY3Rpb24oKXsKICAgICAgICBzZXNzUGluZygiMDE1Zjg0Y2Q1ZGI5NGY0NmFiMDQ2NjA5YjcxYTRlMGI1NmFiZGJhMmZlIiwgMjQwMCk7CiAgICAgICAgdmFyIHRjVGV4dHMgPSBUcmFuc2xhdGVDb250ZXh0LmdldEluc3RhbmNlKGNvbW1vblRleHRzSnMpOwogICAgfSk7Cjwvc2NyaXB0Pgo8c2NyaXB0IGFzeW5jPSdhc3luYycgc3JjPSdodHRwczovL3NjLWRldmVsLnMzLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tL3NjLXRhZ21hbmFnZXIvc2NfZ3B0X2xzdGFwYy5qcyc+PC9zY3JpcHQ+DQoNCiA8c2NyaXB0Pg0KDQogICAgICAgIHZhciBnb29nbGV0YWcgPSBnb29nbGV0YWcgfHwge307DQoNCiAgICAgICAgZ29vZ2xldGFnLmNtZCA9IGdvb2dsZXRhZy5jbWQgfHwgW107DQoNCiA8L3NjcmlwdD4NCg0KIDxzY3JpcHQgc3JjPSJodHRwczovL3MzLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tL3NjLWRldmVsL1NraW5zL1NNQ1NlcnZpY2UuanMiPjwvc2NyaXB0Pg0KDQogPHNjcmlwdCBzcmM9Imh0dHBzOi8vczMuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20vc2MtZGV2ZWwvc2MtdGFnbWFuYWdlci9maWxtYWZmaW5pdHkuanMiPjwvc2NyaXB0Pg0KDQogPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLnNtYXJ0Y2xpcC1zZXJ2aWNlcy5jb20vdjEvU3RvcmFnZS1hNDgyMzIzL3NtYXJ0Y2xpcC1zZXJ2aWNlcy9IZWFkZXJCaWRkaW5nL2pzL1NtYXJ0Y2xpcENvbmZpZy5qcyIgYXN5bmM9ImFzeW5jIj48L3NjcmlwdD4NCjwhLS0gUXVhbnRjYXN0IENob2ljZS4gQ29uc2VudCBNYW5hZ2VyIFRhZyB2Mi4wIChmb3IgVENGIDIuMCkgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBhc3luYz10cnVlPgooZnVuY3Rpb24oKSB7CiAgdmFyIGhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7CiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICB2YXIgZmlyc3RTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07CiAgdmFyIHVybCA9ICdodHRwczovL3F1YW50Y2FzdC5tZ3IuY29uc2Vuc3Uub3JnJwogICAgLmNvbmNhdCgnL2Nob2ljZS8nLCAnTEJCckYtYmRBdGt1RicsICcvJywgaG9zdCwgJy9jaG9pY2UuanMnKQogIHZhciB1c3BUcmllcyA9IDA7CiAgdmFyIHVzcFRyaWVzTGltaXQgPSAzOwogIGVsZW1lbnQuYXN5bmMgPSB0cnVlOwogIGVsZW1lbnQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogIGVsZW1lbnQuc3JjID0gdXJsOwoKICBmaXJzdFNjcmlwdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtZW50LCBmaXJzdFNjcmlwdCk7CgogIGZ1bmN0aW9uIG1ha2VTdHViKCkgewogICAgdmFyIFRDRl9MT0NBVE9SX05BTUUgPSAnX190Y2ZhcGlMb2NhdG9yJzsKICAgIHZhciBxdWV1ZSA9IFtdOwogICAgdmFyIHdpbiA9IHdpbmRvdzsKICAgIHZhciBjbXBGcmFtZTsKCiAgICBmdW5jdGlvbiBhZGRGcmFtZSgpIHsKICAgICAgdmFyIGRvYyA9IHdpbi5kb2N1bWVudDsKICAgICAgdmFyIG90aGVyQ01QID0gISEod2luLmZyYW1lc1tUQ0ZfTE9DQVRPUl9OQU1FXSk7CgogICAgICBpZiAoIW90aGVyQ01QKSB7CiAgICAgICAgaWYgKGRvYy5ib2R5KSB7CiAgICAgICAgICB2YXIgaWZyYW1lID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwoKICAgICAgICAgIGlmcmFtZS5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6bm9uZSc7CiAgICAgICAgICBpZnJhbWUubmFtZSA9IFRDRl9MT0NBVE9SX05BTUU7CiAgICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRUaW1lb3V0KGFkZEZyYW1lLCA1KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICFvdGhlckNNUDsKICAgIH0KCiAgICBmdW5jdGlvbiB0Y2ZBUElIYW5kbGVyKCkgewogICAgICB2YXIgZ2RwckFwcGxpZXM7CiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzOwoKICAgICAgaWYgKCFhcmdzLmxlbmd0aCkgewogICAgICAgIHJldHVybiBxdWV1ZTsKICAgICAgfSBlbHNlIGlmIChhcmdzWzBdID09PSAnc2V0R2RwckFwcGxpZXMnKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgYXJncy5sZW5ndGggPiAzICYmCiAgICAgICAgICBhcmdzWzJdID09PSAyICYmCiAgICAgICAgICB0eXBlb2YgYXJnc1szXSA9PT0gJ2Jvb2xlYW4nCiAgICAgICAgKSB7CiAgICAgICAgICBnZHByQXBwbGllcyA9IGFyZ3NbM107CiAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMl0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgYXJnc1syXSgnc2V0JywgdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFyZ3NbMF0gPT09ICdwaW5nJykgewogICAgICAgIHZhciByZXRyID0gewogICAgICAgICAgZ2RwckFwcGxpZXM6IGdkcHJBcHBsaWVzLAogICAgICAgICAgY21wTG9hZGVkOiBmYWxzZSwKICAgICAgICAgIGNtcFN0YXR1czogJ3N0dWInCiAgICAgICAgfTsKCiAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzJdID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICBhcmdzWzJdKHJldHIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBxdWV1ZS5wdXNoKGFyZ3MpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcG9zdE1lc3NhZ2VFdmVudEhhbmRsZXIoZXZlbnQpIHsKICAgICAgdmFyIG1zZ0lzU3RyaW5nID0gdHlwZW9mIGV2ZW50LmRhdGEgPT09ICdzdHJpbmcnOwogICAgICB2YXIganNvbiA9IHt9OwoKICAgICAgdHJ5IHsKICAgICAgICBpZiAobXNnSXNTdHJpbmcpIHsKICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBqc29uID0gZXZlbnQuZGF0YTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGlnbm9yZSkge30KCiAgICAgIHZhciBwYXlsb2FkID0ganNvbi5fX3RjZmFwaUNhbGw7CgogICAgICBpZiAocGF5bG9hZCkgewogICAgICAgIHdpbmRvdy5fX3RjZmFwaSgKICAgICAgICAgIHBheWxvYWQuY29tbWFuZCwKICAgICAgICAgIHBheWxvYWQudmVyc2lvbiwKICAgICAgICAgIGZ1bmN0aW9uKHJldFZhbHVlLCBzdWNjZXNzKSB7CiAgICAgICAgICAgIHZhciByZXR1cm5Nc2cgPSB7CiAgICAgICAgICAgICAgX190Y2ZhcGlSZXR1cm46IHsKICAgICAgICAgICAgICAgIHJldHVyblZhbHVlOiByZXRWYWx1ZSwKICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsCiAgICAgICAgICAgICAgICBjYWxsSWQ6IHBheWxvYWQuY2FsbElkCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAobXNnSXNTdHJpbmcpIHsKICAgICAgICAgICAgICByZXR1cm5Nc2cgPSBKU09OLnN0cmluZ2lmeShyZXR1cm5Nc2cpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5wb3N0TWVzc2FnZShyZXR1cm5Nc2csICcqJyk7CiAgICAgICAgICB9LAogICAgICAgICAgcGF5bG9hZC5wYXJhbWV0ZXIKICAgICAgICApOwogICAgICB9CiAgICB9CgogICAgd2hpbGUgKHdpbikgewogICAgICB0cnkgewogICAgICAgIGlmICh3aW4uZnJhbWVzW1RDRl9MT0NBVE9SX05BTUVdKSB7CiAgICAgICAgICBjbXBGcmFtZSA9IHdpbjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fQoKICAgICAgaWYgKHdpbiA9PT0gd2luZG93LnRvcCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHdpbiA9IHdpbi5wYXJlbnQ7CiAgICB9CiAgICBpZiAoIWNtcEZyYW1lKSB7CiAgICAgIGFkZEZyYW1lKCk7CiAgICAgIHdpbi5fX3RjZmFwaSA9IHRjZkFQSUhhbmRsZXI7CiAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgcG9zdE1lc3NhZ2VFdmVudEhhbmRsZXIsIGZhbHNlKTsKICAgIH0KICB9OwoKICBtYWtlU3R1YigpOwoKICB2YXIgdXNwU3R1YkZ1bmN0aW9uID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgYXJnID0gYXJndW1lbnRzOwogICAgaWYgKHR5cGVvZiB3aW5kb3cuX191c3BhcGkgIT09IHVzcFN0dWJGdW5jdGlvbikgewogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0eXBlb2Ygd2luZG93Ll9fdXNwYXBpICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgd2luZG93Ll9fdXNwYXBpLmFwcGx5KHdpbmRvdy5fX3VzcGFwaSwgYXJnKTsKICAgICAgICB9CiAgICAgIH0sIDUwMCk7CiAgICB9CiAgfTsKCiAgdmFyIGNoZWNrSWZVc3BJc1JlYWR5ID0gZnVuY3Rpb24oKSB7CiAgICB1c3BUcmllcysrOwogICAgaWYgKHdpbmRvdy5fX3VzcGFwaSA9PT0gdXNwU3R1YkZ1bmN0aW9uICYmIHVzcFRyaWVzIDwgdXNwVHJpZXNMaW1pdCkgewogICAgICBjb25zb2xlLndhcm4oJ1VTUCBpcyBub3QgYWNjZXNzaWJsZScpOwogICAgfSBlbHNlIHsKICAgICAgY2xlYXJJbnRlcnZhbCh1c3BJbnRlcnZhbCk7CiAgICB9CiAgfTsKCiAgaWYgKHR5cGVvZiB3aW5kb3cuX191c3BhcGkgPT09ICd1bmRlZmluZWQnKSB7CiAgICB3aW5kb3cuX191c3BhcGkgPSB1c3BTdHViRnVuY3Rpb247CiAgICB2YXIgdXNwSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChjaGVja0lmVXNwSXNSZWFkeSwgNjAwMCk7CiAgfQp9KSgpOwo8L3NjcmlwdD4KPCEtLSBFbmQgUXVhbnRjYXN0IENob2ljZS4gQ29uc2VudCBNYW5hZ2VyIFRhZyB2Mi4wIChmb3IgVENGIDIuMCkgLS0+CjxzY3JpcHQ+CiAgdmFyIF9jb21zY29yZSA9IF9jb21zY29yZSB8fCBbXTsKICBfY29tc2NvcmUucHVzaCh7IGMxOiAiMiIsIGMyOiAiMTMxODExMjEiIH0pOwogIChmdW5jdGlvbigpIHsKICAgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdOyBzLmFzeW5jID0gdHJ1ZTsKICAgIHMuc3JjID0gKGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sID09ICJodHRwczoiID8gImh0dHBzOi8vc2IiIDogImh0dHA6Ly9iIikgKyAiLnNjb3JlY2FyZHJlc2VhcmNoLmNvbS9iZWFjb24uanMiOwogICAgZWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocywgZWwpOwogIH0pKCk7Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+CiAgPGltZyBzcmM9Imh0dHA6Ly9iLnNjb3JlY2FyZHJlc2VhcmNoLmNvbS9wP2MxPTImYzI9MTMxODExMjEmY3Y9Mi4wJmNqPTEiIC8+Cjwvbm9zY3JpcHQ+CjxzY3JpcHQ+JChmdW5jdGlvbigpe3NlbmRwdigiOTliN2M4NDZlZmYxY2VkNTBhODliYTg2NzY4ZmNhYzAiKTt9KTs8L3NjcmlwdD4NCjwvaGVhZD4KPGJvZHk+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXsKICAgICAgICAgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLAogICAgICAgICAgbT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKG8pWzBdO2EuYXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxtKQogICAgICAgICAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCcvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpOwogICAgICAgICAgZ2EoJ2NyZWF0ZScsICdVQS03NDE1NTUwNC0xJywgJ2F1dG8nKTsKICAgICAgICAgIGdhKCdzZW5kJywgJ3BhZ2V2aWV3Jyk7CiAgICAgICAgPC9zY3JpcHQ+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KICAgIDxkaXYgaWQ9ImhlYWRlci10b3AiID4KICAgICAgICA8ZGl2IGNsYXNzPSJjcGFuZWwgdG9wLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGl2IGlkPSJsb2dvLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL21haW4uaHRtbCI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9ImxvZ28iIHNyYz0iL2ltYWdlcy9sb2dvNC5wbmciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tc2l0ZWxvYyI+VVNBIHwgVUs8L2Rpdj4KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+PCEtLSBsb2dvLWNvbnRhaW5lciAtLT4KCiAgICAgICAgICAgIDxkaXYgaWQ9InRvcHNlYXJjaCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocCIgbWV0aG9kPSJnZXQiIGFjY2VwdC1jaGFyc2V0PSJVVEYtOCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJ0b3Atc2VhcmNoLWlucHV0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzdGV4dCIgc2l6ZT0iMjAiIHZhbHVlPSIiIHRhYmluZGV4PSIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS10aW1lcyBjbGVhci1zZWFyY2giPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iYnV0dG9uLXNlYXJjaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXNlYXJjaCI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBpZD0iYnV0dG9uLXNlYXJjaCIgdmFsdWU9IiZuYnNwOyI+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZHZzZWFyY2giPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYWR2c2VhcmNoLnBocCI+QWR2YW5jZWQgc2VhcmNoIDxpIGNsYXNzPSJmYXMgZmEtYW5nbGUtZG91YmxlLXJpZ2h0Ij48L2k+PC9hPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj48IS0tIHRvcHNlYXJjaCAtLT4KICAgICAgICAgICAgPGRpdiBpZD0idXNlci1sb2dpbi1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBpZD0ibG9naW4tcmVnaXN0ZXIiPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaWduLWluIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xvZ2luLnBocCI+PHN0cm9uZz5TaWduIGluPC9zdHJvbmc+PC9hPiAvIDxhIGNsYXNzPSJyZWdpc3RlciIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9yZWdpc3Rlci5waHAiPlJlZ2lzdGVyPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1tZW51LXdyIj4KPHVsPgogICAgPGxpPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vdXNlcnJhdGluZ3MucGhwP3VzZXJfaWQ9Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImljLXciPjxpIGNsYXNzPSJmYSBmYS1yYXRpbmdzLWZhIj48L2k+PC9zcGFuPgogICAgICAgICAgICAgICAgTXkgUmF0aW5ncyAgICAgICAgPC9hPgogICAgPC9saT4KICAgIDxsaT4KICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL215cmV2aWV3cy5waHAiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWMtdyI+PGkgY2xhc3M9ImZhIGZhLXJldmlld3MtZmEiPjwvaT48L3NwYW4+CiAgICAgICAgICAgIFJldmlld3MgICAgICAgIDwvYT4KICAgIDwvbGk+CiAgICA8bGk+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9teWxpc3RzLnBocCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpYy13Ij48aSBjbGFzcz0iZmEgZmEtbGlzdCI+PC9pPjwvc3Bhbj4KICAgICAgICAgICAgTGlzdHMgPHNwYW4gY2xhc3M9Im5ici13Ij5OZXc8L3NwYW4+CiAgICAgICAgPC9hPgogICAgPC9saT4KICAgIDxsaT4KICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL215ZnJpZW5kcy5waHAiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWMtdyI+PGkgY2xhc3M9ImZhIGZhIGZhLWZyaWVuZHMtZmEiPjwvaT48L3NwYW4+CiAgICAgICAgICAgIEZyaWVuZHMgLyBHcm91cHMgICAgICAgIDwvYT4KICAgIDwvbGk+CiAgICA8bGk+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zb3VsbWF0ZXMucGhwIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImljLXciPjxpIGNsYXNzPSJmYSBmYS1zb3VsbWF0ZXMtZmEiPjwvaT48L3NwYW4+CiAgICAgICAgICAgIE1vdmllIFNvdWxtYXRlcyYjODQ4MjsgICAgICAgIDwvYT4KICAgIDwvbGk+CiAgICA8bGk+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zbXNyZWMucGhwIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImljLXciPjxpIGNsYXNzPSJmYSBmYS1oZWFydCI+PC9pPjwvc3Bhbj4KICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkIE1vdmllcyAgICAgICAgPC9hPgogICAgPC9saT4KICAgIDxsaSBjbGFzcz0idXNlci1wcm9mLWxpbmsiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbXlkYXRhLnBocCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpYy13Ij48aSBjbGFzcz0iZmEgZmEtYWRkcmVzcy1jYXJkLW8iPjwvaT48L3NwYW4+CiAgICAgICAgICAgICAgICBQcm9maWxlICAgICAgICA8L2E+CiAgICA8L2xpPgogICAgICAgIDxsaT4KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3Vycy5waHAiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImljLXciPjxpIGNsYXNzPSJmYSBmYS1yYXRpbmdzLWZhIj48L2k+PC9zcGFuPgogICAgICAgICAgICAgICAgU3RhcnQgUmF0aW5nISAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2xpPgogICAgICAgIDxsaSBjbGFzcz0ibGctb3V0LWxpIj4KICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9InNpZ24tb3V0Ij4KICAgICAgICAgICAgICAgIFNpZ24gb3V0ICAgICAgICAgICAgPC9hPgogICAgICAgIDwvbGk+CjwvdWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+PCEtLSB1c2VyLWxvZ2luIC1jb250YWluZXIgLS0+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImhlYWRlci1ib3R0b20iICA+CiAgICAgICAgPGRpdiBjbGFzcz0iY3BhbmVsIG5ld3Mtd3JhcHBlciI+Cgo8dWwgaWQ9ImF3YXJkc21lbnUiPgogICAgICAgICAgICA8bGkgPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY2F0ZWdvcnkucGhwP2lkPWxhdGVzdF9yZXZpZXdzIj5SZXZpZXdzPC9hPjwvbGk+PGxpIGNsYXNzPSJzZXAiPnw8L2xpPgogICAgICAgICAgICA8bGkgPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY2F0ZWdvcnkucGhwP2lkPVRSQUlMRVJTIj5UcmFpbGVyczwvYT48L2xpPjxsaSBjbGFzcz0ic2VwIj58PC9saT4KICAgICAgICAgICAgPGxpID48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2Jlc3RfMjAxOS5waHAiPjIwMTk8L2E+PC9saT48bGkgY2xhc3M9InNlcCI+fDwvbGk+CiAgICAgICAgICAgIDxsaSA+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3BnZW4ucGhwP2dlbnJlPSZmcm9teWVhcj0mdG95ZWFyPSZjb3VudHJ5PSZub2RvYyI+VG9wIEZBPC9hPjwvbGk+PGxpIGNsYXNzPSJzZXAiPnw8L2xpPgogICAgICAgICAgICA8bGkgPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYWxsX2F3YXJkcy5waHAiPkF3YXJkczwvYT48L2xpPjxsaSBjbGFzcz0ic2VwIj58PC9saT4KICAgICAgICAgICAgPGxpID48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2F3YXJkcy5waHA/YXdhcmRfaWQ9ZW1teSZ5ZWFyPTIwMjAiPkVNTVkgQXdhcmRzIDIwMjA8L2E+PC9saT48bGkgY2xhc3M9InNlcCI+fDwvbGk+CjwvdWw+CgoKCiAgICAgICAgPGRpdiBjbGFzcz0idmVyc2lvbi1zZWxlY3RvciI+CiAgICAgICAgICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAgICAgICAgIHZhciByZW1pbmRlclRleHQgPSAnRmlsbWFmZmluaXR5IGlzIGF2YWlsYWJsZSBpbiB5b3VyIGNvdW50cnkuIMKhVHJ5IG91dCB0aGlzIHZlcnNpb24hPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9tYWluLmh0bWwiIGNsYXNzPSJmYS1idXR0b24iIGRhdGEtdmVyc2lvbj0iZXMiPkdvIHRvIFNwYWluIHZlcnNpb248aSBjbGFzcz0iZmEgZmEtYW5nbGUtZG91YmxlLXJpZ2h0Ij48L2k+PC9hPjxkaXYgY2xhc3M9ImRpc2Nsb3N1cmUiPk5vLCBJIHdhbnQgdG8gc3RheSBpbiBVU0EgfCBVSyB2ZXJzaW9uPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICByZW5kZXJWZXJzaW9uUmVtaW5kZXIocmVtaW5kZXJUZXh0KTsKICAgICAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgICAgICA8dWwgY2xhc3M9InZlcnNpb24iPgogICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0iZW4iIGNsYXNzPSJmaXhlZCIgdGl0bGU9IkNoYW5nZSBsYXlvdXQiPlVTQSB8IFVLIDxpIGNsYXNzPSJmYXMgZmEtY2hldnJvbi1kb3duIj48L2k+PC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgPC9kaXY+Cg0KICAgIDxkaXYgY2xhc3M9InBhZ2UtdmVyc2lvbnMtcG9wIGZhLXNoYWRvdyI+DQogICAgICAgIDxkaXYgaWQ9InZtYXAiIHN0eWxlPSJ3aWR0aDogNjMwcHg7IGhlaWdodDogNDAwcHg7Ij48L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY291bnRyeS1uYW1lcyI+DQogICAgICAgICAgICA8dWwgY2xhc3M9ImNvbnRpbmVudHMiPg0KICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS1jb250aW5lbnQ9ImFtZXJpY2Etbm9ydGgiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj5Ob3J0aCBBbWVyaWNhIDxpIGNsYXNzPSJmYXMgZmEtc2VhcmNoLXBsdXMgbWFwLXpvb20iPjwvaT48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iY291bnRyaWVzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0idXMiIGRhdGEtY291bnRyeS1pZD0idXMiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvVVMucG5nIiBhbHQ9IlVuaXRlZCBTdGF0ZXMiIHRpdGxlPSJVbml0ZWQgU3RhdGVzIj4gVVNBIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLXZlcnNpb249ImNhIiBkYXRhLWNvdW50cnktaWQ9ImNhIj48aW1nIGNsYXNzPSJuZmxhZyIgc3JjPSIvaW1ncy9jb3VudHJpZXMyL0NBLnBuZyIgYWx0PSJDYW5hZGEiIHRpdGxlPSJDYW5hZGEiPiBDYW5hZGEgPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0ibXgiIGRhdGEtY291bnRyeS1pZD0ibXgiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvTVgucG5nIiBhbHQ9Ik1leGljbyIgdGl0bGU9Ik1leGljbyI+IE3DqXhpY28gPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLWNvbnRpbmVudD0iZXVyb3BlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+RXVyb3BlIDxpIGNsYXNzPSJmYXMgZmEtc2VhcmNoLXBsdXMgbWFwLXpvb20iPjwvaT48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iY291bnRyaWVzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0iZXMiIGRhdGEtY291bnRyeS1pZD0iZXMiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvRVMucG5nIiBhbHQ9IlNwYWluIiB0aXRsZT0iU3BhaW4iPiBTcGFpbiA8aSBjbGFzcz0iZmFzIGZhLWFycm93LXJpZ2h0IGdvLXRvLXZlcnNpb24iPjwvaT48L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJ1ayIgZGF0YS1jb3VudHJ5LWlkPSJnYiI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9HQi5wbmciIGFsdD0iVW5pdGVkIEtpbmdkb20iIHRpdGxlPSJVbml0ZWQgS2luZ2RvbSI+IFVLIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLXZlcnNpb249ImllIiBkYXRhLWNvdW50cnktaWQ9ImllIj48aW1nIGNsYXNzPSJuZmxhZyIgc3JjPSIvaW1ncy9jb3VudHJpZXMyL0lFLnBuZyIgYWx0PSJJcmVsYW5kIiB0aXRsZT0iSXJlbGFuZCI+IElyZWxhbmQgPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLWNvbnRpbmVudD0ib2NlYW5pYSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPk9jZWFuaWEgPGkgY2xhc3M9ImZhcyBmYS1zZWFyY2gtcGx1cyBtYXAtem9vbSI+PC9pPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJjb3VudHJpZXMiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJhdSIgZGF0YS1jb3VudHJ5LWlkPSJhdSI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9BVS5wbmciIGFsdD0iQXVzdHJhbGlhIiB0aXRsZT0iQXVzdHJhbGlhIj4gQXVzdHJhbGlhIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPg0KICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgIDx1bCBjbGFzcz0iY29udGluZW50cyI+DQogICAgICAgICAgICAgICAgPGxpIGRhdGEtY29udGluZW50PSJhbWVyaWNhLXNvdXRoIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj5Tb3V0aCBBbWVyaWNhIDxpIGNsYXNzPSJmYXMgZmEtc2VhcmNoLXBsdXMgbWFwLXpvb20iPjwvaT4gPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iY291bnRyaWVzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJhciIgZGF0YS1jb3VudHJ5LWlkPSJhciI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9BUi5wbmciIGFsdD0iQXJnZW50aW5hIiB0aXRsZT0iQXJnZW50aW5hIj4gQXJnZW50aW5hIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0iY2wiIGRhdGEtY291bnRyeS1pZD0iY2wiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvQ0wucG5nIiBhbHQ9IkNoaWxlIiB0aXRsZT0iQ2hpbGUiPiBDaGlsZSA8aSBjbGFzcz0iZmFzIGZhLWFycm93LXJpZ2h0IGdvLXRvLXZlcnNpb24iPjwvaT48L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLXZlcnNpb249ImNvIiBkYXRhLWNvdW50cnktaWQ9ImNvIj48aW1nIGNsYXNzPSJuZmxhZyIgc3JjPSIvaW1ncy9jb3VudHJpZXMyL0NPLnBuZyIgYWx0PSJDb2xvbWJpYSIgdGl0bGU9IkNvbG9tYmlhIj4gQ29sb21iaWEgPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJ1eSIgZGF0YS1jb3VudHJ5LWlkPSJ1eSI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9VWS5wbmciIGFsdD0iVXJ1Z3VheSIgdGl0bGU9IlVydWd1YXkiPiBVcnVndWF5IDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0icGUiIGRhdGEtY291bnRyeS1pZD0icGUiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvUEUucG5nIiBhbHQ9IlBlcnUiIHRpdGxlPSJQZXJ1Ij4gUGVyw7ogPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJlYyIgZGF0YS1jb3VudHJ5LWlkPSJlYyI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9FQy5wbmciIGFsdD0iRWN1YWRvciIgdGl0bGU9IkVjdWFkb3IiPiBFY3VhZG9yIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtdmVyc2lvbj0idmUiIGRhdGEtY291bnRyeS1pZD0idmUiPjxpbWcgY2xhc3M9Im5mbGFnIiBzcmM9Ii9pbWdzL2NvdW50cmllczIvVkUucG5nIiBhbHQ9IlZlbmV6dWVsYSIgdGl0bGU9IlZlbmV6dWVsYSI+IFZlbmV6dWVsYSA8aSBjbGFzcz0iZmFzIGZhLWFycm93LXJpZ2h0IGdvLXRvLXZlcnNpb24iPjwvaT48L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLXZlcnNpb249ImNyIiBkYXRhLWNvdW50cnktaWQ9ImNyIj48aW1nIGNsYXNzPSJuZmxhZyIgc3JjPSIvaW1ncy9jb3VudHJpZXMyL0NSLnBuZyIgYWx0PSJDb3N0YSBSaWNhIiB0aXRsZT0iQ29zdGEgUmljYSI+IENvc3RhIFJpY2EgPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1yaWdodCBnby10by12ZXJzaW9uIj48L2k+PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS12ZXJzaW9uPSJibyIgZGF0YS1jb3VudHJ5LWlkPSJibyI+PGltZyBjbGFzcz0ibmZsYWciIHNyYz0iL2ltZ3MvY291bnRyaWVzMi9CTy5wbmciIGFsdD0iQm9saXZpYSIgdGl0bGU9IkJvbGl2aWEiPiBCb2xpdmlhIDxpIGNsYXNzPSJmYXMgZmEtYXJyb3ctcmlnaHQgZ28tdG8tdmVyc2lvbiI+PC9pPjwvbGk+DQogICAgICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vZmEtaW50ZXJuYXRpb25hbC5waHAiIGNsYXNzPSJtb3JlLWluZm8iPjxpIGNsYXNzPSJmYXMgZmEtaW5mby1jaXJjbGUiPjwvaT4gTW9yZSBpbmZvcm1hdGlvbjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQoNCg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KDQogICAgdmFyIG1hcFZlcnNpb25zID0geyJ1cyI6IiMzQzZFOTkiLCJjYSI6IiMzQzZFOTkiLCJteCI6IiMzQzZFOTkiLCJlcyI6IiMzQzZFOTkiLCJnYiI6IiMzQzZFOTkiLCJpZSI6IiMzQzZFOTkiLCJhdSI6IiMzQzZFOTkiLCJhciI6IiMzQzZFOTkiLCJjbCI6IiMzQzZFOTkiLCJjbyI6IiMzQzZFOTkiLCJ1eSI6IiMzQzZFOTkiLCJwZSI6IiMzQzZFOTkiLCJlYyI6IiMzQzZFOTkiLCJ2ZSI6IiMzQzZFOTkiLCJjciI6IiMzQzZFOTkiLCJibyI6IiMzQzZFOTkifTsNCiAgICANCi8qICAvL3BhcmEgc2FjYXIgdHJhemFzIGRlIGNvb3JkZW5hZGFzLg0KICAgIGpRdWVyeSgnI3ZtYXAnKS5vbignZHJhZycsIGZ1bmN0aW9uKGV2ZW50KQ0KICAgIHsNCiAgICAgICAgY29uc29sZS5sb2coanF2bWFwLnRyYW5zWCk7DQogICAgICAgIGNvbnNvbGUubG9nKGpxdm1hcC50cmFuc1kpOw0KICAgICAgICBjb25zb2xlLmxvZyhqcXZtYXAuc2NhbGUpOw0KICAgICAgICBjb25zb2xlLmxvZyhqcXZtYXAuem9vbUN1clN0ZXApOw0KICAgIH0pOw0KKi8gICAgDQogICAgDQoNCjwvc2NyaXB0Pg0KCiAgICA8L2Rpdj4KPC9kaXY+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0iY3BhbmVsIGFkdmVyLXdyYXBwZXIiPgo8ZGl2IGlkPSJ0b3AtYWQiIGNsYXNzPSJhZHZlci1maXgiPgogICAgPGRpdiBpZD0nc2MtdG9wJyBjbGFzcz0ic2MtdG9wIj4KCiAgICAgICAgICAgPHNjcmlwdD4KCiAgICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5kaXNwbGF5KCdzYy10b3AnKTsKCiAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgIDwvc2NyaXB0PgoKICAgIDwvZGl2PgoKICAgIDwhLS0gc2Mtb29wLS0+CgogICAgPGRpdiBpZD0nc2Mtb29wJyBjbGFzcz0ic2Mtb29wIj4KCiAgICAgICAgICAgPHNjcmlwdD4KCiAgICAgICAgICAgICAgICAgZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgZ29vZ2xldGFnLmRpc3BsYXkoJ3NjLW9vcCcpOwoKICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgPC9zY3JpcHQ+CgogICAgPC9kaXY+CjwvZGl2PgoNCg0KDQoNCg0KDQoNCg0KPC9kaXY+Cgo8ZGl2IGlkPSJ0b3AtYW5jaCI+CiAgICA8YSB0aXRsZT0iQmFjayB0byB0b3AiIGhyZWY9IiNoZWFkZXItdG9wIj4KICAgICAgICA8aW1nIGFsdD0iYXJyb3ciIHNyYz0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9pbWFnZXMvYXJyb3ctdXAyLnBuZyI+CiAgICA8L2E+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjcGFuZWwiPgogIDx0YWJsZSBpZD0ibWFpbi1jb250ZW50LXRhYmxlIj4KICAgIDx0cj4KICAgICAgPHRkIGlkPSJtdC1sZWZ0LWNlbGwiPgogICAgICAgIDxkaXYgaWQ9ImxzbWVudSI+CjxkaXYgY2xhc3M9ImNhdC1jb250YWluZXIiPgo8ZGl2IGNsYXNzPSJsc21oZWFkZXIiPlVzZXJzPC9kaXY+Cjx1bD4KPGxpID48YSBjbGFzcz0icmF0ZS10b3VycyIgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vdG91cnMucGhwIj5TdGFydCBSYXRpbmchPC9hPjwvbGk+PGxpID48YSBjbGFzcz0ic2lnbi1pbiIgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbG9naW4ucGhwIj5TaWduIGluPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9yZWdpc3Rlci5waHAiPlJlZ2lzdGVyPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0iY2F0LWNvbnRhaW5lciI+CjxkaXYgY2xhc3M9ImxzbWhlYWRlciI+Tm93IFBsYXlpbmc8L2Rpdj4KPHVsPgo8bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2NhdF9uZXdfdGhfdXMuaHRtbCI+VVMgLSBOZXcgUmVsZWFzZXM8L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3JkY2F0LnBocD9pZD11cGNfdGhfdXMiPlVTIC0gQ29taW5nIFNvb248L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2NhdF9uZXdfdGhfdWsuaHRtbCI+VUsgLSBOZXcgUmVsZWFzZXM8L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3JkY2F0LnBocD9pZD11cGNfdGhfdWsiPlVLIC0gVXBjLiBSZWxlYXNlczwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY2F0X2VzdHJfZnIuaHRtbCI+RnJhbmNlIC0gTmV3IFJlbGVhc2VzPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9jYXRfbmV3X25ldGZsaXguaHRtbCI+TmV0ZmxpeDwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vcmRjYXQucGhwP2lkPXVwY19uZXRmbGl4Ij5OZXRmbGl4IChjb21pbmcgc29vbik8L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2NhdF9uZXdfaGJvLmh0bWwiPkhCTzwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY2F0X25ld19hbWF6b24uaHRtbCI+QW1hem9uPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9jYXRfZGlzbmV5cGx1cy5odG1sIj5EaXNuZXkrPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9jYXRfYXBwbGVfdHZfcGx1cy5odG1sIj5BcHBsZSBUVis8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJjYXQtY29udGFpbmVyIj4KPGRpdiBjbGFzcz0ibHNtaGVhZGVyIj5TZWUgTW9yZTwvZGl2Pgo8dWw+CjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYm94b2ZmaWNlLnBocCI+Qm94IE9mZmljZTwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vdHJhaWxlcnMucGhwIj5UcmFpbGVyczwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGF0ZXN0ZXZpZGVvcy5waHAiPkxhdGVzdCBUcmFpbGVyczwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY2F0ZWdvcnkucGhwP2lkPWxhdGVzdF9yZXZpZXdzIj5XaGF0IENyaXRpY3MgU2F5PC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3BpY3MucGhwIj5GaWxtcyBieSBLZXl3b3JkPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9tb3ZpZS1ncm91cHMtYWxsLnBocCI+U2FnYXMgJiBGcmFuY2hpc2VzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0iY2F0LWNvbnRhaW5lciI+CjxkaXYgY2xhc3M9ImxzbWhlYWRlciI+VFYgU2VyaWVzPC9kaXY+Cjx1bD4KPGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9jYXRfY3VycmVudF90di5odG1sIj5Qb3B1bGFyIFRWIFNob3dzPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3BnZW4ucGhwP2dlbnJlPVRWX1NFJmNvdW50cnk9JmZyb215ZWFyPSZ0b3llYXI9Jm5vZG9jIj5Ub3AgVFYgU2VyaWVzPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3VyLnBocD9pZHRvdXI9MjYiPlJhdGUgVFYgU2VyaWVzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0iY2F0LWNvbnRhaW5lciI+CjxkaXYgY2xhc3M9ImxzbWhlYWRlciI+VE9QczwvZGl2Pgo8dWw+CjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vdG9wZ2VuLnBocCI+VG9wIEZpbG1hZmZpbml0eTwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYmVzdF90b3BzLnBocCI+VG9wIG9mIHRoZSBUb3BzPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi90b3BjYXRfbmV3X3RoX3VzLmh0bWwiPlRvcCBOZXcgUmVsZWFzZXM8L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3RzcmFuay5waHAiPlRvcCBvZiB0aGUgTGlzdHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJjYXQtY29udGFpbmVyIj4KPGRpdiBjbGFzcz0ibHNtaGVhZGVyIj5Bd2FyZHMgJiBGZXN0aXZhbHM8L2Rpdj4KPHVsPgo8bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2FsbF9hd2FyZHMucGhwIj5Bd2FyZHMgJiBGZXN0aXZhbHM8L2E+PC9saT48bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL29zY2FyX2RhdGEucGhwIj5BbGwgT3NjYXJzPC9hPjwvbGk+PGxpID48YSAgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9iZXN0XzIwMTkucGhwIj5CZXN0IG9mIDIwMTk8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJjYXQtY29udGFpbmVyIj4KPGRpdiBjbGFzcz0ibHNtaGVhZGVyIj5BYm91dCBGaWxtYWZmaW5pdHk8L2Rpdj4KPHVsPgo8bGkgPjxhICBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3NpdGUtZ3VpZGUucGhwIj5BYm91dCBGQTwvYT48L2xpPjxsaSA+PGEgIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vY29udGFjdF91cy5waHAiPkNvbnRhY3QgVXM8L2E+PC9saT48L3VsPjwvZGl2Pgo8L2Rpdj4KICAgICAgPC90ZD4KICAgICAgPHRkPgogICAgICAgIDxkaXYgaWQ9Im10LWNvbnRlbnQtY2VsbCI+CiAgICAgICAgICAgIDxkaXYgaWQ9InNoLXBvcy1hYnMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2gtaGVhZGVyIiB0aXRsZT0iU2hhcmUiPjxpIGNsYXNzPSJmYXMgZmEtc2hhcmUtYWx0Ij48L2k+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8c3R5bGU+CiAgICAjaGlkZGVuLXVybCB7cG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiA2NXB4OyB0b3A6IDJweDsgZGlzcGxheTogbm9uZTsgcGFkZGluZzogMnB4IDZweCA0cHggNnB4OyBiYWNrZ3JvdW5kOiAjZmRjYzFhOyBtYXJnaW4tdG9wOiA1cHg7IHdpZHRoOiA0ODVweDsgYm9yZGVyLXJhZGl1czogNXB4OyBhbmltYXRpb24tZHVyYXRpb246IC4zczsgei1pbmRleDogMTAwO30KICAgICNoaWRkZW4tdXJsIGlucHV0eyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyBvdXRsaW5lOiBub25lOyBib3JkZXI6IDFweCBzb2xpZCAjREREREREOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDhweCA0cHg7IHdpZHRoOiA0MzVweDsgbWFyZ2luLWxlZnQ6IDVweDsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTt9CiAgICAjaGlkZGVuLXVybCAuaGlkZS11cmwge2N1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAyMnB4OyBtYXJnaW46IDAgNXB4OyBjb2xvcjogIzAwMDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTt9CiAgICAjY29weS1jbGlwYm9hcmQge3Bvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMHB4OyB0b3A6IDMxcHg7IHBhZGRpbmc6IDJweCA2cHg7IGJhY2tncm91bmQ6ICNmZGNjMWE7IG1hcmdpbi10b3A6IDVweDsgYW5pbWF0aW9uLWR1cmF0aW9uOiAuM3M7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDsgd2lkdGg6IDIwMHB4OyBjdXJzb3I6IHBvaW50ZXI7IHBhZGRpbmctbGVmdDogMTVweDt9Cjwvc3R5bGU+Cgo8c2NyaXB0PgoKICAgIGZ1bmN0aW9uIGhpZGVPbkNsaWNrKCApewogICAgICAgICQoZG9jdW1lbnQpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICAgIGlmKCEkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLmhkLXNoLXdyYXBwZXInKS5sZW5ndGggJiYgISQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCcjaGlkZGVuLXVybCcpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgaWYoJCgnLmhkLXNoLXdyYXBwZXInKS5pcygiOnZpc2libGUiKSkgewogICAgICAgICAgICAgICAgICAgIC8vJCgnLmhpZGRlbi1zaGFyZS13cmFwcGVyJykuaGlkZSgpOwogICAgICAgICAgICAgICAgICAgICQoJy5zaC1oZWFkZXInKS50cmlnZ2VyKCdjbGljaycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9ICAgICAgICAKICAgICAgICB9KTsKICAgIH0gIAogCiAgICAkKGZ1bmN0aW9uKCkgewogICAgICAgICQoJy5oZC1zaC13cmFwcGVyJykuYmluZCgnYW5pbWF0aW9uRW5kIG9BbmltYXRpb25FbmQgbXNBbmltYXRpb25FbmQgbW96QW5pbWF0aW9uRW5kIHdlYmtpdEFuaW1hdGlvbkVuZCcsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgaWYoICAkKGV2ZW50LnRhcmdldCkuaGFzQ2xhc3MoJ25rb291dCcpICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJCgnLmhkLXNoLXdyYXBwZXInKS5oaWRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgIH0pOyAgICAgICAgCgogICAgICAgICQoJyNzaC1wb3MtYWJzJykudG9nZ2xlKCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgJCgnLnNoLWhlYWRlcicpLmFkZENsYXNzKCdjbGlja2VkJyk7CiAgICAgICAgICAgICAgICAkKCcuaGQtc2gtd3JhcHBlcicpLnJlbW92ZUNsYXNzKCdua29vdXQnKS5hZGRDbGFzcygnbmtvaW4nKS5zaG93KCk7CiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkKCcuaGQtc2gtd3JhcHBlcicpLnJlbW92ZUNsYXNzKCdua29pbicpLmFkZENsYXNzKCdua29vdXQnKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJCgnLm1haW4tc2gnKS5yZW1vdmVDbGFzcygnY2xpY2tlZCcpOwogICAgICAgICAgICAgICAgaWYoICQoJyNoaWRkZW4tdXJsJykuaXMoIjp2aXNpYmxlIikgKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI2NvcHktdG8tY2xpcCcpLmNsaWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgLy92YXIgcGF0aG5hbWUgPSAnaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbScgKyBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaDsKICAgICAgICB2YXIgcGF0aG5hbWUgPSBlbmNvZGVVUkkoJ2h0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vZmlsbTUwNDg4OS5odG1sJyk7CiAgICAgICAgdmFyIHNsaWRlT3B0aW9ucyA9IHsgZGlyZWN0aW9uOiAnbGVmdCcgfTsKCiAgICAgICAgJCgnI2NvcHktdG8tY2xpcCcpLnRvZ2dsZSgKICAgICAgICAgICAgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICQoJyNoaWRkZW4tdXJsJykuc2hvdygpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgJCgnI2hpZGRlbi11cmwnKS5maW5kKCc6aW5wdXQnKS52YWwocGF0aG5hbWUpOwogICAgICAgICAgICAgICAgICAgIC8vJCgnI2hpZGRlbi11cmwnKS5maW5kKCc6aW5wdXQnKS5zZWxlY3QoKTsKICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dCA9ICQoJyNoaWRkZW4tdXJsJykuZmluZCgnOmlucHV0JykudGV4dCgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICQoJyNoaWRkZW4tdXJsJykuaGlkZSgpOwogICAgICAgIH0pOwoKICAgICAgICAkKCcjaGlkZGVuLXVybCcpLm9uKCdjbGljaycsICcjY29weS1jbGlwYm9hcmQnLCBmdW5jdGlvbigpewogICAgICAgICAgICAkKHRoaXMpLnRleHQoICQoJyNjb3B5LWNsaXBib2FyZCcpLmF0dHIoJ2RhdGEtdGV4dCcpICk7CiAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KCBwYXRobmFtZSApCiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIHBhdGhuYW1lICk7CiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvcHkgdGV4dDogJywgZXJyKTsKICAgICAgICAgICAgfSk7ICAKICAgICAgICB9KQoKICAgICAgICAkKCcjaGlkZGVuLXVybCcpLmZpbmQoJy5oaWRlLXVybCcpLmNsaWNrKGZ1bmN0aW9uKCkKICAgICAgICB7CiAgICAgICAgICAgICQoJyNjb3B5LXRvLWNsaXAnKS50cmlnZ2VyKCdjbGljaycpCiAgICAgICAgfSk7CgogICAgICAgIGhpZGVPbkNsaWNrKCk7CiAgICB9KTsKPC9zY3JpcHQ+Cgo8ZGl2IGNsYXNzPSJoZC1zaC1tYWluLXdyYXBwZXIiPgogICAgPGRpdiBjbGFzcz0iaGQtc2gtd3JhcHBlciI+CiAgICAgICAgPGEgaWQ9ImNvcHktdG8tY2xpcCIgdGl0bGU9IkNvcHkgVVJMIiBocmVmPSIjIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhcmUtaWNvbiIgaWQ9ImNvcHktdG8tY2xpcC1jb250YWluZXIiPjxpIGNsYXNzPSJmYXMgZmEtbGluayI+PC9pPjwvZGl2PgogICAgICAgIDwvYT4KICAgICAgICAgICAgCiAgICAgICAgPGEgY2xhc3M9ImZiLXNoIiB0YXJnZXQ9Il9CTEFOSyIgaHJlZj0iaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3NoYXJlci5waHA/dT1odHRwcyUzQSUyRiUyRnd3dy5maWxtYWZmaW5pdHkuY29tJTJGZW4lMkZmaWxtNTA0ODg5Lmh0bWwmdD1UaGUgVHJ1bWFuIFNob3cgICgxOTk4KSIgdGl0bGU9IlNoYXJlIG9uIEZhY2Vib29rIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhcmUtaWNvbiI+PGkgY2xhc3M9ImZhYiBmYS1mYWNlYm9vay1mIj48L2k+PC9kaXY+CiAgICAgICAgPC9hPgogICAgCiAgICAgICAgPGEgY2xhc3M9InR3LXNoIiB0YXJnZXQ9Il9CTEFOSyIgdGl0bGU9IlNoYXJlIG9uIFR3aXR0ZXIiIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vaW50ZW50L3R3ZWV0P3RleHQ9VGhlJTIwVHJ1bWFuJTIwU2hvdyUyMCUyMCUyODE5OTglMjkmbmJzcDtpbiBAZmlsbWFmZmluaXR5IGh0dHBzJTNBJTJGJTJGd3d3LmZpbG1hZmZpbml0eS5jb20lMkZlbiUyRmZpbG01MDQ4ODkuaHRtbCIgdGl0bGU9IlNoYXJlIG9uIFR3aXR0ZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFyZS1pY29uIj48aSBjbGFzcz0iZmFiIGZhLXR3aXR0ZXIiPjwvaT48L2Rpdj4KICAgICAgICA8L2E+CiAgICAgICAgPGEgY2xhc3M9IndoLXNoIiB0YXJnZXQ9Il9CTEFOSyIgdGl0bGU9IlNoYXJlIG9uIHdoYXRzYXBwIiBocmVmPSJodHRwczovL2FwaS53aGF0c2FwcC5jb20vc2VuZD90ZXh0PVRoZSUyMFRydW1hbiUyMFNob3clMjAlMjAlMjgxOTk4JTI5Jm5ic3A7aW4gQGZpbG1hZmZpbml0eSBodHRwcyUzQSUyRiUyRnd3dy5maWxtYWZmaW5pdHkuY29tJTJGZW4lMkZmaWxtNTA0ODg5Lmh0bWwiIHRpdGxlPSJTaGFyZSBvbiB3aGF0c2FwcCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYXJlLWljb24iPjxpIGNsYXNzPSJmYWIgZmEtd2hhdHNhcHAiPjwvaT48L2Rpdj4KICAgICAgICA8L2E+CiAKPC9kaXY+CjwvZGl2PgoKICAgIDxkaXYgaWQ9ImhpZGRlbi11cmwiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI1NSI+PGkgY2xhc3M9ImZhcyBmYS10aW1lcy1jaXJjbGUgaGlkZS11cmwiPjwvaT4KICAgICAgICA8ZGl2IGlkPSJjb3B5LWNsaXBib2FyZCIgZGF0YS10ZXh0PSJjb3BpZWQiPmNvcHkgdG8gY2xpcGJvYXJkPC9kaXY+CiAgICA8L2Rpdj4KCgogICAgCgoKCjxkaXYgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9Nb3ZpZSI+CiAgICA8aDEgaWQ9Im1haW4tdGl0bGUiPgogICAgICAgIDxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5UaGUgVHJ1bWFuIFNob3cgPC9zcGFuPgogICAgPC9oMT4KCgoKCjxzY3JpcHQ+CiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAgICAkKCIjc2hvdy1hbGwtcHJvIikuY2xpY2soZnVuY3Rpb24oZXZlbnQpewogICAgICAgICQodGhpcykucGFyZW50KCdsaScpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAkKCIuaGlkZGVuIikuc2xpZGVEb3duKCdzbG93Jyk7CiAgICB9KTsKCiAgICAkKCIjc2hvdy1hbGwtYXdhcmRzIikuY2xpY2soZnVuY3Rpb24oZXZlbnQpewogICAgICAgICQodGhpcykucGFyZW50KCdkaXYnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgJCgiLmhpZGRlbi1hd2FyZHMiKS5zbGlkZURvd24oJ3Nsb3cnKTsKICAgIH0pOwoKICAgICQoJy56LW1vdmllIC5jcmVkaXRzJykub24oJ2NsaWNrJywgJy5zZWUtbW9yZS1jcmVkaXRzJyAsZnVuY3Rpb24oKXsKICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2RpdicpLmZpbmQoJy5oaWRkZW4tY3JlZGl0JykuY3NzKCdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpOwogICAgICAgIHZhciAkbGFzdCA9ICQodGhpcykuY2xvc2VzdCgnZGl2JykuZmluZCgnLm5iOmxhc3QgYScpOwogICAgICAgIGlmKCAkbGFzdC5sZW5ndGggPT0gMCApewogICAgICAgICAgICB2YXIgJGxhc3QgPSAkKHRoaXMpLmNsb3Nlc3QoJ2RpdicpLmZpbmQoJy5uYjpsYXN0IHNwYW4nKTsKICAgICAgICB9CgogICAgICAgICQodGhpcykuY2xvc2VzdCgnZGl2JykuZmluZCgnLm5iOmxhc3QnKS5odG1sKCRsYXN0WzBdLm91dGVySFRNTCk7CiAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCdkaXYnKS5maW5kKCcudC1wJykuaGlkZSgpOwoKICAgICAgICAkKHRoaXMpLmh0bWwoIlNlZSBsZXNzIikuYWRkQ2xhc3MoJ3NlZS1sZXNzLWNyZWRpdHMnKS5yZW1vdmVDbGFzcygnc2VlLW1vcmUtY3JlZGl0cycpOwogICAgfSkKCiAgICAkKCcuei1tb3ZpZSAuY3JlZGl0cycpLm9uKCdjbGljaycsICcuc2VlLWxlc3MtY3JlZGl0cycgLCBmdW5jdGlvbigpewogICAgICAgICQodGhpcykuY2xvc2VzdCgnZGl2JykuZmluZCgnLmhpZGRlbi1jcmVkaXQnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgICAgICQodGhpcykuaHRtbCgiU2VlIE1vcmUiKS5hZGRDbGFzcygnc2VlLW1vcmUtY3JlZGl0cycpLnJlbW92ZUNsYXNzKCdzZWUtbGVzcy1jcmVkaXRzJyk7CiAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCdkaXYnKS5maW5kKCcudC1wJykuc2hvdygpOwogICAgfSkKCiAgICAkKCIjY2JveE92ZXJsYXkiKS5vbignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgICQoJy5zaG93LWFrYXMnKS5vbignY2xpY2snLCBmdW5jdGlvbigpCiAgICB7CiAgICAgICAgdmFyIGljb24gPSAkKHRoaXMpLmZpbmQoJ2knKTsKICAgICAgICBpZihpY29uLmhhc0NsYXNzKCdmYS1jYXJldC1kb3duJykpCiAgICAgICAgewogICAgICAgICAgICAkKCcuYWthcycpLnNsaWRlRG93bigpOwogICAgICAgICAgICBpY29uLnJlbW92ZUNsYXNzKCdmYS1jYXJldC1kb3duJykuYWRkQ2xhc3MoJ2ZhLWNhcmV0LXVwJyk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICQoJy5ha2FzJykuc2xpZGVVcCgpOwogICAgICAgICAgICBpY29uLnJlbW92ZUNsYXNzKCdmYS1jYXJldC11cCcpLmFkZENsYXNzKCdmYS1jYXJldC1kb3duJyk7CiAgICAgICAgfQoKICAgIH0pOwp9KTsKPC9zY3JpcHQ+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIG5ldyBSYXRpbmdCYXJzKCQoJyNyYXQtZGlzcCcpLCBbMTUsNTQsMTAwLDc2LDMxLDgsMywxLDEsMF0pOwogICAgICAgICAgICB9KTsKICAgICAgICA8L3NjcmlwdD4KCjxkaXYgY2xhc3M9InotbW92aWUiPgoKPHNjcmlwdD4NCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgJCgiI21vcmUtY2F0ZWdvcmllcyIpLmNsaWNrKGZ1bmN0aW9uKGUpew0KICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsNCiAgICAgICAgJCgiLmhpZGRlbi1tZW51IikudG9nZ2xlKCk7DQogICAgfSk7DQoNCiAgICAvL3BhcmEgcG9uZXIgZWwgbGV0cmVyaXRvIGRlIG5vdmVkYWQNCiAgICAvLyQoIi5uZXciKS5hcHBlbmQoJzxkaXYgaWQ9InRvb2x0aXAtbmV3Ij5ub3ZlZGFkPC9kaXY+Jyk7DQp9KTsNCg0KJChkb2N1bWVudCkuY2xpY2soZnVuY3Rpb24oKSB7DQogICAgJCgiLmhpZGRlbi1tZW51IikuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsNCn0pOw0KDQo8L3NjcmlwdD4NCg0KPGRpdiBjbGFzcz0ibWFyZ2luLW50YWJzIj4NCiAgICANCiAgICANCiAgICANCg0KPHVsIGNsYXNzPSJudGFicyI+DQogICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vZmlsbTUwNDg4OS5odG1sIj5Nb3ZpZSZuYnNwOzwvYT48L2xpPg0KICAgIDxsaSA+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9ldmlkZW9zLnBocD9tb3ZpZV9pZD01MDQ4ODkiPlRyYWlsZXJzJm5ic3A7PGVtPlsxXTwvZW0+PC9hPjwvbGk+DQogICAgPGxpID48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2ZpbG1pbWFnZXMucGhwP21vdmllX2lkPTUwNDg4OSI+SW1hZ2UgZ2FsbGVyeSZuYnNwOzxlbT5bMTRdPC9lbT48L2E+PC9saT4NCjwvdWw+DQo8L2Rpdj4NCgogICAgPGRpdiBpZD0icmlnaHQtY29sdW1uIj4KICAgICAgICA8ZGl2IGlkPSJtb3ZpZS1tYWluLWltYWdlLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGlnaHRib3giIHN0eWxlPSJkaXNwbGF5OiBibG9jazsiIGhyZWY9Imh0dHBzOi8vcGljcy5maWxtYWZmaW5pdHkuY29tL3RoZV90cnVtYW5fc2hvdy0xMzAwOTE1NTctbGFyZ2UuanBnIiB0aXRsZT0iVGhlIFRydW1hbiBTaG93ICIgZGF0YS10PSI8cCBzdHlsZT1mb250LXNpemU6OXB4O2ZvbnQtZmFtaWx5OmFyaWFsO2NvbG9yOiM2NjY2NjY7PkFsbCBpbWFnZXMgYXJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIHJlc3BlY3RpdmUgY29weXJpZ2h0IGhvbGRlcnMgYW5kL29yIHByb2R1Y2Vycy9kaXN0cmlidXRvcnMuPC9wPiIgZGF0YS1tb3ZpZS1pZD0iNTA0ODg5Ij4KICAgICAgICA8aW1nIGl0ZW1wcm9wPSJpbWFnZSIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIyMzgiIHNyYz0iaHR0cHM6Ly9waWNzLmZpbG1hZmZpbml0eS5jb20vdGhlX3RydW1hbl9zaG93LTEzMDA5MTU1Ny1tbWVkLmpwZyIgYWx0PSJUaGUgVHJ1bWFuIFNob3cgIj4gICAgICAgIDxzcGFuIHRpdGxlPSJTZWUgdHJhaWxlciIgY2xhc3M9InNlZS10cmFpbGVyIj48aSBjbGFzcz0iZmFzIGZhLXBsYXktY2lyY2xlIj48L2k+PC9zcGFuPgogICAgPC9hPgogICAgICAgIDwvZGl2PgoKCiAgICAgICAgPGRpdiBpZD0icmF0LWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxkaXYgaWQ9InJhdC1hdmctY291bnQiIGl0ZW1wcm9wPSJhZ2dyZWdhdGVSYXRpbmciIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvQWdncmVnYXRlUmF0aW5nIj4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1vdmllLXJhdC1pbWFnZSI+PHNwYW4gaWQ9InN0YXJzIj48aW1nIHNyYz0iL2ltZ3MvcmF0aW5ncy84LnBuZyI+PC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBpZD0icmF0LWF2Zy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1vdmllLXJhdC1hdmciIGl0ZW1wcm9wPSJyYXRpbmdWYWx1ZSIgY29udGVudD0iNy43Ij4KICAgICAgICAgICAgICAgICAgICAgICAgNy43ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8bWV0YSBpdGVtcHJvcD0iYmVzdFJhdGluZyIgY29udGVudD0iMTAiLz4KICAgICAgICAgICAgICAgICAgICA8bWV0YSBpdGVtcHJvcD0id29yc3RSYXRpbmciIGNvbnRlbnQ9IjEiLz4KICAgICAgICAgICAgICAgICAgICA8bWV0YSBpdGVtcHJvcD0icmV2aWV3Q291bnQiIGNvbnRlbnQ9IjIwMSIvPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1vdmllLWNvdW50LXJhdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGl0ZW1wcm9wPSJyYXRpbmdDb3VudCIgY29udGVudD0iMTIwMTIyIj4xMjAsMTIyPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJtb3ZpZS1jb3VudC1yYXQtdGV4dCI+UmF0aW5nczwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCgogICAgICAgICAgICA8ZGl2IGlkPSJyYXQtZ3JhcGgiPgogICAgICAgICAgICAgICAgPGNhbnZhcyBzdHlsZT0icGFkZGluZzogM3B4OyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXI6IDFweCBzb2xpZCAjQ0REQ0VCIiBoZWlnaHQ9IjgxIiB3aWR0aD0iMTIwIiBpZD0icmF0LWRpc3AiPgogICAgICAgICAgICAgICAgICAgIFBsdWdpbiBub3Qgc3VwcG9ydGVkLiAgICAgICAgICAgICAgICA8L2NhbnZhcz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgPC9kaXY+CjxkaXYgY2xhc3M9InJhdGUtbW92aWUtYm94IiBkYXRhLW1vdmllLWlkPSI1MDQ4ODkiIGRhdGEtdXNlci1yYXRpbmc9IiI+DQogICAgPGRpdiBjbGFzcz0icmF0ZS13cmFwcGVyIj4NCiAgICAgIDxkaXYgY2xhc3M9InJ0LWJveCI+PGEgY2xhc3M9InNpZ24taW4iIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbG9naW4ucGhwIj5SYXRlIHRoaXMgbW92aWU8L2E+PC9kaXY+DQogICAgICAgIDwvZGl2Pg0KPC9kaXY+DQoKCgoKPGRpdiBjbGFzcz0iYWRkLW1vdmllLWxpc3QtY29udCI+CiAgICA8ZGl2IGNsYXNzPSJhZGQtdGV4dC1jb250ZW50Ij4KICAgIDxkaXYgY2xhc3M9ImFkZC1tb3ZpZS1saXN0LWluZm8gYWRkLXRvLWxpc3QtYnV0dG9uIj4KPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9lZHRtb3ZpZWxpc3RzLnBocD9tb3ZpZV9pZD01MDQ4ODkiPkFkZCB0byBsaXN0czwvYT4gICAgPC9kaXY+CiAgICA8L2Rpdj4KCjxkaXYgY2xhc3M9Imxpc3RzLWJveCI+PC9kaXY+Cgo8L2Rpdj4KPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9wcm8tcmV2aWV3cy5waHA/bW92aWUtaWQ9NTA0ODg5Ij4KICAgIDxkaXYgY2xhc3M9ImZpbG0tcmlnaHQtYm94IHByby1yZXZpZXdzLWNoYXJ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+UHJvIHJldmlld3M8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvLXJldmlld3MtY2hhcnQtd3JhcHBlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b3RhbC1hYnMiIHRpdGxlPSIxMCBjcsOtdGljYXMgcHJvZmVzaW9uYWxlcyI+CiAgICAgICAgICAgICAgICAgICAgMTAgPHNtYWxsPjxpIGNsYXNzPSJmYSBmYS1zaW1wbGUtdXNlci1vLWZhIj48L2k+PC9zbWFsbD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0ibXlDaGFydCIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMTBweDsgd2lkdGg6IDcwcHg7IGhlaWdodDogNzBweDsiPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZyI+OTxpIGNsYXNzPSJmYSBmYS1zaW1wbGUtdXNlci1vLWZhIj48L2k+IDxpIGNsYXNzPSJmYXMgZmEtY2lyY2xlICBwb3MiIHRpdGxlPSJQb3NpdGl2ZSByZXZpZXciIHN0eWxlPSJjb2xvcjogIzRDQUY1MCI+PC9pPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZyI+MTxpIGNsYXNzPSJmYSBmYS1zaW1wbGUtdXNlci1vLWZhIj48L2k+IDxpIGNsYXNzPSJmYXMgZmEtY2lyY2xlICBuZXUiIHRpdGxlPSJOZXV0cmFsIFJldmlldyIgc3R5bGU9ImNvbG9yOiAjRkZCRjAwIj48L2k+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnIj4wPGkgY2xhc3M9ImZhIGZhLXNpbXBsZS11c2VyLW8tZmEiPjwvaT4gPGkgY2xhc3M9ImZhcyBmYS1jaXJjbGUgIG5lZyIgdGl0bGU9Ik5lZ2F0aXZlIFJldmlldyIgc3R5bGU9ImNvbG9yOiAjRjQ0MzM2Ij48L2k+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+PCEtLSBib2R5IC0tPgogICAgPC9kaXY+CjwvYT4KPHNjcmlwdD4KICAgICAgICB2YXIgcmFuZG9tU2NhbGluZ0ZhY3RvciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwKTsKICAgICAgICB9OwoKICAgIHZhciBjdHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlDaGFydCcpOwogICAgICAgIHZhciBjb25maWcgPSB7CiAgICAgICAgICAgIHR5cGU6ICdkb3VnaG51dCcsCiAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgIGRhdGFzZXRzOiBbewogICAgICAgICAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICAgICAgICAgICAgMzYwLAogICAgICAgICAgICAgICAgICAgICAgICA0MCwKICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogWwogICAgICAgICAgICAgICAgICAgICAgICAnIzAwODAwMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICcjRkZBNTAwJywKICAgICAgICAgICAgICAgICAgICAgICAgJyNGRjAwMDAnLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdEYXRhc2V0IDEnCiAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgIGxhYmVsczogWwogICAgICAgICAgICAgICAgICAgICdQb3NpdGl2YXMnLAogICAgICAgICAgICAgICAgICAgICdOZXV0cmFzJywKICAgICAgICAgICAgICAgICAgICAnTmVnYXRpdmFzJywKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgcmVzcG9uc2l2ZTogZmFsc2UsCiAgICAgICAgICAgICAgICBsZWdlbmQ6IHsKICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB0aXRsZTogewogICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogewogICAgICAgICAgICAgICAgICAgIGFuaW1hdGVTY2FsZTogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBhbmltYXRlUm90YXRlOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgY3V0b3V0UGVyY2VudGFnZTogNzUsCiAgICAgICAgICAgICAgICB0b29sdGlwczogewogICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB2YXIgbXlDaGFydCA9IG5ldyBDaGFydChjdHgsIGNvbmZpZyk7Cjwvc2NyaXB0PgoKCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJsZWZ0LWNvbHVtbiI+CiAgICAgICAgPGRsIGNsYXNzPSJtb3ZpZS1pbmZvIj4KICAgICAgICAgICAgPGR0Pk9yaWdpbmFsIHRpdGxlPC9kdD4KICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIFRydW1hbiBTaG93ICAgICAgICAgICAgIDwvZGQ+CgoKCgogICAgICAgICAgICA8ZHQ+WWVhcjwvZHQ+CiAgICAgICAgICAgIDxkZCBpdGVtcHJvcD0iZGF0ZVB1Ymxpc2hlZCI+MTk5ODwvZGQ+CgogICAgICAgICAgICA8ZHQ+UnVubmluZyB0aW1lPC9kdD4KICAgICAgICAgICAgPGRkIGl0ZW1wcm9wPSJkdXJhdGlvbiI+MTAzIG1pbi48L2RkPgoKICAgICAgICAgICAgPGR0PkNvdW50cnk8L2R0PgogICAgICAgICAgICA8ZGQ+PHNwYW4gaWQ9ImNvdW50cnktaW1nIj48aW1nIGNsYXNzPSJuZmxhZyIgc3JjPSIvaW1ncy9jb3VudHJpZXMyL1VTLnBuZyIgYWx0PSJVbml0ZWQgU3RhdGVzIiB0aXRsZT0iVW5pdGVkIFN0YXRlcyI+PC9zcGFuPiZuYnNwO1VuaXRlZCBTdGF0ZXM8L2RkPgogICAgICAgICAgICA8ZHQ+RGlyZWN0b3I8L2R0PgogICAgICAgICAgICA8ZGQgY2xhc3M9ImRpcmVjdG9ycyI+CjxkaXYgY2xhc3M9ImNyZWRpdHMiPjxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJkaXJlY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1kaXJlY3RvciZzbiZzdGV4dD1QZXRlciUyMFdlaXIiIHRpdGxlPSJQZXRlciBXZWlyIj48c3BhbiBpdGVtcHJvcD0ibmFtZSI+UGV0ZXIgV2Vpcjwvc3Bhbj48L2E+PC9zcGFuPjwvZGl2PiAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDxkdD5TY3JlZW53cml0ZXI8L2R0PgogICAgICAgICAgICA8ZGQ+PGRpdiBjbGFzcz0iY3JlZGl0cyI+PHNwYW4gY2xhc3M9Im5iIj48c3Bhbj5BbmRyZXcgTmljY29sPC9zcGFuPjwvc3Bhbj48L2Rpdj48L2RkPgogICAgICAgICAgICA8ZHQ+TXVzaWM8L2R0PgogICAgICAgICAgICA8ZGQ+PGRpdiBjbGFzcz0iY3JlZGl0cyI+PHNwYW4gY2xhc3M9Im5iIj48c3Bhbj5CdXJraGFyZCBEYWxsd2l0ejwvc3Bhbj48L3NwYW4+PC9kaXY+PC9kZD4KICAgICAgICAgICAgPGR0PkNpbmVtYXRvZ3JhcGh5PC9kdD4KICAgICAgICAgICAgPGRkPjxkaXYgY2xhc3M9ImNyZWRpdHMiPjxzcGFuIGNsYXNzPSJuYiI+PHNwYW4+UGV0ZXIgQml6aW91PC9zcGFuPjwvc3Bhbj48L2Rpdj48L2RkPgogICAgICAgICAgICA8ZHQ+Q2FzdDwvZHQ+CiAgICAgICAgICAgIDxkZCBjbGFzcz0iY2FyZC1jYXN0Ij4KPGRpdiBjbGFzcz0iY3JlZGl0cyI+PHNwYW4gY2xhc3M9Im5iIiAgaXRlbXByb3A9ImFjdG9yIiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1BlcnNvbiI+PGEgaXRlbXByb3A9InVybCIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zZWFyY2gucGhwP3N0eXBlPWNhc3Qmc24mc3RleHQ9SmltJTIwQ2FycmV5IiB0aXRsZT0iSmltIENhcnJleSI+PHNwYW4gaXRlbXByb3A9Im5hbWUiPkppbSBDYXJyZXk8L3NwYW4+PC9hPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJhY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1jYXN0JnNuJnN0ZXh0PUxhdXJhJTIwTGlubmV5IiB0aXRsZT0iTGF1cmEgTGlubmV5Ij48c3BhbiBpdGVtcHJvcD0ibmFtZSI+TGF1cmEgTGlubmV5PC9zcGFuPjwvYT4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmIiICBpdGVtcHJvcD0iYWN0b3IiIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUGVyc29uIj48YSBpdGVtcHJvcD0idXJsIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3NlYXJjaC5waHA/c3R5cGU9Y2FzdCZzbiZzdGV4dD1Ob2FoJTIwRW1tZXJpY2giIHRpdGxlPSJOb2FoIEVtbWVyaWNoIj48c3BhbiBpdGVtcHJvcD0ibmFtZSI+Tm9haCBFbW1lcmljaDwvc3Bhbj48L2E+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5iIiAgaXRlbXByb3A9ImFjdG9yIiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1BlcnNvbiI+PGEgaXRlbXByb3A9InVybCIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zZWFyY2gucGhwP3N0eXBlPWNhc3Qmc24mc3RleHQ9RWQlMjBIYXJyaXMiIHRpdGxlPSJFZCBIYXJyaXMiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5FZCBIYXJyaXM8L3NwYW4+PC9hPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJhY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1jYXN0JnNuJnN0ZXh0PU5hdGFzY2hhJTIwTWNFbGhvbmUiIHRpdGxlPSJOYXRhc2NoYSBNY0VsaG9uZSI+PHNwYW4gaXRlbXByb3A9Im5hbWUiPk5hdGFzY2hhIE1jRWxob25lPC9zcGFuPjwvYT4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmIiICBpdGVtcHJvcD0iYWN0b3IiIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUGVyc29uIj48YSBpdGVtcHJvcD0idXJsIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3NlYXJjaC5waHA/c3R5cGU9Y2FzdCZzbiZzdGV4dD1Ib2xsYW5kJTIwVGF5bG9yIiB0aXRsZT0iSG9sbGFuZCBUYXlsb3IiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5Ib2xsYW5kIFRheWxvcjwvc3Bhbj48L2E+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5iIiAgaXRlbXByb3A9ImFjdG9yIiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1BlcnNvbiI+PGEgaXRlbXByb3A9InVybCIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zZWFyY2gucGhwP3N0eXBlPWNhc3Qmc24mc3RleHQ9UGF1bCUyMEdpYW1hdHRpIiB0aXRsZT0iUGF1bCBHaWFtYXR0aSI+PHNwYW4gaXRlbXByb3A9Im5hbWUiPlBhdWwgR2lhbWF0dGk8L3NwYW4+PC9hPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJhY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1jYXN0JnNuJnN0ZXh0PUFkYW0lMjBUb21laSIgdGl0bGU9IkFkYW0gVG9tZWkiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5BZGFtIFRvbWVpPC9zcGFuPjwvYT4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmIiICBpdGVtcHJvcD0iYWN0b3IiIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUGVyc29uIj48YSBpdGVtcHJvcD0idXJsIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3NlYXJjaC5waHA/c3R5cGU9Y2FzdCZzbiZzdGV4dD1IYXJyeSUyMFNoZWFyZXIiIHRpdGxlPSJIYXJyeSBTaGVhcmVyIj48c3BhbiBpdGVtcHJvcD0ibmFtZSI+SGFycnkgU2hlYXJlcjwvc3Bhbj48L2E+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5iIiAgaXRlbXByb3A9ImFjdG9yIiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1BlcnNvbiI+PGEgaXRlbXByb3A9InVybCIgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9zZWFyY2gucGhwP3N0eXBlPWNhc3Qmc24mc3RleHQ9QnJpYW4lMjBEZWxhdGUiIHRpdGxlPSJCcmlhbiBEZWxhdGUiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5CcmlhbiBEZWxhdGU8L3NwYW4+PC9hPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJhY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1jYXN0JnNuJnN0ZXh0PVBoaWxpcCUyMEJha2VyJTIwSGFsbCIgdGl0bGU9IlBoaWxpcCBCYWtlciBIYWxsIj48c3BhbiBpdGVtcHJvcD0ibmFtZSI+UGhpbGlwIEJha2VyIEhhbGw8L3NwYW4+PC9hPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJuYiIgIGl0ZW1wcm9wPSJhY3RvciIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9QZXJzb24iPjxhIGl0ZW1wcm9wPSJ1cmwiIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vc2VhcmNoLnBocD9zdHlwZT1jYXN0JnNuJnN0ZXh0PVBldGVyJTIwS3JhdXNlIiB0aXRsZT0iUGV0ZXIgS3JhdXNlIj48c3BhbiBpdGVtcHJvcD0ibmFtZSI+UGV0ZXIgS3JhdXNlPC9zcGFuPjwvYT4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibmIiICBpdGVtcHJvcD0iYWN0b3IiIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUGVyc29uIj48YSBpdGVtcHJvcD0idXJsIiBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3NlYXJjaC5waHA/c3R5cGU9Y2FzdCZzbiZzdGV4dD1PLUxhbiUyMEpvbmVzIiB0aXRsZT0iTy1MYW4gSm9uZXMiPjxzcGFuIGl0ZW1wcm9wPSJuYW1lIj5PLUxhbiBKb25lczwvc3Bhbj48L2E+PC9zcGFuPjwvZGl2PiAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDxkdD5Qcm9kdWNlcjwvZHQ+CiAgICAgICAgICAgIDxkZCBjbGFzcz0iY2FyZC1wcm9kdWNlciI+PGRpdiBjbGFzcz0iY3JlZGl0cyI+PHNwYW4gY2xhc3M9Im5iIj48c3Bhbj5QYXJhbW91bnQgUGljdHVyZXM8L3NwYW4+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im5iIj48c3Bhbj5TY290dCBSdWRpbiBQcm9kdWN0aW9uczwvc3Bhbj48L3NwYW4+PC9kaXY+PC9kZD4KCiAgICAgICAgICAgIDxkdD5HZW5yZTwvZHQ+CiAgICAgICAgICAgIDxkZCBjbGFzcz0iY2FyZC1nZW5yZXMiPgogICAgICAgICAgICAgICAgPHNwYW4gaXRlbXByb3A9ImdlbnJlIj48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL21vdmllZ2VucmUucGhwP2dlbnJlPURSJmF0dHI9cmF0X2NvdW50Jm5vZG9jIj5EcmFtYTwvYT48L3NwYW4+LiAgICAgICAgICAgICAgICAgPHNwYW4gaXRlbXByb3A9ImdlbnJlIj48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL21vdmllZ2VucmUucGhwP2dlbnJlPUNPJmF0dHI9cmF0X2NvdW50Jm5vZG9jIj5Db21lZHk8L2E+PC9zcGFuPiB8ICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL21vdmlldG9waWMucGhwP3RvcGljPTg5OTc3NiZhdHRyPXJhdF9jb3VudCZub2RvYyI+Q29tZWR5LURyYW1hPC9hPi4gICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbW92aWV0b3BpYy5waHA/dG9waWM9MzMzNjkyJmF0dHI9cmF0X2NvdW50Jm5vZG9jIj5TYXRpcmU8L2E+LiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9tb3ZpZXRvcGljLnBocD90b3BpYz0xNjIwMTcmYXR0cj1yYXRfY291bnQmbm9kb2MiPlRlbGV2aXNpb248L2E+LiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9tb3ZpZXRvcGljLnBocD90b3BpYz00MzY0NDcmYXR0cj1yYXRfY291bnQmbm9kb2MiPkN1bHQgTW92aWU8L2E+ICAgICAgICAgICAgPC9kZD4KCgogICAgICAgIDxkdD5TeW5vcHNpcyAvIFBsb3Q8L2R0PgogICAgICAgIDxkZCBjbGFzcz0iIiBpdGVtcHJvcD0iZGVzY3JpcHRpb24iPkhlJ3MgdGhlIHN0YXIgb2YgdGhlIHNob3cgLSBidXQgaGUgZG9lc24ndCBrbm93IGl0ISBKaW0gQ2FyZXkgcGxheXMgdW53aXR0aW5nIFRydW1hbiBCdXJiYW5rLCBhbiBvcmRpbmFyeSBtYW4gaW4gYSBub3Qtc28tb3JkaW5hcnkgbGlmZS4gRnJvbSB0aGUgdGltZSBoZSB3YXMgYm9ybiB0byB0aGUgcHJlc2VudCwgVHJ1bWFuJ3MgZW50aXJlIGxpZmUgaGFzIGJlZW4gYnJvYWRjYXN0IGxpdmUgb24gbmF0aW9uYWwgVFYuIFRydW1hbiBkb2Vzbid0IHJlYWxpemUgdGhhdCBoaXMgcXVhaW50IGhvbWV0b3duIGlzIGFjdHVhbGx5IGEgZ2lhbnQgc3R1ZGlvIHNldCAtIGJpZyBlbm91Z2ggdG8gYmUgc2VlbiBmcm9tIHNwYWNlIC0gYW5kIHRoYXQgdGhlIGZvbGtzIGxpdmluZyBhbmQgd29ya2luZyB0aGVyZSBhcmUgSG9sbHl3b29kIGFjdG9ycy4gRXZlbiBUcnVtYW4ncyBpbmNlc3NhbnRseSBidWJibHkgd2lmZSBpcyBhIGNvbnRyYWN0IHBsYXllci4gR3JhZHVhbGx5LCBUcnVtYW4gZ2V0cyB3aXNlLiBBbmQgd2hhdCBoZSBkb2VzIGFib3V0IGhpcyBkaXNjb3Zlcnkgd2lsbCBoYXZlIHlvdSBsYXVnaGluZywgY3J5aW5nIGFuZCBjaGVlcmluZyBhcyBoZSBmaW5kcyBoaXMgd2F5IHRvIHRoZSB0cnV0aC48L2RkPgogICAgPC9kbD4KICAgIDxkbCBjbGFzcz0ibWFyZ2luLXRvcCBtb3ZpZS1pbmZvIj4KICAgICAgICA8ZHQ+QXdhcmRzPC9kdD4KICAgICAgICA8ZGQgY2xhc3M9ImF3YXJkIj4KICAgICAgICA8ZGl2ICBjbGFzcz0ibWFyZ2luLWJvdHRvbSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9hd2FyZHMucGhwP2F3YXJkX2lkPWFjYWRlbXlfYXdhcmRzJnllYXI9MTk5OSI+MTk5ODwvYT46IDMgTm9taW5hdGlvbnMgZm9yIE9zY2FyOiBCZXN0IERpcmVjdG9yIChQZXRlciBXZWlyKSwgU3VwcG9ydGluZyBBY3RvciwgU2NyZWVucGxheTwvZGl2PgogICAgICAgIDxkaXYgIGNsYXNzPSJtYXJnaW4tYm90dG9tIj4KPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9hd2FyZHMucGhwP2F3YXJkX2lkPWdvbGRlbmdsb2JlcyZ5ZWFyPTE5OTkiPjE5OTg8L2E+OiAzIEdvbGRlbiBHbG9iZXM6IEFjdG9yIERyYW1hIChDYXJyZXkpLCBTdXBwb3J0aW5nIEFjdG9yIGFuZCBPU1QuIDYgTm9taW5hdGlvbnM8L2Rpdj4KICAgICAgICA8ZGl2ICBjbGFzcz0ibWFyZ2luLWJvdHRvbSI+CjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYXdhcmRzLnBocD9hd2FyZF9pZD1iYWZ0YSZ5ZWFyPTE5OTkiPjE5OTg8L2E+OiAzIEJBRlRBIEF3YXJkczogQmVzdCBEaXJlY3RvciwgUHJvZHVjdGlvbiBEZXNpZ24gYW5kIE9yaWdpbmFsIFNjcmVlbnBsYXkuIDcgTm9tLjwvZGl2PgogICAgICAgIDxkaXYgIGNsYXNzPSJtYXJnaW4tYm90dG9tIj4KPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9hd2FyZHMucGhwP2F3YXJkX2lkPW5iciZ5ZWFyPTE5OTgiPjE5OTg8L2E+OiBOYXRpb25hbCBCb2FyZCBvZiBSZXZpZXc6IFN1cHBvcnRpbmcgQWN0b3IgKEVkIEhhcnJpcyk8L2Rpdj4KICAgICAgICA8ZGl2ICBjbGFzcz0ibWFyZ2luLWJvdHRvbSI+CjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYXdhcmRzLnBocD9hd2FyZF9pZD1sYWZjYSZ5ZWFyPTE5OTgiPjE5OTg8L2E+OiBMb3MgQW5nZWxlcyBGaWxtIENyaXRpY3MgQXNzb2NpYXRpb246IE5vbWluYXRlZCBmb3IgQmVzdCBQcm9kdWN0aW9uIERlc2lnbiAgPC9kaXY+CiAgICAgICAgPGRpdiAgY2xhc3M9Im1hcmdpbi1ib3R0b20iPgo8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2F3YXJkcy5waHA/YXdhcmRfaWQ9Y3JpdGljc19jaG9pY2VfYXdhcmRzJnllYXI9MTk5OCI+MTk5ODwvYT46IENyaXRpY3MnIENob2ljZSBBd2FyZHM6IE5vbWluYXRlZCBmb3IgQmVzdCBGaWxtPC9kaXY+CiAgICAgICAgPGRpdj48c3BhbiBpZD0ic2hvdy1hbGwtYXdhcmRzIj48YSBocmVmPSIjIj5TaG93IDQgbW9yZSBhd2FyZHM8L2E+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtY2hldnJvbi1kb3duIHN0cmlwLWRvd24iPjwvaT48L3NwYW4+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGlkZGVuLWF3YXJkcyBtYXJnaW4tYm90dG9tIiBjbGFzcz0ibWFyZ2luLWJvdHRvbSI+CjE5OTg6IENoaWNhZ28gRmlsbSBDcml0aWNzIEF3YXJkczogQmVzdCBPcmlnaW5hbCBTY29yZS4gNSBOb21pbmF0aW9uczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImhpZGRlbi1hd2FyZHMgbWFyZ2luLWJvdHRvbSIgY2xhc3M9Im1hcmdpbi1ib3R0b20iPgo8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2F3YXJkcy5waHA/YXdhcmRfaWQ9cGdhJnllYXI9MTk5OSI+MTk5ODwvYT46IFByb2R1Y2VycyBHdWlsZCBBd2FyZHMgKFBHQSk6IE5vbWluYXRlZCBmb3IgQmVzdCBGaWxtPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGlkZGVuLWF3YXJkcyBtYXJnaW4tYm90dG9tIiBjbGFzcz0ibWFyZ2luLWJvdHRvbSI+CjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vYXdhcmRzLnBocD9hd2FyZF9pZD1kZ2EmeWVhcj0xOTk5Ij4xOTk4PC9hPjogRGlyZWN0b3JzIEd1aWxkIG9mIEFtZXJpY2EgKERHQSk6IE5vbWluYXRlZCBmb3IgQmVzdCBEaXJlY3RvcjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImhpZGRlbi1hd2FyZHMgbWFyZ2luLWJvdHRvbSIgY2xhc3M9Im1hcmdpbi1ib3R0b20iPgo8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2F3YXJkcy5waHA/YXdhcmRfaWQ9d2dhJnllYXI9MTk5OSI+MTk5ODwvYT46IFdyaXRlcnMgR3VpbGQgb2YgQW1lcmljYSAoV0dBKTogTm9taW5hdGVkIGZvciBCZXN0IE9yaWdpbmFsIFNjcmVlbnBsYXk8L2Rpdj4KICAgICAgICA8L2RkPgogICAgPC9kbD4KCiAgICA8ZGwgY2xhc3M9Im1hcmdpbi10b3AgbW92aWUtaW5mbyI+CiAgICAgICAgPGR0PkNyaXRpY3MnIHJldmlld3M8L2R0PgogICAgICAgIDxkZD4KICAgICAgICAgICAgPHVsIGlkPSJwcm8tcmV2aWV3cyI+CiAgICAgICAgICAgPGxpID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByby1yZXZpZXciIGl0ZW1wcm9wPSJyZXZpZXciIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUmV2aWV3Ij4KCiAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9IlJlYWQgZnVsbCByZXZpZXciIGhyZWY9Imh0dHBzOi8vd3d3LnJvZ2VyZWJlcnQuY29tL3Jldmlld3MvdGhlLXRydW1hbi1zaG93LTE5OTgiIHRhcmdldD0iX0JMQU5LIiA+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpdGVtcHJvcD0icmV2aWV3Qm9keSI+JnF1b3Q7VGhlIHVuZGVybHlpbmcgaWRlYXMgbWFkZSB0aGUgbW92aWUgbW9yZSB0aGFuIGp1c3QgZW50ZXJ0YWlubWVudCAoLi4uKSBJdCBicmluZ3MgaW50byBmb2N1cyB0aGUgbmV3IHZhbHVlcyB0aGF0IHRlY2hub2xvZ3kgaXMgZm9yY2luZyBvbiBodW1hbml0eSAo4oCmKSBSYXRpbmc6ICYjOTczMzsmIzk3MzM7JiM5NzMzOyYjOTczMzsgKG91dCBvZiA0KSZxdW90OyZuYnNwOzxpIGNsYXNzPSdmYXMgZmEtZXh0ZXJuYWwtbGluay1hbHQnPjwvaT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tY3JpdC1tZWQiIGl0ZW1wcm9wPSJhdXRob3IiPlJvZ2VyIEViZXJ0OiByb2dlcmViZXJ0LmNvbSA8aSBhbHQ9IlBvc2l0aXZlIHJldmlldyIgdGl0bGU9IlBvc2l0aXZlIHJldmlldyIgY2xhc3M9ImZhcyBmYS1jaXJjbGUgIHBvcyI+PC9pPjwvZGl2PgoKCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICA8bGkgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvLXJldmlldyIgaXRlbXByb3A9InJldmlldyIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9SZXZpZXciPgoKICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iUmVhZCBmdWxsIHJldmlldyIgaHJlZj0iaHR0cDovL2FydGljbGVzLmNoaWNhZ290cmlidW5lLmNvbS8xOTk4LTA2LTA1L2VudGVydGFpbm1lbnQvOTgwNjA1MDA5OF8xX3RydW1hbi1idXJiYW5rLXRydW1hbi1zaG93LXNlYWhhdmVuIiB0YXJnZXQ9Il9CTEFOSyIgPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9InJldmlld0JvZHkiPiZxdW90O0l0J3MgYSBzYXRpcmUvY29tZWR5L2ZhbnRhc3kgYWJvdXQgdGhlIGZ1dHVyZSBvZiB0ZWxldmlzaW9uIGFuZCB0aGUgcGVvcGxlIGNhdWdodCBpbiBpdHMgb21uaXByZXNlbnQgZWxlY3Ryb25pYyBuZXQgKOKApikgUmF0aW5nOiAmIzk3MzM7JiM5NzMzOyYjOTczMzsmIzk3MzM7IChvdXQgb2YgNCkmcXVvdDsmbmJzcDs8aSBjbGFzcz0nZmFzIGZhLWV4dGVybmFsLWxpbmstYWx0Jz48L2k+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9hPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvLWNyaXQtbWVkIiBpdGVtcHJvcD0iYXV0aG9yIj5NaWNoYWVsIFdpbG1pbmd0b246IENoaWNhZ28gVHJpYnVuZSA8aSBhbHQ9IlBvc2l0aXZlIHJldmlldyIgdGl0bGU9IlBvc2l0aXZlIHJldmlldyIgY2xhc3M9ImZhcyBmYS1jaXJjbGUgIHBvcyI+PC9pPjwvZGl2PgoKCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICA8bGkgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvLXJldmlldyIgaXRlbXByb3A9InJldmlldyIgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRwOi8vc2NoZW1hLm9yZy9SZXZpZXciPgoKICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iUmVhZCBmdWxsIHJldmlldyIgaHJlZj0iaHR0cDovL2NvbW11bml0eS5zZWF0dGxldGltZXMubndzb3VyY2UuY29tL2FyY2hpdmUvP2RhdGU9MTk5ODA2MDUmc2x1Zz0yNzU0NDg4IiB0YXJnZXQ9Il9CTEFOSyIgPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9InJldmlld0JvZHkiPiZxdW90O1RoaXMgaXMgYSBmaWxtIHRoYXQgY2FuIHN0YXkgd2l0aCBvbmUgZm9yIGEgdmVyeSBsb25nIHRpbWUsIGFuZCBldmVuIHNsaWdodGx5IGNoYW5nZSB0aGUgd2F5IG9uZSBsb29rcyBhdCBsaWZlIGFuZCB0aGUgd29ybGQuJnF1b3Q7Jm5ic3A7PGkgY2xhc3M9J2ZhcyBmYS1leHRlcm5hbC1saW5rLWFsdCc+PC9pPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByby1jcml0LW1lZCIgaXRlbXByb3A9ImF1dGhvciI+VG9tIEtlb2doOiBTZWF0dGxlIFRpbWVzIDxpIGFsdD0iUG9zaXRpdmUgcmV2aWV3IiB0aXRsZT0iUG9zaXRpdmUgcmV2aWV3IiBjbGFzcz0iZmFzIGZhLWNpcmNsZSAgcG9zIj48L2k+PC9kaXY+CgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgIDxsaSA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tcmV2aWV3IiBpdGVtcHJvcD0icmV2aWV3IiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1JldmlldyI+CgogICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSJSZWFkIGZ1bGwgcmV2aWV3IiBocmVmPSJodHRwczovL3d3dy5jaGljYWdvcmVhZGVyLmNvbS9jaGljYWdvL3RoZS10cnVtYW4tc2hvdy9GaWxtP29pZD0xMDU1MjI0IiB0YXJnZXQ9Il9CTEFOSyIgPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9InJldmlld0JvZHkiPiZxdW90O1ByZXRlbmRzIHRvIGJlIGRhcmluZyB3aGlsZSBwYXJyb3Rpbmcgd2hhdCBtdWNoIG9mIHRoZSBUViBpbmR1c3RyeSBhbHJlYWR5IHRoaW5rcyBhYm91dCBpdHNlbGYgYW5kIGl0cyBhdWRpZW5jZS4gQnV0IGl0J3Mgc3RpbGwgcHJldHR5IG11Y2ggZnVuIHRvIHdhdGNoLiZxdW90OyZuYnNwOzxpIGNsYXNzPSdmYXMgZmEtZXh0ZXJuYWwtbGluay1hbHQnPjwvaT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tY3JpdC1tZWQiIGl0ZW1wcm9wPSJhdXRob3IiPkpvbmF0aGFuIFJvc2VuYmF1bTogQ2hpY2FnbyBSZWFkZXIgPGkgYWx0PSJOZXV0cmFsIFJldmlldyIgdGl0bGU9Ik5ldXRyYWwgUmV2aWV3IiBjbGFzcz0iZmFzIGZhLWNpcmNsZSAgbmV1Ij48L2k+PC9kaXY+CgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgIDxsaSA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tcmV2aWV3IiBpdGVtcHJvcD0icmV2aWV3IiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1JldmlldyI+CgogICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSJSZWFkIGZ1bGwgcmV2aWV3IiBocmVmPSJodHRwczovL2V3LmNvbS9hcnRpY2xlLzE5OTgvMDYvMDUvdHJ1bWFuLXNob3cvIiB0YXJnZXQ9Il9CTEFOSyIgPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9InJldmlld0JvZHkiPiZxdW90O0EgYmVhdXRpZnVsbHkgc2luaXN0ZXIgYW5kIHRyYW5zZml4aW5nIGVudGVydGFpbm1lbnQgKC4uLikgQ2FycmV5IHR1cm5zIFRydW1hbiBpbnRvIGEgcG9zdG1vZGVybiBDYXByYSBoZXJvLiZxdW90OyZuYnNwOzxpIGNsYXNzPSdmYXMgZmEtZXh0ZXJuYWwtbGluay1hbHQnPjwvaT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tY3JpdC1tZWQiIGl0ZW1wcm9wPSJhdXRob3IiPk93ZW4gR2xlaWJlcm1hbjogRW50ZXJ0YWlubWVudCBXZWVrbHkgPGkgYWx0PSJQb3NpdGl2ZSByZXZpZXciIHRpdGxlPSJQb3NpdGl2ZSByZXZpZXciIGNsYXNzPSJmYXMgZmEtY2lyY2xlICBwb3MiPjwvaT48L2Rpdj4KCgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgPGxpID4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByby1yZXZpZXciIGl0ZW1wcm9wPSJyZXZpZXciIGl0ZW1zY29wZSBpdGVtdHlwZT0iaHR0cDovL3NjaGVtYS5vcmcvUmV2aWV3Ij4KCiAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9IlJlYWQgZnVsbCByZXZpZXciIGhyZWY9Imh0dHBzOi8vd3d3Lndhc2hpbmd0b25wb3N0LmNvbS93cC1zcnYvc3R5bGUvbG9uZ3Rlcm0vbW92aWVzL3ZpZGVvcy90cnVtYW5zaG93a2VtcGxleS5odG0/P25vcmVkaXJlY3Q9b24iIHRhcmdldD0iX0JMQU5LIiA+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpdGVtcHJvcD0icmV2aWV3Qm9keSI+JnF1b3Q7T25lIG9mIHRoZSBzbWFydGVzdCwgbW9zdCBpbnZlbnRpdmUgbW92aWVzIGluIG1lbW9yeSwgaXQgbWFuYWdlcyB0byBiZSBhcyBlbmRlYXJpbmcgYXMgaXQgaXMgcHJvdm9jYXRpdmUuJnF1b3Q7Jm5ic3A7PGkgY2xhc3M9J2ZhcyBmYS1leHRlcm5hbC1saW5rLWFsdCc+PC9pPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByby1jcml0LW1lZCIgaXRlbXByb3A9ImF1dGhvciI+Uml0YSBLZW1wbGV5OiBUaGUgV2FzaGluZ3RvbiBQb3N0IDxpIGFsdD0iUG9zaXRpdmUgcmV2aWV3IiB0aXRsZT0iUG9zaXRpdmUgcmV2aWV3IiBjbGFzcz0iZmFzIGZhLWNpcmNsZSAgcG9zIj48L2k+PC9kaXY+CgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgIDxsaSA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tcmV2aWV3IiBpdGVtcHJvcD0icmV2aWV3IiBpdGVtc2NvcGUgaXRlbXR5cGU9Imh0dHA6Ly9zY2hlbWEub3JnL1JldmlldyI+CgogICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSJSZWFkIGZ1bGwgcmV2aWV3IiBocmVmPSJodHRwczovL3d3dy5ueXRpbWVzLmNvbS8xOTk4LzA2LzA1L21vdmllcy9maWxtLXJldmlldy1zby13aGF0LXMtd3Jvbmctd2l0aC10aGlzLXBpY3R1cmUuaHRtbCIgdGFyZ2V0PSJfQkxBTksiID4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGl0ZW1wcm9wPSJyZXZpZXdCb2R5Ij4mcXVvdDtKaW0gQ2FycmV5J3MgaW5zdGFudGx5IGljb25pYyBwZXJmb3JtYW5jZSBhcyB0aGUgc3dlZXQsIHVuc3VzcGVjdGluZyBUcnVtYW4gd2lsbCBnaXZlIGhpcyBjYXJlZXIgZGVzZXJ2ZWQgbmV3IGltcGV0dXMsIGJ1dCB0aGUgcmVhbCBzdGFyIG9mICdUaGUgVHJ1bWFuIFNob3cnIGlzIGl0cyBwcmVtaXNlLiZxdW90OyZuYnNwOzxpIGNsYXNzPSdmYXMgZmEtZXh0ZXJuYWwtbGluay1hbHQnPjwvaT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm8tY3JpdC1tZWQiIGl0ZW1wcm9wPSJhdXRob3IiPkphbmV0IE1hc2xpbjogVGhlIE5ldyBZb3JrIFRpbWVzIDxpIGFsdD0iUG9zaXRpdmUgcmV2aWV3IiB0aXRsZT0iUG9zaXRpdmUgcmV2aWV3IiBjbGFzcz0iZmFzIGZhLWNpcmNsZSAgcG9zIj48L2k+PC9kaXY+CgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48ZW0+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9wcm8tcmV2aWV3cy5waHA/bW92aWUtaWQ9NTA0ODg5Ij5TaG93IDMgbW9yZSByZXZpZXdzIDxpIGNsYXNzPSJmYXMgZmEtY2hldnJvbi1yaWdodCBzdHJpcC1kb3duIj48L2k+PC9hPjwvZW0+PC9saT4KCiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kZD4KICAgIDwvZGw+CgoKCiAgICA8ZGwgY2xhc3M9Im1hcmdpbi10b3AgbW92aWUtaW5mbyI+CiAgICAgICAgPGR0IHN0eWxlPSJwYWRkaW5nLWJvdHRvbTogNTBweDsiPk1vdmllIFNvdWxtYXRlcycgcmF0aW5nczwvZHQ+CiAgICAgICAgPGRkIHN0eWxlPSJwYWRkaW5nLWJvdHRvbTogNTBweDsiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJnaW4tYm90dG9tIiBpZD0ic20tbS1yYXQiPgogICAgICAgICAgICAgICAgDQogICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9yZWdpc3Rlci5waHAiPlJlZ2lzdGVyPC9hPiBzbyB5b3UgY2FuIGFjY2VzcyBtb3ZpZSByZWNvbW1lbmRhdGlvbnMgdGFpbG9yZWQgdG8geW91ciBtb3ZpZSB0YXN0ZS4gICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2RkPgoKICAgICAgICA8ZHQ+RnJpZW5kcycgcmF0aW5nczwvZHQ+CiAgICAgICAgPGRkPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJnaW4tYm90dG9tIiBpZD0iZnItbS1yYXQiPgogICAgICAgICAgICAgICAgPGRpdj48YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3JlZ2lzdGVyLnBocCI+UmVnaXN0ZXI8L2E+IHNvIHlvdSBjYW4gY2hlY2sgb3V0IHJhdGluZ3MgYnkgeW91ciBmcmllbmRzLCBmYW1pbHkgbWVtYmVycywgYW5kIGxpa2UtbWluZGVkIG1lbWJlcnMgb2YgdGhlIEZBIGNvbW11bml0eS48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGQ+CiAgICA8L2RsPgoKICAgIDxzY3JpcHQ+CiAgICAgICAgJChmdW5jdGlvbigpewogICAgICAgICAgICAkKCcjbGlzdC10b3AtcmFuayAuc2hvdy1hbGwgYScpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICQoJyNsaXN0LXRvcC1yYW5rIC5zaG93LWFsbCcpLmhpZGUoKTsKICAgICAgICAgICAgICAgJCgnI2xpc3QtdG9wLXJhbmsgbGknKS5zaG93KCk7CiAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAkKCcjbGlzdC10b3AtcmFuayBsaScpLmVhY2goZnVuY3Rpb24oaW5keCwgdmFsdWUpewogICAgICAgICAgICAgICAgJCh2YWx1ZSkuYXR0cigndGl0bGUnLCAkKHZhbHVlKS5maW5kKCdlbScpLnRleHQoKS5tYXRjaCgvXGQrLykgKyAnIEFwcGVhcmFuY2VzIG9uIHRoaXMgbGlzdCcpOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIDwvc2NyaXB0PgogICAgPGRsIGNsYXNzPSJtYXJnaW4tdG9wIG1vdmllLWluZm8iPgogICAgICAgIDxkdD5SYW5raW5nIExpc3RzIFBvc2l0aW9uPC9kdD4KICAgICAgICA8ZGQgaWQ9Imxpc3QtdG9wLXJhbmsiIGNsYXNzPSJuby1wYWRkaW5nIj4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpID48c3Ryb25nPjEyPC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGlzdHRvcG1vdmllcy5waHA/bGlzdF9pZD01MTkiPlVuZGVycmF0ZWQgTW92aWVzPC9hPiA8ZW0+KDExMyk8L2VtPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgPjxzdHJvbmc+MTU8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTUwMCI+TW92aWVzIHRoYXQgRG9uJ3QgU2VlbSB0aGF0IFNwZWNpYWwgYnV0IGFyZSBWZXJ5IFNwZWNpYWwgdG8gTWU8L2E+IDxlbT4oMTA3KTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSA+PHN0cm9uZz4xNjwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3R0b3Btb3ZpZXMucGhwP2xpc3RfaWQ9ODMwIj5Nb3N0IE9yaWdpbmFsIE1vdmllIFBvc3RlcnMgRXZlcjwvYT4gPGVtPig3KTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSA+PHN0cm9uZz4xOTwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3R0b3Btb3ZpZXMucGhwP2xpc3RfaWQ9NTA5Ij5NeSBGYXZvcml0ZXMgZnJvbSB0aGUgOTBzPC9hPiA8ZW0+KDMwOCk8L2VtPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgPjxzdHJvbmc+MjE8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTUzMCI+TW92aWVzIHdpdGggR3JlYXQgU2NyZWVucGxheXM8L2E+IDxlbT4oOTYpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpID48c3Ryb25nPjI3PC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGlzdHRvcG1vdmllcy5waHA/bGlzdF9pZD01MTciPk1vdmllcyBJIExpa2VkIE1vcmUgdGhlIFNlY29uZCBUaW1lIEkgV2F0Y2hlZCBUaGVtPC9hPiA8ZW0+KDM2KTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSA+PHN0cm9uZz4zNDwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3R0b3Btb3ZpZXMucGhwP2xpc3RfaWQ9MzAwIj5NeSBGYXZvcml0ZSBEcmFtYXM8L2E+IDxlbT4oMjY3KTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSA+PHN0cm9uZz4zODwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3R0b3Btb3ZpZXMucGhwP2xpc3RfaWQ9NjAwIj5Nb3ZpZXMgd2l0aCB0aGUgQmVzdCBFbmRpbmdzPC9hPiA8ZW0+KDIwNCk8L2VtPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgPjxzdHJvbmc+NDQ8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTUyNiI+TW92aWVzIHdpdGggYSBHcmVhdCBNYWxlIExlYWQ8L2E+IDxlbT4oODcpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpID48c3Ryb25nPjUxPC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGlzdHRvcG1vdmllcy5waHA/bGlzdF9pZD04MDAiPkJlc3QgTW92aWUgUG9zdGVycyBFdmVyICAoTXkgRmF2b3JpdGUgUG9zdGVycyk8L2E+IDxlbT4oMjkpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+NTI8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTg5MCI+V2VpcmQgRmlsbXMgSSBBY3R1YWxseSBMb3ZlIC0gTm90IEV2ZXJ5Ym9keSdzIFRoaW5nPC9hPiA8ZW0+KDEwKTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBzdHlsZT0iZGlzcGxheTpub25lIj48c3Ryb25nPjYxPC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGlzdHRvcG1vdmllcy5waHA/bGlzdF9pZD0zMDEiPk15IEZhdm9yaXRlIENvbWVkaWVzPC9hPiA8ZW0+KDIwMyk8L2VtPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PHN0cm9uZz42Mzwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2xpc3R0b3Btb3ZpZXMucGhwP2xpc3RfaWQ9NjIwIj5Nb3N0IE1vdmluZyBNb3ZpZXM8L2E+IDxlbT4oNjMpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+Njk8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTEwMCI+TXkgRmF2b3JpdGUgTW92aWVzPC9hPiA8ZW0+KDI5MTgpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+NzE8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTcwMCI+TW92aWVzIEkgSGF2ZSBTZWVuIEEgQmlsbGlvbiBUaW1lczwvYT4gPGVtPigxMDcpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+NzE8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTg4MCI+QWJzb2x1dGUgTXVzdHM8L2E+IDxlbT4oMjEpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+ODE8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTIwMiI+TW92aWVzIEkgV2FudCB0byBPd248L2E+IDxlbT4oMTA2KTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBzdHlsZT0iZGlzcGxheTpub25lIj48c3Ryb25nPjg1PC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbG1hZmZpbml0eS5jb20vZW4vbGlzdHRvcG1vdmllcy5waHA/bGlzdF9pZD01MTEiPk15IEZhdm9yaXRlIEZhbWlseSBNb3ZpZXM8L2E+IDxlbT4oMjApPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzdHJvbmc+OTA8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZmlsbWFmZmluaXR5LmNvbS9lbi9saXN0dG9wbW92aWVzLnBocD9saXN0X2lkPTM2NSI+VGhlIFdlaXJkZXN0IE1vdmllcyBJIEhhdmUgRXZlciBXYXRjaGVkPC9hPiA8ZW0+KDQyKTwvZW0+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvdy1hbGwiPjxhIGhyZWY9IiMiPlNob3cgMTkgbGlzdHM8L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kZD4KICAgIDwvZGw+CgogICAgPGRpdiBjbGFzcz0ibW92aWUtZGlzY2xhaW1lciIgc3R5bGU9Im1hcmdpbi10b3A6IDYwcHg7ICI+CgoKCiAgICAgICAgSXMgdGhlIHN5bm9wc2lzL3Bsb3Qgc3VtbWFyeSBtaXNzaW5nPyBEbyB5b3Ugd2FudCB0byByZXBvcnQgYSBzcG9pbGVyLCBlcnJvciBvciBvbWlzc2lvbj8gUGxlYXNlIHNlbmQgdXMgYSA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2ltc2VuZG1zZy5waHA/dG89OTg1NDYyIj5tZXNzYWdlPC9hPi48YnI+DQpJZiB5b3UgYXJlIG5vdCBhIHJlZ2lzdGVyZWQgdXNlciBwbGVhc2Ugc2VuZCB1cyBhbiBlbWFpbCB0byBpbmZvQGZpbG1hZmZpbml0eS5jb20NCjxwPg0KQWxsIGNvcHlyaWdodGVkIG1hdGVyaWFsIChtb3ZpZSBwb3N0ZXJzLCBEVkQgY292ZXJzLCBzdGlsbHMsIHRyYWlsZXJzKSBhbmQgdHJhZGVtYXJrcyBiZWxvbmcgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwcm9kdWNlcnMgYW5kL29yIGRpc3RyaWJ1dG9ycy48L3A+CkZvciBVUyByYXRpbmdzIGluZm9ybWF0aW9uIHBsZWFzZSB2aXNpdDogICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3Lm1wYWEub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3Lm1wYWEub3JnPC9hPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cuZmlsbXJhdGluZ3MuY29tIiB0YXJnZXQ9Il9ibGFuayI+d3d3LmZpbG1yYXRpbmdzLmNvbTwvYT4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LnBhcmVudGFsZ3VpZGUub3JnIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnBhcmVudGFsZ3VpZGUub3JnPC9hPgogICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+CjwvZGl2PgogICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOiA1MHB4OyBjbGVhcjogYm90aDsiPjxkaXY+DQogICAgICAgICAgICAgIDwvdGQ+DQogICAgPC90cj4NCjwvdGFibGU+DQo8L2Rpdj4NCjxkaXYgaWQ9ImJwYW5lbCI+DQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZzogMTBweCI+DQogICAgICA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL2ZhcS5waHAiPkZBUXM8L2E+DQogICAgfCA8YSBocmVmPSJodHRwczovL3d3dy5maWxtYWZmaW5pdHkuY29tL2VuL3ByaXZhdGUucGhwIiA+UHJpdmFjeSBwb2xpY3kgLyB1c2UgY29uZGl0aW9uczwvYT4NCiAgICB8IDxhIG9uY2xpY2s9IndpbmRvdy5fX3RjZmFwaSgnZGlzcGxheUNvbnNlbnRVaScsIDIsIGZ1bmN0aW9uKCkge30gKTsiIGlkPSJwcml2YWN5LWNvbmZpZy0yIiBocmVmPSIjIj5Qcml2YWN5IGNvbmZpZ3VyYXRpb248L2E+DQo8L2Rpdj4NCjxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOiAxMHB4IDJweCI+DQogICAgPHNwYW4gY2xhc3M9InN1YnRleHQiPiZjb3B5OyAyMDAyLTIwMjAgRmlsbWFmZmluaXR5IC0gTW92aWVhZmZpbml0eSB8IEZpbG1hZmZpbml0eSBpcyBhIG1vdmllIHJlY29tbWVuZGF0aW9uIHNpdGUgYmFzZWQgb24gdGhlIGNvbmNlcHQgb2YgTW92aWUgU291bG1hdGVzLiA8YnI+V2UgYXJlIGFuIGluZGVwZW5kZW50IG1vdmllIGxvdmVycyBjbHViIHdvcmxkd2lkZSB3aXRoIDY0Ni4wMDAgdXNlcnMgKyAxMzMuMDAwLjAwMCByYXRpbmdzLiBOb3QgcmVsYXRlZCB0byBhbnkgTWVkaWEgb3IgQ29ycG9yYXRpb24uPGJyPiBBbGwgUmlnaHRzIFJlc2VydmVkIHwgTW92aWUgU291bG1hdGVzJiM4NDgyOyBpcyBhIFJlZ2lzdGVyZWQgVHJhZGVtYXJrPC9zcGFuPg0KPC9kaXY+DQo8L2Rpdj4NCg0KDQoNCg0KDQoNCg0KCgoKCgoNCjwvYm9keT4NCjwvaHRtbD4NCg==
58
+ recorded_at: Mon, 12 Oct 2020 21:40:45 GMT
59
+ recorded_with: VCR 6.0.0