video_info 3.0.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/unit_test.yml +3 -0
  3. data/lib/video_info/providers/youtube_scraper.rb +1 -0
  4. data/lib/video_info/version.rb +1 -1
  5. data/video_info.gemspec +1 -2
  6. metadata +3 -329
  7. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/_available_/with_invalid_video_url/_available_/1_2_2_1_1.yml +0 -82
  8. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -87
  9. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author/1_3_7_1.yml +0 -91
  10. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author_thumbnail/1_3_9_1.yml +0 -91
  11. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_author_url/1_3_8_1.yml +0 -91
  12. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_date/should_show_correct_date.yml +0 -91
  13. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_description/1_3_10_1.yml +0 -91
  14. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_duration/1_3_12_1.yml +0 -91
  15. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_keywords/1_3_11_1.yml +0 -91
  16. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail/1_3_21_1.yml +0 -91
  17. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_large/1_3_18_1.yml +0 -91
  18. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_medium/1_3_17_1.yml +0 -91
  19. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_small/1_3_16_1.yml +0 -91
  20. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_title/1_3_6_1.yml +0 -91
  21. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_view_count/1_3_22_1.yml +0 -91
  22. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_password_required_video/_available_/1_2_3_1_1.yml +0 -151
  23. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_password_required_video/_available_/2_2_3_1_1.yml +0 -68
  24. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_this_video_does_not_exist_video/_available_/1_2_2_1_1.yml +0 -127
  25. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_this_video_does_not_exist_video/_available_/2_2_2_1_1.yml +0 -70
  26. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -158
  27. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_valid_video/_available_/2_2_1_1_1.yml +0 -68
  28. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author/1_13_2_1.yml +0 -130
  29. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author_thumbnail/1_13_3_1.yml +0 -130
  30. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/author_url/1_13_4_1.yml +0 -132
  31. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/available_/1_13_1_1.yml +0 -130
  32. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/date/1_13_7_1.yml +0 -128
  33. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/description/1_13_6_1.yml +0 -131
  34. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/duration/1_13_8_1.yml +0 -130
  35. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/height/1_13_10_1.yml +0 -131
  36. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/keywords/1_13_9_1.yml +0 -128
  37. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_large/1_13_14_1.yml +0 -129
  38. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_medium/1_13_13_1.yml +0 -129
  39. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/thumbnail_small/1_13_12_1.yml +0 -129
  40. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/title/1_13_5_1.yml +0 -130
  41. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/view_count/1_13_15_1.yml +0 -129
  42. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_unavailable_video/width/1_13_11_1.yml +0 -129
  43. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author/1_3_20_1.yml +0 -158
  44. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author/2_3_20_1.yml +0 -80
  45. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_thumbnail/1_3_19_1.yml +0 -158
  46. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_thumbnail/2_3_19_1.yml +0 -85
  47. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_url/1_3_21_1.yml +0 -159
  48. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_author_url/2_3_21_1.yml +0 -80
  49. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_date/should_have_correct_upload_date.yml +0 -240
  50. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_description/1_3_7_1.yml +0 -160
  51. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_description/2_3_7_1.yml +0 -80
  52. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_duration/1_3_9_1.yml +0 -158
  53. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_duration/2_3_9_1.yml +0 -85
  54. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_height/1_3_11_1.yml +0 -158
  55. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_height/2_3_11_1.yml +0 -80
  56. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_keywords/should_return_a_string_list_of_keywords.yml +0 -240
  57. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail/1_3_18_1.yml +0 -236
  58. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail/2_3_18_1.yml +0 -82
  59. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_large/1_3_15_1.yml +0 -236
  60. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_large/2_3_15_1.yml +0 -82
  61. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_medium/1_3_14_1.yml +0 -235
  62. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_medium/2_3_14_1.yml +0 -84
  63. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_small/1_3_13_1.yml +0 -236
  64. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_thumbnail_small/2_3_13_1.yml +0 -84
  65. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_title/1_3_6_1.yml +0 -159
  66. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_title/2_3_6_1.yml +0 -85
  67. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_view_count/1_3_22_1.yml +0 -158
  68. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_view_count/2_3_22_1.yml +0 -84
  69. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_width/1_3_10_1.yml +0 -156
  70. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_136971428/_width/2_3_10_1.yml +0 -82
  71. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail/1_12_1_1.yml +0 -234
  72. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail/2_12_1_1.yml +0 -78
  73. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_large/1_12_2_1.yml +0 -233
  74. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_large/2_12_2_1.yml +0 -78
  75. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_medium/1_12_3_1.yml +0 -235
  76. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_medium/2_12_3_1.yml +0 -73
  77. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_small/1_12_4_1.yml +0 -234
  78. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_141349194/thumbnail_small/2_12_4_1.yml +0 -77
  79. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/_available_/with_invalid_video/_available_/1_2_2_1_1.yml +0 -75
  80. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -79
  81. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_duration/1_4_7_1.yml +0 -85
  82. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_height/1_4_9_1.yml +0 -85
  83. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_large/1_4_12_1.yml +0 -86
  84. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_medium/1_4_11_1.yml +0 -86
  85. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_small/1_4_10_1.yml +0 -85
  86. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_title/1_4_6_1.yml +0 -86
  87. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_width/1_4_8_1.yml +0 -86
  88. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_duration/1_3_7_1.yml +0 -85
  89. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_height/1_3_9_1.yml +0 -87
  90. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail/1_3_15_1.yml +0 -87
  91. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_large/1_3_12_1.yml +0 -87
  92. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_medium/1_3_11_1.yml +0 -87
  93. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_small/1_3_10_1.yml +0 -85
  94. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_title/1_3_6_1.yml +0 -85
  95. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_width/1_3_8_1.yml +0 -87
  96. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_available_/1_2_2_1_1.yml +0 -59
  97. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_available_/2_2_2_1_1.yml +0 -114
  98. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_date/1_2_2_11_1.yml +0 -59
  99. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_date/2_2_2_11_1.yml +0 -114
  100. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_description/1_2_2_8_1.yml +0 -59
  101. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_description/2_2_2_8_1.yml +0 -114
  102. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_duration/1_2_2_10_1.yml +0 -59
  103. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_duration/2_2_2_10_1.yml +0 -114
  104. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_keywords/1_2_2_9_1.yml +0 -59
  105. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_keywords/2_2_2_9_1.yml +0 -114
  106. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_title/1_2_2_7_1.yml +0 -59
  107. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_title/2_2_2_7_1.yml +0 -114
  108. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_view_count/1_2_2_18_1.yml +0 -59
  109. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_unavailable_video/_view_count/2_2_2_18_1.yml +0 -114
  110. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_valid_video/_available_/1_2_1_1_1.yml +0 -59
  111. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_valid_video/_available_/2_2_1_1_1.yml +0 -187
  112. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_removed_because_of_copyright_claim/_available_/1_2_3_1_1.yml +0 -59
  113. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_removed_because_of_copyright_claim/_available_/2_2_3_1_1.yml +0 -114
  114. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_a_video_without_description/_description/1_1_1_1.yml +0 -59
  115. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_date/should_return_date_video_was_posted.yml +0 -249
  116. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_description/1_17_7_1.yml +0 -59
  117. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_description/2_17_7_1.yml +0 -187
  118. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_duration/1_17_9_1.yml +0 -59
  119. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_duration/2_17_9_1.yml +0 -187
  120. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_keywords/1_17_8_1.yml +0 -59
  121. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_keywords/2_17_8_1.yml +0 -187
  122. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_title/1_17_6_1.yml +0 -59
  123. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_title/2_17_6_1.yml +0 -187
  124. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_view_count/1_17_17_1.yml +0 -59
  125. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_full_screen_video_URLs/_view_count/2_17_17_1.yml +0 -187
  126. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author/1_3_6_1.yml +0 -115
  127. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author/2_3_6_1.yml +0 -187
  128. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_thumbnail/1_3_7_1.yml +0 -115
  129. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_thumbnail/2_3_7_1.yml +0 -335
  130. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/1_3_8_1.yml +0 -59
  131. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/2_3_8_1.yml +0 -335
  132. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_author_url/can_be_called_twice_and_receive_the_same_value.yml +0 -391
  133. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_date/should_return_date_video_was_posted.yml +0 -243
  134. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_description/1_3_10_1.yml +0 -60
  135. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_description/2_3_10_1.yml +0 -187
  136. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_duration/1_3_12_1.yml +0 -59
  137. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_duration/2_3_12_1.yml +0 -187
  138. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_keywords/1_3_11_1.yml +0 -59
  139. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_keywords/2_3_11_1.yml +0 -187
  140. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_title/1_3_9_1.yml +0 -59
  141. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_title/2_3_9_1.yml +0 -187
  142. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_view_count/1_3_21_1.yml +0 -59
  143. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_view_count/2_3_21_1.yml +0 -187
  144. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_invalid_playlist/_available_/1_2_2_1_1.yml +0 -120
  145. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_list_url/_available_/1_2_3_1_1.yml +0 -154
  146. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_valid_playlist/_available_/1_2_1_1_1.yml +0 -154
  147. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author/1_3_21_1.yml +0 -165
  148. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author_thumbnail/1_3_22_1.yml +0 -274
  149. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_author_url/1_3_23_1.yml +0 -274
  150. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_description/1_3_7_1.yml +0 -165
  151. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_keywords/1_3_8_1.yml +0 -165
  152. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail/1_3_18_1.yml +0 -165
  153. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_large/1_3_15_1.yml +0 -165
  154. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_large_2x/1_3_16_1.yml +0 -165
  155. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_maxres/1_3_17_1.yml +0 -165
  156. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_medium/1_3_14_1.yml +0 -165
  157. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_small/1_3_13_1.yml +0 -165
  158. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_title/1_3_6_1.yml +0 -165
  159. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_videos/returns_list_of_videos_in_playlist.yml +0 -112
  160. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_that_does_not_exist_in_embed_path/_videos/1_4_2_1.yml +0 -114
  161. data/spec/lib/video_info/provider_spec.rb +0 -80
  162. data/spec/lib/video_info/providers/dailymotion_spec.rb +0 -204
  163. data/spec/lib/video_info/providers/vimeo_spec.rb +0 -338
  164. data/spec/lib/video_info/providers/wistia_spec.rb +0 -207
  165. data/spec/lib/video_info/providers/youtube_playlist_spec.rb +0 -240
  166. data/spec/lib/video_info/providers/youtube_scraper_spec.rb +0 -14
  167. data/spec/lib/video_info/providers/youtube_spec.rb +0 -599
  168. data/spec/lib/video_info_spec.rb +0 -102
  169. data/spec/spec_helper.rb +0 -31
@@ -1,82 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: https://api.vimeo.com/videos/136971428
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.8.0
12
- Authorization:
13
- - bearer vimeo_access_token
14
- Accept:
15
- - application/vnd.vimeo.*+json;version=3.2
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- response:
19
- status:
20
- code: 200
21
- message: OK
22
- headers:
23
- Connection:
24
- - keep-alive
25
- Server:
26
- - nginx
27
- Content-Type:
28
- - application/vnd.vimeo.video+json
29
- Cache-Control:
30
- - private, no-store, no-cache
31
- Strict-Transport-Security:
32
- - max-age=31536000; includeSubDomains; preload
33
- X-Ratelimit-Limit:
34
- - '50'
35
- X-Ratelimit-Remaining:
36
- - '34'
37
- X-Ratelimit-Reset:
38
- - '2020-10-27T18:24:07+00:00'
39
- Request-Hash:
40
- - 9032fddc
41
- X-Bapp-Server:
42
- - api-v4924-pbw29
43
- X-Vimeo-Dc:
44
- - ge
45
- Accept-Ranges:
46
- - bytes
47
- Via:
48
- - 1.1 varnish, 1.1 varnish
49
- Age:
50
- - '0'
51
- Date:
52
- - Tue, 27 Oct 2020 18:23:11 GMT
53
- X-Served-By:
54
- - cache-bwi5150-BWI, cache-cwb20521-CWB
55
- X-Cache:
56
- - MISS, MISS
57
- X-Cache-Hits:
58
- - 0, 0
59
- X-Timer:
60
- - S1603822992.619980,VS0,VE226
61
- Vary:
62
- - Accept,Vimeo-Client-Id
63
- Transfer-Encoding:
64
- - chunked
65
- body:
66
- encoding: UTF-8
67
- string: '{"uri":"/videos/136971428","name":"Deafheaven - ''New Bermuda'' Trailer","description":"''New
68
- Bermuda,'' the upcoming album from Deafheaven, is available October 2nd","type":"video","link":"https://vimeo.com/136971428","duration":59,"width":1280,"language":"en","height":720,"embed":{"html":"<iframe
69
- src=\"https://player.vimeo.com/video/136971428?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=193197\"
70
- width=\"1280\" height=\"720\" frameborder=\"0\" allow=\"autoplay; fullscreen\"
71
- allowfullscreen title=\"Deafheaven - &amp;#039;New Bermuda&amp;#039; Trailer\"></iframe>","badges":{"hdr":false,"live":{"streaming":false,"archived":false},"staff_pick":{"normal":false,"best_of_the_month":false,"best_of_the_year":false,"premiere":false},"vod":false,"weekend_challenge":false}},"created_time":"2015-08-21T21:37:43+00:00","modified_time":"2020-09-04T10:20:36+00:00","release_time":"2015-08-21T21:37:43+00:00","content_rating":["safe"],"license":null,"privacy":{"view":"anybody","embed":"public","download":false,"add":true,"comments":"anybody"},"pictures":{"uri":"/videos/136971428/pictures/531688239","active":true,"type":"custom","sizes":[{"width":100,"height":75,"link":"https://i.vimeocdn.com/video/531688239_100x75.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F531688239_100x75.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":200,"height":150,"link":"https://i.vimeocdn.com/video/531688239_200x150.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F531688239_200x150.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":295,"height":166,"link":"https://i.vimeocdn.com/video/531688239_295x166.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F531688239_295x166.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":640,"height":360,"link":"https://i.vimeocdn.com/video/531688239_640x360.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F531688239_640x360.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":1280,"height":720,"link":"https://i.vimeocdn.com/video/531688239_1280x720.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F531688239_1280x720.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":1280,"height":720,"link":"https://i.vimeocdn.com/video/531688239_1280x720.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F531688239_1280x720.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":1280,"height":720,"link":"https://i.vimeocdn.com/video/531688239_1280x720.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F531688239_1280x720.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":1280,"height":720,"link":"https://i.vimeocdn.com/video/531688239_1280x720.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F531688239_1280x720.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":1920,"height":1080,"link":"https://i.vimeocdn.com/video/531688239_1920x1080.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F531688239_1920x1080.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"}],"resource_key":"d02759c29fd9734d3100d5c1f04f06b2dc74a90b","default_picture":false},"tags":[],"stats":{"plays":null},"metadata":{"connections":{"comments":{"uri":"/videos/136971428/comments","options":["GET"],"total":0},"credits":{"uri":"/videos/136971428/credits","options":["GET","POST"],"total":0},"likes":{"uri":"/videos/136971428/likes","options":["GET"],"total":3},"pictures":{"uri":"/videos/136971428/pictures","options":["GET","POST"],"total":1},"texttracks":{"uri":"/videos/136971428/texttracks","options":["GET","POST"],"total":0},"related":null},"interactions":{"report":{"uri":"/videos/136971428/report","options":["POST"],"reason":["pornographic","harassment","ripoff","incorrect
72
- rating","spam","causes harm","csam"]}}},"user":{"uri":"/users/814311","name":"Anti
73
- Records","link":"https://vimeo.com/antirecords","location":"Los Angeles, CA","gender":"n","bio":"Home
74
- to Tom Waits, Wilco, Neko Case, Mavis Staples, Deafheaven, Daniel Lanois,
75
- Xenia Rubinos, Cass McCombs, The Antlers, Title Fight, Son Little, Andy Shauf,
76
- and more.","short_bio":null,"created_time":"2008-10-06T20:33:11+00:00","pictures":{"uri":"/users/814311/pictures/14790276","active":true,"type":"custom","sizes":[{"width":30,"height":30,"link":"https://i.vimeocdn.com/portrait/14790276_30x30"},{"width":72,"height":72,"link":"https://i.vimeocdn.com/portrait/14790276_72x72"},{"width":75,"height":75,"link":"https://i.vimeocdn.com/portrait/14790276_75x75"},{"width":100,"height":100,"link":"https://i.vimeocdn.com/portrait/14790276_100x100"},{"width":144,"height":144,"link":"https://i.vimeocdn.com/portrait/14790276_144x144"},{"width":216,"height":216,"link":"https://i.vimeocdn.com/portrait/14790276_216x216"},{"width":288,"height":288,"link":"https://i.vimeocdn.com/portrait/14790276_288x288"},{"width":300,"height":300,"link":"https://i.vimeocdn.com/portrait/14790276_300x300"},{"width":360,"height":360,"link":"https://i.vimeocdn.com/portrait/14790276_360x360"}],"resource_key":"e61a33d865c9349dc7ee051232fb30d1492ee1fc","default_picture":false},"websites":[{"uri":"/users/814311/links/4501404","name":"Official
77
- Site","link":"www.anti.com","type":"link","description":null},{"uri":"/users/814311/links/4501405","name":"Twitter","link":"twitter.com/antirecords","type":"twitter","description":null},{"uri":"/users/814311/links/4501406","name":"Facebook","link":"www.facebook.com/antirecords","type":"facebook","description":null},{"uri":"/users/814311/links/4501407","name":"Instagram","link":"www.instagram.com/antirecords/","type":"instagram","description":null},{"uri":"/users/814311/links/4501408","name":"Online
78
- Store","link":"www.anti.com/store","type":"link","description":null}],"metadata":{"connections":{"activities":{"uri":"/users/814311/activities","options":["GET"]},"albums":{"uri":"/users/814311/albums","options":["GET"],"total":1},"appearances":{"uri":"/users/814311/appearances","options":["GET"],"total":1},"channels":{"uri":"/users/814311/channels","options":["GET"],"total":1},"feed":{"uri":"/users/814311/feed","options":["GET"]},"followers":{"uri":"/users/814311/followers","options":["GET"],"total":968},"following":{"uri":"/users/814311/following","options":["GET"],"total":2},"groups":{"uri":"/users/814311/groups","options":["GET"],"total":0},"likes":{"uri":"/users/814311/likes","options":["GET"],"total":1},"membership":{"uri":"/users/814311/membership/","options":["PATCH"]},"moderated_channels":{"uri":"/users/814311/channels?filter=moderated","options":["GET"],"total":1},"portfolios":{"uri":"/users/814311/portfolios","options":["GET"],"total":0},"videos":{"uri":"/users/814311/videos","options":["GET"],"total":60},"shared":{"uri":"/users/814311/shared/videos","options":["GET"],"total":171},"pictures":{"uri":"/users/814311/pictures","options":["GET","POST"],"total":1},"folders_root":{"uri":"/users/814311/folders/root","options":["GET"]},"teams":{"uri":"/users/814311/teams","options":["GET"],"total":1}}},"location_details":{"formatted_address":"Los
79
- Angeles, CA","latitude":null,"longitude":null,"city":null,"state":null,"neighborhood":null,"sub_locality":null,"state_iso_code":null,"country":null,"country_iso_code":null},"skills":[],"available_for_hire":false,"can_work_remotely":false,"resource_key":"e1d6212aaacbfb79302c5f750b44d5101a3f8a55","account":"pro","preferences":{"videos":{"privacy":null}}},"app":null,"status":"available","resource_key":"7c4542791d2267ed231d820afcfff7d6c840e688","upload":null,"transcode":null,"is_playable":true,"review_link":"https://vimeo.com/antirecords/review/136971428/80891bf98f","embed_presets":null}'
80
- http_version:
81
- recorded_at: Tue, 27 Oct 2020 18:23:11 GMT
82
- recorded_with: VCR 3.0.3
@@ -1,234 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: head
5
- uri: https://vimeo.com/141349194
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.8.0
12
- Accept:
13
- - "*/*"
14
- response:
15
- status:
16
- code: 200
17
- message: OK
18
- headers:
19
- Connection:
20
- - keep-alive
21
- Content-Length:
22
- - '166790'
23
- Server:
24
- - nginx
25
- Content-Type:
26
- - text/html; charset=UTF-8
27
- Expires:
28
- - Tue, 27 Oct 2020 18:32:34 GMT
29
- Set-Cookie:
30
- - vuid=1899632196.1192095421; expires=Fri, 25-Oct-2030 18:22:34 GMT; Max-Age=315360000;
31
- path=/; domain=.vimeo.com; secure; SameSite=None
32
- X-Ua-Compatible:
33
- - IE=edge
34
- X-Xss-Protection:
35
- - 1; mode=block
36
- X-Content-Type-Options:
37
- - nosniff
38
- X-Frame-Options:
39
- - sameorigin
40
- Strict-Transport-Security:
41
- - max-age=31536000; includeSubDomains; preload
42
- Content-Security-Policy-Report-Only:
43
- - 'default-src https: data: blob: wss: ''unsafe-inline'' ''unsafe-eval''; report-uri
44
- /_csp'
45
- X-Bapp-Server:
46
- - pweb-v4874-pqkwc
47
- Via:
48
- - 1.1 varnish, 1.1 varnish, 1.1 varnish
49
- Cache-Control:
50
- - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
51
- X-Varnish-Cache:
52
- - '0'
53
- X-Vserver:
54
- - infra-webproxy-a-7
55
- X-Vimeo-Dc:
56
- - ge
57
- Accept-Ranges:
58
- - bytes
59
- Date:
60
- - Tue, 27 Oct 2020 18:22:34 GMT
61
- Age:
62
- - '0'
63
- X-Served-By:
64
- - cache-bwi5145-BWI, cache-cwb20520-CWB
65
- X-Cache:
66
- - MISS, MISS
67
- X-Cache-Hits:
68
- - 0, 0
69
- X-Timer:
70
- - S1603822954.420256,VS0,VE415
71
- Vary:
72
- - User-Agent,Accept-Encoding
73
- body:
74
- encoding: UTF-8
75
- string: ''
76
- http_version:
77
- recorded_at: Tue, 27 Oct 2020 18:22:34 GMT
78
- - request:
79
- method: get
80
- uri: https://vimeo.com/141349194
81
- body:
82
- encoding: US-ASCII
83
- string: ''
84
- headers:
85
- Accept-Encoding:
86
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
87
- Accept:
88
- - "*/*"
89
- User-Agent:
90
- - Ruby
91
- response:
92
- status:
93
- code: 200
94
- message: OK
95
- headers:
96
- Connection:
97
- - keep-alive
98
- Content-Length:
99
- - '39604'
100
- Server:
101
- - nginx
102
- Content-Type:
103
- - text/html; charset=UTF-8
104
- Expires:
105
- - Tue, 27 Oct 2020 18:32:35 GMT
106
- Set-Cookie:
107
- - vuid=1462649867.191391325; expires=Fri, 25-Oct-2030 18:22:35 GMT; Max-Age=315360000;
108
- path=/; domain=.vimeo.com; secure; SameSite=None
109
- X-Ua-Compatible:
110
- - IE=edge
111
- X-Xss-Protection:
112
- - 1; mode=block
113
- X-Content-Type-Options:
114
- - nosniff
115
- X-Frame-Options:
116
- - sameorigin
117
- Strict-Transport-Security:
118
- - max-age=31536000; includeSubDomains; preload
119
- Content-Security-Policy-Report-Only:
120
- - 'default-src https: data: blob: wss: ''unsafe-inline'' ''unsafe-eval''; report-uri
121
- /_csp'
122
- X-Bapp-Server:
123
- - pweb-v4875-p8wqb
124
- Via:
125
- - 1.1 varnish
126
- - 1.1 varnish, 1.1 varnish
127
- Cache-Control:
128
- - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
129
- X-Varnish-Cache:
130
- - '0'
131
- X-Vserver:
132
- - infra-webproxy-a-7
133
- X-Vimeo-Dc:
134
- - ge
135
- Accept-Ranges:
136
- - bytes
137
- Date:
138
- - Tue, 27 Oct 2020 18:22:35 GMT
139
- Age:
140
- - '0'
141
- X-Served-By:
142
- - cache-bwi5149-BWI, cache-cwb20527-CWB
143
- X-Cache:
144
- - MISS, MISS
145
- X-Cache-Hits:
146
- - 0, 0
147
- X-Timer:
148
- - S1603822955.081041,VS0,VE340
149
- Vary:
150
- - User-Agent,Accept-Encoding
151
- body:
152
- encoding: ASCII-8BIT
153
- string: !binary |-
154
- PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICAgIDxoZWFkPgogICAgICAgIAo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIHByb3BlcnR5PSJmYjphcHBfaWQiIGNvbnRlbnQ9IjE5ODg0MDI4OTYzIj4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Ii8vcGxheWVyLnZpbWVvLmNvbSI+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iLy9pLnZpbWVvY2RuLmNvbSI+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iLy9mLnZpbWVvY2RuLmNvbSI+CjxsaW5rIHJlbD0ic2VhcmNoIiB0eXBlPSJhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sIiBocmVmPSIvc2VhcmNoL29wZW5zZWFyY2gueG1sIiB0aXRsZT0iVmltZW8iPgo8bGluayByZWw9ImxvZ28iIHR5cGU9ImltYWdlL3N2ZyIgaHJlZj0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9sb2dvLnN2ZyI+CgoKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEuMCxtYXhpbXVtLXNjYWxlPTUuMCx1c2VyLXNjYWxhYmxlPXllcyI+CiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOnNpdGVfbmFtZSIgY29udGVudD0iVmltZW8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vdmltZW8uY29tLzE0MTM0OTE5NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9InZpZGVvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkJ1dHRlcm51dCBTcXVhc2ggUmF2aW9saSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGlzIGlzICZxdW90O0J1dHRlcm51dCBTcXVhc2ggUmF2aW9saSZxdW90OyBieSBIYWxmIEJha2VkIEhhcnZlc3Qgb24gVmltZW8sIHRoZSBob21lIGZvciBoaWdoIHF1YWxpdHkgdmlkZW9zIGFuZCB0aGUgcGVvcGxlIHdobyBsb3ZlIHRoZW0uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXBkYXRlZF90aW1lIiBjb250ZW50PSIyMDIwLTEwLTI3VDEzOjMxOjQ4LTA0OjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vZmlsdGVyL292ZXJsYXk/c3JjMD1odHRwcyUzQSUyRiUyRmkudmltZW9jZG4uY29tJTJGdmlkZW8lMkY1MzgzMjA4OTRfMTI4MHg3MjAuanBnJnNyYzE9aHR0cHMlM0ElMkYlMkZmLnZpbWVvY2RuLmNvbSUyRmltYWdlc192NiUyRnNoYXJlJTJGcGxheV9pY29uX292ZXJsYXkucG5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2U6c2VjdXJlX3VybCIgY29udGVudD0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9maWx0ZXIvb3ZlcmxheT9zcmMwPWh0dHBzJTNBJTJGJTJGaS52aW1lb2Nkbi5jb20lMkZ2aWRlbyUyRjUzODMyMDg5NF8xMjgweDcyMC5qcGcmc3JjMT1odHRwcyUzQSUyRiUyRmYudmltZW9jZG4uY29tJTJGaW1hZ2VzX3Y2JTJGc2hhcmUlMkZwbGF5X2ljb25fb3ZlcmxheS5wbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZTp0eXBlIiBjb250ZW50PSJpbWFnZS9qcGciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZTp3aWR0aCIgY29udGVudD0iMTI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlOmhlaWdodCIgY29udGVudD0iNzIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dmlkZW86dXJsIiBjb250ZW50PSJodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vMTQxMzQ5MTk0P2F1dG9wbGF5PTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp2aWRlbzpzZWN1cmVfdXJsIiBjb250ZW50PSJodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vMTQxMzQ5MTk0P2F1dG9wbGF5PTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp2aWRlbzp0eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp2aWRlbzp3aWR0aCIgY29udGVudD0iMTI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOnZpZGVvOmhlaWdodCIgY29udGVudD0iNzIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0iYWw6aW9zOmFwcF9uYW1lIiBjb250ZW50PSJWaW1lbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9ImFsOmlvczphcHBfc3RvcmVfaWQiIGNvbnRlbnQ9IjQyNTE5NDc1OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9ImFsOmlvczp1cmwiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvMTQxMzQ5MTk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0iYWw6YW5kcm9pZDphcHBfbmFtZSIgY29udGVudD0iVmltZW8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJhbDphbmRyb2lkOnBhY2thZ2UiIGNvbnRlbnQ9ImNvbS52aW1lby5hbmRyb2lkLnZpZGVvYXBwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0iYWw6YW5kcm9pZDp1cmwiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvMTQxMzQ5MTk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0iYWw6d2ViOnNob3VsZF9mYWxsYmFjayIgY29udGVudD0idHJ1ZSI+CiAgICAgICAgICAgIAogICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGlzIGlzICZxdW90O0J1dHRlcm51dCBTcXVhc2ggUmF2aW9saSZxdW90OyBieSBIYWxmIEJha2VkIEhhcnZlc3Qgb24gVmltZW8sIHRoZSBob21lIGZvciBoaWdoIHF1YWxpdHkgdmlkZW9zIGFuZCB0aGUgcGVvcGxlIHdobyBsb3ZlIHRoZW0uIj4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmNhcmQiIGNvbnRlbnQ9InBsYXllciI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJAdmltZW8iPgogICAgICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6dGl0bGUiIGNvbnRlbnQ9IkJ1dHRlcm51dCBTcXVhc2ggUmF2aW9saSI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpkZXNjcmlwdGlvbiIgY29udGVudD0iVGhpcyBpcyAmcXVvdDtCdXR0ZXJudXQgU3F1YXNoIFJhdmlvbGkmcXVvdDsgYnkgSGFsZiBCYWtlZCBIYXJ2ZXN0IG9uIFZpbWVvLCB0aGUgaG9tZSBmb3IgaGlnaCBxdWFsaXR5IHZpZGVvcyBhbmQgdGhlIHBlb3BsZSB3aG8gbG92ZSB0aGVtLiI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9maWx0ZXIvb3ZlcmxheT9zcmMwPWh0dHBzJTNBJTJGJTJGaS52aW1lb2Nkbi5jb20lMkZ2aWRlbyUyRjUzODMyMDg5NF8xMjgweDcyMC5qcGcmYW1wO3NyYzE9aHR0cHMlM0ElMkYlMkZmLnZpbWVvY2RuLmNvbSUyRmltYWdlc192NiUyRnNoYXJlJTJGcGxheV9pY29uX292ZXJsYXkucG5nIj4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnBsYXllciIgY29udGVudD0iaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLzE0MTM0OTE5NCI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpwbGF5ZXI6d2lkdGgiIGNvbnRlbnQ9IjEyODAiPgogICAgICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6cGxheWVyOmhlaWdodCIgY29udGVudD0iNzIwIj4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnNpdGUiIGNvbnRlbnQ9IkB2aW1lbyI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjphcHA6bmFtZTppcGhvbmUiIGNvbnRlbnQ9IlZpbWVvIj4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmFwcDppZDppcGhvbmUiIGNvbnRlbnQ9IjQyNTE5NDc1OSI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjphcHA6dXJsOmlwaG9uZSIgY29udGVudD0idmltZW86Ly9hcHAudmltZW8uY29tL3ZpZGVvcy8xNDEzNDkxOTQiPgogICAgICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6YXBwOm5hbWU6aXBhZCIgY29udGVudD0iVmltZW8iPgogICAgICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6YXBwOmlkOmlwYWQiIGNvbnRlbnQ9IjQyNTE5NDc1OSI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjphcHA6dXJsOmlwYWQiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvMTQxMzQ5MTk0Ij4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmFwcDpuYW1lOmdvb2dsZXBsYXkiIGNvbnRlbnQ9IlZpbWVvIj4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmFwcDppZDpnb29nbGVwbGF5IiBjb250ZW50PSJjb20udmltZW8uYW5kcm9pZC52aWRlb2FwcCI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjphcHA6dXJsOmdvb2dsZXBsYXkiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvMTQxMzQ5MTk0Ij4KCgoKCiAgICAgICAgICAgICAgICAgICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tL2FwaS9vZW1iZWQuanNvbj91cmw9aHR0cHMlM0ElMkYlMkZ2aW1lby5jb20lMkYxNDEzNDkxOTQiIHR5cGU9ImFwcGxpY2F0aW9uL2pzb24rb2VtYmVkIiB0aXRsZT0iQnV0dGVybnV0IFNxdWFzaCBSYXZpb2xpIj4KICAgICAgICAgICAgICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3ZpbWVvLmNvbS9hcGkvb2VtYmVkLnhtbD91cmw9aHR0cHMlM0ElMkYlMkZ2aW1lby5jb20lMkYxNDEzNDkxOTQiIHR5cGU9InRleHQveG1sK29lbWJlZCIgdGl0bGU9IkJ1dHRlcm51dCBTcXVhc2ggUmF2aW9saSI+CiAgICAgICAgICAgICAgICA8bGluayByZWw9InBpbmdiYWNrIiBocmVmPSJodHRwczovL3ZpbWVvLmNvbS9fcGluZ2JhY2siPgogICAgICAgICAgICAgICAgPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tLzE0MTM0OTE5NCI+CiAgICAgICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uLXByZWNvbXBvc2VkIiBocmVmPSJodHRwczovL2kudmltZW9jZG4uY29tL2Zhdmljb24vbWFpbi10b3VjaF8xODAiPgoKPGxpbmsgcmVsPSJtYXNrLWljb24iIGhyZWY9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vc3ZnL2xlZ2FjeV92aWV3X3N1cHBvcnQvaXJpc19pY29uX3ZfNjQuc3ZnP2UxMDEzZGViNmU4NDQ3MGM3NWQwNzVmODZkYjNjZDRkOTRkMjE4MTYiIGNvbG9yPSIjMTcyNzJlIj4KCiAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vaW1hZ2VzX3Y2L2Zhdmljb24uaWNvP2UxMDEzZGViNmU4NDQ3MGM3NWQwNzVmODZkYjNjZDRkOTRkMjE4MTYiIGRhdGEtcGxheT0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9mYXZpY29uL3BsYXlfMzIiIGRhdGEtcGF1c2U9Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vZmF2aWNvbi9wYXVzZV8zMiI+Cgo8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLVRpbGVJbWFnZSIgY29udGVudD0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9mYXZpY29uL21haW4tdG91Y2hfMTQ0Ij4KPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi1UaWxlQ29sb3IiIGNvbnRlbnQ9IiMwMGFkZWYiPgogICAgICAgIDx0aXRsZT5CdXR0ZXJudXQgU3F1YXNoIFJhdmlvbGkgb24gVmltZW88L3RpdGxlPgogICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAgIC8vIEZpcnN0IElucHV0IERlbGF5IHRyYWNraW5nLiBIaWdoIHByaW9yaXR5IGxvYWRpbmcgdG8gbm90IG1pc3MgZXZlbnQKICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZUxhYnMvZmlyc3QtaW5wdXQtZGVsYXkvYmxvYi9tYXN0ZXIvZGlzdC9maXJzdC1pbnB1dC1kZWxheS5taW4uanMKICAgICAgICAgICAgIWZ1bmN0aW9uKG4sZSl7dmFyIHQsbyxpLGM9W10sZj17cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSxyPW5ldyBEYXRlLGE9InBvaW50ZXJ1cCIsdT0icG9pbnRlcmNhbmNlbCI7ZnVuY3Rpb24gcChuLGMpe3R8fCh0PWMsbz1uLGk9bmV3IERhdGUsdyhlKSxzKCkpfWZ1bmN0aW9uIHMoKXtvPj0wJiZvPGktciYmKGMuZm9yRWFjaChmdW5jdGlvbihuKXtuKG8sdCl9KSxjPVtdKX1mdW5jdGlvbiBsKHQpe2lmKHQuY2FuY2VsYWJsZSl7dmFyIG89KHQudGltZVN0YW1wPjFlMTI/bmV3IERhdGU6cGVyZm9ybWFuY2Uubm93KCkpLXQudGltZVN0YW1wOyJwb2ludGVyZG93biI9PXQudHlwZT9mdW5jdGlvbih0LG8pe2Z1bmN0aW9uIGkoKXtwKHQsbykscigpfWZ1bmN0aW9uIGMoKXtyKCl9ZnVuY3Rpb24gcigpe2UoYSxpLGYpLGUodSxjLGYpfW4oYSxpLGYpLG4odSxjLGYpfShvLHQpOnAobyx0KX19ZnVuY3Rpb24gdyhuKXtbImNsaWNrIiwibW91c2Vkb3duIiwia2V5ZG93biIsInRvdWNoc3RhcnQiLCJwb2ludGVyZG93biJdLmZvckVhY2goZnVuY3Rpb24oZSl7bihlLGwsZil9KX13KG4pLHNlbGYucGVyZk1ldHJpY3M9c2VsZi5wZXJmTWV0cmljc3x8e30sc2VsZi5wZXJmTWV0cmljcy5vbkZpcnN0SW5wdXREZWxheT1mdW5jdGlvbihuKXtjLnB1c2gobikscygpfX0oYWRkRXZlbnRMaXN0ZW5lcixyZW1vdmVFdmVudExpc3RlbmVyKTsKICAgICAgICA8L3NjcmlwdD4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgLy8gQ3JlYXRlIFBlcmZvcm1hbmNlT2JzZXJ2ZXIgZm9yIHRyYWNraW5nIFRUSQogICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZUxhYnMvdHRpLXBvbHlmaWxsCiAgICAgICAgICAhZnVuY3Rpb24oKXtpZignUGVyZm9ybWFuY2VMb25nVGFza1RpbWluZycgaW4gd2luZG93KXt2YXIgZz13aW5kb3cuX190dGk9e2U6W119OwogICAgICAgICAgZy5vPW5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGZ1bmN0aW9uKGwpe2cuZT1nLmUuY29uY2F0KGwuZ2V0RW50cmllcygpKX0pOwogICAgICAgICAgZy5vLm9ic2VydmUoe2VudHJ5VHlwZXM6Wydsb25ndGFzayddfSl9fSgpOwogICAgICAgIDwvc2NyaXB0PgogICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAvLyBOZXcgUmVsaWMgQWdlbnQKICAgICAgICAgIDt3aW5kb3cuTlJFVU18fChOUkVVTT17fSk7TlJFVU0uaW5pdD17ZGlzdHJpYnV0ZWRfdHJhY2luZzp7ZW5hYmxlZDp0cnVlfSxwcml2YWN5Ontjb29raWVzX2VuYWJsZWQ6dHJ1ZX19OwogICAgICAgICAgd2luZG93Lk5SRVVNfHwoTlJFVU09e30pLF9fbnJfcmVxdWlyZT1mdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcihuKXtpZighZVtuXSl7dmFyIG89ZVtuXT17ZXhwb3J0czp7fX07dFtuXVswXS5jYWxsKG8uZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbz10W25dWzFdW2VdO3JldHVybiByKG98fGUpfSxvLG8uZXhwb3J0cyl9cmV0dXJuIGVbbl0uZXhwb3J0c31pZigiZnVuY3Rpb24iPT10eXBlb2YgX19ucl9yZXF1aXJlKXJldHVybiBfX25yX3JlcXVpcmU7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspcihuW29dKTtyZXR1cm4gcn0oezE6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe3RyeXtzLmNvbnNvbGUmJmNvbnNvbGUubG9nKHQpfWNhdGNoKGUpe319dmFyIG8saT10KCJlZSIpLGE9dCgyNSkscz17fTt0cnl7bz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiX19ucl9mbGFncyIpLnNwbGl0KCIsIiksY29uc29sZSYmImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUubG9nJiYocy5jb25zb2xlPSEwLG8uaW5kZXhPZigiZGV2IikhPT0tMSYmKHMuZGV2PSEwKSxvLmluZGV4T2YoIm5yX2RldiIpIT09LTEmJihzLm5yRGV2PSEwKSl9Y2F0Y2goYyl7fXMubnJEZXYmJmkub24oImludGVybmFsLWVycm9yIixmdW5jdGlvbih0KXtyKHQuc3RhY2spfSkscy5kZXYmJmkub24oImZuLWVyciIsZnVuY3Rpb24odCxlLG4pe3Iobi5zdGFjayl9KSxzLmRldiYmKHIoIk5SIEFHRU5UIElOIERFVkVMT1BNRU5UIE1PREUiKSxyKCJmbGFnczogIithKHMsZnVuY3Rpb24odCxlKXtyZXR1cm4gdH0pLmpvaW4oIiwgIikpKX0se31dLDI6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSxuLHIscyl7dHJ5e2w/bC09MTpvKHN8fG5ldyBVbmNhdWdodEV4Y2VwdGlvbih0LGUsbiksITApfWNhdGNoKGYpe3RyeXtpKCJpZXJyIixbZixjLm5vdygpLCEwXSl9Y2F0Y2goZCl7fX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdSYmdS5hcHBseSh0aGlzLGEoYXJndW1lbnRzKSl9ZnVuY3Rpb24gVW5jYXVnaHRFeGNlcHRpb24odCxlLG4pe3RoaXMubWVzc2FnZT10fHwiVW5jYXVnaHQgZXJyb3Igd2l0aCBubyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIix0aGlzLnNvdXJjZVVSTD1lLHRoaXMubGluZT1ufWZ1bmN0aW9uIG8odCxlKXt2YXIgbj1lP251bGw6Yy5ub3coKTtpKCJlcnIiLFt0LG5dKX12YXIgaT10KCJoYW5kbGUiKSxhPXQoMjYpLHM9dCgiZWUiKSxjPXQoImxvYWRlciIpLGY9dCgiZ29zIiksdT13aW5kb3cub25lcnJvcixkPSExLHA9Im5yQHNlZW5FcnJvciIsbD0wO2MuZmVhdHVyZXMuZXJyPSEwLHQoMSksd2luZG93Lm9uZXJyb3I9cjt0cnl7dGhyb3cgbmV3IEVycm9yfWNhdGNoKGgpeyJzdGFjayJpbiBoJiYodCgxMyksdCgxMiksImFkZEV2ZW50TGlzdGVuZXIiaW4gd2luZG93JiZ0KDYpLGMueGhyV3JhcHBhYmxlJiZ0KDE0KSxkPSEwKX1zLm9uKCJmbi1zdGFydCIsZnVuY3Rpb24odCxlLG4pe2QmJihsKz0xKX0pLHMub24oImZuLWVyciIsZnVuY3Rpb24odCxlLG4pe2QmJiFuW3BdJiYoZihuLHAsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLHRoaXMudGhyb3duPSEwLG8obikpfSkscy5vbigiZm4tZW5kIixmdW5jdGlvbigpe2QmJiF0aGlzLnRocm93biYmbD4wJiYobC09MSl9KSxzLm9uKCJpbnRlcm5hbC1lcnJvciIsZnVuY3Rpb24odCl7aSgiaWVyciIsW3QsYy5ub3coKSwhMF0pfSl9LHt9XSwzOltmdW5jdGlvbih0LGUsbil7dCgibG9hZGVyIikuZmVhdHVyZXMuaW5zPSEwfSx7fV0sNDpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIoKXtMKyssQz1nLmhhc2gsdGhpc1t1XT15Lm5vdygpfWZ1bmN0aW9uIG8oKXtMLS0sZy5oYXNoIT09QyYmaSgwLCEwKTt2YXIgdD15Lm5vdygpO3RoaXNbaF09fn50aGlzW2hdK3QtdGhpc1t1XSx0aGlzW2RdPXR9ZnVuY3Rpb24gaSh0LGUpe0UuZW1pdCgibmV3VVJMIixbIiIrZyxlXSl9ZnVuY3Rpb24gYSh0LGUpe3Qub24oZSxmdW5jdGlvbigpe3RoaXNbZV09eS5ub3coKX0pfXZhciBzPSItc3RhcnQiLGM9Ii1lbmQiLGY9Ii1ib2R5Iix1PSJmbiIrcyxkPSJmbiIrYyxwPSJjYiIrcyxsPSJjYiIrYyxoPSJqc1RpbWUiLG09ImZldGNoIix2PSJhZGRFdmVudExpc3RlbmVyIix3PXdpbmRvdyxnPXcubG9jYXRpb24seT10KCJsb2FkZXIiKTtpZih3W3ZdJiZ5LnhocldyYXBwYWJsZSl7dmFyIHg9dCgxMCksYj10KDExKSxFPXQoOCksTz10KDYpLFI9dCgxMyksUD10KDcpLFQ9dCgxNCksTj10KDkpLE09dCgiZWUiKSxTPU0uZ2V0KCJ0cmFjZXIiKTt0KDE2KSx5LmZlYXR1cmVzLnNwYT0hMDt2YXIgQyxMPTA7TS5vbih1LHIpLE0ub24ocCxyKSxNLm9uKGQsbyksTS5vbihsLG8pLE0uYnVmZmVyKFt1LGQsInhoci1kb25lIiwieGhyLXJlc29sdmVkIl0pLE8uYnVmZmVyKFt1XSksUi5idWZmZXIoWyJzZXRUaW1lb3V0IitjLCJjbGVhclRpbWVvdXQiK3MsdV0pLFQuYnVmZmVyKFt1LCJuZXcteGhyIiwic2VuZC14aHIiK3NdKSxQLmJ1ZmZlcihbbStzLG0rIi1kb25lIixtK2YrcyxtK2YrY10pLEUuYnVmZmVyKFsibmV3VVJMIl0pLHguYnVmZmVyKFt1XSksYi5idWZmZXIoWyJwcm9wYWdhdGUiLHAsbCwiZXhlY3V0b3ItZXJyIiwicmVzb2x2ZSIrc10pLFMuYnVmZmVyKFt1LCJuby0iK3VdKSxOLmJ1ZmZlcihbIm5ldy1qc29ucCIsImNiLXN0YXJ0IiwianNvbnAtZXJyb3IiLCJqc29ucC1lbmQiXSksYShULCJzZW5kLXhociIrcyksYShNLCJ4aHItcmVzb2x2ZWQiKSxhKE0sInhoci1kb25lIiksYShQLG0rcyksYShQLG0rIi1kb25lIiksYShOLCJuZXctanNvbnAiKSxhKE4sImpzb25wLWVuZCIpLGEoTiwiY2Itc3RhcnQiKSxFLm9uKCJwdXNoU3RhdGUtZW5kIixpKSxFLm9uKCJyZXBsYWNlU3RhdGUtZW5kIixpKSx3W3ZdKCJoYXNoY2hhbmdlIixpLCEwKSx3W3ZdKCJsb2FkIixpLCEwKSx3W3ZdKCJwb3BzdGF0ZSIsZnVuY3Rpb24oKXtpKDAsTD4xKX0sITApfX0se31dLDU6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe31pZih3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcmJndpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKXt2YXIgbz10KCJlZSIpLGk9dCgiaGFuZGxlIiksYT10KDEzKSxzPXQoMTIpLGM9ImxlYXJSZXNvdXJjZVRpbWluZ3MiLGY9ImFkZEV2ZW50TGlzdGVuZXIiLHU9InJlc291cmNldGltaW5nYnVmZmVyZnVsbCIsZD0iYnN0UmVzb3VyY2UiLHA9InJlc291cmNlIixsPSItc3RhcnQiLGg9Ii1lbmQiLG09ImZuIitsLHY9ImZuIitoLHc9ImJzdFRpbWVyIixnPSJwdXNoU3RhdGUiLHk9dCgibG9hZGVyIik7eS5mZWF0dXJlcy5zdG49ITAsdCg4KSwiYWRkRXZlbnRMaXN0ZW5lciJpbiB3aW5kb3cmJnQoNik7dmFyIHg9TlJFVU0uby5FVjtvLm9uKG0sZnVuY3Rpb24odCxlKXt2YXIgbj10WzBdO24gaW5zdGFuY2VvZiB4JiYodGhpcy5ic3RTdGFydD15Lm5vdygpKX0pLG8ub24odixmdW5jdGlvbih0LGUpe3ZhciBuPXRbMF07biBpbnN0YW5jZW9mIHgmJmkoImJzdCIsW24sZSx0aGlzLmJzdFN0YXJ0LHkubm93KCldKX0pLGEub24obSxmdW5jdGlvbih0LGUsbil7dGhpcy5ic3RTdGFydD15Lm5vdygpLHRoaXMuYnN0VHlwZT1ufSksYS5vbih2LGZ1bmN0aW9uKHQsZSl7aSh3LFtlLHRoaXMuYnN0U3RhcnQseS5ub3coKSx0aGlzLmJzdFR5cGVdKX0pLHMub24obSxmdW5jdGlvbigpe3RoaXMuYnN0U3RhcnQ9eS5ub3coKX0pLHMub24odixmdW5jdGlvbih0LGUpe2kodyxbZSx0aGlzLmJzdFN0YXJ0LHkubm93KCksInJlcXVlc3RBbmltYXRpb25GcmFtZSJdKX0pLG8ub24oZytsLGZ1bmN0aW9uKHQpe3RoaXMudGltZT15Lm5vdygpLHRoaXMuc3RhcnRQYXRoPWxvY2F0aW9uLnBhdGhuYW1lK2xvY2F0aW9uLmhhc2h9KSxvLm9uKGcraCxmdW5jdGlvbih0KXtpKCJic3RIaXN0IixbbG9jYXRpb24ucGF0aG5hbWUrbG9jYXRpb24uaGFzaCx0aGlzLnN0YXJ0UGF0aCx0aGlzLnRpbWVdKX0pLGYgaW4gd2luZG93LnBlcmZvcm1hbmNlJiYod2luZG93LnBlcmZvcm1hbmNlWyJjIitjXT93aW5kb3cucGVyZm9ybWFuY2VbZl0odSxmdW5jdGlvbih0KXtpKGQsW3dpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKHApXSksd2luZG93LnBlcmZvcm1hbmNlWyJjIitjXSgpfSwhMSk6d2luZG93LnBlcmZvcm1hbmNlW2ZdKCJ3ZWJraXQiK3UsZnVuY3Rpb24odCl7aShkLFt3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZShwKV0pLHdpbmRvdy5wZXJmb3JtYW5jZVsid2Via2l0QyIrY10oKX0sITEpKSxkb2N1bWVudFtmXSgic2Nyb2xsIixyLHtwYXNzaXZlOiEwfSksZG9jdW1lbnRbZl0oImtleXByZXNzIixyLCExKSxkb2N1bWVudFtmXSgiY2xpY2siLHIsITEpfX0se31dLDY6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe2Zvcih2YXIgZT10O2UmJiFlLmhhc093blByb3BlcnR5KHUpOyllPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtlJiZvKGUpfWZ1bmN0aW9uIG8odCl7cy5pblBsYWNlKHQsW3UsZF0sIi0iLGkpfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdFsxXX12YXIgYT10KCJlZSIpLmdldCgiZXZlbnRzIikscz10KCJ3cmFwLWZ1bmN0aW9uIikoYSwhMCksYz10KCJnb3MiKSxmPVhNTEh0dHBSZXF1ZXN0LHU9ImFkZEV2ZW50TGlzdGVuZXIiLGQ9InJlbW92ZUV2ZW50TGlzdGVuZXIiO2UuZXhwb3J0cz1hLCJnZXRQcm90b3R5cGVPZiJpbiBPYmplY3Q/KHIoZG9jdW1lbnQpLHIod2luZG93KSxyKGYucHJvdG90eXBlKSk6Zi5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodSkmJihvKHdpbmRvdyksbyhmLnByb3RvdHlwZSkpLGEub24odSsiLXN0YXJ0IixmdW5jdGlvbih0LGUpe3ZhciBuPXRbMV0scj1jKG4sIm5yQHdyYXBwZWQiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuLmhhbmRsZUV2ZW50KXJldHVybiBuLmhhbmRsZUV2ZW50LmFwcGx5KG4sYXJndW1lbnRzKX12YXIgZT17b2JqZWN0OnQsImZ1bmN0aW9uIjpufVt0eXBlb2Ygbl07cmV0dXJuIGU/cyhlLCJmbi0iLG51bGwsZS5uYW1lfHwiYW5vbnltb3VzIik6bn0pO3RoaXMud3JhcHBlZD10WzFdPXJ9KSxhLm9uKGQrIi1zdGFydCIsZnVuY3Rpb24odCl7dFsxXT10aGlzLndyYXBwZWR8fHRbMV19KX0se31dLDc6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSxuKXt2YXIgcj10W2VdOyJmdW5jdGlvbiI9PXR5cGVvZiByJiYodFtlXT1mdW5jdGlvbigpe3ZhciB0PWkoYXJndW1lbnRzKSxlPXt9O28uZW1pdChuKyJiZWZvcmUtc3RhcnQiLFt0XSxlKTt2YXIgYTtlW21dJiZlW21dLmR0JiYoYT1lW21dLmR0KTt2YXIgcz1yLmFwcGx5KHRoaXMsdCk7cmV0dXJuIG8uZW1pdChuKyJzdGFydCIsW3QsYV0scykscy50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBvLmVtaXQobisiZW5kIixbbnVsbCx0XSxzKSx0fSxmdW5jdGlvbih0KXt0aHJvdyBvLmVtaXQobisiZW5kIixbdF0scyksdH0pfSl9dmFyIG89dCgiZWUiKS5nZXQoImZldGNoIiksaT10KDI2KSxhPXQoMjUpO2UuZXhwb3J0cz1vO3ZhciBzPXdpbmRvdyxjPSJmZXRjaC0iLGY9YysiYm9keS0iLHU9WyJhcnJheUJ1ZmZlciIsImJsb2IiLCJqc29uIiwidGV4dCIsImZvcm1EYXRhIl0sZD1zLlJlcXVlc3QscD1zLlJlc3BvbnNlLGw9cy5mZXRjaCxoPSJwcm90b3R5cGUiLG09Im5yQGNvbnRleHQiO2QmJnAmJmwmJihhKHUsZnVuY3Rpb24odCxlKXtyKGRbaF0sZSxmKSxyKHBbaF0sZSxmKX0pLHIocywiZmV0Y2giLGMpLG8ub24oYysiZW5kIixmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYoZSl7dmFyIHI9ZS5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKTtudWxsIT09ciYmKG4ucnhTaXplPXIpLG8uZW1pdChjKyJkb25lIixbbnVsbCxlXSxuKX1lbHNlIG8uZW1pdChjKyJkb25lIixbdF0sbil9KSl9LHt9XSw4OltmdW5jdGlvbih0LGUsbil7dmFyIHI9dCgiZWUiKS5nZXQoImhpc3RvcnkiKSxvPXQoIndyYXAtZnVuY3Rpb24iKShyKTtlLmV4cG9ydHM9cjt2YXIgaT13aW5kb3cuaGlzdG9yeSYmd2luZG93Lmhpc3RvcnkuY29uc3RydWN0b3ImJndpbmRvdy5oaXN0b3J5LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxhPXdpbmRvdy5oaXN0b3J5O2kmJmkucHVzaFN0YXRlJiZpLnJlcGxhY2VTdGF0ZSYmKGE9aSksby5pblBsYWNlKGEsWyJwdXNoU3RhdGUiLCJyZXBsYWNlU3RhdGUiXSwiLSIpfSx7fV0sOTpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCl7ZnVuY3Rpb24gZSgpe2MuZW1pdCgianNvbnAtZW5kIixbXSxwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGUsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLG4sITEpfWZ1bmN0aW9uIG4oKXtjLmVtaXQoImpzb25wLWVycm9yIixbXSxwKSxjLmVtaXQoImpzb25wLWVuZCIsW10scCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixlLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixuLCExKX12YXIgcj10JiYic3RyaW5nIj09dHlwZW9mIHQubm9kZU5hbWUmJiJzY3JpcHQiPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHIpe3ZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXI7aWYobyl7dmFyIGE9aSh0LnNyYyk7aWYoYSl7dmFyIHU9cyhhKSxkPSJmdW5jdGlvbiI9PXR5cGVvZiB1LnBhcmVudFt1LmtleV07aWYoZCl7dmFyIHA9e307Zi5pblBsYWNlKHUucGFyZW50LFt1LmtleV0sImNiLSIscCksdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixuLCExKSxjLmVtaXQoIm5ldy1qc29ucCIsW3Quc3JjXSxwKX19fX19ZnVuY3Rpb24gbygpe3JldHVybiJhZGRFdmVudExpc3RlbmVyImluIHdpbmRvd31mdW5jdGlvbiBpKHQpe3ZhciBlPXQubWF0Y2godSk7cmV0dXJuIGU/ZVsxXTpudWxsfWZ1bmN0aW9uIGEodCxlKXt2YXIgbj10Lm1hdGNoKHApLHI9blsxXSxvPW5bM107cmV0dXJuIG8/YShvLGVbcl0pOmVbcl19ZnVuY3Rpb24gcyh0KXt2YXIgZT10Lm1hdGNoKGQpO3JldHVybiBlJiZlLmxlbmd0aD49Mz97a2V5OmVbMl0scGFyZW50OmEoZVsxXSx3aW5kb3cpfTp7a2V5OnQscGFyZW50OndpbmRvd319dmFyIGM9dCgiZWUiKS5nZXQoImpzb25wIiksZj10KCJ3cmFwLWZ1bmN0aW9uIikoYyk7aWYoZS5leHBvcnRzPWMsbygpKXt2YXIgdT0vWz8mXSg/OmNhbGxiYWNrfGNiKT0oW14mI10rKS8sZD0vKC4qKVwuKFteLl0rKS8scD0vXihcdyspKFwufCQpKC4qKSQvLGw9WyJhcHBlbmRDaGlsZCIsImluc2VydEJlZm9yZSIsInJlcGxhY2VDaGlsZCJdO05vZGUmJk5vZGUucHJvdG90eXBlJiZOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD9mLmluUGxhY2UoTm9kZS5wcm90b3R5cGUsbCwiZG9tLSIpOihmLmluUGxhY2UoSFRNTEVsZW1lbnQucHJvdG90eXBlLGwsImRvbS0iKSxmLmluUGxhY2UoSFRNTEhlYWRFbGVtZW50LnByb3RvdHlwZSxsLCJkb20tIiksZi5pblBsYWNlKEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsbCwiZG9tLSIpKSxjLm9uKCJkb20tc3RhcnQiLGZ1bmN0aW9uKHQpe3IodFswXSl9KX19LHt9XSwxMDpbZnVuY3Rpb24odCxlLG4pe3ZhciByPXQoImVlIikuZ2V0KCJtdXRhdGlvbiIpLG89dCgid3JhcC1mdW5jdGlvbiIpKHIpLGk9TlJFVU0uby5NTztlLmV4cG9ydHM9cixpJiYod2luZG93Lk11dGF0aW9uT2JzZXJ2ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP25ldyBpKG8odCwiZm4tIikpOmkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxNdXRhdGlvbk9ic2VydmVyLnByb3RvdHlwZT1pLnByb3RvdHlwZSl9LHt9XSwxMTpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCl7dmFyIGU9YS5jb250ZXh0KCksbj1zKHQsImV4ZWN1dG9yLSIsZSkscj1uZXcgZihuKTtyZXR1cm4gYS5jb250ZXh0KHIpLmdldEN0eD1mdW5jdGlvbigpe3JldHVybiBlfSxhLmVtaXQoIm5ldy1wcm9taXNlIixbcixlXSxlKSxyfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZX12YXIgaT10KCJ3cmFwLWZ1bmN0aW9uIiksYT10KCJlZSIpLmdldCgicHJvbWlzZSIpLHM9aShhKSxjPXQoMjUpLGY9TlJFVU0uby5QUjtlLmV4cG9ydHM9YSxmJiYod2luZG93LlByb21pc2U9cixbImFsbCIsInJhY2UiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWZbdF07Zlt0XT1mdW5jdGlvbihuKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe2EuZW1pdCgicHJvcGFnYXRlIixbbnVsbCwhb10saSksbz1vfHwhdH19dmFyIG89ITE7YyhuLGZ1bmN0aW9uKGUsbil7UHJvbWlzZS5yZXNvbHZlKG4pLnRoZW4ocigiYWxsIj09PXQpLHIoITEpKX0pO3ZhciBpPWUuYXBwbHkoZixhcmd1bWVudHMpLHM9Zi5yZXNvbHZlKGkpO3JldHVybiBzfX0pLFsicmVzb2x2ZSIsInJlamVjdCJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Zlt0XTtmW3RdPWZ1bmN0aW9uKHQpe3ZhciBuPWUuYXBwbHkoZixhcmd1bWVudHMpO3JldHVybiB0IT09biYmYS5lbWl0KCJwcm9wYWdhdGUiLFt0LCEwXSxuKSxufX0pLGYucHJvdG90eXBlWyJjYXRjaCJdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCx0KX0sZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShmLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnJ9fSksYyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmKSxmdW5jdGlvbih0LGUpe3RyeXtyW2VdPWZbZV19Y2F0Y2gobil7fX0pLGEub24oImV4ZWN1dG9yLXN0YXJ0IixmdW5jdGlvbih0KXt0WzBdPXModFswXSwicmVzb2x2ZS0iLHRoaXMpLHRbMV09cyh0WzFdLCJyZXNvbHZlLSIsdGhpcyl9KSxhLm9uKCJleGVjdXRvci1lcnIiLGZ1bmN0aW9uKHQsZSxuKXt0WzFdKG4pfSkscy5pblBsYWNlKGYucHJvdG90eXBlLFsidGhlbiJdLCJ0aGVuLSIsbyksYS5vbigidGhlbi1zdGFydCIsZnVuY3Rpb24odCxlKXt0aGlzLnByb21pc2U9ZSx0WzBdPXModFswXSwiY2ItIix0aGlzKSx0WzFdPXModFsxXSwiY2ItIix0aGlzKX0pLGEub24oInRoZW4tZW5kIixmdW5jdGlvbih0LGUsbil7dGhpcy5uZXh0UHJvbWlzZT1uO3ZhciByPXRoaXMucHJvbWlzZTthLmVtaXQoInByb3BhZ2F0ZSIsW3IsITBdLG4pfSksYS5vbigiY2ItZW5kIixmdW5jdGlvbih0LGUsbil7YS5lbWl0KCJwcm9wYWdhdGUiLFtuLCEwXSx0aGlzLm5leHRQcm9taXNlKX0pLGEub24oInByb3BhZ2F0ZSIsZnVuY3Rpb24odCxlLG4pe3RoaXMuZ2V0Q3R4JiYhZXx8KHRoaXMuZ2V0Q3R4PWZ1bmN0aW9uKCl7aWYodCBpbnN0YW5jZW9mIFByb21pc2UpdmFyIGU9YS5jb250ZXh0KHQpO3JldHVybiBlJiZlLmdldEN0eD9lLmdldEN0eCgpOnRoaXN9KX0pLHIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIitmfSl9LHt9XSwxMjpbZnVuY3Rpb24odCxlLG4pe3ZhciByPXQoImVlIikuZ2V0KCJyYWYiKSxvPXQoIndyYXAtZnVuY3Rpb24iKShyKSxpPSJlcXVlc3RBbmltYXRpb25GcmFtZSI7ZS5leHBvcnRzPXIsby5pblBsYWNlKHdpbmRvdyxbInIiK2ksIm1velIiK2ksIndlYmtpdFIiK2ksIm1zUiIraV0sInJhZi0iKSxyLm9uKCJyYWYtc3RhcnQiLGZ1bmN0aW9uKHQpe3RbMF09byh0WzBdLCJmbi0iKX0pfSx7fV0sMTM6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSxuKXt0WzBdPWEodFswXSwiZm4tIixudWxsLG4pfWZ1bmN0aW9uIG8odCxlLG4pe3RoaXMubWV0aG9kPW4sdGhpcy50aW1lckR1cmF0aW9uPWlzTmFOKHRbMV0pPzA6K3RbMV0sdFswXT1hKHRbMF0sImZuLSIsdGhpcyxuKX12YXIgaT10KCJlZSIpLmdldCgidGltZXIiKSxhPXQoIndyYXAtZnVuY3Rpb24iKShpKSxzPSJzZXRUaW1lb3V0IixjPSJzZXRJbnRlcnZhbCIsZj0iY2xlYXJUaW1lb3V0Iix1PSItc3RhcnQiLGQ9Ii0iO2UuZXhwb3J0cz1pLGEuaW5QbGFjZSh3aW5kb3csW3MsInNldEltbWVkaWF0ZSJdLHMrZCksYS5pblBsYWNlKHdpbmRvdyxbY10sYytkKSxhLmluUGxhY2Uod2luZG93LFtmLCJjbGVhckltbWVkaWF0ZSJdLGYrZCksaS5vbihjK3UsciksaS5vbihzK3Usbyl9LHt9XSwxNDpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlKXtkLmluUGxhY2UoZSxbIm9ucmVhZHlzdGF0ZWNoYW5nZSJdLCJmbi0iLHMpfWZ1bmN0aW9uIG8oKXt2YXIgdD10aGlzLGU9dS5jb250ZXh0KHQpO3QucmVhZHlTdGF0ZT4zJiYhZS5yZXNvbHZlZCYmKGUucmVzb2x2ZWQ9ITAsdS5lbWl0KCJ4aHItcmVzb2x2ZWQiLFtdLHQpKSxkLmluUGxhY2UodCxnLCJmbi0iLHMpfWZ1bmN0aW9uIGkodCl7eS5wdXNoKHQpLGgmJihiP2IudGhlbihhKTp2P3YoYSk6KEU9LUUsTy5kYXRhPUUpKX1mdW5jdGlvbiBhKCl7Zm9yKHZhciB0PTA7dDx5Lmxlbmd0aDt0KyspcihbXSx5W3RdKTt5Lmxlbmd0aCYmKHk9W10pfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gZX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciBuIGluIHQpZVtuXT10W25dO3JldHVybiBlfXQoNik7dmFyIGY9dCgiZWUiKSx1PWYuZ2V0KCJ4aHIiKSxkPXQoIndyYXAtZnVuY3Rpb24iKSh1KSxwPU5SRVVNLm8sbD1wLlhIUixoPXAuTU8sbT1wLlBSLHY9cC5TSSx3PSJyZWFkeXN0YXRlY2hhbmdlIixnPVsib25sb2FkIiwib25lcnJvciIsIm9uYWJvcnQiLCJvbmxvYWRzdGFydCIsIm9ubG9hZGVuZCIsIm9ucHJvZ3Jlc3MiLCJvbnRpbWVvdXQiXSx5PVtdO2UuZXhwb3J0cz11O3ZhciB4PXdpbmRvdy5YTUxIdHRwUmVxdWVzdD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbCh0KTt0cnl7dS5lbWl0KCJuZXcteGhyIixbZV0sZSksZS5hZGRFdmVudExpc3RlbmVyKHcsbywhMSl9Y2F0Y2gobil7dHJ5e3UuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtuXSl9Y2F0Y2gocil7fX1yZXR1cm4gZX07aWYoYyhsLHgpLHgucHJvdG90eXBlPWwucHJvdG90eXBlLGQuaW5QbGFjZSh4LnByb3RvdHlwZSxbIm9wZW4iLCJzZW5kIl0sIi14aHItIixzKSx1Lm9uKCJzZW5kLXhoci1zdGFydCIsZnVuY3Rpb24odCxlKXtyKHQsZSksaShlKX0pLHUub24oIm9wZW4teGhyLXN0YXJ0IixyKSxoKXt2YXIgYj1tJiZtLnJlc29sdmUoKTtpZighdiYmIW0pe3ZhciBFPTEsTz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShFKTtuZXcgaChhKS5vYnNlcnZlKE8se2NoYXJhY3RlckRhdGE6ITB9KX19ZWxzZSBmLm9uKCJmbi1lbmQiLGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udHlwZT09PXd8fGEoKX0pfSx7fV0sMTU6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe2lmKCFpKHQpKXJldHVybiBudWxsO3ZhciBlPXdpbmRvdy5OUkVVTTtpZighZS5sb2FkZXJfY29uZmlnKXJldHVybiBudWxsO3ZhciBuPShlLmxvYWRlcl9jb25maWcuYWNjb3VudElEfHwiIikudG9TdHJpbmcoKXx8bnVsbCxyPShlLmxvYWRlcl9jb25maWcuYWdlbnRJRHx8IiIpLnRvU3RyaW5nKCl8fG51bGwscz0oZS5sb2FkZXJfY29uZmlnLnRydXN0S2V5fHwiIikudG9TdHJpbmcoKXx8bnVsbDtpZighbnx8IXIpcmV0dXJuIG51bGw7dmFyIGM9YS5nZW5lcmF0ZUNhdElkKCksZj1hLmdlbmVyYXRlQ2F0SWQoKSx1PURhdGUubm93KCksZD1vKGMsZix1LG4scixzKTtyZXR1cm57aGVhZGVyOmQsZ3VpZDpjLHRyYWNlSWQ6Zix0aW1lc3RhbXA6dX19ZnVuY3Rpb24gbyh0LGUsbixyLG8saSl7dmFyIGE9ImJ0b2EiaW4gd2luZG93JiYiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93LmJ0b2E7aWYoIWEpcmV0dXJuIG51bGw7dmFyIHM9e3Y6WzAsMV0sZDp7dHk6IkJyb3dzZXIiLGFjOnIsYXA6byxpZDp0LHRyOmUsdGk6bn19O3JldHVybiBpJiZyIT09aSYmKHMuZC50az1pKSxidG9hKEpTT04uc3RyaW5naWZ5KHMpKX1mdW5jdGlvbiBpKHQpe3ZhciBlPSExLG49ITEscj17fTtpZigiaW5pdCJpbiBOUkVVTSYmImRpc3RyaWJ1dGVkX3RyYWNpbmciaW4gTlJFVU0uaW5pdCYmKHI9TlJFVU0uaW5pdC5kaXN0cmlidXRlZF90cmFjaW5nLG49ISFyLmVuYWJsZWQpLG4paWYodC5zYW1lT3JpZ2luKWU9ITA7ZWxzZSBpZihyLmFsbG93ZWRfb3JpZ2lucyBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgbz0wO288ci5hbGxvd2VkX29yaWdpbnMubGVuZ3RoO28rKyl7dmFyIGk9cyhyLmFsbG93ZWRfb3JpZ2luc1tvXSk7aWYodC5ob3N0bmFtZT09PWkuaG9zdG5hbWUmJnQucHJvdG9jb2w9PT1pLnByb3RvY29sJiZ0LnBvcnQ9PT1pLnBvcnQpe2U9ITA7YnJlYWt9fXJldHVybiBuJiZlfXZhciBhPXQoMjMpLHM9dCgxNyk7ZS5leHBvcnRzPXtnZW5lcmF0ZVRyYWNlUGF5bG9hZDpyLHNob3VsZEdlbmVyYXRlVHJhY2U6aX19LHt9XSwxNjpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCl7dmFyIGU9dGhpcy5wYXJhbXMsbj10aGlzLm1ldHJpY3M7aWYoIXRoaXMuZW5kZWQpe3RoaXMuZW5kZWQ9ITA7Zm9yKHZhciByPTA7cjxwO3IrKyl0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZFtyXSx0aGlzLmxpc3RlbmVyLCExKTtlLmFib3J0ZWR8fChuLmR1cmF0aW9uPWEubm93KCktdGhpcy5zdGFydFRpbWUsdGhpcy5sb2FkQ2FwdHVyZUNhbGxlZHx8NCE9PXQucmVhZHlTdGF0ZT9udWxsPT1lLnN0YXR1cyYmKGUuc3RhdHVzPTApOmkodGhpcyx0KSxuLmNiVGltZT10aGlzLmNiVGltZSx1LmVtaXQoInhoci1kb25lIixbdF0sdCkscygieGhyIixbZSxuLHRoaXMuc3RhcnRUaW1lXSkpfX1mdW5jdGlvbiBvKHQsZSl7dmFyIG49YyhlKSxyPXQucGFyYW1zO3IuaG9zdD1uLmhvc3RuYW1lKyI6IituLnBvcnQsci5wYXRobmFtZT1uLnBhdGhuYW1lLHQucGFyc2VkT3JpZ2luPWMoZSksdC5zYW1lT3JpZ2luPXQucGFyc2VkT3JpZ2luLnNhbWVPcmlnaW59ZnVuY3Rpb24gaSh0LGUpe3QucGFyYW1zLnN0YXR1cz1lLnN0YXR1czt2YXIgbj12KGUsdC5sYXN0U2l6ZSk7aWYobiYmKHQubWV0cmljcy5yeFNpemU9biksdC5zYW1lT3JpZ2luKXt2YXIgcj1lLmdldFJlc3BvbnNlSGVhZGVyKCJYLU5ld1JlbGljLUFwcC1EYXRhIik7ciYmKHQucGFyYW1zLmNhdD1yLnNwbGl0KCIsICIpLnBvcCgpKX10LmxvYWRDYXB0dXJlQ2FsbGVkPSEwfXZhciBhPXQoImxvYWRlciIpO2lmKGEueGhyV3JhcHBhYmxlKXt2YXIgcz10KCJoYW5kbGUiKSxjPXQoMTcpLGY9dCgxNSkuZ2VuZXJhdGVUcmFjZVBheWxvYWQsdT10KCJlZSIpLGQ9WyJsb2FkIiwiZXJyb3IiLCJhYm9ydCIsInRpbWVvdXQiXSxwPWQubGVuZ3RoLGw9dCgiaWQiKSxoPXQoMjEpLG09dCgyMCksdj10KDE4KSx3PXdpbmRvdy5YTUxIdHRwUmVxdWVzdDthLmZlYXR1cmVzLnhocj0hMCx0KDE0KSx0KDcpLHUub24oIm5ldy14aHIiLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZS50b3RhbENicz0wLGUuY2FsbGVkPTAsZS5jYlRpbWU9MCxlLmVuZD1yLGUuZW5kZWQ9ITEsZS54aHJHdWlkcz17fSxlLmxhc3RTaXplPW51bGwsZS5sb2FkQ2FwdHVyZUNhbGxlZD0hMSx0LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKG4pe2koZSx0KX0sITEpLGgmJihoPjM0fHxoPDEwKXx8d2luZG93Lm9wZXJhfHx0LmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbih0KXtlLmxhc3RTaXplPXQubG9hZGVkfSwhMSl9KSx1Lm9uKCJvcGVuLXhoci1zdGFydCIsZnVuY3Rpb24odCl7dGhpcy5wYXJhbXM9e21ldGhvZDp0WzBdfSxvKHRoaXMsdFsxXSksdGhpcy5tZXRyaWNzPXt9fSksdS5vbigib3Blbi14aHItZW5kIixmdW5jdGlvbih0LGUpeyJsb2FkZXJfY29uZmlnImluIE5SRVVNJiYieHBpZCJpbiBOUkVVTS5sb2FkZXJfY29uZmlnJiZ0aGlzLnNhbWVPcmlnaW4mJmUuc2V0UmVxdWVzdEhlYWRlcigiWC1OZXdSZWxpYy1JRCIsTlJFVU0ubG9hZGVyX2NvbmZpZy54cGlkKTt2YXIgbj1mKHRoaXMucGFyc2VkT3JpZ2luKTtuJiZuLmhlYWRlciYmKGUuc2V0UmVxdWVzdEhlYWRlcigibmV3cmVsaWMiLG4uaGVhZGVyKSx0aGlzLmR0PW4pfSksdS5vbigic2VuZC14aHItc3RhcnQiLGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5tZXRyaWNzLHI9dFswXSxvPXRoaXM7aWYobiYmcil7dmFyIGk9bShyKTtpJiYobi50eFNpemU9aSl9dGhpcy5zdGFydFRpbWU9YS5ub3coKSx0aGlzLmxpc3RlbmVyPWZ1bmN0aW9uKHQpe3RyeXsiYWJvcnQiIT09dC50eXBlfHxvLmxvYWRDYXB0dXJlQ2FsbGVkfHwoby5wYXJhbXMuYWJvcnRlZD0hMCksKCJsb2FkIiE9PXQudHlwZXx8by5jYWxsZWQ9PT1vLnRvdGFsQ2JzJiYoby5vbmxvYWRDYWxsZWR8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLm9ubG9hZCkpJiZvLmVuZChlKX1jYXRjaChuKXt0cnl7dS5lbWl0KCJpbnRlcm5hbC1lcnJvciIsW25dKX1jYXRjaChyKXt9fX07Zm9yKHZhciBzPTA7czxwO3MrKyllLmFkZEV2ZW50TGlzdGVuZXIoZFtzXSx0aGlzLmxpc3RlbmVyLCExKX0pLHUub24oInhoci1jYi10aW1lIixmdW5jdGlvbih0LGUsbil7dGhpcy5jYlRpbWUrPXQsZT90aGlzLm9ubG9hZENhbGxlZD0hMDp0aGlzLmNhbGxlZCs9MSx0aGlzLmNhbGxlZCE9PXRoaXMudG90YWxDYnN8fCF0aGlzLm9ubG9hZENhbGxlZCYmImZ1bmN0aW9uIj09dHlwZW9mIG4ub25sb2FkfHx0aGlzLmVuZChuKX0pLHUub24oInhoci1sb2FkLWFkZGVkIixmdW5jdGlvbih0LGUpe3ZhciBuPSIiK2wodCkrISFlO3RoaXMueGhyR3VpZHMmJiF0aGlzLnhockd1aWRzW25dJiYodGhpcy54aHJHdWlkc1tuXT0hMCx0aGlzLnRvdGFsQ2JzKz0xKX0pLHUub24oInhoci1sb2FkLXJlbW92ZWQiLGZ1bmN0aW9uKHQsZSl7dmFyIG49IiIrbCh0KSshIWU7dGhpcy54aHJHdWlkcyYmdGhpcy54aHJHdWlkc1tuXSYmKGRlbGV0ZSB0aGlzLnhockd1aWRzW25dLHRoaXMudG90YWxDYnMtPTEpfSksdS5vbigiYWRkRXZlbnRMaXN0ZW5lci1lbmQiLGZ1bmN0aW9uKHQsZSl7ZSBpbnN0YW5jZW9mIHcmJiJsb2FkIj09PXRbMF0mJnUuZW1pdCgieGhyLWxvYWQtYWRkZWQiLFt0WzFdLHRbMl1dLGUpfSksdS5vbigicmVtb3ZlRXZlbnRMaXN0ZW5lci1lbmQiLGZ1bmN0aW9uKHQsZSl7ZSBpbnN0YW5jZW9mIHcmJiJsb2FkIj09PXRbMF0mJnUuZW1pdCgieGhyLWxvYWQtcmVtb3ZlZCIsW3RbMV0sdFsyXV0sZSl9KSx1Lm9uKCJmbi1zdGFydCIsZnVuY3Rpb24odCxlLG4pe2UgaW5zdGFuY2VvZiB3JiYoIm9ubG9hZCI9PT1uJiYodGhpcy5vbmxvYWQ9ITApLCgibG9hZCI9PT0odFswXSYmdFswXS50eXBlKXx8dGhpcy5vbmxvYWQpJiYodGhpcy54aHJDYlN0YXJ0PWEubm93KCkpKX0pLHUub24oImZuLWVuZCIsZnVuY3Rpb24odCxlKXt0aGlzLnhockNiU3RhcnQmJnUuZW1pdCgieGhyLWNiLXRpbWUiLFthLm5vdygpLXRoaXMueGhyQ2JTdGFydCx0aGlzLm9ubG9hZCxlXSxlKX0pLHUub24oImZldGNoLWJlZm9yZS1zdGFydCIsZnVuY3Rpb24odCl7dmFyIGUsbj10WzFdfHx7fTsic3RyaW5nIj09dHlwZW9mIHRbMF0/ZT10WzBdOnRbMF0mJnRbMF0udXJsJiYoZT10WzBdLnVybCksZSYmKHRoaXMucGFyc2VkT3JpZ2luPWMoZSksdGhpcy5zYW1lT3JpZ2luPXRoaXMucGFyc2VkT3JpZ2luLnNhbWVPcmlnaW4pO3ZhciByPWYodGhpcy5wYXJzZWRPcmlnaW4pO2lmKHImJnIuaGVhZGVyKXt2YXIgbz1yLmhlYWRlcjtpZigic3RyaW5nIj09dHlwZW9mIHRbMF0pe3ZhciBpPXt9O2Zvcih2YXIgYSBpbiBuKWlbYV09blthXTtpLmhlYWRlcnM9bmV3IEhlYWRlcnMobi5oZWFkZXJzfHx7fSksaS5oZWFkZXJzLnNldCgibmV3cmVsaWMiLG8pLHRoaXMuZHQ9cix0Lmxlbmd0aD4xP3RbMV09aTp0LnB1c2goaSl9ZWxzZSB0WzBdJiZ0WzBdLmhlYWRlcnMmJih0WzBdLmhlYWRlcnMuYXBwZW5kKCJuZXdyZWxpYyIsbyksdGhpcy5kdD1yKX19KX19LHt9XSwxNzpbZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih0IGluIHIpcmV0dXJuIHJbdF07dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG49d2luZG93LmxvY2F0aW9uLG89e307ZS5ocmVmPXQsby5wb3J0PWUucG9ydDt2YXIgaT1lLmhyZWYuc3BsaXQoIjovLyIpOyFvLnBvcnQmJmlbMV0mJihvLnBvcnQ9aVsxXS5zcGxpdCgiLyIpWzBdLnNwbGl0KCJAIikucG9wKCkuc3BsaXQoIjoiKVsxXSksby5wb3J0JiYiMCIhPT1vLnBvcnR8fChvLnBvcnQ9Imh0dHBzIj09PWlbMF0/IjQ0MyI6IjgwIiksby5ob3N0bmFtZT1lLmhvc3RuYW1lfHxuLmhvc3RuYW1lLG8ucGF0aG5hbWU9ZS5wYXRobmFtZSxvLnByb3RvY29sPWlbMF0sIi8iIT09by5wYXRobmFtZS5jaGFyQXQoMCkmJihvLnBhdGhuYW1lPSIvIitvLnBhdGhuYW1lKTt2YXIgYT0hZS5wcm90b2NvbHx8IjoiPT09ZS5wcm90b2NvbHx8ZS5wcm90b2NvbD09PW4ucHJvdG9jb2wscz1lLmhvc3RuYW1lPT09ZG9jdW1lbnQuZG9tYWluJiZlLnBvcnQ9PT1uLnBvcnQ7cmV0dXJuIG8uc2FtZU9yaWdpbj1hJiYoIWUuaG9zdG5hbWV8fHMpLCIvIj09PW8ucGF0aG5hbWUmJihyW3RdPW8pLG99fSx7fV0sMTg6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSl7dmFyIG49dC5yZXNwb25zZVR5cGU7cmV0dXJuImpzb24iPT09biYmbnVsbCE9PWU/ZToiYXJyYXlidWZmZXIiPT09bnx8ImJsb2IiPT09bnx8Impzb24iPT09bj9vKHQucmVzcG9uc2UpOiJ0ZXh0Ij09PW58fCIiPT09bnx8dm9pZCAwPT09bj9vKHQucmVzcG9uc2VUZXh0KTp2b2lkIDB9dmFyIG89dCgyMCk7ZS5leHBvcnRzPXJ9LHt9XSwxOTpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gbyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkodCxbZi5ub3coKV0uY29uY2F0KHMoYXJndW1lbnRzKSksZT9udWxsOnRoaXMsbiksZT92b2lkIDA6dGhpc319dmFyIGk9dCgiaGFuZGxlIiksYT10KDI1KSxzPXQoMjYpLGM9dCgiZWUiKS5nZXQoInRyYWNlciIpLGY9dCgibG9hZGVyIiksdT1OUkVVTTsidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdy5uZXdyZWxpYyYmKG5ld3JlbGljPXUpO3ZhciBkPVsic2V0UGFnZVZpZXdOYW1lIiwic2V0Q3VzdG9tQXR0cmlidXRlIiwic2V0RXJyb3JIYW5kbGVyIiwiZmluaXNoZWQiLCJhZGRUb1RyYWNlIiwiaW5saW5lSGl0IiwiYWRkUmVsZWFzZSJdLHA9ImFwaS0iLGw9cCsiaXhuLSI7YShkLGZ1bmN0aW9uKHQsZSl7dVtlXT1vKHArZSwhMCwiYXBpIil9KSx1LmFkZFBhZ2VBY3Rpb249byhwKyJhZGRQYWdlQWN0aW9uIiwhMCksdS5zZXRDdXJyZW50Um91dGVOYW1lPW8ocCsicm91dGVOYW1lIiwhMCksZS5leHBvcnRzPW5ld3JlbGljLHUuaW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHIpLmdldCgpfTt2YXIgaD1yLnByb3RvdHlwZT17Y3JlYXRlVHJhY2VyOmZ1bmN0aW9uKHQsZSl7dmFyIG49e30scj10aGlzLG89ImZ1bmN0aW9uIj09dHlwZW9mIGU7cmV0dXJuIGkobCsidHJhY2VyIixbZi5ub3coKSx0LG5dLHIpLGZ1bmN0aW9uKCl7aWYoYy5lbWl0KChvPyIiOiJuby0iKSsiZm4tc3RhcnQiLFtmLm5vdygpLHIsb10sbiksbyl0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKHQpe3Rocm93IGMuZW1pdCgiZm4tZXJyIixbYXJndW1lbnRzLHRoaXMsdF0sbiksdH1maW5hbGx5e2MuZW1pdCgiZm4tZW5kIixbZi5ub3coKV0sbil9fX19O2EoImFjdGlvblRleHQsc2V0TmFtZSxzZXRBdHRyaWJ1dGUsc2F2ZSxpZ25vcmUsb25FbmQsZ2V0Q29udGV4dCxlbmQsZ2V0Ii5zcGxpdCgiLCIpLGZ1bmN0aW9uKHQsZSl7aFtlXT1vKGwrZSl9KSxuZXdyZWxpYy5ub3RpY2VFcnJvcj1mdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bmV3IEVycm9yKHQpKSxpKCJlcnIiLFt0LGYubm93KCksITEsZV0pfX0se31dLDIwOltmdW5jdGlvbih0LGUsbil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5sZW5ndGgpcmV0dXJuIHQubGVuZ3RoO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZ0LmJ5dGVMZW5ndGgpcmV0dXJuIHQuYnl0ZUxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJnQgaW5zdGFuY2VvZiBCbG9iJiZ0LnNpemUpcmV0dXJuIHQuc2l6ZTtpZighKCJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJnQgaW5zdGFuY2VvZiBGb3JtRGF0YSkpdHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh0KS5sZW5ndGh9Y2F0Y2goZSl7cmV0dXJufX19fSx7fV0sMjE6W2Z1bmN0aW9uKHQsZSxuKXt2YXIgcj0wLG89bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRmlyZWZveFtcL1xzXShcZCtcLlxkKykvKTtvJiYocj0rb1sxXSksZS5leHBvcnRzPXJ9LHt9XSwyMjpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlKXt2YXIgbj10LmdldEVudHJpZXMoKTtuLmZvckVhY2goZnVuY3Rpb24odCl7ImZpcnN0LXBhaW50Ij09PXQubmFtZT9jKCJ0aW1pbmciLFsiZnAiLE1hdGguZmxvb3IodC5zdGFydFRpbWUpXSk6ImZpcnN0LWNvbnRlbnRmdWwtcGFpbnQiPT09dC5uYW1lJiZjKCJ0aW1pbmciLFsiZmNwIixNYXRoLmZsb29yKHQuc3RhcnRUaW1lKV0pfSl9ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXQuZ2V0RW50cmllcygpO24ubGVuZ3RoPjAmJmMoImxjcCIsW25bbi5sZW5ndGgtMV1dKX1mdW5jdGlvbiBpKHQpe2lmKHQgaW5zdGFuY2VvZiB1JiYhcCl7dmFyIGUsbj1NYXRoLnJvdW5kKHQudGltZVN0YW1wKTtlPW4+MWUxMj9EYXRlLm5vdygpLW46Zi5ub3coKS1uLHA9ITAsYygidGltaW5nIixbImZpIixuLHt0eXBlOnQudHlwZSxmaWQ6ZX1dKX19aWYoISgiaW5pdCJpbiBOUkVVTSYmInBhZ2Vfdmlld190aW1pbmciaW4gTlJFVU0uaW5pdCYmImVuYWJsZWQiaW4gTlJFVU0uaW5pdC5wYWdlX3ZpZXdfdGltaW5nJiZOUkVVTS5pbml0LnBhZ2Vfdmlld190aW1pbmcuZW5hYmxlZD09PSExKSl7dmFyIGEscyxjPXQoImhhbmRsZSIpLGY9dCgibG9hZGVyIiksdT1OUkVVTS5vLkVWO2lmKCJQZXJmb3JtYW5jZU9ic2VydmVyImluIHdpbmRvdyYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5QZXJmb3JtYW5jZU9ic2VydmVyKXthPW5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKHIpLHM9bmV3IFBlcmZvcm1hbmNlT2JzZXJ2ZXIobyk7dHJ5e2Eub2JzZXJ2ZSh7ZW50cnlUeXBlczpbInBhaW50Il19KSxzLm9ic2VydmUoe2VudHJ5VHlwZXM6WyJsYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnQiXX0pfWNhdGNoKGQpe319aWYoImFkZEV2ZW50TGlzdGVuZXIiaW4gZG9jdW1lbnQpe3ZhciBwPSExLGw9WyJjbGljayIsImtleWRvd24iLCJtb3VzZWRvd24iLCJwb2ludGVyZG93biIsInRvdWNoc3RhcnQiXTtsLmZvckVhY2goZnVuY3Rpb24odCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0LGksITEpfSl9fX0se31dLDIzOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZT8xNSZlW24rK106MTYqTWF0aC5yYW5kb20oKXwwfXZhciBlPW51bGwsbj0wLHI9d2luZG93LmNyeXB0b3x8d2luZG93Lm1zQ3J5cHRvO3ImJnIuZ2V0UmFuZG9tVmFsdWVzJiYoZT1yLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgzMSkpKTtmb3IodmFyIG8saT0ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4IixhPSIiLHM9MDtzPGkubGVuZ3RoO3MrKylvPWlbc10sIngiPT09bz9hKz10KCkudG9TdHJpbmcoMTYpOiJ5Ij09PW8/KG89MyZ0KCl8OCxhKz1vLnRvU3RyaW5nKDE2KSk6YSs9bztyZXR1cm4gYX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCgpe3JldHVybiBlPzE1JmVbbisrXToxNipNYXRoLnJhbmRvbSgpfDB9dmFyIGU9bnVsbCxuPTAscj13aW5kb3cuY3J5cHRvfHx3aW5kb3cubXNDcnlwdG87ciYmci5nZXRSYW5kb21WYWx1ZXMmJlVpbnQ4QXJyYXkmJihlPXIuZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDMxKSkpO2Zvcih2YXIgbz1bXSxpPTA7aTwxNjtpKyspby5wdXNoKHQoKS50b1N0cmluZygxNikpO3JldHVybiBvLmpvaW4oIiIpfWUuZXhwb3J0cz17Z2VuZXJhdGVVdWlkOnIsZ2VuZXJhdGVDYXRJZDpvfX0se31dLDI0OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0LGUpe2lmKCFvKXJldHVybiExO2lmKHQhPT1vKXJldHVybiExO2lmKCFlKXJldHVybiEwO2lmKCFpKXJldHVybiExO2Zvcih2YXIgbj1pLnNwbGl0KCIuIikscj1lLnNwbGl0KCIuIiksYT0wO2E8ci5sZW5ndGg7YSsrKWlmKHJbYV0hPT1uW2FdKXJldHVybiExO3JldHVybiEwfXZhciBvPW51bGwsaT1udWxsLGE9L1ZlcnNpb25cLyhcUyspXHMrU2FmYXJpLztpZihuYXZpZ2F0b3IudXNlckFnZW50KXt2YXIgcz1uYXZpZ2F0b3IudXNlckFnZW50LGM9cy5tYXRjaChhKTtjJiZzLmluZGV4T2YoIkNocm9tZSIpPT09LTEmJnMuaW5kZXhPZigiQ2hyb21pdW0iKT09PS0xJiYobz0iU2FmYXJpIixpPWNbMV0pfWUuZXhwb3J0cz17YWdlbnQ6byx2ZXJzaW9uOmksbWF0Y2g6cn19LHt9XSwyNTpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlKXt2YXIgbj1bXSxyPSIiLGk9MDtmb3IociBpbiB0KW8uY2FsbCh0LHIpJiYobltpXT1lKHIsdFtyXSksaSs9MSk7cmV0dXJuIG59dmFyIG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9cn0se31dLDI2OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0LGUsbil7ZXx8KGU9MCksInVuZGVmaW5lZCI9PXR5cGVvZiBuJiYobj10P3QubGVuZ3RoOjApO2Zvcih2YXIgcj0tMSxvPW4tZXx8MCxpPUFycmF5KG88MD8wOm8pOysrcjxvOylpW3JdPXRbZStyXTtyZXR1cm4gaX1lLmV4cG9ydHM9cn0se31dLDI3OltmdW5jdGlvbih0LGUsbil7ZS5leHBvcnRzPXtleGlzdHM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcmJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnR9fSx7fV0sZWU6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIG8odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmdCBpbnN0YW5jZW9mIHI/dDp0P2ModCxzLGkpOmkoKX1mdW5jdGlvbiBuKG4scixvLGkpe2lmKCFwLmFib3J0ZWR8fGkpe3QmJnQobixyLG8pO2Zvcih2YXIgYT1lKG8pLHM9bShuKSxjPXMubGVuZ3RoLGY9MDtmPGM7ZisrKXNbZl0uYXBwbHkoYSxyKTt2YXIgZD11W3lbbl1dO3JldHVybiBkJiZkLnB1c2goW3gsbixyLGFdKSxhfX1mdW5jdGlvbiBsKHQsZSl7Z1t0XT1tKHQpLmNvbmNhdChlKX1mdW5jdGlvbiBoKHQsZSl7dmFyIG49Z1t0XTtpZihuKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKW5bcl09PT1lJiZuLnNwbGljZShyLDEpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIGdbdF18fFtdfWZ1bmN0aW9uIHYodCl7cmV0dXJuIGRbdF09ZFt0XXx8byhuKX1mdW5jdGlvbiB3KHQsZSl7Zih0LGZ1bmN0aW9uKHQsbil7ZT1lfHwiZmVhdHVyZSIseVtuXT1lLGUgaW4gdXx8KHVbZV09W10pfSl9dmFyIGc9e30seT17fSx4PXtvbjpsLGFkZEV2ZW50TGlzdGVuZXI6bCxyZW1vdmVFdmVudExpc3RlbmVyOmgsZW1pdDpuLGdldDp2LGxpc3RlbmVyczptLGNvbnRleHQ6ZSxidWZmZXI6dyxhYm9ydDphLGFib3J0ZWQ6ITF9O3JldHVybiB4fWZ1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IHJ9ZnVuY3Rpb24gYSgpeyh1LmFwaXx8dS5mZWF0dXJlKSYmKHAuYWJvcnRlZD0hMCx1PXAuYmFja2xvZz17fSl9dmFyIHM9Im5yQGNvbnRleHQiLGM9dCgiZ29zIiksZj10KDI1KSx1PXt9LGQ9e30scD1lLmV4cG9ydHM9bygpO3AuYmFja2xvZz11fSx7fV0sZ29zOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0LGUsbil7aWYoby5jYWxsKHQsZSkpcmV0dXJuIHRbZV07dmFyIHI9bigpO2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmtleXMpdHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITF9KSxyfWNhdGNoKGkpe31yZXR1cm4gdFtlXT1yLHJ9dmFyIG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9cn0se31dLGhhbmRsZTpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlLG4scil7by5idWZmZXIoW3RdLHIpLG8uZW1pdCh0LGUsbil9dmFyIG89dCgiZWUiKS5nZXQoImhhbmRsZSIpO2UuZXhwb3J0cz1yLHIuZWU9b30se31dLGlkOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4hdHx8Im9iamVjdCIhPT1lJiYiZnVuY3Rpb24iIT09ZT8tMTp0PT09d2luZG93PzA6YSh0LGksZnVuY3Rpb24oKXtyZXR1cm4gbysrfSl9dmFyIG89MSxpPSJuckBpZCIsYT10KCJnb3MiKTtlLmV4cG9ydHM9cn0se31dLGxvYWRlcjpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIoKXtpZighRSsrKXt2YXIgdD1iLmluZm89TlJFVU0uaW5mbyxlPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdO2lmKHNldFRpbWVvdXQodS5hYm9ydCwzZTQpLCEodCYmdC5saWNlbnNlS2V5JiZ0LmFwcGxpY2F0aW9uSUQmJmUpKXJldHVybiB1LmFib3J0KCk7Zih5LGZ1bmN0aW9uKGUsbil7dFtlXXx8KHRbZV09bil9KSxjKCJtYXJrIixbIm9ubG9hZCIsYSgpK2Iub2Zmc2V0XSxudWxsLCJhcGkiKTt2YXIgbj1sLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO24uc3JjPSJodHRwczovLyIrdC5hZ2VudCxlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG4sZSl9fWZ1bmN0aW9uIG8oKXsiY29tcGxldGUiPT09bC5yZWFkeVN0YXRlJiZpKCl9ZnVuY3Rpb24gaSgpe2MoIm1hcmsiLFsiZG9tQ29udGVudCIsYSgpK2Iub2Zmc2V0XSxudWxsLCJhcGkiKX1mdW5jdGlvbiBhKCl7cmV0dXJuIE8uZXhpc3RzJiZwZXJmb3JtYW5jZS5ub3c/TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSk6KHM9TWF0aC5tYXgoKG5ldyBEYXRlKS5nZXRUaW1lKCkscykpLWIub2Zmc2V0fXZhciBzPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGM9dCgiaGFuZGxlIiksZj10KDI1KSx1PXQoImVlIiksZD10KDI0KSxwPXdpbmRvdyxsPXAuZG9jdW1lbnQsaD0iYWRkRXZlbnRMaXN0ZW5lciIsbT0iYXR0YWNoRXZlbnQiLHY9cC5YTUxIdHRwUmVxdWVzdCx3PXYmJnYucHJvdG90eXBlO05SRVVNLm89e1NUOnNldFRpbWVvdXQsU0k6cC5zZXRJbW1lZGlhdGUsQ1Q6Y2xlYXJUaW1lb3V0LFhIUjp2LFJFUTpwLlJlcXVlc3QsRVY6cC5FdmVudCxQUjpwLlByb21pc2UsTU86cC5NdXRhdGlvbk9ic2VydmVyfTt2YXIgZz0iIitsb2NhdGlvbix5PXtiZWFjb246ImJhbS5uci1kYXRhLm5ldCIsZXJyb3JCZWFjb246ImJhbS5uci1kYXRhLm5ldCIsYWdlbnQ6ImpzLWFnZW50Lm5ld3JlbGljLmNvbS9uci1zcGEtMTE2OS5taW4uanMifSx4PXYmJncmJndbaF0mJiEvQ3JpT1MvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksYj1lLmV4cG9ydHM9e29mZnNldDpzLG5vdzphLG9yaWdpbjpnLGZlYXR1cmVzOnt9LHhocldyYXBwYWJsZTp4LHVzZXJBZ2VudDpkfTt0KDE5KSx0KDIyKSxsW2hdPyhsW2hdKCJET01Db250ZW50TG9hZGVkIixpLCExKSxwW2hdKCJsb2FkIixyLCExKSk6KGxbbV0oIm9ucmVhZHlzdGF0ZWNoYW5nZSIsbykscFttXSgib25sb2FkIixyKSksYygibWFyayIsWyJmaXJzdGJ5dGUiLHNdLG51bGwsImFwaSIpO3ZhciBFPTAsTz10KDI3KX0se31dLCJ3cmFwLWZ1bmN0aW9uIjpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCl7cmV0dXJuISh0JiZ0IGluc3RhbmNlb2YgRnVuY3Rpb24mJnQuYXBwbHkmJiF0W2FdKX12YXIgbz10KCJlZSIpLGk9dCgyNiksYT0ibnJAb3JpZ2luYWwiLHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxjPSExO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCxlLG4sbyl7ZnVuY3Rpb24gbnJXcmFwcGVyKCl7dmFyIHIsYSxzLGM7dHJ5e2E9dGhpcyxyPWkoYXJndW1lbnRzKSxzPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24ocixhKTpufHx7fX1jYXRjaChmKXtwKFtmLCIiLFtyLGEsb10sc10pfXUoZSsic3RhcnQiLFtyLGEsb10scyk7dHJ5e3JldHVybiBjPXQuYXBwbHkoYSxyKX1jYXRjaChkKXt0aHJvdyB1KGUrImVyciIsW3IsYSxkXSxzKSxkfWZpbmFsbHl7dShlKyJlbmQiLFtyLGEsY10scyl9fXJldHVybiByKHQpP3Q6KGV8fChlPSIiKSxucldyYXBwZXJbYV09dCxkKHQsbnJXcmFwcGVyKSxucldyYXBwZXIpfWZ1bmN0aW9uIGYodCxlLG8saSl7b3x8KG89IiIpO3ZhciBhLHMsYyxmPSItIj09PW8uY2hhckF0KDApO2ZvcihjPTA7YzxlLmxlbmd0aDtjKyspcz1lW2NdLGE9dFtzXSxyKGEpfHwodFtzXT1uKGEsZj9zK286byxpLHMpKX1mdW5jdGlvbiB1KG4scixvKXtpZighY3x8ZSl7dmFyIGk9YztjPSEwO3RyeXt0LmVtaXQobixyLG8sZSl9Y2F0Y2goYSl7cChbYSxuLHIsb10pfWM9aX19ZnVuY3Rpb24gZCh0LGUpe2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmtleXMpdHJ5e3ZhciBuPU9iamVjdC5rZXlzKHQpO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19LHNldDpmdW5jdGlvbihlKXtyZXR1cm4gdFtuXT1lLGV9fSl9KSxlfWNhdGNoKHIpe3AoW3JdKX1mb3IodmFyIG8gaW4gdClzLmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9ZnVuY3Rpb24gcChlKXt0cnl7dC5lbWl0KCJpbnRlcm5hbC1lcnJvciIsZSl9Y2F0Y2gobil7fX1yZXR1cm4gdHx8KHQ9byksbi5pblBsYWNlPWYsbi5mbGFnPWEsbn19LHt9XX0se30sWyJsb2FkZXIiLDIsMTYsNSwzLDRdKTsKICAgICAgICAgIDtOUkVVTS5sb2FkZXJfY29uZmlnPXthY2NvdW50SUQ6IjM5Mjg0Iix0cnVzdEtleToiMzkyODQiLGFnZW50SUQ6Ijc0NDc0NjgiLGxpY2Vuc2VLZXk6IjY4OWQ1YjQ1NjIiLGFwcGxpY2F0aW9uSUQ6IjIwMTEyMjQifQogICAgICAgICAgO05SRVVNLmluZm89e2JlYWNvbjoiYmFtLm5yLWRhdGEubmV0IixlcnJvckJlYWNvbjoiYmFtLm5yLWRhdGEubmV0IixsaWNlbnNlS2V5OiI2ODlkNWI0NTYyIixhcHBsaWNhdGlvbklEOiIyMDExMjI0IixzYToxfQogICAgICAgIDwvc2NyaXB0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2YudmltZW9jZG4uY29tL3N0eWxlcy9jc3Nfb3B0L2dsb2JhbC9pY29uX2ZvbnRzLm1pbi5jc3M/ZTEwMTNkZWI2ZTg0NDcwYzc1ZDA3NWY4NmRiM2NkNGQ5NGQyMTgxNiI+CgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2YudmltZW9jZG4uY29tL3N0eWxlcy9jc3Nfb3B0L2NsaXBfYmV0YV9jb21iaW5lZC5taW4uY3NzPzRiMTkyZWMwIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdHlsZXMvY3NzX29wdC90b3BuYXZfY2FydF9idXR0b25fY29tYmluZWQubWluLmNzcz9hMjBhNzU2NiI+CgoKCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAKICAgICAgICB2YXIgcGxheWVyQXNzZXRVcmxzID0geyJiYXJlYm9uZV9qcyI6Imh0dHBzOlwvXC9mLnZpbWVvY2RuLmNvbVwvcFwvMy4yMy4wXC9qc1wvYmFyZWJvbmUuanMiLCJqcyI6Imh0dHBzOlwvXC9mLnZpbWVvY2RuLmNvbVwvcFwvMy4yMy4wXC9qc1wvcGxheWVyLmpzIiwiY2hyb21lbGVzc19jc3MiOiJodHRwczpcL1wvZi52aW1lb2Nkbi5jb21cL3BcLzMuMjMuMFwvY3NzXC9jaHJvbWVsZXNzLmNzcyIsImNocm9tZWxlc3NfanMiOiJodHRwczpcL1wvZi52aW1lb2Nkbi5jb21cL3BcLzMuMjMuMFwvanNcL2Nocm9tZWxlc3MuanMiLCJjc3MiOiJodHRwczpcL1wvZi52aW1lb2Nkbi5jb21cL3BcLzMuMjMuMFwvY3NzXC9wbGF5ZXIuY3NzIiwicGxheWVyX3VybCI6InBsYXllci52aW1lby5jb20ifTsKCiAgICAgICAgdmFyIF9leHRlbmQgPSBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHNbMF0sbj0xLGU9YXJndW1lbnRzLmxlbmd0aDtlPm47bisrKXt2YXIgdD1hcmd1bWVudHNbbl07Zm9yKHZhciBhIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShhKSYmKHJbYV09dFthXSl9cmV0dXJuIHJ9OwoKICAgICAgICAgICAgd2luZG93ID0gX2V4dGVuZCh3aW5kb3csIHsidmltZW9fZXNpIjp7ImNvbmZpZyI6eyJyb3V0ZSI6IlZpbWVvXFxDb250cm9sbGVyXFxDbGlwQ29udHJvbGxlcjptYWluIiwiY29udHJvbGxlciI6IlZpbWVvXFxDb250cm9sbGVyXFxDbGlwQ29udHJvbGxlciIsImF1dG9jb21wbGV0ZV9lbmFibGVkIjp0cnVlLCJvbnNpdGVfcmVmZXJyZXIiOmZhbHNlfX0sImFibGluY29sbl9jb25maWciOltdLCJ2aW1lbyI6eyJjb25maWciOnsiY2FydCI6eyJjYXJ0X2NvbnRlbnQiOnsic3RvY2siOnsic3RvcmUiOiJzdG9jayIsInZlcnNpb24iOjEsInF1YW50aXRpZXMiOltdLCJpdGVtcyI6W10sImF0dHJpYnV0ZXMiOltdLCJjdXJyZW5jeSI6IkJSTCIsIml0ZW1zX3NvcnRlZF9ieV9pbmRleCI6W10sIml0ZW1zX2NvdW50IjowfX19fX19KTsKPC9zY3JpcHQ+CgogICAgICAgICAgICAgICAgCiAgICA8c2NyaXB0PgogICAgICAgIHZhciBhYmxpbmNvbG5fY29uZmlnID0gYWJsaW5jb2xuX2NvbmZpZyB8fCB7fTsKICAgICAgICBhYmxpbmNvbG5fY29uZmlnLnRlc3RzID0geyJKUy5PbW5pc2VhcmNoIjp7ImlkIjo1MjcsIm5hbWUiOiJKUy5PbW5pc2VhcmNoIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJjdWlkIiwidXJsIjoiXC8iLCJleHBlcmltZW50cyI6W3siaWQiOjE0NTIsIm5hbWUiOiJwaGFzZTEiLCJidWNrZXRzIjoxMDAsInN0YXRlIjoxLCJwdWJsaXNoZWRfb24iOiIyMDIwLTEwLTIyIDEzOjQ2OjUxIiwicGF1c2VkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInN0b3BwZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwicGFyYW1ldGVycyI6W3siaWQiOjI1NDUsIm5hbWUiOiJvbW5pc2VhcmNoX2VuYWJsZWQiLCJjaG9pY2UiOiJ0cnVlIiwid2VpZ2h0IjoxfSx7ImlkIjoyNTQ2LCJuYW1lIjoib21uaXNlYXJjaF9lbmFibGVkIiwiY2hvaWNlIjoiZmFsc2UiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfSx7ImlkIjoxNDU0LCJuYW1lIjoicGhhc2UyIiwiYnVja2V0cyI6MjAwLCJzdGF0ZSI6MSwicHVibGlzaGVkX29uIjoiMjAyMC0xMC0yMyAwODoxNjo1NSIsInBhdXNlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJzdG9wcGVkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInBhcmFtZXRlcnMiOlt7ImlkIjoyNTUxLCJuYW1lIjoib21uaXNlYXJjaF9lbmFibGVkIiwiY2hvaWNlIjoidHJ1ZSIsIndlaWdodCI6MX0seyJpZCI6MjU1MiwibmFtZSI6Im9tbmlzZWFyY2hfZW5hYmxlZCIsImNob2ljZSI6ImZhbHNlIiwid2VpZ2h0IjoxfV0sInNlZ21lbnRzIjpbXX0seyJpZCI6MTQ1OCwibmFtZSI6InBoYXNlMyIsImJ1Y2tldHMiOjMwMCwic3RhdGUiOjEsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjYgMDg6NTQ6NDgiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU1NywibmFtZSI6Im9tbmlzZWFyY2hfZW5hYmxlZCIsImNob2ljZSI6InRydWUiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NTgsIm5hbWUiOiJvbW5pc2VhcmNoX2VuYWJsZWQiLCJjaG9pY2UiOiJmYWxzZSIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NjEsIm5hbWUiOiJwaGFzZTQiLCJidWNrZXRzIjo0MDAsInN0YXRlIjoxLCJwdWJsaXNoZWRfb24iOiIyMDIwLTEwLTI3IDA4OjQ2OjU2IiwicGF1c2VkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInN0b3BwZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwicGFyYW1ldGVycyI6W3siaWQiOjI1NjUsIm5hbWUiOiJvbW5pc2VhcmNoX2VuYWJsZWQiLCJjaG9pY2UiOiJ0cnVlIiwid2VpZ2h0IjoxfSx7ImlkIjoyNTY2LCJuYW1lIjoib21uaXNlYXJjaF9lbmFibGVkIiwiY2hvaWNlIjoiZmFsc2UiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19LCJKUy5Ub3BOYXYuQ3JlYXRlIjp7ImlkIjo0NTIsIm5hbWUiOiJKUy5Ub3BOYXYuQ3JlYXRlIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjoiOmFsbCIsImV4cGVyaW1lbnRzIjpbeyJpZCI6MTIzNSwibmFtZSI6IiogTG9nZ2VkIG91dCBKb2luIE1vZGFsIiwiYnVja2V0cyI6MTAwLCJzdGF0ZSI6MywicHVibGlzaGVkX29uIjoiMjAyMC0wNi0xNSAxNjoxNzoxNSIsInBhdXNlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJzdG9wcGVkX29uIjoiMjAyMC0xMC0xNSAwNjo1MzoyNSIsInBhcmFtZXRlcnMiOlt7ImlkIjoyMTUwLCJuYW1lIjoidG9wX25hdl9jcmVhdGUiLCJjaG9pY2UiOiJjb250cm9sIiwid2VpZ2h0IjoxfSx7ImlkIjoyMTUxLCJuYW1lIjoidG9wX25hdl9jcmVhdGUiLCJjaG9pY2UiOiJqb2luX3dpdGhvdXRfZGVzaWduIiwid2VpZ2h0IjoxfSx7ImlkIjoyMTUyLCJuYW1lIjoidG9wX25hdl9jcmVhdGUiLCJjaG9pY2UiOiJqb2luX3dpdGhfZGVzaWduIiwid2VpZ2h0IjoxfV0sInNlZ21lbnRzIjpbXX0seyJpZCI6MTMxMSwibmFtZSI6IiogKiBMb2dnZWQgb3V0IEpvaW4gTW9kYWwiLCJidWNrZXRzIjo5MDAsInN0YXRlIjozLCJwdWJsaXNoZWRfb24iOiIyMDIwLTA2LTIzIDE1OjAxOjUyIiwicGF1c2VkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInN0b3BwZWRfb24iOiIyMDIwLTEwLTE1IDA2OjUzOjM1IiwicGFyYW1ldGVycyI6W3siaWQiOjIyNzUsIm5hbWUiOiJ0b3BfbmF2X2NyZWF0ZSIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjIyNzYsIm5hbWUiOiJ0b3BfbmF2X2NyZWF0ZSIsImNob2ljZSI6ImpvaW5fd2l0aG91dF9kZXNpZ24iLCJ3ZWlnaHQiOjF9LHsiaWQiOjIyNzcsIm5hbWUiOiJ0b3BfbmF2X2NyZWF0ZSIsImNob2ljZSI6ImpvaW5fd2l0aF9kZXNpZ24iLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19LCJKUy5VcHNlbGwuUmV2aWV3Ijp7ImlkIjo0NDQsIm5hbWUiOiJKUy5VcHNlbGwuUmV2aWV3IiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjoiXC8iLCJleHBlcmltZW50cyI6W119LCJUb3BOYXYuTmV3VmlkZW8uU2NyZWVuUmVjb3JkRm9yQWxsIjp7ImlkIjo1NDEsIm5hbWUiOiJUb3BOYXYuTmV3VmlkZW8uU2NyZWVuUmVjb3JkRm9yQWxsIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjoiXC8iLCJleHBlcmltZW50cyI6W3siaWQiOjE0MTgsIm5hbWUiOiJTaG93IHJlY29yZGVyIGxpbmsgZm9yIGFsbCIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMDUgMTQ6MzA6NDAiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjEgMDM6Mjg6NDMiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjQ3NywibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI0NzgsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NTAsIm5hbWUiOiIqIFNob3cgcmVjb3JkZXIgbGluayBmb3IgYWxsIiwiYnVja2V0cyI6MCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjIgMTc6MTc6MTEiLCJwYXVzZWRfb24iOiIyMDIwLTEwLTIyIDE3OjE3OjI3Iiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjIgMTc6MTc6NDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU0MCwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NDEsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX0seyJpZCI6MjU0MiwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6InZhcmlhbnRfc2NyZWVuX2FuaW1hdGlvbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NTMsIm5hbWUiOiIqICogU2hvdyByZWNvcmRlciBsaW5rIGZvciBhbGwiLCJidWNrZXRzIjo1MCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjIgMTc6MzY6NDEiLCJwYXVzZWRfb24iOiIyMDIwLTEwLTI2IDE1OjA3OjI4Iiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjYgMTU6MDc6NTYiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU0NywibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NDgsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX0seyJpZCI6MjU0OSwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6InZhcmlhbnRfc2NyZWVuX2FuaW1hdGlvbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NjAsIm5hbWUiOiIqICogKiBTaG93IHJlY29yZGVyIGxpbmsgZm9yIGFsbCIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjYgMTU6MDg6NTQiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjcgMTA6MDI6NTQiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU2MiwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NjMsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX0seyJpZCI6MjU2NCwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6InZhcmlhbnRfc2NyZWVuX2FuaW1hdGlvbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NjIsIm5hbWUiOiIqICogKiAqIFNob3cgcmVjb3JkZXIgbGluayBmb3IgYWxsIiwiYnVja2V0cyI6MTAwMCwic3RhdGUiOjEsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjcgMTA6MDQ6MTAiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU2NywibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjV9LHsiaWQiOjI1NjgsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6OTB9LHsiaWQiOjI1NjksIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbl9hbmltYXRpb24iLCJ3ZWlnaHQiOjV9XSwic2VnbWVudHMiOltdfV19LCJKUy5DcmVhdGVBcHBCYW5uZXIiOnsiaWQiOjQ2MSwibmFtZSI6IkpTLkNyZWF0ZUFwcEJhbm5lciIsImJ1Y2tldHMiOjEwMDAsImlucHV0IjoidnVpZCIsInVybCI6IlwvOmNsaXBJZCIsImV4cGVyaW1lbnRzIjpbeyJpZCI6MTE1NywibmFtZSI6IlNob3cgY3JlYXRlIGJhbm5lciIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMDQtMDEgMDg6NDg6MzIiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjIwMjAtMDctMTYgMTY6MTE6MjciLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjAyNCwibmFtZSI6InNob3dfY3JlYXRlX2Jhbm5lciIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjIwMjUsIm5hbWUiOiJzaG93X2NyZWF0ZV9iYW5uZXIiLCJjaG9pY2UiOiJ2YXJpYW50Iiwid2VpZ2h0IjoxfV0sInNlZ21lbnRzIjpbXX0seyJpZCI6MTE3OCwibmFtZSI6Iis0MCUgU2hvdyBjcmVhdGUgYmFubmVyIiwiYnVja2V0cyI6NDAwLCJzdGF0ZSI6MywicHVibGlzaGVkX29uIjoiMjAyMC0wNC0wMyAxNjoxNTo0NyIsInBhdXNlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJzdG9wcGVkX29uIjoiMjAyMC0wNy0xNiAxNjoxMTozMyIsInBhcmFtZXRlcnMiOlt7ImlkIjoyMDU4LCJuYW1lIjoic2hvd19jcmVhdGVfYmFubmVyIiwiY2hvaWNlIjoiY29udHJvbCIsIndlaWdodCI6MX0seyJpZCI6MjA1OSwibmFtZSI6InNob3dfY3JlYXRlX2Jhbm5lciIsImNob2ljZSI6InZhcmlhbnQiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19LCJKUy5DbGlwLkJhbm5lckZyZXF1ZW5jeSI6eyJpZCI6NTQzLCJuYW1lIjoiSlMuQ2xpcC5CYW5uZXJGcmVxdWVuY3kiLCJidWNrZXRzIjoxMDAwLCJpbnB1dCI6InZ1aWQiLCJ1cmwiOiJcLyoiLCJleHBlcmltZW50cyI6W3siaWQiOjE0MjIsIm5hbWUiOiJDbGlwIEJhbm5lciBGcmVxdWVuY3kgVGVzdCIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjEsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMDcgMTM6MDA6MzgiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjQ4NCwibmFtZSI6ImJhbm5lcl9mcmVxdWVuY3kiLCJjaG9pY2UiOiJjb250cm9sIiwid2VpZ2h0IjoxfSx7ImlkIjoyNDg1LCJuYW1lIjoiYmFubmVyX2ZyZXF1ZW5jeSIsImNob2ljZSI6InZhcmlhbnQiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19fTsKICAgIDwvc2NyaXB0Pgo8c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgICB3aW5kb3cuX2d0bSA9IFt7ImNsaXBfaWQiOjE0MTM0OTE5NCwicGFnZV9wYXRoIjoiXC8xNDEzNDkxOTQiLCJjcmVhdG9yX2lkIjoyNjEyMTYwNCwiY3JlYXRvcl91c2VyX3R5cGUiOiJwcm8iLCJ2aWRlb19jYXRlZ29yaWVzIjoiQ29va2luZyxGb29kIiwicHJpdmFjeSI6ImFueWJvZHkiLCJzdGFmZl9waWNrIjoibm8iLCJ1c2VyX2lkIjpudWxsLCJwYWdlX3R5cGUiOiJWaWRlbyIsImxhbmd1YWdlIjoiZW4iLCJ1c2VyX3N0YXR1cyI6ImxvZ2dlZF9vdXQiLCJ1c2VyX3R5cGUiOiJub25lIiwiZ2FfdW5pdmVyc2FsX2lkIjoiVUEtNzY2NDEtOCIsImNvbXNjb3JlX3NpdGVfaWQiOjEwMzQ4Mjg5fV07CgogICAgICAgIHZhciBnZHByQ29va2llID0gKGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvXig/Oi4qOyk/XHMqdmltZW9fZ2Rwcl9vcHRpblxzKj1ccyooW147XSspKD86LiopPyQvKXx8WyxudWxsXSlbMV07CiAgICBpZiAoZ2RwckNvb2tpZSA9PT0gJy0xJykgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAgICAgd2luZG93Ll9ndG0ucHVzaCh7CiAgICAgICAgJ3Z1aWQnOiBkb2N1bWVudC5jb29raWUucmVwbGFjZSgvKD86KD86XnwuKjtccyopdnVpZFxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpLAogICAgICAgICdndG0uc3RhcnQnOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKICAgICAgICAnZXZlbnQnOiAnZ3RtLmpzJwogICAgfSk7CiAgICB2YXIgZ3RtcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLAogICAgICAgIG5vZGU7CiAgICBndG1zLmFzeW5jID0gdHJ1ZTsKICAgIGd0bXMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgZ3Rtcy5zcmMgPSAnLy93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RtLmpzP2lkPUdUTS1SQktLJmw9X2d0bSc7CiAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOwogICAgbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShndG1zLCBub2RlKTsKfSkoKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+CiAgICB2YXIgZ29vZ2xldGFnID0gZ29vZ2xldGFnIHx8IHt9LAogICAgICAgIGdwdGFkc2xvdHMgPSBbXSwKICAgICAgICBsYW5ndWFnZSwKICAgICAgICBoYXNfdXBsb2FkZWQsCiAgICAgICAgY29ob3J0OwogICAgZ29vZ2xldGFnLmNtZCA9IGdvb2dsZXRhZy5jbWQgfHwgW107CgogICAgKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBnZHByQ29va2llID0gKGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvXig/Oi4qOyk/XHMqdmltZW9fZ2Rwcl9vcHRpblxzKj1ccyooW147XSspKD86LiopPyQvKXx8WyxudWxsXSlbMV07CiAgICAgICAgaWYgKGdkcHJDb29raWUgPT09ICctMScpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgZ2FkcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLAogICAgICAgICAgICB1c2VTU0wgPSAnaHR0cHM6JyA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCwKICAgICAgICAgICAgbm9kZTsKICAgICAgICBnYWRzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBnYWRzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBnYWRzLnNyYyA9ICh1c2VTU0wgPyAnaHR0cHM6JyA6ICdodHRwOicpICsgJy8vd3d3Lmdvb2dsZXRhZ3NlcnZpY2VzLmNvbS90YWcvanMvZ3B0LmpzJzsKICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOwogICAgICAgIG5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZ2Fkcywgbm9kZSk7CiAgICB9KSgpOwoKICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IGRvY3VtZW50LmNvb2tpZS5yZXBsYWNlKC8oPzooPzpefC4qO1xzKilsYW5ndWFnZVxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpOwogICAgICAgICAgICBoYXNfdXBsb2FkZWQgPSAoZG9jdW1lbnQuY29va2llLnJlcGxhY2UoLyg/Oig/Ol58Lio7XHMqKWhhc191cGxvYWRlZFxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpKSA/ICdZJyA6ICdOJzsKICAgICAgICAgICAgY29uc2VudCA9IChkb2N1bWVudC5jb29raWUucmVwbGFjZSgvKD86KD86XnwuKjtccyopdmltZW9fZ2Rwcl9vcHRpblxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpKSA9PT0gJy0xJyA/IDEgOiAwOwogICAgICAgICAgICBjb2hvcnQgPSAnQSc7CiAgICAgICAgCiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnbGFuZ3VhZ2UnLCBbbGFuZ3VhZ2VdKTsKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdpc191cGxvYWRlcicsIFtoYXNfdXBsb2FkZWRdKTsKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdjb2hvcnQnLCBbY29ob3J0XSk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnY29ob3J0X2EnLCBbKGNvaG9ydCA9PT0gJ0EnKSA/ICdZJyA6ICdOJ10pOwogICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5zZXRUYXJnZXRpbmcoJ2NvaG9ydF9iJywgWyhjb2hvcnQgPT09ICdCJykgPyAnWScgOiAnTiddKTsKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdwcm9kdWN0JywgWycnXSk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnc3RvcmFnZScsIFsnTiddKTsKCiAgICAgICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdzZWMnLCBbJ2ZhbHNlJ10pOwoKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdsb2dnZWRfaW4nLCBbJ2ZhbHNlJ10pOwoKICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5zZXRUYXJnZXRpbmcoJ3JwdicsIChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwKSsxKS50b1N0cmluZygpKTsKCiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFJlcXVlc3ROb25QZXJzb25hbGl6ZWRBZHMoY29uc2VudCk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmVuYWJsZUFzeW5jUmVuZGVyaW5nKCk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmRpc2FibGVJbml0aWFsTG9hZCgpOwogICAgICAgIGdvb2dsZXRhZy5lbmFibGVTZXJ2aWNlcygpOwogICAgfSk7Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9sb2dnaW5nX2NvbWJpbmVkLm1pbi5qcz85NzQyMTNkMSI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9qc19vcHQvYWJsaW5jb2xuX2NvbWJpbmVkLm1pbi5qcz82YzRhY2I1NyI+PC9zY3JpcHQ+CgoKCiAgICA8L2hlYWQ+CiAgICA8Ym9keSBjbGFzcz0ib25zaXRlICI+CiAgICAgICAgPGRpdiBpZD0id3JhcCIgY2xhc3M9Im91dGVyX3dyYXAiPgogICAgICAgICAgICA8ZGl2IGlkPSJ0b3BuYXZfb3V0ZXJfd3JhcCI+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJjcmVhdGUtZmFjZWJvb2staGVhZGVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmltZW9CcmFuZF9Db2xvclJpYmJvbiAiPjwvZGl2PgoKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCgo8c3R5bGU+CiAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmVjb3JkX2FuaW1hdGlvbiB7CiAgICAgICAgMCUsIDIwJSwgNTAlLCA4MCUsIDEwMCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsKICAgICAgICB9CiAgICAgICAgNjAlIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7CiAgICAgICAgfQogICAgfQoKICAgIEBrZXlmcmFtZXMgcmVjb3JkX2FuaW1hdGlvbiB7CiAgICAgICAgMCUsIDIwJSwgNTAlLCA4MCUsIDEwMCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsKICAgICAgICB9CiAgICAgICAgNjAlIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7CiAgICAgICAgfQogICAgfQoKICAgIC5sb2dnZWRfb3V0X3JlY29yZF9hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbjogcmVjb3JkX2FuaW1hdGlvbiAxLjVzIC4yNXMgNTsKICAgIH0KCiAgICAubG9nZ2VkX2luX3JlY29yZF9hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbjogcmVjb3JkX2FuaW1hdGlvbiAxLjVzIC4yNXMgaW5maW5pdGU7CiAgICB9CgogICAgLnJlY29yZGVyX25ld19sYWJlbCB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE0MEM2OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgfQo8L3N0eWxlPgoKPHNjcmlwdD4KICAgIHdpbmRvdy52aW1lbyA9IHdpbmRvdy52aW1lbyB8fCB7fTsKPC9zY3JpcHQ+Cgo8ZGl2IGlkPSJ0b3BuYXZfZGVza3RvcCIgY2xhc3M9InRvcG5hdl9kZXNrdG9wICIgcm9sZT0iYmFubmVyIj4KICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3dyYXBwZXIiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9sb2dvIiBocmVmPSIvL3ZpbWVvLmNvbSIgYWx0PSJHbyB0byBWaW1lbyBob21lIHBhZ2UiIHRpdGxlPSJHbyB0byBWaW1lbyBob21lIHBhZ2UiIGFyaWEtbGFiZWw9IkdvIHRvIFZpbWVvIGhvbWUgcGFnZSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6dmltZW9faG9tZSIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfaG9tZV9jbGljayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgYWx0PSJWaW1lbyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI0MCI+PHBhdGggZD0iTTIyLjQ0OCAxNC41NzVjLS4xMDQgMi4xNy0xLjYxOCA1LjE0Ni00LjU0NCA4LjkxMi0zLjAzIDMuOTQyLTUuNTkgNS45MTItNy42ODYgNS45MTItMS4yOTcgMC0yLjM5Ny0xLjIwNC0zLjMtMy42LS42LTIuMi0xLjIwMi00LjM5OC0xLjc5NC02LjU5OC0uNjY0LTIuMzk2LTEuMzgtMy42LTIuMTQ3LTMuNi0uMTY2IDAtLjc0Ny4zNTQtMS43NTMgMS4wNWwtMS4wNDgtMS4zNWMxLjEtLjk2NSAyLjE5LTEuOTMgMy4yNTctMi45MDUgMS40NjMtMS4yNjUgMi41NzMtMS45NCAzLjMtMi4wMDIgMS43MzItLjE2NiAyLjggMS4wMTcgMy4yMDUgMy41NTguNDM1IDIuNzQuNzM2IDQuNDQuOTAyIDUuMTE1LjQ5OCAyLjI3IDEuMDQ4IDMuNDAyIDEuNjUgMy40MDIuNDY2IDAgMS4xNzItLjczNyAyLjEwNS0yLjIxLjkzNC0xLjQ3MyAxLjQzMi0yLjU5MyAxLjUwNC0zLjM3LjEzMy0xLjI3Ny0uMzY1LTEuOTEtMS41MDYtMS45MS0uNTMgMC0xLjA4LjEyNS0xLjY1LjM2NCAxLjEtMy41OSAzLjE4Ni01LjMzMyA2LjI3Ny01LjIzIDIuMjczLjA3MyAzLjM1IDEuNTU2IDMuMjI3IDQuNDZtMTMuNzU1IDcuMDM0Yy0uOTMzIDEuNzY0LTIuMjIgMy4zNy0zLjg2IDQuODAzLTIuMjQgMS45My00LjQ3IDIuOTA1LTYuNyAyLjkwNS0xLjAzNy4wMDItMS44MjYtLjMzLTIuMzc2LS45OTQtLjU1LS42NjMtLjgxLTEuNTM1LS43NzctMi42MDMuMDMtMS4xLjM3Mi0yLjggMS4wMjUtNS4xMDQuNjU0LTIuMzAzLjk3Ni0zLjUzNy45NzYtMy43MDMgMC0uODYtLjMtMS4yOTctLjkwMi0xLjI5Ny0uMTk4IDAtLjc3LjM1My0xLjcwMiAxLjA0OGwtMS4xNTItMS4zNWMxLjA3LS45NjIgMi4xMzctMS45MjcgMy4yMDYtMi45MDIgMS40My0xLjI2NiAyLjUtMS45NCAzLjIwNS0yLjAwMiAxLjEtLjEwMyAxLjkxLjIzIDIuNDI4Ljk3Ni41MTguNzQ3LjcwNSAxLjcyMi41OCAyLjkxNS0uNDM1IDIuMDM0LS45MDIgNC42MDctMS40IDcuNzMtLjAzIDEuNDMuNDg4IDIuMTQ2IDEuNTU2IDIuMTQ2LjQ2NyAwIDEuMjk3LS40OTggMi41LTEuNDgzLjk5Ni0uODIgMS44MTUtMS41OTggMi40NS0yLjMyNGwuOTQyIDEuMjQ0bS00LjM1Ny0xNy44Yy0uMDMuODMtLjQ0NiAxLjYyOC0xLjI1NSAyLjM5NS0uOS44Ni0xLjk3IDEuMjk2LTMuMjA0IDEuMjk2LTEuOSAwLTIuODIyLS44My0yLjc1LTIuNDkuMDMyLS44Ni41NC0xLjY5IDEuNTI2LTIuNDkuOTg1LS43OTcgMi4wNzQtMS4xOSAzLjI3OC0xLjE5LjcwNSAwIDEuMjg2LjI3IDEuNzUzLjgyLjQ2Ny41NC42ODQgMS4xLjY1MyAxLjY2bTM1LjYxMiAxNy44Yy0uOTMzIDEuNzYzLTIuMjIgMy4zNy0zLjg2IDQuODAyLTIuMjQgMS45My00LjQ3IDIuOTA0LTYuNyAyLjkwNC0yLjE2OC4wMDItMy4yMTYtMS4yMDItMy4xNTMtMy41OTguMDMtMS4wNy4yMzgtMi4zNTUuNjIyLTMuODUuMzg0LTEuNTAzLjU5LTIuNjY1LjYyMy0zLjUwNS4wMy0xLjI2NS0uMzUzLTEuODk4LTEuMTUyLTEuODk4LS44NyAwLTEuOTEgMS4wMzYtMy4xMTIgMy4xLTEuMjc2IDIuMTY4LTEuOTYgNC4yNzQtMi4wNjQgNi4zMDgtLjA3MyAxLjQzLjA3MiAyLjU0LjQyNSAzLjI5OC0yLjMyNC4wNjQtMy45NjMtLjMyLTQuODg2LTEuMTUtLjgzLS43MzctMS4yMTItMS45NS0xLjE1LTMuNjUyLjAzLTEuMDY4LjE5OC0yLjEzNy40ODgtMy4yMDUuMjktMS4wNy40NTctMi4wMjMuNDg4LTIuODUzLjA2Mi0xLjIzNC0uMzg0LTEuODU3LTEuMzUtMS44NTctLjg0IDAtMS43NC45NTUtMi43MDYgMi44NTMtLjk2NiAxLjktMS41MDUgMy44OS0xLjYxIDUuOTU2LS4wNiAxLjg2Ny4wNTMgMy4xNzQuMzY0IDMuOS0yLjI5My4wNjItMy45Mi0uNDE1LTQuODc2LTEuNDUyLS43OTgtLjg2LTEuMTYtMi4xOC0xLjEtMy45NDIuMDMyLS44Ni4xODgtMi4wNzUuNDU3LTMuNjIuMjgtMS41NDYuNDI1LTIuNzUuNDU3LTMuNjIuMDYyLS42MDMtLjA4My0uOTAzLS40NDYtLjkwMy0uMTk3IDAtLjc2OC4zNC0xLjcwMiAxLjAxNWwtMS4yMDMtMS4zNDhjLjE2OC0uMTM1IDEuMjE2LTEuMSAzLjE1Ni0yLjkwNSAxLjQtMS4yOTcgMi4zNTQtMS45NyAyLjg1Mi0yLjAwMi44NzItLjA3MyAxLjU2Ny4yOSAyLjEwNiAxLjA4LjUzLjc4Ny44IDEuNjkuOCAyLjcyNyAwIC4zMzItLjAzMi42NTQtLjEwNS45NTQuNDk3LS43NjYgMS4wOC0xLjQzIDEuNzUyLTIgMS41MzctMS4zNCAzLjI2LTIuMDg2IDUuMTU3LTIuMjUyIDEuNjQtLjEzNSAyLjguMjUgMy41MDUgMS4xNTIuNTcuNzM2LjgzIDEuNzg0LjggMy4xNTMuMjM3LS4xOTguNDg2LS40MTYuNzQ2LS42NTQuNzY3LS45MDMgMS41MTQtMS42MiAyLjI1LTIuMTQ4IDEuMjM1LS45MDIgMi41Mi0xLjQgMy44Ni0xLjUwNCAxLjU5Ny0uMTM1IDIuNzUuMjUgMy40NTQgMS4xNTIuNjAyLjcyNi44NyAxLjc3NC44IDMuMTQzLS4wMzIuOTMzLS4yNiAyLjI4LS42NzUgNC4wNjUtLjQxNiAxLjc3My0uNjI0IDIuOC0uNjI0IDMuMDctLjAzLjY5NS4wMyAxLjE4Mi4xOTcgMS40NDIuMTY2LjI3LjU3LjM5NCAxLjIwMy4zOTQuNDY3IDAgMS4yOTctLjQ5NyAyLjUtMS40ODIuOTk2LS44MiAxLjgxNi0xLjU5OCAyLjQ1LTIuMzI0bC45NjMgMS4yNTRtMTguNzY1LS4wNTJjLS45NjUgMS41OTgtMi44NzQgMy4xOTUtNS43MDYgNC43OTMtMy41MzggMi4wMzItNy4xMjcgMy4wNS0xMC43NTggMy4wNS0yLjcwNiAwLTQuNjM2LS45MDQtNS44MDgtMi43LS44My0xLjIzMy0xLjIzNC0yLjY5Ni0xLjIwMy00LjQwNy4wMy0yLjY5OCAxLjIzNC01LjI3IDMuNi03LjcxIDIuNjAzLTIuNjY1IDUuNjc0LTQuMDAzIDkuMjEtNC4wMDMgMy4yNyAwIDUgMS4zMjggNS4yMDggMy45OTQuMTM1IDEuNzAyLS43OTggMy40NDUtMi44IDUuMjQtMi4xMzcgMS45Ni00LjgyNCAzLjIxNS04LjA2IDMuNzQ0LjYuODMgMS41MDQgMS4yNDUgMi43MDcgMS4yNDUgMi4zOTYgMCA1LjAyLS42MTMgNy44NjMtMS44MzcgMi4wMzMtLjg2IDMuNjMtMS43NTMgNC44MDMtMi42NzZsLjk0NSAxLjI2NW0tMTEuMzYtNS4yMjhjLjAzMi0uODkyLS4zMy0xLjM1LTEuMS0xLjM1LS45OTQgMC0yLjAxLjY4Ni0zLjA0OCAyLjA2Ni0xLjAzOCAxLjM4LTEuNTY3IDIuNjk3LTEuNTk4IDMuOTYyLS4wMiAwLS4wMi4yMTggMCAuNjQzIDEuNjMtLjYgMy4wNS0xLjUxNCA0LjI0Mi0yLjczOC45NjYtMS4wNTggMS40NjMtMS45MiAxLjUwNS0yLjU4M20yNC45NDYgMS44NjhjLS4xMzUgMy4wNzItMS4yNjUgNS43MTctMy40MDIgNy45NDctMi4xMzUgMi4yMy00Ljc5IDMuMzUtNy45NTUgMy4zNS0yLjYzNSAwLTQuNjM3LS44NS02LjAwNi0yLjU1LS45OTctMS4yNjctMS41NTctMi44NTQtMS42NS00Ljc1Mi0uMTY2LTIuODYzLjg2LTUuNDk4IDMuMS03Ljg5NCAyLjQwOC0yLjY2NSA1LjQyNy0zLjk5MyA5LjA1Ny0zLjk5MyAyLjMzNCAwIDQuMDk4Ljc4OCA1LjMgMi4zNDQgMS4xMzIgMS40NDMgMS42NSAzLjI5IDEuNTU3IDUuNTVtLTUuNjY0LS4xODVjLjAzLS45MDMtLjA5NC0xLjczMy0uMzc0LTIuNDgtLjI4LS43NDctLjY5NS0xLjEzLTEuMjI0LTEuMTMtMS43MDIgMC0zLjEwMi45MjMtNC4yMDIgMi43Ni0uOTMzIDEuNTAzLTEuNDMgMy4xMS0xLjUwNCA0LjgxMi0uMDMuODQuMTE0IDEuNTc3LjQ0NiAyLjIxLjM2NC43MzYuODgyIDEuMSAxLjU1NiAxLjEgMS41MDUgMCAyLjc5LS44ODMgMy44Ni0yLjY1Ni44OTItMS40NzIgMS4zOC0zLjAwOCAxLjQ0LTQuNjE1aC4wMDJ6IiBmaWxsPSIjMTEyMjMzIi8+PC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfc3RvY2tfbG9nbyIgaHJlZj0iL3N0b2NrIj4KICAgICAgICAgICAgICAgIDxzdmcgYWx0PSJWaW1lbyIgd2lkdGg9IjE3MCIgaGVpZ2h0PSI0MCIgZGF0YS1uYW1lPSJMYXllciAxIiB2aWV3Qm94PSIwIDAgNzgwIDEyMCI+PHBhdGggZD0iTTQ3MS45IDcwLjMxYy0xMi4xNC0yLjc0LTI0LjI4LTMuOS0yNC4yOC0xMiAwLTYuNSA4LjgyLTcuNjYgMTMuNTktNy42NiA3LjIyIDAgMTMuNzMgMi4xNyAxNS4xNyAxMGgxNy4yYy0yLTE2LjYyLTE1LjktMjMtMzEuMjItMjMtMTMuNTggMC0zMS4yMSA1LjA1LTMxLjIxIDIxLjM4IDAgMTUuMTcgMTEuODUgMTkuNTEgMjQgMjIuMTFzMjQgMy43NiAyNC40MiAxMi40M2MuNDMgOC41Mi0xMC40IDkuODItMTYuNjIgOS44Mi04LjgxIDAtMTYtMy40Ni0xNi45LTEzaC0xNi40OWMuMjkgMTcuNjMgMTQuMzEgMjYgMzMuMDkgMjYgMTUuNDYgMCAzMy4zOC02LjUgMzMuMzgtMjQuMjgtLjAzLTE0LjcyLTEyLjE0LTE5LjA1LTI0LjEzLTIxLjh6TTUyNS42NiAxNy4yOGgtMTYuNDh2MjIuNGgtMTIuNDJWNTJoMTIuNDJ2NDRjLjI5IDEyLjQzIDMuNDcgMTkuMDggMjAuNjcgMTkuMDggMy42MSAwIDcuMDgtLjU4IDEwLjY5LS44N3YtMTIuNjhhMjguNTIgMjguNTIgMCAwIDEtNi45NC41N2MtNy4zNyAwLTcuOTQtMy40Ny03Ljk0LTEwLjI2VjUyaDE0Ljg4VjM5LjY4aC0xNC44OHpNNTgwLjg1IDM3LjY2Yy0yNCAwLTM3LjcxIDE2LjQ3LTM3LjcxIDM5LjMgMCAyMyAxMy43MyAzOS40NSAzNy43MSAzOS40NVM2MTguNTcgOTkuOTQgNjE4LjU3IDc3YzAtMjIuODctMTMuNzMtMzkuMzQtMzcuNzItMzkuMzR6bTAgNjUuNzRjLTE0LjczIDAtMjEuMjQtMTMuNC0yMS4yNC0yNi40czYuNTEtMjYuMyAyMS4yNC0yNi4zUzYwMi4xIDY0LjEgNjAyLjEgNzdzLTYuNTEgMjYuNC0yMS4yNSAyNi40ek02NjIuNzkgNTAuNjZjOS4xIDAgMTUuNzUgNC45MSAxNy4wNSAxNGgxNi40N2MtMS41OS0xOC4zNS0xNi4zMy0yNy0zMy42Ny0yNy0yNC41NiAwLTM2Ljg1IDE3LjYzLTM2Ljg1IDQwLjE3IDAgMjIgMTIuODYgMzguNTggMzYuMjcgMzguNTggMTkuMjIgMCAzMS4yMi0xMC42OSAzNC4yNS0zMC4wNmgtMTYuNDdjLTEuNTkgMTAuNy04LjI0IDE3LjA1LTE3Ljc4IDE3LjA1LTE0LjMgMC0xOS43OS0xMy4xNS0xOS43OS0yNS41NyAwLTIyLjY5IDExLjk5LTI3LjE3IDIwLjUyLTI3LjE3ek03NDIuMjYgNjcuMTNsMjguNjEtMjcuNDVoLTIwLjIzbC0yOS43NiAzMC4yVjExLjIxSDcwNC40djEwMy4xOGgxNi40OFY4Ny42NWw5LjgyLTkuNTMgMjIuODMgMzYuMjdoMjAuMDlsLTMxLjM2LTQ3LjI2eiIgZmlsbD0iI2ZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik0xMTcuMjUgMjYuNzJhMTguMzcgMTguMzcgMCAwIDAgMTMuMTQtNS4zMXE0LjkyLTQuNjkgNS4xMy05LjhhOS42MiA5LjYyIDAgMCAwLTIuNjctNi44NCA5LjA4IDkuMDggMCAwIDAtNy4xOC0zLjM3IDIwLjkxIDIwLjkxIDAgMCAwLTEzLjQ1IDQuOXEtNi4wNiA0LjkxLTYuMjYgMTAuMjEtLjQgMTAuMjIgMTEuMjkgMTAuMjF6TTM4Ni4xMiAzOC4yNXEtMjIuMzggMC0zNy4xNSAxNi4zOVEzMzUuMiA2OS40IDMzNi4yNCA4N2MuMDUuODYuMTIgMS43LjIyIDIuNTNsLTEuNTQuNjhxLTE3LjQ2IDcuNTItMzIuMjMgNy41MS03LjQgMC0xMS4wOS01LjEyIDE5LjktMy4yNyAzMy0xNS4zNSAxMi40LTExLjAzIDExLjU0LTIxLjQ3LTEuMjMtMTYuMzctMjEuMzQtMTYuMzgtMjEuOCAwLTM3LjggMTYuNDItMTQuNTYgMTUtMTQuNzcgMzEuNmEzNy41NyAzNy41NyAwIDAgMCAuMjcgNS4zN2MtMi4yOSAxLjUxLTQgMi4yNy01LjIgMi4yN3EtMy45IDAtNC45Mi0xLjYzYy0uNjktMS4wOS0xLTMuMDYtLjgzLTUuOTNxMC0xLjY0IDIuNTctMTIuNTd0Mi43Ny0xNi42N3EuNC04LjM3LTMuMjgtMTIuODgtNC4zMi01LjUyLTE0LjE3LTQuN2EzMC40MiAzMC40MiAwIDAgMC0xNS44IDYuMTYgNTQuNTcgNTQuNTcgMCAwIDAtOS4yMyA4LjgyYy0xLjEgMS0yLjEyIDEuODYtMy4wOCAyLjY3cS4xOS04LjQxLTMuMjgtMTIuOTMtNC4zMi01LjUzLTE0LjM4LTQuNzJhMzYuNDYgMzYuNDYgMCAwIDAtMjEuMTMgOS4yNCAzNy42NyAzNy42NyAwIDAgMC03LjE5IDguMjEgMTguMTUgMTguMTUgMCAwIDAgLjQxLTMuOUExOS40MiAxOS40MiAwIDAgMCAxNjIuNSA0M3EtMy4yOC00LjgyLTguNjItNC40MS0zLjA3LjIxLTExLjY5IDguMjEtMTEuOTEgMTEuMDgtMTIuOTMgMTEuOWw0LjkyIDUuNTRjMy44My0yLjc2IDYuMTYtNC4xNSA3LTQuMTVxMi4yNSAwIDEuODUgMy42OGExMTQuMTEgMTE0LjExIDAgMCAxLTEuODkgMTQuODRjLS43IDMuOTQtMS4yIDcuMzMtMS41MiAxMC4xOWwtLjE4LjE1cS03LjM5IDYuMDgtMTAuMjYgNi4wN2MtNC4zOCAwLTYuNS0yLjkyLTYuMzctOC43OXEzLjA4LTE5LjIyIDUuNzYtMzEuNjkuODEtNy4zNi0yLjM3LTEydC0xMC00cS00LjMyLjQtMTMuMTQgOC4yMUw5NyA1Mi4zOWMtLjQxLTkuNjgtNC44Mi0xNC42Ni0xMy4yOC0xNC45MXEtMTktLjYtMjUuNzQgMjEuNDZhMTcuMTkgMTcuMTkgMCAwIDEgNi43Ni0xLjVxNyAwIDYuMTYgNy44NC0uNDYgNC43Mi02LjIgMTMuODF0LTguNjIgOS4wNnEtMy42OSAwLTYuNzctMTQtMS00LjExLTMuNjktMjEtMi40Ny0xNS41NC0xMy4xNC0xNC41MlEyOCAzOSAxOC45NCA0Ni44NHEtNi41NyA2LTEzLjM0IDExLjlsNC4zIDUuNTRRMTYuMDUgNjAgMTcuMDcgNjBxNC43MSAwIDguODEgMTQuNzZsNy4zOCAyNy4wNnE1LjUyIDE0Ljc2IDEzLjUxIDE0Ljc2IDEyLjkyIDAgMzEuNTUtMjQuMjQgMTMuMS0xNi44NCAxNy0yOC41YzMuNDQtMi41NSA1LjU3LTMuODQgNi4zNS0zLjg0cTMuNjkgMCAzLjY5IDUuMzMgMCAxLTQgMTUuMTh0LTQuMiAyMC45MnEtLjIxIDYuNTcgMy4xOCAxMC42NmMyLjI1IDIuNzQgNS41MSA0LjExIDkuNzUgNC4xMXExMy43NSAwIDI3LjUtMTEuOWMuODItLjcxIDEuNjEtMS40NCAyLjM5LTIuMThhMTYuNTEgMTYuNTEgMCAwIDAgMy43NyA3LjU2cTUuOTMgNi4zNCAyMCA1LjkzLTEuODktNC41Mi0xLjQ3LTE2YTU5LjcgNTkuNyAwIDAgMSA2LjU3LTI0LjQzcTYtMTEuNjggMTEuMS0xMS43IDYgMCA1LjU1IDcuNTlhNTMuMTMgNTMuMTMgMCAwIDEtMiAxMS43MSA1NS4yMyA1NS4yMyAwIDAgMC0yIDEzLjEzcS0uNDEgMTAuNDcgNC43MSAxNSA1LjczIDUuMTMgMjAuMDUgNC43Mi0yLjEzLTQuNzEtMS43Mi0xMy41NC42LTEyLjUyIDguNDQtMjUuODYgNy40MS0xMi43MiAxMi43Ni0xMi43MyA1IDAgNC43NCA3LjhhNzQuOTQgNzQuOTQgMCAwIDEtMi41NiAxNC4zNiA3NC42MSA3NC42MSAwIDAgMC0yLjU3IDE1Ljc5cS0uNDEgMTQuNzggMTIuOTQgMTQuNzcgMTMuNzQgMCAyNy41LTExLjlsLjQ0LS40Yy4zMi41NC42NCAxLjA4IDEgMS42cTcuMTkgMTEuMDggMjMuODEgMTEuMDggMjIuMzYgMCA0NC4xMy0xMi41YzEuNjMtLjkyIDMuMTctMS44MyA0LjY1LTIuNzVhMjkuNDMgMjkuNDMgMCAwIDAgMy4yNCA1LjE4cTguNDIgMTAuNDUgMjQuNjMgMTAuNDUgMTkuNSAwIDMyLjY0LTEzLjczYTQ4Ljc5IDQ4Ljc5IDAgMCAwIDE0LTMyLjU4cS42MS0xMy45My02LjM2LTIyLjc1LTcuNDktOS42NS0yMS44NS05LjY3em0tOTcuNzYgNDYuNTZhMTEuMTIgMTEuMTIgMCAwIDEgMC0yLjY2cS4xOS03Ljc1IDYuNTUtMTYuMjN0MTIuNS04LjQ4YzMuMTUgMCA0LjY1IDEuODUgNC41MSA1LjUycS0uMTkgNC4wOC02LjE0IDEwLjYyYTQ2LjI1IDQ2LjI1IDAgMCAxLTE3LjQyIDExLjIzek0zOTEgNjkuODVhMzkgMzkgMCAwIDEtNiAxOC45MnEtNi41NyAxMC45MS0xNS44MSAxMC45LTQuMTEgMC02LjM2LTQuNTJhMTcuNjYgMTcuNjYgMCAwIDEtMS44NS05LjA1IDM5LjgxIDM5LjgxIDAgMCAxIDYuMTYtMTkuNzRxNi44Ni0xMS4zMSAxNy4zMy0xMS4zMWMyLjE5IDAgMy44NiAxLjU0IDUgNC42M0EyNS44MiAyNS44MiAwIDAgMSAzOTEgNjkuODV6IiBmaWxsPSIjMDBhZGVmIj48L3BhdGg+PC9zdmc+CiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnUiIHJvbGU9Im5hdmlnYXRpb24iIGFyaWEtbGFiZWw9Ik1haW4gbWVudSI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InRvcG5hdl9tZW51X2Rlc2t0b3BfbWFpbiIgcm9sZT0ibWVudWJhciI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtcyIgZGF0YS1tZW51LWlkPSJqb2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfbWVudV9qb2luIGpzLXRvcG5hdl9tZW51X2F1dGgiIG9uY2xpY2s9ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7dmltZW8uTW9kYWwuY3JlYXRlKHtzaXplOid4c21hbGwnLGNvbnRlbnQ6Jy9qb2luP21vZGFsPW5ldyd9KS50aGVuKGNvbXBsZXRlVXNlckxvZ2luKSIgZGF0YS1nYS1ldmVudC1jbGljaz0idG9wX25hdnxqb2luIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpqb2luIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9qb2luX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS9qb2luIiB0aXRsZT0iQmVjb21lIGEgVmltZW8gbWVtYmVyIiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9qb2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKb2luICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zIiBkYXRhLW1lbnUtaWQ9ImxvZ2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJqcy10b3BuYXZfbWVudV9hdXRoIiBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO3ZpbWVvLk1vZGFsLmNyZWF0ZSh7c2l6ZToneHNtYWxsJyxjb250ZW50OicvbG9nX2luP21vZGFsPW5ldyd9KS50aGVuKGNvbXBsZXRlVXNlckxvZ2luKSIgZGF0YS1nYS1ldmVudC1jbGljaz0idG9wX25hdnxsb2dpbiIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6bG9naW4iIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2xvZ2luX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS9sb2dfaW4iIHRpdGxlPSJMb2cgaW4gdG8geW91ciBhY2NvdW50IiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9sb2dpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nIGluICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zIiBkYXRhLW1lbnUtaWQ9InByaWNpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJpY2luZyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJpY2luZ19jbGljayIgaHJlZj0iLy92aW1lby5jb20vdXBncmFkZSIgdGl0bGU9IlByaWNpbmciIHJlbD0idG9nZ2xlIiByb2xlPSJidXR0b24iIGFyaWEtb3ducz0idG9wbmF2X3ByaWNpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaWNpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXMiIGRhdGEtbWVudS1pZD0icHJvZHVjdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnRhcmdldC5ibHVyKCk7IiBjbGFzcz0idG9wbmF2X21lbnVfbm9fbGluayB0b3BuYXZfaGFzX2Ryb3Bkb3duIHRvcG5hdl9pY29uX2NoZXZyb25fYSIgaHJlZj0iIyIgdGl0bGU9IlByb2R1Y3QiIHJlbD0idG9nZ2xlIiByb2xlPSJidXR0b24iIGFyaWEtb3ducz0idG9wbmF2X3Byb2R1Y3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd24tLXdyYXBwZXIiIHJvbGU9Im1lbnUiIGFyaWEtaGlkZGVuPSJ0cnVlIiBpZD0idG9wbmF2X3Byb2R1Y3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X2Rlc2t0b3Bfc29sdXRpb25zLS1mZWF0dXJlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bi0tbGFiZWxzIj5GRUFUVVJFUzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19saXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOnZpZGVvX3BsYXllciIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJvZHVjdF92aWRlb19wbGF5ZXIiIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL3ZpZGVvLXBsYXllciIgdGl0bGU9IlZpZGVvIHBsYXllciI+VmlkZW8gcGxheWVyPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpwcm9kdWN0fGtleXdvcmQ6c2NyZWVuX3JlY29yZGVyIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X3NjcmVlbl9yZWNvcmRlciIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvc2NyZWVuLXJlY29yZGVyIiB0aXRsZT0iU2NyZWVuIHJlY29yZGVyIj5TY3JlZW4gcmVjb3JkZXI8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnByb2R1Y3R8a2V5d29yZDpsaXZlX3N0cmVhbWluZyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJvZHVjdF9saXZlX3N0cmVhbWluZyIgaHJlZj0iLy92aW1lby5jb20vbGl2ZSIgdGl0bGU9IkxpdmUgc3RyZWFtaW5nIj5MaXZlIHN0cmVhbWluZzwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOnByaXZhY3kiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X3Byb2R1Y3RfcHJpdmFjeSIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tcHJpdmFjeSIgdGl0bGU9IlByaXZhY3kiPlByaXZhY3k8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnByb2R1Y3R8a2V5d29yZDpjb2xsYWJvcmF0aW9uIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2NvbGxhYm9yYXRpb24iIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL3ZpZGVvLWNvbGxhYm9yYXRpb24iIHRpdGxlPSJDb2xsYWJvcmF0aW9uIj5Db2xsYWJvcmF0aW9uPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpwcm9kdWN0fGtleXdvcmQ6ZGlzdHJpYnV0aW9uIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2Rpc3RyaWJ1dGlvbiIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tbWFya2V0aW5nIiB0aXRsZT0iRGlzdHJpYnV0aW9uIGFuZCBtYXJrZXRpbmciPkRpc3RyaWJ1dGlvbiAmIG1hcmtldGluZzwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOm1vbmV0aXphdGlvbiIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJvZHVjdF9tb25ldGl6YXRpb24iIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL3ZpZGVvLW1vbmV0aXphdGlvbiIgdGl0bGU9Ik1vbmV0aXphdGlvbiI+TW9uZXRpemF0aW9uPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpwcm9kdWN0fGtleXdvcmQ6YW5hbHl0aWNzIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2FuYWx5dGljcyIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tYW5hbHl0aWNzIiB0aXRsZT0iQW5hbHl0aWNzIj5BbmFseXRpY3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnByb2R1Y3R8a2V5d29yZDpob3N0aW5nIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2hvc3RpbmciIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL29ubGluZS12aWRlby1ob3N0aW5nIiB0aXRsZT0iSG9zdGluZyBhbmQgbWFuYWdlbWVudCI+SG9zdGluZyAmIG1hbmFnZW1lbnQ8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91cGdyYWRlIiBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bi0tY29tcGFyZV9wbGFucyIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOmNvbXBhcmVfcGxhbnN8dGFyZ2V0Oi91cGdyYWRlfHR5cGU6Y2xpY2siPkNvbXBhcmUgUGxhbnM8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd24tLWxhYmVscyI+U0VSVklDRVM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9zb2x1dGlvbnMtLXNlcnZpY2VzX2NvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZXJ2aWNlc193cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpzb2x1dGlvbnN8a2V5d29yZDpjcmVhdGV8dGFyZ2V0Oi9jcmVhdGV8dHlwZTpjbGljayIgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXNfYmxvY2siIGhyZWY9Ii8vdmltZW8uY29tL2NyZWF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5NYWtlIHNvY2lhbCB2aWRlb3MgaW4gYW4gaW5zdGFudDogdXNlIGN1c3RvbSB0ZW1wbGF0ZXMgdG8gdGVsbCB0aGUgcmlnaHQgc3RvcnkgZm9yIHlvdXIgYnVzaW5lc3MuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VydmljZXNfd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6Zm9yX2hpcmV8dGFyZ2V0Oi9mb3ItaGlyZXx0eXBlOmNsaWNrIiBjbGFzcz0idG9wbmF2X2Rlc2t0b3Bfc29sdXRpb25zLS1zZXJ2aWNlc19ibG9jayIgaHJlZj0iLy92aW1lby5jb20vZm9yLWhpcmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgSGlyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Qb3N0IGpvYnMsIGZpbmQgcHJvcywgYW5kIGNvbGxhYm9yYXRlIGNvbW1pc3Npb24tZnJlZSBpbiBvdXIgcHJvZmVzc2lvbmFsIG1hcmtldHBsYWNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlcnZpY2VzX3dyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOmVudGVycHJpc2V8dGFyZ2V0Oi9lbnRlcnByaXNlfHR5cGU6Y2xpY2siIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9zb2x1dGlvbnMtLXNlcnZpY2VzX2Jsb2NrIiBocmVmPSIvL3ZpbWVvLmNvbS9lbnRlcnByaXNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXJwcmlzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5HZXQgeW91ciB0ZWFtIGFsaWduZWQgd2l0aCBhbGwgdGhlIHRvb2xzIHlvdSBuZWVkIG9uIG9uZSBzZWN1cmUsIHJlbGlhYmxlIHZpZGVvIHBsYXRmb3JtLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlcnZpY2VzX3dyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOnN0b2NrfHRhcmdldDovc3RvY2t8dHlwZTpjbGljayIgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXNfYmxvY2siIGhyZWY9Ii8vdmltZW8uY29tL3N0b2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+QnJvd3NlIGFuZCBidXkgZXhjZXB0aW9uYWwsIHJveWFsdHktZnJlZSBzdG9jayBjbGlwcywgaGFuZHBpY2tlZCBieSB0aGUgYmVzdC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXMiIGRhdGEtbWVudS1pZD0ic29sdXRpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfaGFzX2Ryb3Bkb3duIHRvcG5hdl9pY29uX2NoZXZyb25fYSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6c29sdXRpb25zIiBocmVmPSIjIiB0aXRsZT0iU29sdXRpb25zIiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9zb2x1dGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbHV0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIiByb2xlPSJtZW51IiBhcmlhLWhpZGRlbj0idHJ1ZSIgaWQ9InRvcG5hdl9zb2x1dGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpzb2x1dGlvbnN8a2V5d29yZDpjcmVhdGl2ZV9wcm9mZXNzaW9uYWxzIiBocmVmPSIvL3ZpbWVvLmNvbS9zb2x1dGlvbnMvY3JlYXRpdmUtcHJvZmVzc2lvbmFscy1zb2x1dGlvbnMiIHRpdGxlPSJBbGwgeW91IG5lZWQgdG8gbWFrZSBncmVhdCB2aWRlby4iPkNyZWF0aXZlIFByb2Zlc3Npb25hbHM8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6c21hbGxfYnVzaW5lc3MiIGhyZWY9Ii8vdmltZW8uY29tL3NvbHV0aW9ucy9zbWFsbC1idXNpbmVzcy1zb2x1dGlvbnMiIHRpdGxlPSJDYXB0dXJlIHlvdXIgY3VzdG9tZXJz4oCZIGF0dGVudGlvbiB3aXRoIHZpZGVvLiI+U21hbGwgQnVzaW5lc3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZW50ZXJwcmlzZSIgaHJlZj0iLy92aW1lby5jb20vZW50ZXJwcmlzZSIgdGl0bGU9IkVudGVycHJpc2UiPkVudGVycHJpc2U8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZWR1Y2F0aW9uIiBocmVmPSIvL3ZpbWVvLmNvbS9zb2x1dGlvbnMvZWR1Y2F0aW9uLXNvbHV0aW9ucyIgdGl0bGU9IlNoYXJlIGtub3dsZWRnZSB3aXRoIHZpZGVvLiI+RWR1Y2F0aW9uPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOmZpdG5lc3MiIGhyZWY9Ii8vdmltZW8uY29tL3NvbHV0aW9ucy9maXRuZXNzLXNvbHV0aW9ucyIgdGl0bGU9IkdldCB5b3VyIGZpdG5lc3Mgc3R1ZGlvIG9ubGluZS4iPkZpdG5lc3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZmFpdGgiIGhyZWY9Ii8vdmltZW8uY29tL3NvbHV0aW9ucy9mYWl0aC1zb2x1dGlvbnMiIHRpdGxlPSJLZWVwIHlvdXIgY29tbXVuaXR5IGNvbm5lY3RlZC4iPkZhaXRoPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zIiBkYXRhLW1lbnUtaWQ9Imluc3BpcmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG9uY2xpY2s9ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQudGFyZ2V0LmJsdXIoKTsiIGNsYXNzPSJ0b3BuYXZfbWVudV9ub19saW5rIHRvcG5hdl9oYXNfZHJvcGRvd24gdG9wbmF2X2ljb25fY2hldnJvbl9hIiBocmVmPSIjIiB0aXRsZT0iV2F0Y2giIHJlbD0idG9nZ2xlIiByb2xlPSJidXR0b24iIGFyaWEtb3ducz0idG9wbmF2X2luc3BpcmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIiByb2xlPSJtZW51IiBhcmlhLWhpZGRlbj0idHJ1ZSIgaWQ9InRvcG5hdl9pbnNwaXJhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OndhdGNofGtleXdvcmQ6d2F0Y2giIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X3dhdGNoX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS93YXRjaCIgdGl0bGU9IkV4cGxvcmUiPkV4cGxvcmU8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6d2F0Y2h8a2V5d29yZDpzdGFmZl9waWNrcyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfd2F0Y2hfc3RhZmZfcGlja3NfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL2NoYW5uZWxzL3N0YWZmcGlja3MiIHRpdGxlPSJUaGUgYmVzdCB2aWRlb3Mgb24gVmltZW8sIGN1cmF0ZWQgZGFpbHkgYnkgb3VyIHRlYW0iPlN0YWZmIFBpY2tzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50Om1hbmFnZV92aWRlb3N8a2V5d29yZDp2aWRlb19zY2hvb2wiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2NyZWF0ZV92aWRlb19zY2hvb2xfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL3ZpZGVvc2Nob29sIiB0aXRsZT0iTGVhcm4gaG93IHRvIG1ha2UgYmV0dGVyIHZpZGVvcyI+VmlkZW8gU2Nob29sPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvbmF2PjwhLS0gLy50b3BuYXZfZGVza3RvcF9tZW51IC0tPgogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0idG9wbmF2X21lbnVfc2VhcmNoX29tbmlzZWFyY2giIGNsYXNzPSJ0b3BuYXZfbWVudV9zZWFyY2giIGRhdGEtcXVlcnk9IiIgZGF0YS1wbGFjZWhvbGRlcj0iU2VhcmNoIHZpZGVvcywgcGVvcGxlLCBhbmQgbW9yZSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X21lbnVfcmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJyZWNvcmRfdGlwX3dyYXBwZXIiIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF92aWRlb19wb3BvdmVyIiBvbk1vdXNlZW50ZXI9InRyYWNrTmV3VmlkZW9Ecm9wZG93bkltcHJlc3Npb24oJycpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9Im5ld192aWRlb19kcm9wZG93bl9idXR0b24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfdmlkZW9fcG9wb3Zlcl9idXR0b24gaXJpc19idG4tLXByaW1hcnkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpuZXdfdmlkZW8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJoYW5kbGVOZXdWaWRlb0NsaWNrKCkiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF92aWRlb19wb3BvdmVyX3NwYW5fd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3IHZpZGVvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0icmVjb3JkX2FuaW1hdGlvbl93cmFwcGVyIiBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfdmlkZW9fcG9wb3Zlcl9zcGFuX3ZhcmlhbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9Ik0xMiAxNS41YTEgMSAwIDAgMS0uNjctLjI2bC01LTQuNSAxLjM0LTEuNDhMMTIgMTMuMTVsNC4zMy0zLjkgMS4zNCAxLjQ5LTUgNC41YTEgMSAwIDAgMS0uNjcuMjZ6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0ibmV3X3ZpZGVvX2Ryb3Bkb3duX3ZhcmlhbnQiIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIHRvcG5hdl9kZXNrdG9wX3ZpZGVvX3BvcG92ZXJfZHJvcGRvd25fdmFyaWFudCIgcm9sZT0ibWVudSIgYXJpYS1oaWRkZW49InRydWUiIHN0eWxlPSJwYWRkaW5nOiB1bnNldDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbV92YXJpYW50IiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG9uY2xpY2s9IihmdW5jdGlvbihldmVudCkgeyBpZiAod2luZG93LmhhbmRsZVVwbG9hZEJ1dHRvbkNsaWNrKSB7IGhhbmRsZVVwbG9hZEJ1dHRvbkNsaWNrKGV2ZW50KTsgfX0pKGV2ZW50KSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6bmV3X3ZpZGVvfGtleXdvcmQ6eydhY3Rpb24nOid1cGxvYWQnfXx0YXJnZXQ6L3VwbG9hZHx0eXBlOmNsaWNrIiBpZD0idG9wbmF2X2Rlc2t0b3BfdXBsb2FkX2J1dHRvbiIgaHJlZj0iLy92aW1lby5jb20vdXBsb2FkIiA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxpZ25fdG9wbmF2X2Ryb3Bkb3duX2ljb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvcG5hdl9kcm9wZG93bl9pY29ucyI+PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPSJNMTggOC40OGE3LjE2IDcuMTYgMCAwIDAtMS44NC00Ljc2QTUuODEgNS44MSAwIDAgMCA2LjkyIDVhNS4yNCA1LjI0IDAgMCAwLTQuNjkgMy44NUE0LjkxIDQuOTEgMCAwIDAgMCAxM2E1LjEzIDUuMTMgMCAwIDAgNSA1aDEwYTUuMSA1LjEgMCAwIDAgNS00Ljk0IDUuODkgNS44OSAwIDAgMC0yLTQuNTh6TTE1IDE2aC00di0zLjU5bDEuMjkgMS4yOSAxLjQxLTEuNDEtMy43LTMuNy0zLjcxIDMuN0w3LjcgMTMuNyA5IDEyLjQxVjE2SDVhMy4xNiAzLjE2IDAgMCAxLTMtMyAyLjkxIDIuOTEgMCAwIDEgMS41Mi0yLjU4bC40LS4yLjA4LS40NEEzLjM4IDMuMzggMCAwIDEgNy41OSA3aC43bC4yNC0uNjZBMy42OSAzLjY5IDAgMCAxIDEyIDRhMy43MyAzLjczIDAgMCAxIDIuNzIgMS4xMkE1LjQ1IDUuNDUgMCAwIDEgMTYgOXYuNTRsLjQ1LjNBMy43OSAzLjc5IDAgMCAxIDE4IDEzLjA2IDMuMDkgMy4wOSAwIDAgMSAxNSAxNnoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iIzFhMmUzYiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW1fdmFyaWFudCIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSJoYW5kbGVDcmVhdGVWaWRlb0NsaWNrKGV2ZW50KSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6bmV3X3ZpZGVvfGtleXdvcmQ6eydhY3Rpb24nOidjcmVhdGUnfXx0YXJnZXQ6L2NyZWF0ZS92aWRlby1tYWtlcnx0eXBlOmNsaWNrIiBpZD0idG9wbmF2X2Rlc2t0b3BfY3JlYXRlX3ZpZGVvX2J1dHRvbiIgaHJlZj0iLy92aW1lby5jb20vY3JlYXRlL3ZpZGVvLW1ha2VyIiA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxpZ25fdG9wbmF2X2Ryb3Bkb3duX2ljb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvcG5hdl9kcm9wZG93bl9pY29ucyI+PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZD0iTTMuMiAxNi44bDMuOC0xIDEwLTEwYy4yLS4yLjItLjUgMC0uN0wxNC45IDNjLS4yLS4yLS41LS4yLS43IDBsLTIuMSAyLjEgMi44IDIuOEwxMy44IDkgMTEgNi4yIDQuMiAxM2wtMSAzLjh6bTkuOS0xNC45Yy44LS44IDItLjggMi44IDBMMTguMSA0Yy44LjguOCAyIDAgMi44TDcuOCAxNy4ybC01LjYgMS41Yy0uNS4xLS45LS4yLS43LS43bDEuNC01LjdMMTMuMSAxLjl6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iIzFhMmUzYiIKICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBhIHZpZGVvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0iY2FydF90b3BfbmF2IiBjbGFzcz0idG9wbmF2X2NhcnRfYnV0dG9uIj48L2Rpdj4KCiAgICAgICAgICAgIDwvZGl2PjwhLS0gLy50b3BuYXZfbWVudV9yaWdodCAtLT4KICAgICAgICAgICAgPC9kaXY+PCEtLSAvLnRvcG5hdl9kZXNrdG9wX3dyYXBwZXIgLS0+CjwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgdmFyIGlzTW9iaWxlID0gL2lwaG9uZXxpcG9kfGFuZHJvaWR8d2Vib3N8YmxhY2tiZXJyeXx3aW5kb3dzIHBob25lL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpOwoKICAgICAgICAvLyBETyBOT1QgUkVNT1ZFLiBUaGlzIGlzIGEgY2FsbGJhY2sgZm9yIHRoZSBsb2dpbiAmIGpvaW4gYnV0dG9ucyBpbiBUb3BOYXZCdWlsZGVyLgogICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlVXNlckxvZ2luKHJlc3BvbnNlKSB7CiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiAhcmVzcG9uc2Uuc2lnbnVwKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gaGFuZGxlVXBsb2FkQnV0dG9uQ2xpY2soZXZlbnQpIHsKICAgICAgICAgICAgLy8gT3BlbnMgdGhlIGF1dGggbW9kYWwgZm9yIGxvZ2dlZCBvdXQgdXNlcnMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICB3aW5kb3cudmltZW8KICAgICAgICAgICAgICAgJiYgd2luZG93LnZpbWVvLmNvbmZpZwogICAgICAgICAgICAgICAmJiB3aW5kb3cudmltZW8uTW9kYWwKICAgICAgICAgICAgICAgJiYgIXdpbmRvdy52aW1lby5jdXJfdXNlcgogICAgICAgICAgICApewogICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIGlzTW9iaWxlID8gd2luZG93LmxvY2F0aW9uLmhyZWY9Ii91cGxvYWQiIDogdmltZW8uTW9kYWwuY3JlYXRlKHsKICAgICAgICAgICAgICAgICAgICBzaXplOiAneHNtYWxsJywKICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnL2pvaW4/bW9kYWw9bmV3JnJlZGlyZWN0PS91cGxvYWQnLAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgIDwvc2NyaXB0PgoKPHNjcmlwdD4KICAgIHZhciBzZXJ2aWNlRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2VydmljZXNfd3JhcHBlcicpOwogICAgdmFyIGhpZGRlblNlcnZpY2VFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZXJ2aWNlc193cmFwcGVyLmhpZGUnKTsKICAgIHZhciBjb3VudCA9IHNlcnZpY2VFbGVtZW50cy5sZW5ndGggLSBoaWRkZW5TZXJ2aWNlRWxlbWVudHMubGVuZ3RoOwogICAgaWYgKGNvdW50ID4gMikgewogICAgICAgIHZhciBzZXJ2aWNlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXNfY29udGFpbmVyJyk7CiAgICAgICAgaWYgKHNlcnZpY2VDb250YWluZXIpIHsKICAgICAgICAgICAgc2VydmljZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICc0NTBweCc7CiAgICAgICAgfQogICAgfQo8L3NjcmlwdD4KCjxzY3JpcHQ+CiAgICBmdW5jdGlvbiBoYW5kbGVOZXdWaWRlb0NsaWNrKCkgewogICAgICAgIGlmICh3aW5kb3cudmltZW8gJiYgd2luZG93LnZpbWVvLmN1cl91c2VyKSB7CiAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgIT09ICcvdXBsb2FkJykgewogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL3VwbG9hZCc7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cudmltZW8uTW9kYWwuY3JlYXRlKHsgc2l6ZTogJ3hzbWFsbCcsIGNvbnRlbnQ6ICcvam9pbj9tb2RhbD1uZXcmcmVkaXJlY3Q9L3VwbG9hZCcgfSkKICAgICAgICAgICAgICAgIC50aGVuKGNvbXBsZXRlVXNlckxvZ2luKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFuZGxlQ3JlYXRlVmlkZW9DbGljayhlLCBpc1JlY29yZFNjcmVlbiA9IGZhbHNlKSB7CiAgICAgICAgaWYgKHdpbmRvdy52aW1lbyAmJiAhd2luZG93LnZpbWVvLmN1cl91c2VyKSB7CiAgICAgICAgICAgIGlmICghaXNSZWNvcmRTY3JlZW4pIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICAgICAgICB3aW5kb3cudmltZW8uTW9kYWwuY3JlYXRlKHsKICAgICAgICAgICAgICAgICAgICBzaXplOiAneHNtYWxsJywKICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnL2pvaW4/bW9kYWw9bmV3JnJlZGlyZWN0PS9jcmVhdGUvdmlkZW8tbWFrZXInCiAgICAgICAgICAgICAgICB9KS50aGVuKGNvbXBsZXRlVXNlckxvZ2luKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB0cmFja05ld1ZpZGVvRHJvcGRvd25JbXByZXNzaW9uKHJlY29yZE9wdGlvbikgewogICAgICAgIGlmICh3aW5kb3cuX19mYSkgewogICAgICAgICAgICB3aW5kb3cuX19mYS5wdXNoKFsndHJhY2tFdmVudCcsIHsKICAgICAgICAgICAgICAgIHR5cGU6ICdpbXByZXNzaW9uJywKICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogJ3RvcF9uYXYnLAogICAgICAgICAgICAgICAgY29tcG9uZW50OiAnbmV3X3ZpZGVvJywKICAgICAgICAgICAgfV0pOwoKICAgICAgICAgICAgaWYgKHJlY29yZE9wdGlvbikgewogICAgICAgICAgICAgICAgd2luZG93Ll9fZmEucHVzaChbJ3RyYWNrRXZlbnQnLCB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ltcHJlc3Npb24nLAogICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogJ3RvcF9uYXYnLAogICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogJ3JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogcmVjb3JkT3B0aW9uLAogICAgICAgICAgICAgICAgfV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQo8L3NjcmlwdD4KCjxzY3JpcHQ+CiAgICAvKioKICAgICAqIFRoaXMgaXMgcGFydCBvZiBhbiBBQiBFeHBlcmltZW50CiAgICAgKiBFeHBlcmltZW50IGxpbms6IGh0dHBzOi8vdmltZW8uY29tL21vZHdvcmxkL2FibGluY29sbi81MjgKICAgICAqIEV4cGVyaW1lbnQgcGFyYW06IHNob3dfbXlfZHJhZnRzCiAgICAgKi8KICAgIHZhciBzaG93VmFyaWFudCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgc2hvd015RHJhZnRzOwogICAgICAgIGlmICh3aW5kb3cuQUJMaW5jb2xuICYmIHdpbmRvdy5BQkxpbmNvbG4uZ2V0VGVzdCgnSlMuVG9wbmF2Lk15RHJhZnRzJykuZ2V0KCdzaG93X215X2RyYWZ0cycsICdjb250cm9sJykgPT09ICd2YXJpYW50JykgewogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2LW1hbmFnZS1kcmFmdHMnKS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRlJyk7CiAgICAgICAgfQogICAgfTsKICAgIHNob3dWYXJpYW50KCk7Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgdmFyIGFycm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlY29yZF9hbmltYXRpb25fd3JhcHBlcicpOwogICAgICAgIHZhciBuZXdWaWRlb0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNvcmRfdGlwX3dyYXBwZXInKTsKCiAgICAgICAgaWYgKGFycm93KSB7CiAgICAgICAgICAgIGFycm93LmNsYXNzTGlzdC5hZGQoJ25vX2FuaW1hdGlvbicpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGlzSG92ZXJlZCA9IGZhbHNlOwoKICAgICAgICBpZiAobmV3VmlkZW9CdG4gJiYgZmFsc2UpIHsKICAgICAgICAgICAgbmV3VmlkZW9CdG4uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKGlzSG92ZXJlZCkgcmV0dXJuOwoKICAgICAgICAgICAgICAgIGlzSG92ZXJlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgaWYgKGFycm93KSB7CiAgICAgICAgICAgICAgICAgICAgYXJyb3cuY2xhc3NMaXN0LnJlbW92ZSgnbm9fYW5pbWF0aW9uJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RvcmVfcmVjb3JkX3RpcF9zZXR0aW5ncygxKTsKCiAgICAgICAgICAgIH0sIGZhbHNlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHN0b3JlX3JlY29yZF90aXBfc2V0dGluZ3ModmFsdWUpIHsKICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoKICAgICAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCAnL3NldHRpbmdzL25hdl9yZWNvcmRlcl90aXAnKTsKICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCAnWE1MSHR0cFJlcXVlc3QnKTsKICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsKICAgICAgICAgICAgeGhyLnNlbmQoJ3JlY29yZF9zY3JlZW5fdGlwX3N0YXRlPScgKyB2YWx1ZSArICcmdG9rZW49JyArIHZpbWVvLnhzcmZ0KTsKCiAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gaGFuZGxlLiBXZSBob3BlIGZvciB0aGUgYmVzdCBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH07CiAgICA8L3NjcmlwdD4KCgogICAgCjwhLS0gUmVzcG9uc2l2ZSBUb3AgTmF2IChFeHBsb3JlLCBMT0hQLCBXYXRjaCwgdGMpIC0tPgo8bmF2IGlkPSJ0b3BuYXZfbW9iaWxlIiBjbGFzcz0idG9wbmF2X21vYmlsZSAgICBuYXZfYmFyLS1saSIgcm9sZT0iYmFubmVyIj4KCiAgICA8ZGl2IGNsYXNzPSJ0b3BuYXZfbW9iaWxlX2JhciI+CiAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBkYXRhLWFjdGlvbj0ibWVudS5vcGVuIiBjbGFzcz0ibmF2YmFyX2hhbWJ1cmdlciBuYXZfYmFyX2ljb24gdG9wbmF2X21vYmlsZV9idXR0b24gdG9wbmF2X21vYmlsZV9wdWxsX2xlZnQganMtdG9wbmF2X21vYmlsZV9oZWFkZXJfbG9nbyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiPgogICAgICAgICAgICAgICAgPHRpdGxlPk1lbnU8L3RpdGxlPgogICAgICAgICAgICAgICAgPHBhdGggaWQ9IlJlY3RhbmdsZS00IiBkPSJNNyw4SDI1YTEsMSwwLDAsMSwxLDFoMGExLDEsMCwwLDEtMSwxSDdBMSwxLDAsMCwxLDYsOUg2QTEsMSwwLDAsMSw3LDhaIiAvPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTcsMTVIMjVhMSwxLDAsMCwxLDEsMWgwYTEsMSwwLDAsMS0xLDFIN2ExLDEsMCwwLDEtMS0xSDZBMSwxLDAsMCwxLDcsMTVaIi8+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNywyMkgyNWExLDEsMCwwLDEsMSwxaDBhMSwxLDAsMCwxLTEsMUg3YTEsMSwwLDAsMS0xLTFINkExLDEsMCwwLDEsNywyMloiLz4KICAgICAgICAgICAgPC9zdmc+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BuYXZfYWN0aW9uX2J1dHRvbnMiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iLy92aW1lby5jb20vc2VhcmNoIiBjbGFzcz0idG9wbmF2X21vYmlsZV9idXR0b24gdG9wbmF2X21vYmlsZV9wdWxsX3JpZ2h0IHRvcG5hdl9tb2JpbGVfaGVhZGVyX3NlYXJjaCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibmF2X2Jhcl9zZWFyY2hfaWNvbiBuYXZfYmFyX2ljb24iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMyIDMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlNlYXJjaDwvdGl0bGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi43NCwyNS4zMmwtNC41My00LjUzYTEsMSwwLDAsMC0uMjEtLjE0QTksOSwwLDEsMCwyMC42NSwyMmExLDEsMCwwLDAsLjE0LjIxbDQuNTMsNC41M2ExLDEsMCwwLDAsMS40MS0xLjQxWk0xNSwyMmE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNSwyMloiLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJjYXJ0X3RvcF9uYXZfbW9iaWxlIiBjbGFzcz0idG9wbmF2X2NhcnRfYnV0dG9uIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwhLS0gVmltZW8gTG9nbyAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2X2Jhcl90aXRsZSBqcy1uYXZfYmFyX3RpdGxlIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tIiBndG0tZGF0YS1jbGljaz0ibW9iaWxlX25hdl9ob21lX2xvZ29fY2xpY2siPgogICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0NDEgMTI0LjY4MiIgd2lkdGg9Ijg2cHgiIGhlaWdodD0iMjdweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEyMC40ODEsMjcuMzI2YzUuNDYyLDAsMTAuMTg4LTEuOTEsMTQuMTc0LTUuNzI4YzMuNTQ3LTMuMzc5LDUuMzkyLTYuOTA2LDUuNTQtMTAuNTgzYzAuMTQzLTIuNDkyLTAuODE1LTQuOTUxLTIuODgtNy4zNzhDMTM1LjI0NCwxLjIxNywxMzIuNjYyLDAsMTI5LjU2MiwwYy01LjMyLDAtMTAuMTU1LDEuNzY3LTE0LjUxMSw1LjI4OGMtNC4zNTYsMy41MjctNi42MDgsNy4yMDQtNi43NSwxMS4wMjJDMTA4LjAwMiwyMy42NTYsMTEyLjA2NywyNy4zMjYsMTIwLjQ4MSwyNy4zMjZ6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDM0LjA3OSw1MC4xNmMtNS4zMTktNi45MjUtMTMuMTQ1LTEwLjM5NS0yMy40NzUtMTAuMzk1Yy0xNi4wOTcsMC0yOS40NTUsNS44OTYtNDAuMDgzLDE3LjY4OGMtOS45MDIsMTAuNjE0LTE0LjQ3OCwyMi4yNjUtMTMuNzMzLDM0Ljk0NGMwLjA0OSwwLjkzMiwwLjEzMiwxLjg0LDAuMjI5LDIuNzM4Yy0wLjU1NCwwLjI0MS0xLjA5MywwLjQ4My0xLjY2MiwwLjcyNGMtMTIuNTU2LDUuNDExLTI0LjE0Nyw4LjExLTM0Ljc3NSw4LjExYy01LjMyLDAtOS4zMDctMS44MzktMTEuOTYtNS41MjFjMTQuMzE2LTIuMzU1LDI2LjIwNi03Ljg3NiwzNS42NjItMTYuNTY4YzguODU0LTcuOTU1LDEyLjk4OS0xNS42ODksMTIuNC0yMy4xOTdjLTAuODg3LTExLjc4LTguNTYyLTE3LjY3Ni0yMy4wMzQtMTcuNjc2Yy0xNS42NSwwLTI5LjIzNSw1LjkwOS00MC43NSwxNy43MTRjLTEwLjQ4NCwxMC43ODMtMTUuODA1LDIyLjE0OC0xNS45NDcsMzQuMTAzYy0wLjA0LDIuMDA1LDAuMDY2LDMuOTMyLDAuMyw1Ljc4OWMtMi40NzcsMS42MzItNC4zNTIsMi40NTYtNS42MTMsMi40NTZjLTIuODEsMC00LjU3Ni0wLjU4Mi01LjMxNC0xLjc2Yy0wLjczNy0xLjE3OC0xLjAzNS0zLjMwOC0wLjg4Ny02LjQwMWMwLTEuMTc4LDAuOTE5LTUuNjk1LDIuNzcxLTEzLjU2NWMxLjg0NS03Ljg3LDIuODQxLTEzLjg2NCwyLjk5LTE3Ljk4N2MwLjI5MS02LjAyNS0wLjg5NC0xMC42Ni0zLjU0Ny0xMy44OTZjLTMuMTAxLTMuOTc0LTguMTk0LTUuNjYzLTE1LjI4MS01LjA3NGMtNS45MDIsMC40NDctMTEuNTkyLDIuNjYtMTcuMDU0LDYuNjQ3Yy0zLjI0OSwyLjM2My02LjU2OSw1LjUzNC05Ljk2MSw5LjUyMWMtMS4xODUsMS4wMzYtMi4yOTEsMi0zLjMyNywyLjg4YzAuMTQzLTYuMDUxLTEuMDM2LTEwLjcwNS0zLjU0LTEzLjk1NGMtMy4xMDctMy45ODctOC4yNzItNS42ODMtMTUuNTA4LTUuMDk0Yy04LjQxNSwwLjczOC0xNi4wMiw0LjA2NS0yMi44MDksOS45NjdjLTIuOTU4LDIuNTExLTUuNTQsNS40NjktNy43NTMsOC44NjFjMC4yOTEtMS4zMjcsMC40NC0yLjczMSwwLjQ0LTQuMjA3YzAtNC41NzYtMS4xODUtOC42MDItMy41NDctMTIuMDcxcy01LjQ2Mi01LjA1NS05LjMwMS00Ljc1N2MtMi4yMTMsMC4xNDktNi40MiwzLjEwMS0xMi42MjEsOC44NTRjLTguNTY5LDcuOTc0LTEzLjIxNiwxMi4yNTktMTMuOTU0LDEyLjg0MWw1LjMxMyw1Ljk4YzQuMTM2LTIuOTg0LDYuNjQ3LTQuNDc5LDcuNTM0LTQuNDc5YzEuNjE4LDAsMi4yODUsMS4zMjcsMS45OTQsMy45NzVjLTAuMTQzLDMuODMxLTAuODIyLDkuMTY0LTIuMDM5LDE2LjAxMmMtMC43NTQsNC4yNDMtMS4yOTgsNy45MDQtMS42MzgsMTAuOTg4Yy0wLjA2NiwwLjA1NS0wLjEyOSwwLjEwOS0wLjE5NiwwLjE2NGMtNS4zMiw0LjM3NS05LjAwOSw2LjU1Ni0xMS4wNzQsNi41NTZjLTQuNzI1LDAtNy4wMTYtMy4xNTgtNi44NjctOS40ODhjMi4yMTMtMTMuODI0LDQuMjg1LTI1LjIyMiw2LjIwNy0zNC4xOTljMC41ODMtNS4yOTQtMC4yNjYtOS41OTItMi41NS0xMi45MDZjLTIuMjkxLTMuMzE0LTUuODctNC43NDQtMTAuNzM3LTQuMzA0Yy0zLjEwNywwLjI5OC03LjgzMiwzLjI0OS0xNC4xODEsOC44NmMtMi4yMDUsMi00LjQxLDMuOTk2LTYuNjE1LDUuOTkzYy0wLjQzNy0xMC40NDctNS4yMDQtMTUuODIyLTE0LjMyOS0xNi4wOWMtMTMuNjY5LTAuNDQtMjIuOTMxLDcuMjc1LTI3Ljc3OSwyMy4xNThjMi41MDQtMS4wNzQsNC45MzgtMS42MTgsNy4zMDEtMS42MThjNS4wMTYsMCw3LjIyOSwyLjgyMiw2LjY0LDguNDUzYy0wLjI5NywzLjQxMS0yLjUxMSw4LjM3NS02LjY0LDE0Ljg5OWMtNC4xMzYsNi41MjMtNy4yMzYsOS43ODYtOS4zMDEsOS43ODZjLTIuNjYsMC01LjA5NC01LjAyMy03LjMwNy0xNS4wODFjLTAuNzQ1LTIuOTUxLTIuMDcxLTEwLjQ5MS0zLjk4Ny0yMi42MTRjLTEuNzczLTExLjIzNi02LjQ5OS0xNi40ODUtMTQuMTc0LTE1Ljc0N2MtMy4yNDksMC4yOTgtOC4xMjMsMy4yNDktMTQuNjE0LDguODZDOS42NjksNTMuMzE4LDQuODY3LDU3LjU5NywwLDYxLjg3NWw0LjY0MSw1Ljk4YzQuNDItMy4wOTQsNy4wMDMtNC42NDcsNy43NDEtNC42NDdjMy4zODUsMCw2LjU1LDUuMzEzLDkuNTAxLDE1LjkyOWMyLjY1Myw5LjczMyw1LjMwNywxOS40NjgsNy45NjEsMjkuMjAyYzMuOTc0LDEwLjYyMSw4Ljg0MSwxNS45MjksMTQuNTg4LDE1LjkyOWM5LjI4MSwwLDIwLjYyNy04LjcxOSwzNC4wMzgtMjYuMTU0Qzg3Ljg5Miw4NS45ODcsOTMuOTksNzUuNzQsOTYuOCw2Ny4zNTRjMy43Mi0yLjc0OCw2LjAxOC00LjE0Niw2Ljg1My00LjE0NmMyLjY1MywwLDMuOTg3LDEuOTIyLDMuOTg3LDUuNzU0YzAsMC43MzgtMS40NDMsNi4yLTQuMzI0LDE2LjM4MWMtMi44OCwxMC4xODItNC4zOTUsMTcuNzA5LTQuNTM3LDIyLjU3NWMtMC4xNDksNC43MjYsMC45OTcsOC41NTcsMy40MywxMS41MDhjMi40MzQsMi45NTIsNS45NDEsNC40MjgsMTAuNTI0LDQuNDI4YzkuODksMCwxOS43NzktNC4yNzgsMjkuNjc1LTEyLjgzNWMwLjg4MS0wLjc3MiwxLjczOC0xLjU1NywyLjU3My0yLjM1MmMwLjc4MywzLjMxMiwyLjEyNCw2LjA0NSw0LjA3LDguMTVjNC4yNTksNC41NjksMTEuNDU2LDYuNzA2LDIxLjU5Miw2LjQwOGMtMS4zNTMtMy4yNDktMS44ODQtOS4wMDMtMS41ODYtMTcuMjc0YzAuNDQtOS4xNTIsMi44MDktMTcuOTQxLDcuMDk0LTI2LjM1NXM4LjI3OC0xMi42MjcsMTEuOTgtMTIuNjI3YzQuMjg1LDAsNi4yODUsMi43MzEsNS45ODcsOC4xOTNjLTAuMTQ5LDMuNjk2LTAuODc0LDcuOTAzLTIuMTc1LDEyLjYyOGMtMS4zMDcsNC43MjUtMi4wMzIsOS40NDktMi4xNzQsMTQuMTc0Yy0wLjI5OCw3LjUzNCwxLjM5MiwxMi45MTksNS4wODEsMTYuMTY4YzQuMTE2LDMuNjg5LDExLjMzNCw1LjM5MiwyMS42MzgsNS4wOTRjLTEuNTQxLTMuMzkyLTIuMTYyLTguMjY2LTEuODY0LTE0LjYyMWMwLjQ0LTkuMDAzLDMuNDgyLTE4LjMwNCw5LjExMy0yNy45MDJjNS4zMzMtOS4xNTEsOS45MjItMTMuNzMzLDEzLjc3Mi0xMy43MzNjMy41NiwwLDUuMjYzLDIuODA5LDUuMTEzLDguNDE0Yy0wLjE0OCwzLjY4OC0xLjA3NCw4Ljg1NC0yLjc3MSwxNS40OTRjLTEuNjk1LDYuNjQxLTIuNjIxLDEyLjMxNi0yLjc2NCwxNy4wNDFjLTAuMjk3LDEwLjYyOCw0LjM1LDE1LjkzNiwxMy45NTUsMTUuOTM2YzkuODg5LDAsMTkuNzc5LTQuMjc4LDI5LjY3NS0xMi44MzVjMC4xNjQtMC4xNDQsMC4zMTYtMC4yOTMsMC40NzktMC40MzhjMC4zNCwwLjU4NiwwLjY4OCwxLjE2OCwxLjA2OCwxLjczMmM1LjE2NSw3Ljk2NywxMy43MzQsMTEuOTU0LDI1LjY5NSwxMS45NTRjMTYuMDksMCwzMS45NjYtNC40OTIsNDcuNjE2LTEzLjQ4OGMxLjc1Ni0wLjk5LDMuNDIyLTEuOTc5LDUuMDE3LTIuOTdjMC45ODYsMS45OTEsMi4xMzgsMy44NjYsMy41MDIsNS41OTFjNi4wNTIsNy41MjEsMTQuOTEyLDExLjI4MSwyNi41NzUsMTEuMjgxYzE0LjAyNSwwLDI1Ljc2Ny00LjkzOCwzNS4yMTYtMTQuODE1YzkuNDQ5LTkuODc2LDE0LjQ2Ni0yMS41OTgsMTUuMDYxLTM1LjE2M0M0NDEuMzg3LDY0LjY4NCw0MzkuMTAyLDU2LjUwMyw0MzQuMDc5LDUwLjE2eiBNMzA1LjExOCw5MC4wMDNjLTAuMDg0LTEuOTA5LTAuMDg0LTIuODY3LDAtMi44NjdjMC4xNDMtNS41NzksMi41MDUtMTEuNDE3LDcuMDc0LTE3LjUxNHM5LjA2Mi05LjE0NiwxMy40ODgtOS4xNDZjMy4zOTIsMCw1LjAxLDEuOTg3LDQuODY3LDUuOTQ4Yy0wLjE0OSwyLjkzOC0yLjM2Miw2Ljc2NC02LjYzNCwxMS40NjJDMzE4LjYwNiw4My4zMjQsMzEyLjM0MSw4Ny4zNjIsMzA1LjExOCw5MC4wMDN6IE00MTUuOTE4LDczLjg2OGMtMC4yOTcsNy4xLTIuNDM0LDEzLjkwMi02LjQyLDIwLjQxM2MtNC43MjUsNy44NDUtMTAuNDE0LDExLjc2LTE3LjA1NSwxMS43NmMtMi45NTgsMC01LjI0OS0xLjYyNC02Ljg2Ny00Ljg4Yy0xLjQ3Ni0yLjgwOS0yLjE0Mi02LjA2NC0xLjk5My05Ljc2N2MwLjI5MS03LjU0LDIuNTA1LTE0LjY0LDYuNjQ3LTIxLjNjNC44NjYtOC4xMzYsMTEuMDY3LTEyLjIwNywxOC42MDEtMTIuMjA3YzIuMzU2LDAsNC4xNjgsMS42Nyw1LjQyNCw0Ljk5N1M0MTYuMDY3LDY5Ljg3NSw0MTUuOTE4LDczLjg2OHoiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9tb2JpbGVfbWVudSBqcy10b3BuYXZfbW9iaWxlX21lbnVfbWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X21vYmlsZV9iYXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGRhdGEtZ3RtLWNsaWNrPSJtb2JpbGVfbmF2X21lbnVfY2xvc2VfY2xpY2siIGNsYXNzPSJtZW51X2Nsb3NlIHB1bGxfbGVmdCBqcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9jbG9zZSI+CiAgICAgICAgICAgICAgICA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxMC40OXB4IgogICAgICAgICAgICAgICAgCSBoZWlnaHQ9IjEwLjQ5cHgiIHZpZXdCb3g9IjAgMCAxMC40OSAxMC40OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAuNDkgMTAuNDk7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJjbG9zZV8xXyI+CiAgICAgICAgICAgICAgICAJPGc+CiAgICAgICAgICAgICAgICAJCTxnIGlkPSJHcm91cF8xXyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNi41MDAwMDAsIDYuNTAwMDAwKSI+CiAgICAgICAgICAgICAgICAJCQk8cGF0aCBpZD0iUmVjdGFuZ2xlLTRfMV8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiNGRkZGRkY7IiBkPSJNMy42OS02LjIxTDMuNjktNi4yMWMwLjM5LDAuMzksMC4zOSwxLjAyLDAsMS40MWwtOC40OSw4LjQ5CiAgICAgICAgICAgICAgICAJCQkJYy0wLjM5LDAuMzktMS4wMiwwLjM5LTEuNDEsMGwwLDBjLTAuMzktMC4zOS0wLjM5LTEuMDIsMC0xLjQxbDguNDktOC40OUMyLjY3LTYuNiwzLjMtNi42LDMuNjktNi4yMXoiLz4KICAgICAgICAgICAgICAgIAkJCTxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiNGRkZGRkY7IiBkPSJNLTYuMjEtNi4yMUwtNi4yMS02LjIxYzAuMzktMC4zOSwxLjAyLTAuMzksMS40MSwwbDguNDksOC40OWMwLjM5LDAuMzksMC4zOSwxLjAyLDAsMS40MWwwLDAKICAgICAgICAgICAgICAgIAkJCQljLTAuMzksMC4zOS0xLjAyLDAuMzktMS40MSwwbC04LjQ5LTguNDlDLTYuNi01LjE4LTYuNi01LjgyLTYuMjEtNi4yMXoiLz4KICAgICAgICAgICAgICAgIAkJPC9nPgogICAgICAgICAgICAgICAgCTwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8L2J1dHRvbj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uPSJtZW51LnNldHRpbmdzLm9wZW4iCiAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0ibW9iaWxlX25hdl9zZXR0aW5nc19jbGljayIKICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNldHRpbmdzIgogICAgICAgICAgICAgICAgY2xhc3M9Im1lbnVfc2V0dGluZ3MgcHVsbF9yaWdodCBqcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9zZXR0aW5ncyIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTguODZweCIKICAgICAgICAgICAgICAgIAkgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMTguODYgMjAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE4Ljg2IDIwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iZ2Vhcl8xXyI+CiAgICAgICAgICAgICAgICAJPGc+CiAgICAgICAgICAgICAgICAJCTxnIGlkPSJJY29uXzFfIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1LjAwMDAwMCwgNS4wMDAwMDApIj4KICAgICAgICAgICAgICAgIAkJCTxnIGlkPSJHcm91cC0xMF8xXyI+CiAgICAgICAgICAgICAgICAJCQk8L2c+CiAgICAgICAgICAgICAgICAJCTwvZz4KICAgICAgICAgICAgICAgIAkJPHBhdGggaWQ9IkNvbWJpbmVkLVNoYXBlXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTEyLDQuNThsLTAuNTctMC4yN1YxLjk5YzAtMC41NC0wLjQ1LTAuOTktMS0wLjk5aC0yYy0wLjU1LDAtMSwwLjQ1LTEsMC45OXYyLjMxCiAgICAgICAgICAgICAgICAJCQlMNi44Niw0LjU4Yy0wLjI5LDAuMTQtMC41NywwLjMtMC44NCwwLjQ4TDUuNSw1LjQyTDMuNDksNC4yNkMzLjAyLDMuOTksMi40MSw0LjE2LDIuMTQsNC42M2wtMSwxLjc0CiAgICAgICAgICAgICAgICAJCQlDMC44Niw2Ljg0LDEuMDIsNy40NiwxLjQ5LDcuNzNMMy41LDguODlMMy40NSw5LjUyQzMuNDQsOS42OCwzLjQzLDkuODQsMy40MywxMHMwLjAxLDAuMzIsMC4wMiwwLjQ4bDAuMDUsMC42M2wtMi4wMSwxLjE2CiAgICAgICAgICAgICAgICAJCQljLTAuNDcsMC4yNy0wLjYzLDAuODgtMC4zNiwxLjM2bDEsMS43NGMwLjI3LDAuNDgsMC44OSwwLjY0LDEuMzYsMC4zN2wyLjAxLTEuMTZsMC41MiwwLjM2YzAuMjcsMC4xOCwwLjU1LDAuMzUsMC44NCwwLjQ4CiAgICAgICAgICAgICAgICAJCQlsMC41NywwLjI3djIuMzFjMCwwLjU0LDAuNDUsMC45OSwxLDAuOTloMmMwLjU1LDAsMS0wLjQ1LDEtMC45OXYtMi4zMUwxMiwxNS40MmMwLjI5LTAuMTQsMC41Ny0wLjMsMC44NC0wLjQ4bDAuNTItMC4zNgogICAgICAgICAgICAgICAgCQkJbDIuMDEsMS4xNmMwLjQ3LDAuMjcsMS4wOCwwLjExLDEuMzYtMC4zN2wxLTEuNzRjMC4yNy0wLjQ4LDAuMTEtMS4wOS0wLjM2LTEuMzZsLTIuMDEtMS4xNmwwLjA1LTAuNjMKICAgICAgICAgICAgICAgIAkJCWMwLjAxLTAuMTYsMC4wMi0wLjMyLDAuMDItMC40OHMtMC4wMS0wLjMyLTAuMDItMC40OGwtMC4wNS0wLjYzbDIuMDEtMS4xNmMwLjQ3LTAuMjcsMC42My0wLjg4LDAuMzYtMS4zNmwtMS0xLjc0CiAgICAgICAgICAgICAgICAJCQljLTAuMjctMC40OC0wLjg5LTAuNjQtMS4zNi0wLjM3bC0yLjAxLDEuMTZsLTAuNTItMC4zNkMxMi41Nyw0Ljg4LDEyLjI5LDQuNzIsMTIsNC41OHoiLz4KICAgICAgICAgICAgICAgIAkJPGNpcmNsZSBpZD0iT3ZhbF8xXyIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I0ZGRkZGRjtzdHJva2Utd2lkdGg6MjsiIGN4PSI5LjQzIiBjeT0iMTAiIHI9IjIiLz4KICAgICAgICAgICAgICAgIAk8L2c+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgPHVsIGlkPSJtZW51X2xpc3QiIGNsYXNzPSJtZW51X2xpc3RfbG9nZ2VkX291dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpqb2luIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9qb2luX2NsaWNrIiBpZD0ianMtam9pbi1saW5rIiBocmVmPSIvL3ZpbWVvLmNvbS9qb2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl9qb2luIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTZweCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAwIDE2IDIwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNiAyMDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPSJqb2luLWxvZy1pbl8xXyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbC04XzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgY3g9IjgiIGN5PSI1IiByPSI0Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD0iUmVjdGFuZ2xlLTI1XzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTEsMTloMTR2LTNjMC0yLjIxLTEuNzktNC00LTRINWMtMi4yMSwwLTQsMS43OS00LDRWMTl6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSm9pbiBvciBsb2cgaW4gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhICBpZD0ianMtZmVhdHVyZXMtbGluayIgY2xhc3M9ImZlYXR1cmVzLWxhYmVsIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibWVudV9pY29uX2hvc3QiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDIwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9ImZlYXR1cmVzXzFfIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iR3JvdXAtMl8xXyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMi4wMDAwMDAsIDIuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9IlJlY3RhbmdsZS04XzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTEtMWgxMGMxLjEsMCwyLDAuOSwyLDJ2MTBjMCwxLjEtMC45LDItMiwySDFjLTEuMSwwLTItMC45LTItMlYxQy0xLTAuMS0wLjEtMSwxLTF6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9IlBhdGgtNV8xXyIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0ZGRkZGRjsiIGQ9Ik0zLjYsMy41MWMwLTAuNTUsMC4zOS0wLjc3LDAuODYtMC41bDQuMjgsMi41YzAuNDcsMC4yOCwwLjQ4LDAuNzMsMCwxLjAxTDQuNDYsOS4wOAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMy45OCw5LjM2LDMuNiw5LjE1LDMuNiw4LjU5TDMuNiwzLjUxeiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPSJHcm91cF8xXyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMy4wMDAwMDAsIDMuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPSJQYWdlLTFfMV8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiNGRkZGRkY7IiBkPSJNMTEsMTVjMi4yMSwwLDQtMS43OSw0LTRWMGMwLTEuMTEtMC45LTItMi0ydjEzYzAsMS4xLTAuOSwyLTIsMkgtMmMwLDEuMSwwLjg5LDIsMiwySDExeiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJyZWV6ZS1pZ25vcmUgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDp2aWRlb19wbGF5ZXIiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2ZlYXR1cmVzX3ZpZGVvX3BsYXllciIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tcGxheWVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8gcGxheWVyICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJyZWV6ZS1pZ25vcmUgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpsaXZlX3N0cmVhbWluZyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfZmVhdHVyZXNfbGl2ZV9zdHJlYW1pbmciIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL2xpdmVzdHJlYW1pbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibWVudV9pY29uX3VwbG9hZCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjIwcHgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAyMCAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjAgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXZlIHN0cmVhbWluZyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnN0b2NrIiAiIGhyZWY9Ii8vdmltZW8uY29tL3N0b2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvY2sgdmlkZW9zICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJyZWV6ZS1pZ25vcmUgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpwcml2YWN5IiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9mZWF0dXJlc19wcml2YWN5IiBocmVmPSIvL3ZpbWVvLmNvbS9mZWF0dXJlcy92aWRlby1wcml2YWN5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaXZhY3kgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOmRpc3RyaWJ1dGlvbiIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfZmVhdHVyZXNfZGlzdHJpYnV0aW9uIiBocmVmPSIvL3ZpbWVvLmNvbS9mZWF0dXJlcy92aWRlby1tYXJrZXRpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibWVudV9pY29uX3VwbG9hZCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjIwcHgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAyMCAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjAgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRpb24gJiBNYXJrZXRpbmcgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOmhvc3RpbmciIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2ZlYXR1cmVzX2hvc3RpbmciIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL29ubGluZS12aWRlby1ob3N0aW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdGluZyAmIE1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDppbnNwaXJhdGlvbnxrZXl3b3JkOndhdGNoIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9pbnNwaXJhdGlvbl93YXRjaCIgaWQ9ImpzLWluc3BpcmF0aW9uLWxpbmsiICBocmVmPSIvL3ZpbWVvLmNvbS93YXRjaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJtZW51X2ljb25fd2F0Y2giIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNHB4IiB2aWV3Qm94PSIwIDAgMjAgMTQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Imluc3BpcmF0aW9uXzFfIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iR3JvdXBfMV8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuMDAwMDAwLCA2LjAwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPSJPdmFsXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lam9pbjpyb3VuZDsiIGQ9Ik03LDdjMy4zMSwwLDYuMzEtMiw5LTZjLTIuNjktNC01LjY5LTYtOS02UzAuNjktMy0yLDFDMC42OSw1LDMuNjksNyw3LDd6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbC0yXzFfIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkZGRkZGOyIgY3g9IjciIGN5PSIxIiByPSIzIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGlyYXRpb24gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGtleXdvcmQ6dXBsb2FkIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl91cGxvYWRfY2xpY2siIGlkPSJqcy11cGxvYWQtbGluayIgaHJlZj0iLy92aW1lby5jb20vdXBsb2FkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9InVwbG9hZF8xXyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMDAwMDAwLCAxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9IkNvbWJpbmVkLVNoYXBlXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTAsMTBjMCwyLjE3LDEuOTYsNCw0LDRoMTBjMi4wNCwwLDQtMS43Niw0LTMuOTRjMC0xLjc5LTAuOC0zLjI4LTEuOTktNC4wNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMxNi4wMSwxLjc5LDEzLjQ5LDAsMTEsMEM5LjA4LDAsNy4yNCwxLjE5LDYuNTksM0MzLjgyLDMuMDEsMi41Nyw0LjcxLDIuMDcsNi41MkMxLjA4LDcuMDIsMCw4LjI2LDAsMTB6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlXzFfIiB4PSI4IiB5PSI4IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkZGRkZGOyIgd2lkdGg9IjIiIGhlaWdodD0iNiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvbHlsaW5lIGlkPSJQYXRoLTEzXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgcG9pbnRzPSI2LDEwIDksNyAxMiwxMCAgICAgICAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDp1cGdyYWRlIiBkYXRhLWd0bS1jbGljaz0ibW9iaWxlX25hdl91cGdyYWRlX2NsaWNrIiBpZD0gImpzLXVwZ3JhZGUtbGluayIgY2xhc3M9IiIgaHJlZj0iLy92aW1lby5jb20vdXBncmFkZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJtZW51X2ljb25fdXBncmFkZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIzMnB4IiBoZWlnaHQ9IjMycHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0LDdIMTVWOWg2LjU4TDcuMjksMjMuMjlsMS40MSwxLjQxTDIzLDEwLjQxVjE3aDJWOEExLDEsMCwwLDAsMjQsN1oiIGZpbGw9IiNmZmZmZmYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwZ3JhZGUgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgIDwvZGl2PgoKICAgICAgICA8c2VjdGlvbiBjbGFzcz0idG9wbmF2X21vYmlsZV9tZW51IHRvcG5hdl9tb2JpbGVfbWVudV9zZXR0aW5ncyBqcy10b3BuYXZfbW9iaWxlX21lbnVfc2V0dGluZ3MiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9tb2JpbGVfYmFyIHN1Ym1lbnUiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b3BuYXZfbW9iaWxlX2J1dHRvbiB0b3BuYXZfbW9iaWxlX3B1bGxfbGVmdCBqcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9zZXR0aW5zX2Nsb3NlIHRvcG5hdl9pY29uX21vYmlsZV9hcnJvd2xlZnRfYiI+IDwvYnV0dG9uPgogICAgICAgICAgICA8aDEgY2xhc3M9InRvcG5hdl9tb2JpbGVfaGVhZGVyX3RpdGxlIHN1Ym1lbnUiPk1vcmUgc3R1ZmY8L2gxPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8dWwgY2xhc3M9Im1lbnVfbGlzdF9zZXR0aW5nc19sb2dnZWRfb3V0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0ibWVudS5jbG9zZSIgY2xhc3M9IiAiIGhyZWY9Ii8vdmltZW8uY29tL3Rlcm1zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1zIG9mIFNlcnZpY2UgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0ibWVudS5jbG9zZSIgY2xhc3M9IiAiIGhyZWY9Ii8vdmltZW8uY29tL3ByaXZhY3kiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdmFjeSBQb2xpY3kgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0ibWVudS5jbG9zZSIgY2xhc3M9IiAiIGhyZWY9Ii8vdmltZW8uY29tL2RtY2EiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGNsYXNzPSIgIiBocmVmPSIvL3ZpbWVvLmNvbS9jb29raWVfcG9saWN5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvb2tpZXMgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0iZGVza3RvcCIgb25jbGljaz0idmltZW8ubW9iaWxlLmRlc2t0b3Bfc2hhcmVkLl9zMmRzKCk7IHJldHVybiBmYWxzZSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2t0b3Agc2l0ZSAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGxhbmd1YWdlIGhyZWY9IiMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG9uY2hhbmdlPSJ2aW1lby5tb2JpbGUuZGVza3RvcF9zaGFyZWQuX3MybCh0aGlzKSIgdGl0bGU9IkNob29zZSBhIGRpZmZlcmVudCBsYW5ndWFnZSIgY2xhc3M9InRvcG5hdl9tb2JpbGVfbWVudV9zZXR0aW5nc19sYW5ndWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGNsYXNzPSJzZWxlY3RlZCIgc2VsZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InNlbGVjdF9sYW5ndWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZ2xpc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc3Bhw7FvbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iZGUtREUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InNlbGVjdF9sYW5ndWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldXRzY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImZyLUZSIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFuw6dhaXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImphLUpQIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDml6XmnKzoqp4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9InB0LUJSIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0dWd1w6pzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJrby1LUiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0ic2VsZWN0X2xhbmd1YWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg7ZWc6rWt7Ja0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBjbGFzcz0iICIgaHJlZj0iLy92aW1lby5jb20vZmFxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBUSAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBjbGFzcz0iICIgaHJlZj0iLy92aW1lby5jb21oZWxwLnZpbWVvLmNvbS9oYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWxwICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KCgogICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9tb2JpbGVfbWVudV9jb3B5cmlnaHQiPlRNICsgwqkgMjAyMCBWaW1lbywgSW5jLjwvZGl2PgogICAgPC9zZWN0aW9uPgoKCiAgICAgICAgPC9uYXY+Cgo8c2NyaXB0PgooZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7CgogICAgLy8gR2xvYmFsIHZhbHVlcwogICAgd2luZG93LnZpbWVvID0gd2luZG93LnZpbWVvIHx8IHt9OwogICAgdmltZW8ubW9iaWxlID0gdmltZW8ubW9iaWxlIHx8IHt9OwogICAgVmltZW8gPSB2aW1lby5tb2JpbGUgfHwge307CiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZCA9IFZpbWVvLmRlc2t0b3Bfc2hhcmVkIHx8IHt9OwoKICAgIC8vIERFU0tUT1AgSEFORExFUlMKCiAgICB2YXIgZGVza3RvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3BuYXZfZGVza3RvcCcpOwoKICAgIC8vIFByZXZlbnQgdG91Y2ggZGV2aWNlIHRvIGhpZ3RsaWdodCB0aGUgYXJlYSB0YXBwZWQKICAgIGRlc2t0b3AuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpewogICAgICAgIC8vIFRha2UgaW50byBjb25zaWRlcmF0aW9uIGF2YXRhciBpbWcKICAgICAgICB2YXIgdGFyZ2V0ID0gKGUudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ltZycpID8gZS50YXJnZXQucGFyZW50Tm9kZSA6IGUudGFyZ2V0OwoKICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndG9wbmF2X2hhc19kcm9wZG93bicpKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB9CiAgICB9LCBmYWxzZSk7CgogICAgLy8gQWRkIGxhc3RfcGFnZSBjb29raWUKICAgIHZhciBsaXN0ZW4gPSAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgPyAndG91Y2hzdGFydCcgOiB3aW5kb3cuUG9pbnRlckV2ZW50ID8gJ3BvaW50ZXJkb3duJyA6IHdpbmRvdy5NU1BvaW50ZXJFdmVudCA/ICdNU1BvaW50ZXJEb3duJyA6ICdjbGljayc7CiAgICBkZXNrdG9wLmFkZEV2ZW50TGlzdGVuZXIobGlzdGVuLCBmdW5jdGlvbihlKXsKICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdqcy10b3BuYXZfbWVudV9hdXRoJykpIHsKICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gJ2xhc3RfcGFnZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSkgKyAnO3BhdGg9XCcvXCc7bWF4LWFnZT0xODAwOyc7CiAgICAgICAgfQogICAgfSwgZmFsc2UpOwoKICAgIC8vIE1PQklMRSBIQU5ETEVSUwoKICAgIC8vIFRyaWdnZXIgaU9TIFVwbG9hZCBmbG93CiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZC5fdXBsb2FkID0gZnVuY3Rpb24oZSkgewogICAgICAgIC8vIHNob3cgaVR1bmVzIG9ubHkgaWYgd2UgYXJlIGluIGlPUyB3b3JsZAogICAgICAgIGlmICgvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7CiAgICAgICAgICAgIHZhciBkZWVwbGluayA9ICd2aW1lbzovL2FwcC52aW1lby5jb20vdXBsb2FkP3JlZj1tb2JpbGV3ZWInLAogICAgICAgICAgICAgICAgZmFsbGJhY2sgPSAnL3VwbG9hZCcsCiAgICAgICAgICAgICAgICB3ZWJraXRIaWRkZW5DYWxsYmFjaywKICAgICAgICAgICAgICAgIGhpdENhbGxiYWNrOwoKICAgICAgICAgICAgLy8gQ2FsbGJhY2tzCiAgICAgICAgICAgIHdlYmtpdEhpZGRlbkNhbGxiYWNrID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBpcyBzdGlsbCBoZXJlIG9wZW4gdGhlIHVybCBwYWdlLgogICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC53ZWJraXRIaWRkZW4pIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBmYWxsYmFjazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIC8vIFRyeSB0byBvcGVuIHRoZSBWaW1lbyBBcHAKICAgICAgICAgICAgaGl0Q2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGRlZXBsaW5rOwogICAgICAgICAgICAgICAgc2V0VGltZW91dCh3ZWJraXRIaWRkZW5DYWxsYmFjaywgMjUpOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgaGl0Q2FsbGJhY2soKTsKCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGUuaHJlZjsKCiAgICB9CgoKLy8gQUZURVIgTU9CSUxFIE5BViBURVNUIFJFQ09OQ0lMRSBXSVRIIFRIRSBgbW9iaWxlX21lbnVfc2NyaXB0LnBodG1sYAovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTd2l0Y2ggdG8gZGVza3RvcCBzaXRlCiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZC5fczJkcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRvY3VtZW50LmNvb2tpZT0nb3B0X291dF9tb2JpbGU9MTtleHBpcmVzPUZyaSwgMzEgRGVjIDk5OTkgMjM6NTk6NTkgR01UO2RvbWFpbj0nICsgdmltZW8uZG9tYWluOwogICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgIH07CgogICAgLy8gU3dpdGNoIHRvIGxhbmd1YWdlCiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZC5fczJsID0gZnVuY3Rpb24oc2VsKSB7CiAgICAgICAgdmFyIGxhbmcgPSBzZWwudmFsdWUsCiAgICAgICAgICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoKICAgICAgICB4aHIub3BlbignUE9TVCcsICcvc2V0dGluZ3MvbG9jYWxlJyk7CiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCAnWE1MSHR0cFJlcXVlc3QnKTsKICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwogICAgICAgIHhoci5zZW5kKCdsb2NhbGU9JyArIGxhbmcgKyAnJnRva2VuPScgKyB2aW1lby54c3JmdCk7CiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIHBvc3QoKSB7CiAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9OwoKICAgIHZhciBtb2JpbGVNZW51RWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXRvcG5hdl9tb2JpbGVfaGVhZGVyX2xvZ28nKTsKICAgIGlmIChtb2JpbGVNZW51RWxlKSB7CiAgICAgICAgbW9iaWxlTWVudUVsZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKCiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgLy8gT3BlbiBNZW51CiAgICAgICAgICAgIHZhciBtb2JpbGVfbWVudV9tYWluID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXRvcG5hdl9tb2JpbGVfbWVudV9tYWluJyk7CiAgICAgICAgICAgIG1vYmlsZV9tZW51X21haW4uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CgogICAgICAgICAgICAvLyBDbG9zZSBNZW51CiAgICAgICAgICAgIHZhciBtb2JpbGVfaGVhZGVyX2Nsb3NlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXRvcG5hdl9tb2JpbGVfaGVhZGVyX2Nsb3NlJyk7CiAgICAgICAgICAgIG1vYmlsZV9oZWFkZXJfY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfbWFpbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIFRvZ2dsZSBTZXR0aW5ncwogICAgICAgICAgICB2YXIgbW9iaWxlX21lbnVfc2V0dGluZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9tZW51X3NldHRpbmdzJyk7CiAgICAgICAgICAgIHZhciB0b3BuYXYyMDE1X21vYmlsZV9oZWFkZXJfc2V0dGluZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9oZWFkZXJfc2V0dGluZ3MnKTsKICAgICAgICAgICAgdG9wbmF2MjAxNV9tb2JpbGVfaGVhZGVyX3NldHRpbmdzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIG1vYmlsZV9tZW51X3NldHRpbmdzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfbWFpbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgICAgdmFyIHRvcG5hdjIwMTVfbW9iaWxlX2hlYWRlcl9zZXR0aW5nc19jbG9zZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9zZXR0aW5zX2Nsb3NlJyk7CiAgICAgICAgICAgICAgICB0b3BuYXYyMDE1X21vYmlsZV9oZWFkZXJfc2V0dGluZ3NfY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfc2V0dGluZ3Muc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICAgICAgICBtb2JpbGVfbWVudV9tYWluLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICB9LCBmYWxzZSk7CiAgICB9OwoKICAgIHZhciBtb2JpbGVBbGJ1bXNFbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9oZWFkZXJfYWxidW1zJyk7CiAgICBpZiAobW9iaWxlQWxidW1zRWxlKSB7CiAgICAgICAgbW9iaWxlQWxidW1zRWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHZhciBtb2JpbGVfbWVudV9hbGJ1bXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9hbGJ1bV9saXN0Jyk7CiAgICAgICAgICAgIG1vYmlsZV9tZW51X2FsYnVtcy5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CgogICAgICAgICAgICAvLyBDbG9zZQogICAgICAgICAgICB2YXIgbW9iaWxlX2FsYnVtc19jbG9zZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy10b3BuYXZfbW9iaWxlX2FsYnVtX2xpc3RfY2xvc2UnKTsKICAgICAgICAgICAgaWYgKG1vYmlsZV9hbGJ1bXNfY2xvc2UpIHsKICAgICAgICAgICAgICAgIG1vYmlsZV9hbGJ1bXNfY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfYWxidW1zLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSwgZmFsc2UpOwogICAgfTsKCgoKLy8gXl5eXl5eXl5eXl5eXl5eXl5eXl4KLy8gQUZURVIgTU9CSUxFIE5BViBURVNUIFJFQ09OQ0lMRSBXSVRIIFRIRSBgbW9iaWxlX21lbnVfc2NyaXB0LnBodG1sYAovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgLy8gVVNFUiBNRVNTQUdFCgogICAgLy8gU2hvdyBub3RpZmljYXRpb24gaWYgaXQgaXMgdGhlIGNhc2UKICAgIC8vIFdlIHdyYXAgdGhpcyBpbiBhIHNldFRpbWVvdXQgc2luY2UgdGhlIG5vdGlmaWNhdGlvbnMgc2hvdWxkCiAgICAvLyBoYXZlIGEgbG93ZXIgcHJpb3JpdHkgaW4gdGVybXMgb2YgdmlzdWFsIGNvbXBhcmVkIHRvIG90aGVyCiAgICAvLyBpdGVtcyBvbiB0aGUgcGFnZS4KICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgLy8gRE9NIEVsZW1lbnRzCiAgICAgICAgdmFyIGF2YXRhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3BuYXZfbWVudV9hdmF0YXInKTsKICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBhdmF0YXIgdGhlbiBzdG9wIGl0CiAgICAgICAgaWYgKCFhdmF0YXIpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIGJ1YmJsZSA9IGF2YXRhci5xdWVyeVNlbGVjdG9yKCcudG9wbmF2X21lbnVfYXZhdGFyX2J1YmJsZScpOwogICAgICAgIHZhciBkcm9wZG93biA9IGF2YXRhci5xdWVyeVNlbGVjdG9yKCcjdG9wbmF2X3VzZXJfZHJvcGRvd24nKTsKICAgICAgICAvL3ZhciBtZXNzYWdlID0gYXZhdGFyLnF1ZXJ5U2VsZWN0b3IoJy50b3BuYXZfdXNlcl9tZW51X21lc3NhZ2UnKTsKICAgICAgICAvL3ZhciBjbG9zZSA9IGF2YXRhci5xdWVyeVNlbGVjdG9yKCcudG9wbmF2X3VzZXJfbWVudV9tZXNzYWdlX2Nsb3NlJyk7CiAgICAgICAgdmFyIG9uX2hvdmVyID0gZmFsc2U7CgogICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGJ1YmJsZSB0aGVuIHN0b3AgaXQKICAgICAgICBpZiAoYnViYmxlKSB7CiAgICAgICAgICAgIGJ1YmJsZS5jbGFzc0xpc3QuYWRkKCdvbicpOwogICAgICAgIH0KCiAgICAgICAgLy8gQW5kIHdlIGF0dGFjaCBoaWRlIHRoZSBidWJibGUKICAgICAgICBhdmF0YXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChvbl9ob3ZlcikgcmV0dXJuOwoKICAgICAgICAgICAgb25faG92ZXIgPSB0cnVlOwoKICAgICAgICAgICAgaWYgKGJ1YmJsZSkgewogICAgICAgICAgICAgICAgYnViYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ29uJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNhdmUgcmVtb3ZlZCBzdGF0ZSBbMSBtZWFucyB0aGUgdXNlciBvcGVuIHRoZSBkcm9wZG93bl0KICAgICAgICAgICAgc3RvcmVfdXNlcl9tZXNzYWdlX3NldHRpbmdzKDEpOwoKICAgICAgICB9LCBmYWxzZSk7CgogICAgICAgIC8vIFN0b3JlIHN0YXR1cyBvZiB1c2VyIG5hdiBtZXNzYWdlIChidWJibGUgY2xvc2VkIFsxXSwgbWVzc2FnZSBoaWRkZW4gWzJdKQogICAgICAgIGZ1bmN0aW9uIHN0b3JlX3VzZXJfbWVzc2FnZV9zZXR0aW5ncyh2YWx1ZSkgewogICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgogICAgICAgICAgICB4aHIub3BlbignUE9TVCcsICcvc2V0dGluZ3MvbmF2Jyk7CiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0Jyk7CiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7CiAgICAgICAgICAgIHhoci5zZW5kKCdtZXNzYWdlX3N0YXRlPScgKyB2YWx1ZSArICcmdG9rZW49JyArIHZpbWVvLnhzcmZ0KTsKCiAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gaGFuZGxlLiBXZSBob3BlIGZvciB0aGUgYmVzdCBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH07CgogICAgfSwgMTAwMCk7Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwo8L3NjcmlwdD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3cmFwX2NvbnRlbnQgdmFyaWFudC12MiI+CiAgICAgICAgICAgICAgICAKICAgIAogICAgCiAgICAgICAgCjxkaXYgY2xhc3M9ImFwcF9iYW5uZXJfY29udGFpbmVyIj4KCiAgICA8ZGl2IGNsYXNzPSJhcHBfYmFubmVyIGhpZGUganMtYXBwX2Jhbm5lciBqcy1kZWVwbGluay1icmFuY2giPgoKICAgICAgICA8YnV0dG9uIGNsYXNzPSJhcHBfYmFubmVyX2Nsb3NlIGpzLWFwcF9iYW5uZXJfY2xvc2UiPiZ0aW1lczs8L2J1dHRvbj4KCiAgICAgICAgPGRpdiBjbGFzcz0iYXBwX2Jhbm5lcl9pY29uX3dyYXBwZXIiPgogICAgICAgICAgICA8c3ZnIGNsYXNzPSJhcHBfYmFubmVyX2ljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjQgNi42NDNDMjQgMTEuMjg2IDE1IDIyIDEwLjg3NSAyMiA2IDIyIDYgNy43MTQgMy4wMTMgNy43MTRjLS4zODggMC0xLjg4MyAxLjA3LTEuODgzIDEuMDdMMCA3LjM1OHM1LjI1LTUgNy41LTVjNC41IDAgMyAxMi41IDUuNjI1IDEyLjUgMS41IDAgNi43NS03Ljg1NyAyLjI1LTcuODU3LS43NSAwLTEuNS4zNTctMS41LjM1N0MxNSAzLjc4NyAxNy4yNSAyIDIwLjYyNSAyIDIyLjg3NSAyIDI0IDMuNzg2IDI0IDYuNjQzeiIvPjwvc3ZnPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJhcHBfYmFubmVyX2N0YSI+CiAgICAgICAgICAgIFdhdGNoIGluIG91ciBhcHAgICAgICAgIDwvZGl2PgoKICAgICAgICA8YQogICAgICAgICAgICBjbGFzcz0iYXBwX2Jhbm5lcl9idXR0b24ganMtYXBwX2Jhbm5lcl9vcGVuX2FwcCIKICAgICAgICAgICAgZGF0YS1kZWVwLWxpbms9InZpZGVvcy8xNDEzNDkxOTQiICAgICAgICAgICAgZGF0YS1zb3VyY2UtY29udGV4dD0iY2xpcCIgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFwcF9iYW5uZXJfYnV0dG9uX3RleHQiPk9wZW4gaW4gYXBwPC9zcGFuPgogICAgICAgIDwvYT4KCiAgICA8L2Rpdj4KCjwvZGl2PgoKICAgICAgICAKICAgICAgICAKCjxzY3JpcHQ+CiAgICB3aW5kb3cudmltZW8gPSB3aW5kb3cudmltZW8gfHwge307CgogICAgCiAgICB3aW5kb3cudmltZW8uY2xpcF9wYWdlX2NvbmZpZyA9IHsiY2xpcCI6eyJpZCI6MTQxMzQ5MTk0LCJ0aXRsZSI6IkJ1dHRlcm51dCBTcXVhc2ggUmF2aW9saSIsImRlc2NyaXB0aW9uIjpudWxsLCJ1cGxvYWRlZF9vbiI6IjIwMTUtMTAtMDQgMTc6MjA6MTUiLCJ1cGxvYWRlZF9vbl9yZWxhdGl2ZSI6IjUgeWVhcnMgYWdvIiwidXBsb2FkZWRfb25fZnVsbCI6IlN1bmRheSwgT2N0b2JlciA0LCAyMDE1IGF0IDU6MjAgUE0gRVNUIiwiaXNfc3BhdGlhbCI6ZmFsc2UsImlzX2hkciI6ZmFsc2UsInByaXZhY3kiOnsiaXNfcHVibGljIjp0cnVlLCJ0eXBlIjoiYW55Ym9keSIsImRlc2NyaXB0aW9uIjoiUHVibGljIn0sImR1cmF0aW9uIjp7InJhdyI6NzA3LCJmb3JtYXR0ZWQiOiIxMTo0NyJ9LCJpc19saWtlZCI6ZmFsc2UsImlzX3VuYXZhaWxhYmxlIjpmYWxzZSwibGlrZXNfdXJsIjoiXC8xNDEzNDkxOTRcL2xpa2VzIiwiaXNfbGl2ZSI6ZmFsc2UsInVubGlzdGVkX2hhc2giOm51bGx9LCJvd25lciI6eyJpZCI6MjYxMjE2MDQsImRpc3BsYXlfbmFtZSI6IkhhbGYgQmFrZWQgSGFydmVzdCIsImhhc19hZHZhbmNlZF9zdGF0cyI6dHJ1ZSwiaXNfcHJvX2xhcHNlZCI6ZmFsc2UsImlzX3BhaWQiOnRydWUsImJhZGdlIjp7InR5cGUiOiJwcm8iLCJhbHRfdGV4dCI6IkxlYXJuIG1vcmUgYWJvdXQgVmltZW8gUFJPIiwidXJsIjoiXC9wcm8iLCJ0ZXh0IjoiUFJPIiwicHJpbWFyeV90YWciOiJzcGFuIiwiY2xhc3NOYW1lIjoiaXJpc19iYWRnZSBpcmlzX2JhZGdlLS1wcm8gYmFkZ2UgYmFkZ2UtLXBybyBiYWRnZV9wcm8iLCJndG1fY2xpY2tfZXZlbnQiOiJiYWRnZV9wcm9fY2xpY2siLCJmYXRhbF9hdHRyYWN0aW9uX2V2ZW50IjoiY29udGFpbmVyOmJhZGdlfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwcm8ifSwicG9ydHJhaXQiOnsic3JjIjoiaHR0cHM6XC9cL2kudmltZW9jZG4uY29tXC9wb3J0cmFpdFwvZGVmYXVsdHMtYmx1ZV83NXg3NS5wbmciLCJzcmNfMngiOiJodHRwczpcL1wvaS52aW1lb2Nkbi5jb21cL3BvcnRyYWl0XC9kZWZhdWx0cy1ibHVlXzE1MHgxNTAucG5nIn0sImlzX21vZCI6ZmFsc2UsInVybCI6IlwvaGFsZmJha2VkaGFydmVzdCIsInZlcmlmaWVkIjp0cnVlLCJpc19mb2xsb3dpbmciOmZhbHNlLCJpc19hdmFpbGFibGVfZm9yX2hpcmUiOm51bGx9LCJvbmRlbWFuZCI6bnVsbCwiYnJhbmRfY2hhbm5lbCI6bnVsbCwiYXBpX3VybCI6ImFwaS52aW1lby5jb20iLCJqd3QiOiJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpJVXpJMU5pSjkuZXlKbGVIQWlPakUyTURNNU1Ea3pPREFzSW5WelpYSmZhV1FpT201MWJHd3NJbUZ3Y0Y5cFpDSTZOVGcwTnprc0luTmpiM0JsY3lJNkluQjFZbXhwWXlCemRHRjBjeUlzSW5SbFlXMWZkWE5sY2w5cFpDSTZiblZzYkgwLk5pMnB5SlpreHJwczhhTHRBZ0J1NGVWVmpDUG5Qd1pGU01aTkdSUXE0YkkiLCJjaGF0IjpudWxsLCJjdXJfdXNlciI6bnVsbCwic3RhdHVzIjp7InN0YXRlIjoicmVhZHkifSwiY29weXJpZ2h0X3N0YXR1cyI6eyJpc19ibG9ja2VkIjpmYWxzZX0sImNvbnRlbnRfYmxvY2tfc3RhdHVzIjp7ImlzX2Jsb2NrZWQiOmZhbHNlLCJtZXNzYWdlIjpudWxsLCJjb250aW51b3VzX3BsYXlfZW5hYmxlZCI6ZmFsc2UsImFsbG93QnlwYXNzIjp0cnVlfSwicGxheWVyIjp7ImNvbmZpZ191cmwiOiJodHRwczpcL1wvcGxheWVyLnZpbWVvLmNvbVwvdmlkZW9cLzE0MTM0OTE5NFwvY29uZmlnP2F1dG9wYXVzZT0xJmJ5bGluZT0wJmNvbGxlY3Rpb25zPTEmY29udGV4dD1WaW1lbyU1Q0NvbnRyb2xsZXIlNUNDbGlwQ29udHJvbGxlci5tYWluJmRlZmF1bHRfdG9faGQ9MSZvdXRybz1ub3RoaW5nJnBvcnRyYWl0PTAmc2hhcmU9MSZ0aXRsZT0wJndhdGNoX3RyYWlsZXI9MCZzPTM4ZjdhOGVjYWI4Yzg1NzlmMTM5NzU5YzJmODdhNzQ1OTFkYjE1NzhfMTYwMzkyMzc1NSIsInBsYXllcl91cmwiOiJwbGF5ZXIudmltZW8uY29tIiwiZGltZW5zaW9ucyI6eyJoZWlnaHQiOjU0MCwid2lkdGgiOjk2MH0sInBvc3RlciI6eyJ1cmwiOiJodHRwczpcL1wvaS52aW1lb2Nkbi5jb21cL3ZpZGVvXC81MzgzMjA4OTQuanBnP213PTIwMDAmbWg9MTA4MCZxPTcwIn19LCJzaGFyZV9lbmFibGVkIjp0cnVlLCJjb250aW51b3VzX3BsYXlfZW5hYmxlZCI6dHJ1ZSwic2VuZF90b193aXBzdGVyX2VuYWJsZWQiOmZhbHNlLCJ0aHVtYm5haWwiOnsic3JjIjoiaHR0cHM6XC9cL2kudmltZW9jZG4uY29tXC92aWRlb1wvNTM4MzIwODk0XzE5MHgxMDcuanBnIiwic3JjXzJ4IjoiaHR0cHM6XC9cL2kudmltZW9jZG4uY29tXC92aWRlb1wvNTM4MzIwODk0XzM4MHgyMTQuanBnIiwid2lkdGgiOjE5MCwiaGVpZ2h0IjoxMDcsImlkIjo1MzgzMjA4OTR9LCJhZHMiOnsiaG91c2VfYWRzX2VuYWJsZWQiOmZhbHNlLCJ0aGlyZF9wYXJ0eV9hZHNfZW5hYmxlZCI6ZmFsc2V9LCJjb250ZW50X3JhdGluZyI6bnVsbCwibm90aWZpY2F0aW9ucyI6W10sImNhdGVnb3JpZXNfY29uZmlnIjp7ImNhdGVnb3JpZXMiOlt7Im5hbWUiOiJDb29raW5nIiwidXJsIjoiXC9jYXRlZ29yaWVzXC9mb29kXC9jb29raW5nXC92aWRlb3MifSx7Im5hbWUiOiJGb29kIiwidXJsIjoiXC9jYXRlZ29yaWVzXC9mb29kIn1dLCJ0b3RhbF9jYXRlZ29yaWVzIjoyfSwibXVzaWNfdHJhY2siOm51bGwsImNjX2xpY2Vuc2UiOm51bGwsImNyZWRpdHMiOnsidG90YWxfY3JlZGl0cyI6eyJyYXciOjAsImZvcm1hdHRlZCI6IjAifSwiZGlzcGxheWVkX2NyZWRpdHMiOltdfSwic3RyZWFtIjp7ImlkIjpudWxsLCJwb3MiOjB9LCJjb2xsZWN0aW9uX2FkZGVyIjp7ImVuYWJsZWQiOnRydWV9LCJyZWNhcHRjaGFfc2l0ZV9rZXkiOiI2TGVSQ0x3U0FBQUFBT0oxYmFfeHFkM05CT2xWNVBfWFJXSlZFUGR3IiwiY2xpcF9zdGF0cyI6eyJlbmFibGVkIjpmYWxzZX0sImRvd25sb2FkX2NvbmZpZyI6W10sImhhc19yZXZpZXdfbW9kZXMiOmZhbHNlLCJzdXJ2ZXlfdXJsIjoiaHR0cHM6XC9cL3d3dy5tYXJrZXRpbmdyZXNlYXJjaHJlc291cmNlcy5jb21cL2ltYWdlc1wvb3ZtMDA1MTZcL21yci5hc3A/SS5Vc2VyMT1PJnVzZXI9bG9nZ2Vkb3V0JmNsaXA9MTQxMzQ5MTk0JnZ1aWQ9IiwiZGF0YV9sYXllciI6eyJjbGlwX2lkIjoxNDEzNDkxOTQsInBhZ2VfcGF0aCI6IlwvMTQxMzQ5MTk0IiwiY3JlYXRvcl9pZCI6MjYxMjE2MDQsImNyZWF0b3JfdXNlcl90eXBlIjoicHJvIiwidmlkZW9fY2F0ZWdvcmllcyI6IkNvb2tpbmcsRm9vZCIsInByaXZhY3kiOiJhbnlib2R5Iiwic3RhZmZfcGljayI6Im5vIiwidXNlcl9pZCI6bnVsbCwicGFnZV90eXBlIjoiVmlkZW8ifSwicHJlZl90aXBzIjp7ImZpbGVfdHJhbnNmZXJfdG91cl9wb2ludCI6eyJrZXkiOiJ2c3RwZnQiLCJ2YWx1ZSI6ZmFsc2V9fX07CgogICAgLy8gQXV0b3BsYXkgdGVzdCBmb3Igb25zaXRlIHJlZmVycmFscyB0byBjbGlwIHBhZ2UKICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGNsaXAgPSB3aW5kb3cudmltZW8uY2xpcF9wYWdlX2NvbmZpZzsKICAgICAgICB2YXIgaXNPd25lciA9IGNsaXAuY3VyX3VzZXIgPyBjbGlwLmN1cl91c2VyLmlkID09PSBjbGlwLm93bmVyLmlkIDogZmFsc2U7CiAgICAgICAgdmFyIGhhc0F1dG9wbGF5UGFyYW0gPSAvKFw/fCYpYXV0b3BsYXk9MSgmfCQpLy50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKICAgICAgICB2YXIgaGFzT25zaXRlUmVmZXJyZXIgPSB3aW5kb3cudmltZW9fZXNpLmNvbmZpZy5vbnNpdGVfcmVmZXJyZXI7CgogICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYXV0b3BsYXkgcmVmcmVzaGVzIGFuZCBoaXN0b3J5IHRyYXZlcnNhbHMKICAgICAgICB2YXIgaXNOZXdQYWdlID0gd2luZG93LnBlcmZvcm1hbmNlLm5hdmlnYXRpb24udHlwZSA9PT0gMDsKCiAgICAgICAgLy8gSWYgd2UgcGFzcyBhbGwgdGhlIGNvbmRpdGlvbnMgb3ZlcnJpZGUgcGxheWVyIGNvbmZpZyB3aXRoIG5ldyBvbmUgaW5jbHVkaW5nIGF1dG9wbGF5IHBhcmFtCiAgICAgICAgaWYgKGlzTmV3UGFnZSAmJiBoYXNPbnNpdGVSZWZlcnJlciAmJiAhaGFzQXV0b3BsYXlQYXJhbSAmJiAhaXNPd25lcikgewogICAgICAgICAgICB3aW5kb3cudmltZW8uY2xpcF9wYWdlX2NvbmZpZy5wbGF5ZXIgPSB7ImNvbmZpZ191cmwiOiJodHRwczpcL1wvcGxheWVyLnZpbWVvLmNvbVwvdmlkZW9cLzE0MTM0OTE5NFwvY29uZmlnP2F1dG9wYXVzZT0xJmF1dG9wbGF5PTEmYnlsaW5lPTAmY29sbGVjdGlvbnM9MSZjb250ZXh0PVZpbWVvJTVDQ29udHJvbGxlciU1Q0NsaXBDb250cm9sbGVyLm1haW4mZGVmYXVsdF90b19oZD0xJm91dHJvPW5vdGhpbmcmcG9ydHJhaXQ9MCZzaGFyZT0xJnRpdGxlPTAmd2F0Y2hfdHJhaWxlcj0wJnM9NDY5N2MyZjA2MzAxMmMzMGRkNzE0NzQ1MmJmYTA0ZDQ4MTc3MTJjM18xNjAzOTIzNzU1IiwicGxheWVyX3VybCI6InBsYXllci52aW1lby5jb20iLCJkaW1lbnNpb25zIjp7ImhlaWdodCI6NTQwLCJ3aWR0aCI6OTYwfSwicG9zdGVyIjp7InVybCI6Imh0dHBzOlwvXC9pLnZpbWVvY2RuLmNvbVwvdmlkZW9cLzUzODMyMDg5NC5qcGc/bXc9MjAwMCZtaD0xMDgwJnE9NzAifX07CiAgICAgICAgfQogICAgfSgpKTsKPC9zY3JpcHQ+CgogICAgPHNjcmlwdD4KICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy52aW1lbyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHdpbmRvdy52aW1lby5jbGlwcyA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgd2luZG93LnZpbWVvID0gd2luZG93LnZpbWVvIHx8IHt9OwogICAgICAgICAgICB3aW5kb3cudmltZW8uY2xpcHMgPSB3aW5kb3cudmltZW8uY2xpcHMgfHwge307CiAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHdpbmRvdy52aW1lby5jbGlwX3BhZ2VfY29uZmlnLnBsYXllci5jb25maWdfdXJsICwgdHJ1ZSk7CiAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy52aW1lby5jbGlwc1snMTQxMzQ5MTk0J10gPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOwogICAgICAgICAgICB9OwogICAgICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTsKICAgICAgICAgICAgeGhyLnNlbmQoKTsKICAgICAgICB9CiAgICA8L3NjcmlwdD4KCjwhLS1baWYgbHRlIElFIDldPgogICAgPHNjcmlwdD53aW5kb3cubG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24gKyAnP2xpdGU9MSc7PC9zY3JpcHQ+CjwhW2VuZGlmXS0tPgoKPGRpdiBpZD0ib25ib2FyZGluZ19tb3VudCI+PC9kaXY+Cgo8bWFpbiBpZD0ibWFpbiIgY2xhc3M9ImlzX2xvYWRpbmciPgogICAgPGRpdiBjbGFzcz0iaXJpc19ncmlkIGlyaXNfZ3JpZF9mcDk2MCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2xpcF9tYWluIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxheWVyX2FyZWEiPgogICAgICAgICAgICAgICAgPG5vc2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2kudmltZW9jZG4uY29tL3ZpZGVvLzUzODMyMDg5NC5qcGc/bXc9MTkyMCZhbXA7bWg9MTA4MCZhbXA7cT03MCIgYWx0PSIiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAwIGF1dG87IG1heC1oZWlnaHQ6IDU0MHB4OyIgLz4KICAgICAgICAgICAgICAgIDwvbm9zY3JpcHQ+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPG5vc2NyaXB0PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2xpcF9tYWluLWNvbnRlbnQgaXJpc19ncmlkLXdyYXBwZXItLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlyaXNfZ3JpZC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHUtY29sbGFwc2UgY2xpcC1ub3RpZmljYXRpb24iIHN0eWxlPSJtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDEuNWVtOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpcmlzX25vdGlmaWNhdGlvbiBpcmlzX25vdGlmaWNhdGlvbi1jbGlwIGlyaXNfbm90aWZpY2F0aW9uLWNsaXAtLWNhdXRpb24gaXJpc19ub3RpZmljYXRpb24tLW5vLWNsb3NlIGNsZWFyZml4IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCB0byBleHBlcmllbmNlIFZpbWVvIGluIGFsbCBvZiBpdHMgZ2xvcnkuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXJpc19ncmlkLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2xpcF9pbmZvLXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNsaXBfaW5mbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz0iY2xpcF9pbmZvLWhlYWRlciI+QnV0dGVybnV0IFNxdWFzaCBSYXZpb2xpPC9oMT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjbGlwX2luZm8tc3VibGluZS0td2F0Y2ggY2xpcF9pbmZvLXN1YmxpbmUtLWlubGluZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ1c2VyYnlsaW5lLXN1YmxpbmUgdXNlcmJ5bGluZS1zdWJsaW5lLS1sZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5mcm9tPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InVzZXJsaW5rIHVzZXJsaW5rLS1tZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2hhbGZiYWtlZGhhcnZlc3QiPkhhbGYgQmFrZWQgSGFydmVzdDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PSItMSIgaHJlZj0iL3BybyIgdGl0bGU9IkxlYXJuIG1vcmUgYWJvdXQgVmltZW8gUFJPIiBkYXRhLWd0bS1jbGljaz0iYmFkZ2VfcHJvX2NsaWNrIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpiYWRnZXxjb21wb25lbnQ6dXBncmFkZV9saW5rfGtleXdvcmQ6cHJvIj4KICAgIDxzcGFuIGNsYXNzPSJpcmlzX2JhZGdlIGlyaXNfYmFkZ2UtLXBybyBiYWRnZSBiYWRnZS0tcHJvIGJhZGdlX3BybyI+CiAgICAgICAgUFJPICAgIDwvc3Bhbj4KICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNsaXBfaW5mby10aW1lIj48dGltZSBkYXRldGltZT0iMjAxNS0xMC0wNFQxNzoyMDoxNS0wNDowMCIgdGl0bGU9IlN1bmRheSwgT2N0b2JlciA0LCAyMDE1IGF0IDU6MjAgUE0iPjUgeWVhcnMgYWdvPC90aW1lPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2xpcF9kZXRhaWxzIGlyaXNfZGl2aWRlci0tZGFyayBpcmlzX2RpdmlkZXItdG9wIGlyaXNfZGl2aWRlci10b3AtLW0gaXJpc19kaXZpZGVyLWJvdCBpcmlzX2RpdmlkZXItYm90LS1tIHUtY29sbGFwc2UgY2xlYXJmaXgiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpcmlzX2dyaWQtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjbGlwX2RldGFpbHMtZGVzY3JpcHRpb24gZGVzY3JpcHRpb24td3JhcHBlciBpcmlzX2Rlc2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmaXJzdCI+PC9wPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9ub3NjcmlwdD4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L21haW4+Cgo8c2NyaXB0PgogICAgd2luZG93LmNhbl9wcmVsb2FkID0gdHJ1ZTsKCiAgICA8L3NjcmlwdD4KCgo8c2NyaXB0Pgpjb25zb2xlLmxvZygnJWMgXG5cCuKOnCAgICAgICBAQEAmICAgICAgIEBAQEBAQFxuXArijpwgICAgI0BAQEBAQEAgICAgJkBAQEBAQEBAICAgICAgIEJ1aWx0IHVzaW5nOlxuXArijpwgICNAQEBAQEBAQEAuICAlJSZAQEBAQEBAICAgICAgICDigKIgUmVhY3QgKyBGbHV4XG5cCuKOnCAgICAgICZAQEBAQCUgICAgIChAQEBAQCggICAgICAg4oCiIEVTNlxuXArijpwgICAgICAgQEBAQEBAICAgICBAQEBAQEAgICAgICAgIOKAoiBGZXRjaCBBUElcblwK4o6cICAgICAgICVAQEBAQCggIC5AQEBAQCggICAgICAgICDigKIgRmxleGJveFxuXArijpwgICAgICAgIEBAQEBAQChAQEBAQEBcblwK4o6cICAgICAgICAvQEBAQEBAQEBAQCUgICAgICAgICAgICBMaWtlIHBsYXlpbmcgd2l0aCBuZXcgdGVjaG5vbG9neSwgdG9vP1xuXArijpwgICAgICAgICAmQEBAQEBAQCUgICAgICAgICAgICAgIGh0dHBzOi8vdmltZW8uY29tL2pvYnNcblwK4o6cICAgICAgICAgIEBAQEBAI1xuXApcblwKJywgJ2NvbG9yOiAjMDBhZGVmOycpOwo8L3NjcmlwdD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPGZvb3RlciBjbGFzcz0iZm9vdGVyX3YyIGZvb3Rlcl92Mi0tcmVzcG9uc2l2ZSI+CiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fc2l0ZW1hcCI+CiAgICA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfX2xpbmtzIj4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rIGZvb3Rlcl92Ml9hY2NvcmRpb24iPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX2NoZWNrIiB0eXBlPSJjaGVja2JveCI+CiAgICAgICAgICAgIDxoNCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlci10ZXh0Ij5WSU1FTzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvaDQ+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWxpc3QgZm9vdGVyX3YyX2FjY29yZGlvbl9fbWVudSI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvdXBncmFkZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ByaWNpbmciCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6dmltZW98a2V5d29yZDpwcmljaW5nIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgUHJpY2luZyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii91cGxvYWQiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGxvYWRfY2xpY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6dmltZW98a2V5d29yZDp1cGxvYWQiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvY2hhbm5lbHMvc3RhZmZwaWNrcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3N0YWZmX3BpY2tzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnZpbWVvfGtleXdvcmQ6c3RhZmZfcGlja3MiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTdGFmZiBQaWNrcyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9vbmRlbWFuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX29uX2RlbWFuZF9jbGljayIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp2aW1lb3xrZXl3b3JkOm9uX2RlbWFuZCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIE9uIERlbWFuZCAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tL290dCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ZpbWVvX290dCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp2aW1lb3xrZXl3b3JkOm90dCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFZpbWVvIE9UVCAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9zaXRlX21hcCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3NpdGVfbWFwX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnZpbWVvfGtleXdvcmQ6c2l0ZV9tYXAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTaXRlIG1hcCAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJmb290ZXJfdjJfX2xpbmsgZm9vdGVyX3YyX2FjY29yZGlvbiI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fY2hlY2siIHR5cGU9ImNoZWNrYm94Ij4KICAgICAgICAgICAgPGg0IGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyLXRleHQiPlNPTFVUSU9OUzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvaDQ+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWxpc3QgZm9vdGVyX3YyX2FjY29yZGlvbl9fbWVudSI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZmVhdHVyZXMvdmlkZW8tcGxheWVyIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfdmlkZW9fcGxheWVyIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmZlYXR1cmVzfGtleXdvcmQ6dmlkZW9fcGxheWVyIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8gUGxheWVyICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2NyZWF0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2NyZWF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOmNyZWF0ZSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9mZWF0dXJlcy92aWRlby1wcml2YWN5IgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfcHJpdmFjeSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOnByaXZhY3kiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBQcml2YWN5ICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2ZlYXR1cmVzL3ZpZGVvLWNvbGxhYm9yYXRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19jb2xsYWJvcmF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmZlYXR1cmVzfGtleXdvcmQ6Y29sbGFib3JhdGlvbiIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhYm9yYXRpb24gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZmVhdHVyZXMvdmlkZW8tbWFya2V0aW5nIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfZGlzdHJpYnV0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmZlYXR1cmVzfGtleXdvcmQ6ZGlzdHJpYnV0aW9uIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgRGlzdHJpYnV0aW9uICYgbWFya2V0aW5nICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2ZlYXR1cmVzL3ZpZGVvLW1vbmV0aXphdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX21vbmV0aXphdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOm1vbmV0aXphdGlvbiIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIE1vbmV0aXphdGlvbiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9saXZlIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfbGl2ZV9zdHJlYW1pbmciCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpsaXZlX3N0cmVhbWluZyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIExpdmUgc3RyZWFtaW5nICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2ZlYXR1cmVzL3ZpZGVvLWFuYWx5dGljcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2FuYWx5dGljcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOmFuYWx5dGljcyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5dGljcyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9mZWF0dXJlcy9vbmxpbmUtdmlkZW8taG9zdGluZyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2hvc3RpbmciCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpob3N0aW5nIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgSG9zdGluZyAmIG1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZW50ZXJwcmlzZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2VudGVycHJpc2UiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZW50ZXJwcmlzZSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEVudGVycHJpc2UgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZm9yLWhpcmUiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19mb3JfaGlyZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpzb2x1dGlvbnN8a2V5d29yZDpmb3JfaGlyZSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEZvciBIaXJlICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL3N0b2NrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfc3RvY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6c3RvY2siCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTdG9jayAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJmb290ZXJfdjJfX2xpbmsgZm9vdGVyX3YyX2FjY29yZGlvbiI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fY2hlY2siIHR5cGU9ImNoZWNrYm94Ij4KICAgICAgICAgICAgPGg0IGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyLXRleHQiPkFQUFM8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19yZXZlYWwiPgogICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImlyaXNfaWMgaXMtLTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA4IDgiPjxwYXRoIGQ9Ik03LjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMEw0IDQuNTg2IDEuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwLS4zOS4zOS0uMzkgMS4wMjQgMCAxLjQxNGwzIDNjLjM5LjM5IDEuMDI0LjM5IDEuNDE0IDBsMy0zYy4zOS0uMzkuMzktMS4wMjQgMC0xLjQxNHoiLz48L3N2Zz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2g0PgogICAgICAgICAgICA8dWwgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1saXN0IGZvb3Rlcl92Ml9hY2NvcmRpb25fX21lbnUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2FwcHMuYXBwbGUuY29tL2FwcC9hcHBsZS1zdG9yZS9pZDEzNTY2ODY3NjM/cHQ9NDE3NzMxJmFtcDtjdD1sb2hwJmFtcDttdD04IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDphcHBzfGtleXdvcmQ6bWFjb3MiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpbWVvIGZvciBtYWNPUyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2l0dW5lcy5hcHBsZS5jb20vYXBwL3ZpbWVvL2lkNDI1MTk0NzU5P210PTgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDppb3MiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpbWVvIGZvciBpT1MgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS52aW1lby5hbmRyb2lkLnZpZGVvYXBwJmFtcDtyZWZlcnJlcj11dG1fc291cmNlJTNEZm9vdGVyJTI2dXRtX21lZGl1bSUzRGxvaHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDphbmRyb2lkIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaW1lbyBmb3IgQW5kcm9pZCAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2FwcHMuYXBwbGUuY29tL3VzL2FwcC92aW1lby1jcmVhdGUvaWQxNDkxNzkxNTEzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDphcHBzfGtleXdvcmQ6Y3JlYXRlX2lvcyIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gQ3JlYXRlIGZvciBpT1MgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS52aW1lb2NyZWF0ZS52aWRlb2VkaXRvci5tb3ZpZW1ha2VyJmFtcDtyZWZlcnJlcj11dG1fc291cmNlJTNEZm9vdGVyJTI2dXRtX21lZGl1bSUzRGxvaHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDpjcmVhdGVfYW5kcm9pZCIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gQ3JlYXRlIGZvciBBbmRyb2lkICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vbWFnaXN0by5jb20iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDptYWdpc3RvIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWdpc3RvICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fbGluayBmb290ZXJfdjJfYWNjb3JkaW9uIj4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19jaGVjayIgdHlwZT0iY2hlY2tib3giPgogICAgICAgICAgICA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXItdGV4dCI+UkVTT1VSQ0VTPC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fcmV2ZWFsIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpcmlzX2ljIGlzLS0xMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOCA4Ij48cGF0aCBkPSJNNy43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNCA0LjU4NiAxLjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMC0uMzkuMzktLjM5IDEuMDI0IDAgMS40MTRsMyAzYy4zOS4zOSAxLjAyNC4zOSAxLjQxNCAwbDMtM2MuMzktLjM5LjM5LTEuMDI0IDAtMS40MTR6Ii8+PC9zdmc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9oND4KICAgICAgICAgICAgPHVsIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstbGlzdCBmb290ZXJfdjJfYWNjb3JkaW9uX19tZW51Ij4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvaGVscCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2hlbHBfY2VudGVyX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnJlc291cmNlc3xrZXl3b3JkOmhlbHBfY2VudGVyIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgSGVscCBDZW50ZXIgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvYmxvZyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ZpbWVvX2Jsb2dfY2xpY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6dmltZW9fYmxvZyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEJsb2cgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvYmxvZy9jYXRlZ29yeS92aWRlby1zY2hvb2wiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua192aWRlb19zY2hvb2xfY2xpY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6dmlkZW9fc2Nob29sIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8gU2Nob29sICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly92aW1lby5jb20vb3R0L3Jlc291cmNlcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX290dF9yZXNvdXJjZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6b3R0X3Jlc291cmNlcyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIE9UVCBSZXNvdXJjZXMgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2RldmVsb3Blci52aW1lby5jb20iCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19kZXZlbG9wZXJzX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnJlc291cmNlc3xrZXl3b3JkOmRldmVsb3BlcnMiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXJzICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL3N0dWRlbnRzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfc3R1ZGVudHMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6c3R1ZGVudHMiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50cyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9oZWxwL2d1aWRlbGluZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua192aW1lb19ndWlkZWxpbmVzX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnJlc291cmNlc3xrZXl3b3JkOnZpbWVvX2d1aWRlbGluZXMiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBHdWlkZWxpbmVzICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fbGluayBmb290ZXJfdjJfYWNjb3JkaW9uIj4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19jaGVjayIgdHlwZT0iY2hlY2tib3giPgogICAgICAgICAgICA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXItdGV4dCI+VVBHUkFERTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvaDQ+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWxpc3QgZm9vdGVyX3YyX2FjY29yZGlvbl9fbWVudSI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvc3RvcmUvcGx1cyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3VwZ3JhZGVfcGx1cyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwbHVzIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gUGx1cyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9zdG9yZS9wcm8iCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGdyYWRlX3BybyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwcm8iCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBWaW1lbyBQUk8gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvc3RvcmUvYnVzaW5lc3MiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGdyYWRlX2J1c2luZXNzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnVwZ3JhZGVfbGlua3xrZXl3b3JkOmJ1c2luZXNzIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gQnVzaW5lc3MgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvc3RvcmUvcHJlbWl1bSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3VwZ3JhZGVfcHJlbWl1bSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwcmVtaXVtIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gUHJlbWl1bSAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9lbnRlcnByaXNlIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfdXBncmFkZV9lbnRlcnByaXNlIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnVwZ3JhZGVfbGlua3xrZXl3b3JkOmVudGVycHJpc2UiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBWaW1lbyBFbnRlcnByaXNlICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cDovL3ZpbWVvLmV4dG9sZS5jb20vd2Vic2l0ZV9mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGdyYWRlX3JlZl9mcmllbmQiCiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnVwZ3JhZGVfbGlua3xrZXl3b3JkOnJlZmVyX2FfZnJpZW5kIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXIgYSBmcmllbmQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9zZWN0aW9uPgoKICAgICAgICA8c2VjdGlvbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rIGZvb3Rlcl92Ml9hY2NvcmRpb24iPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX2NoZWNrIiB0eXBlPSJjaGVja2JveCI+CiAgICAgICAgICAgIDxoNCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlci10ZXh0Ij5DT01QQU5ZPC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fcmV2ZWFsIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpcmlzX2ljIGlzLS0xMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOCA4Ij48cGF0aCBkPSJNNy43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNCA0LjU4NiAxLjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMC0uMzkuMzktLjM5IDEuMDI0IDAgMS40MTRsMyAzYy4zOS4zOSAxLjAyNC4zOSAxLjQxNCAwbDMtM2MuMzktLjM5LjM5LTEuMDI0IDAtMS40MTR6Ii8+PC9zdmc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9oND4KICAgICAgICAgICAgPHVsIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstbGlzdCBmb290ZXJfdjJfYWNjb3JkaW9uX19tZW51Ij4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9hYm91dCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2Fib3V0X2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmNvbXBhbnl8a2V5d29yZDphYm91dF92aW1lbyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEFib3V0ICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2pvYnMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19qb2JzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmNvbXBhbnl8a2V5d29yZDpqb2JzIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgSm9icyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L3NlY3Rpb24+CiAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8YXNpZGUgaWQ9ImZvb3Rlcl90aXAiIGNsYXNzPSJmb290ZXJfdjJfX3RpcCIgYXJpYS1saXZlPSJwb2xpdGUiPgogICAgICAgICAgICA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fdGlwLWhlYWRlciI+RGlkIHlvdSBrbm93PzwvaDQ+CiAgICAgICAgICAgIDxwIGNsYXNzPSJhY3RpdmUgZm9vdGVyX3YyX190aXAtY29udGVudCI+SWYgeW91IGNvbWUgaGVyZSBvZnRlbiwgeW91IHNob3VsZCB0ZWxsIHVzIChhbmQgdGhlIHdob2xlIHdvcmxkLCByZWFsbHkpIGFib3V0IHlvdXJzZWxmIGluIHRoZSA8YSBocmVmPSIvc2V0dGluZ3MvcHJvZmlsZSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6ZGlkX3lvdV9rbm93X2JveHxjb21wb25lbnQ6cHJvZHVjdCI+YmlvIHNlY3Rpb248L2E+IG9mIHlvdXIgcHJvZmlsZS48L3A+CiAgICAgICAgPC9hc2lkZT4KICAgIDwvc2VjdGlvbj4KICAgIAogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJmb290ZXJfdjJfX2F1eGlsaWFyeSAiPgoKICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9fbGVnYWwiPgogICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9fYXV4aWxpYXJ5LWNvbnRlbnQiPgogICAgICAgICAgICA8cD5UTSArICZjb3B5OyAyMDIwIFZpbWVvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0Ij4KICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xlZ2FsLWxpc3QtaXRlbSI+CiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS00IiBocmVmPSIvdGVybXMiIHRpdGxlPSJUZXJtcyAmYW1wOyBDb25kaXRpb25zIj4KICAgICAgICAgICAgICAgICAgICBUZXJtcyAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL3ByaXZhY3kiIHRpdGxlPSJQcml2YWN5IFBvbGljeSI+CiAgICAgICAgICAgICAgICAgICAgUHJpdmFjeSAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL3ByaXZhY3kvY2FsaWZvcm5pYS1wcml2YWN5IiB0aXRsZT0iQ0EgUHJpdmFjeSI+CiAgICAgICAgICAgICAgICAgICAgQ0EgUHJpdmFjeSAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL2RtY2EiIHRpdGxlPSJDb3B5cmlnaHQgSW5mb3JtYXRpb24iPgogICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL2Nvb2tpZV9wb2xpY3kiIHRpdGxlPSJMZWFybiBtb3JlIGFib3V0IGhvdyBWaW1lbyB1c2VzIGNvb2tpZXMiPgogICAgICAgICAgICAgICAgICAgIENvb2tpZXMgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyX3YyX19hdXhpbGlhcnktY29udGVudCBmb290ZXJfdjJfX3dpdGhsb3ZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hZGUgd2l0aCA8c3ZnIGNsYXNzPSJpcmlzX2ljIGlzLS0xMiBmb290ZXJfdjJfX2xvdmVoZWFydCBmb290ZXJfdjJfX2F1eGlsaWFyeS1pY29uIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+PHBhdGggZD0iTTkgMkM3LjMxMiAyIDYgMy41IDYgMy41UzQuNjg3IDIgMyAyQzEuMzEyIDIgMCAzLjMxMiAwIDVjMCAzLjE4OCAzLjc1IDMuMDEyIDYgNiAyLjI1LTIuOTg4IDYtMi44MTIgNi02IDAtMS42ODgtMS4zMTMtMy0zLTN6Ii8+PC9zdmc+IGluIE5ZQy4gICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZm9vdGVyX3YyX19maWx0ZXJzIGZvb3Rlcl92Ml9fYXV4aWxpYXJ5LWNvbnRlbnQiPgogICAgICAgIDxzcGFuIGNsYXNzPSJsYW5ndWFnZSI+CiAgICAgICAgICAgIExhbmd1YWdlOgogICAgICAgICAgICA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS00IiBocmVmPSIjbGFuZ3VhZ2UiIG9uY2xpY2s9InZpbWVvLk1vZGFsLmNyZWF0ZSh7Y29udGVudDogJy9zZXR0aW5ncy9sb2NhbGUnLCBzaXplOiAnc21hbGwnfSk7IHJldHVybiBmYWxzZTsiIHRpdGxlPSJDaG9vc2UgYSBkaWZmZXJlbnQgbGFuZ3VhZ2UiPkVuZ2xpc2g8L2E+CiAgICAgICAgPC9zcGFuPgoKICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9vdGVyX3YyX19maWx0ZXIiPk1hdHVyZSBjb250ZW50IGZpbHRlcjogPC9zcGFuPjxhIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTQgZm9vdGVyX3YyX19maWx0ZXJzX19sYW5nIGNvbnRlbnRmaWx0ZXIganMtZm9vdGVyX2NvbnRlbnRmaWx0ZXJfbGluayIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJ2aW1lby5Nb2RhbC5jcmVhdGUoe2NvbnRlbnQ6ICcvc2V0dGluZ3MvY29udGVudHJhdGluZyd9KSIgdGl0bGU9IkNoYW5nZSB5b3VyIG1hdHVyZSBjb250ZW50IGZpbHRlciI+Tm9uZTwvYT4KICAgICAgICAgICAgPC9kaXY+Cgo8L3NlY3Rpb24+CjwvZm9vdGVyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI+CiAgICAgICAgW3sidXJsIjoiaHR0cHM6Ly92aW1lby5jb20vMTQxMzQ5MTk0IiwidGh1bWJuYWlsVXJsIjoiaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9maWx0ZXIvb3ZlcmxheT9zcmMwPWh0dHBzJTNBJTJGJTJGaS52aW1lb2Nkbi5jb20lMkZ2aWRlbyUyRjUzODMyMDg5NF8xMjgweDcyMC5qcGcmc3JjMT1odHRwcyUzQSUyRiUyRmYudmltZW9jZG4uY29tJTJGaW1hZ2VzX3Y2JTJGc2hhcmUlMkZwbGF5X2ljb25fb3ZlcmxheS5wbmciLCJlbWJlZFVybCI6Imh0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8xNDEzNDkxOTQiLCJuYW1lIjoiQnV0dGVybnV0IFNxdWFzaCBSYXZpb2xpIiwiZGVzY3JpcHRpb24iOiJUaGlzIGlzICZxdW90O0J1dHRlcm51dCBTcXVhc2ggUmF2aW9saSZxdW90OyBieSBIYWxmIEJha2VkIEhhcnZlc3Qgb24gVmltZW8sIHRoZSBob21lIGZvciBoaWdoIHF1YWxpdHkgdmlkZW9zIGFuZCB0aGUgcGVvcGxlIHdobyBsb3ZlIHRoZW0uIiwiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjgwLCJwbGF5ZXJUeXBlIjoiSFRNTDUgRmxhc2giLCJ2aWRlb1F1YWxpdHkiOiJIRCIsImR1cmF0aW9uIjoiUFQwMEgxMU00N1MiLCJ1cGxvYWREYXRlIjoiMjAxNS0xMC0wNFQxNzoyMDoxNS0wNDowMCIsImRhdGVNb2RpZmllZCI6IjIwMjAtMTAtMjdUMTM6MzE6NDgtMDQ6MDAiLCJ0aHVtYm5haWwiOnsiQHR5cGUiOiJJbWFnZU9iamVjdCIsInVybCI6Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vZmlsdGVyL292ZXJsYXk/c3JjMD1odHRwcyUzQSUyRiUyRmkudmltZW9jZG4uY29tJTJGdmlkZW8lMkY1MzgzMjA4OTRfMTI4MHg3MjAuanBnJnNyYzE9aHR0cHMlM0ElMkYlMkZmLnZpbWVvY2RuLmNvbSUyRmltYWdlc192NiUyRnNoYXJlJTJGcGxheV9pY29uX292ZXJsYXkucG5nIiwid2lkdGgiOjEyODAsImhlaWdodCI6NzIwfSwiYXV0aG9yIjp7IkB0eXBlIjoiUGVyc29uIiwibmFtZSI6IkhhbGYgQmFrZWQgSGFydmVzdCIsInVybCI6Imh0dHBzOi8vdmltZW8uY29tL2hhbGZiYWtlZGhhcnZlc3QifSwicG90ZW50aWFsQWN0aW9uIjp7IkB0eXBlIjoiVmlld0FjdGlvbiIsInRhcmdldCI6InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvMTQxMzQ5MTk0In0sImludGVyYWN0aW9uU3RhdGlzdGljIjpbeyJAdHlwZSI6IkludGVyYWN0aW9uQ291bnRlciIsImludGVyYWN0aW9uVHlwZSI6Imh0dHA6Ly9zY2hlbWEub3JnL0NvbW1lbnRBY3Rpb24iLCJ1c2VySW50ZXJhY3Rpb25Db3VudCI6MzJ9LHsiQHR5cGUiOiJJbnRlcmFjdGlvbkNvdW50ZXIiLCJpbnRlcmFjdGlvblR5cGUiOiJodHRwOi8vc2NoZW1hLm9yZy9MaWtlQWN0aW9uIiwidXNlckludGVyYWN0aW9uQ291bnQiOjM4M30seyJAdHlwZSI6IkludGVyYWN0aW9uQ291bnRlciIsImludGVyYWN0aW9uVHlwZSI6Imh0dHA6Ly9zY2hlbWEub3JnL1dhdGNoQWN0aW9uIiwidXNlckludGVyYWN0aW9uQ291bnQiOjQxMTE5fV0sIkB0eXBlIjoiVmlkZW9PYmplY3QiLCJAY29udGV4dCI6Imh0dHA6Ly9zY2hlbWEub3JnIn0seyJpdGVtTGlzdEVsZW1lbnQiOlt7IkB0eXBlIjoiTGlzdEl0ZW0iLCJwb3NpdGlvbiI6MSwiaXRlbSI6eyJAaWQiOiJodHRwczovL3ZpbWVvLmNvbS9oYWxmYmFrZWRoYXJ2ZXN0IiwibmFtZSI6IkhhbGYgQmFrZWQgSGFydmVzdCJ9fSx7IkB0eXBlIjoiTGlzdEl0ZW0iLCJwb3NpdGlvbiI6MiwiaXRlbSI6eyJAaWQiOiJodHRwczovL3ZpbWVvLmNvbS9oYWxmYmFrZWRoYXJ2ZXN0L3ZpZGVvcyIsIm5hbWUiOiJWaWRlb3MifX1dLCJAdHlwZSI6IkJyZWFkY3J1bWJMaXN0IiwiQGNvbnRleHQiOiJodHRwOi8vc2NoZW1hLm9yZyJ9XSAgICA8L3NjcmlwdD4KCjxzY3JpcHQ+CiAgICB2YXIgX19mYSA9IF9fZmEgfHwgW107CiAgICAvKioKICAgICAqIEJlY2F1c2Ugc2luZ2xlIHBhZ2UgYXBwbGljYXRpb25zIHN1Y2ggYXMgdGhlIGFwcCBzaGVsbCB3aWxsIGJlIHRyYWNraW5nCiAgICAgKiBGYXRhbCBBdHRyYWN0aW9uIHBhZ2Ugdmlld3Mgb24gUmVhY3QgbGlmZWN5Y2xlIGhvb2tzIChjb21wb25lbnREaWRNb3VudCkKICAgICAqIHdlIHdhbnQgdG8gYXZvaWQgZGlzcGF0Y2hpbmcgdGhlIHBhZ2V2aWV3IGV2ZW50IGZyb20gdGhlIFBIUCB0ZW1wbGF0ZQogICAgICogYW5kIGRlZmVyIHRoaXMgc29ydCBvZiB0cmFja2luZyBsb2dpYyB0byB0aGUgZnJvbnQgZW5kLgogICAgICoKICAgICAqIFRoaXMgY2hlY2sgYWxsb3dzIHVzIHRvIGRlY2xhcmUgaW4gYSBjb250cm9sbGVyIHdoZXRoZXIgb3Igbm90IHdlCiAgICAgKiB3YW50IHRvIGRpc3BhdGNoIHRoYXQgcHJlbGltaW5hcnkgcGFnZXZpZXcuCiAgICAgKgogICAgICogVGhlIHByb3BlcnR5IGlzIGFkZGl0aXZlIG9ubHksIGFzIHRvIG5vdCBhZmZlY3QgZXhpc3RpbmcgcGFnZXZpZXdzLgogICAgICovCiAgICAgICAgICAgIF9fZmEucHVzaChbJ3RyYWNrUGFnZXZpZXcnXSk7CiAgICAKICAgIC8qKgogICAgICogQWRkIHNlcnZlciBzaWRlIEFCTGluY29sbiBleHBlcmltZW50cyB0byBHVE0gZGF0YSBsYXllci4KICAgICAqLwogICAgCiAgICAgICAgdmFyIF9leHRlbmQgPSBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHNbMF0sbj0xLGU9YXJndW1lbnRzLmxlbmd0aDtlPm47bisrKXt2YXIgdD1hcmd1bWVudHNbbl07Zm9yKHZhciBhIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShhKSYmKHJbYV09dFthXSl9cmV0dXJuIHJ9OwoKICAgICAgICB2YXIgQ1NTX0RJUiA9ICdodHRwczovL2YudmltZW9jZG4uY29tL3N0eWxlcy9jc3Nfb3B0LycsCiAgICAgICAgSlNfRElSID0gJ2h0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0LycsCiAgICAgICAgSU1BR0VfRElSID0gJ2h0dHBzOi8vZi52aW1lb2Nkbi5jb20vaW1hZ2VzX3Y2LycsCiAgICAgICAgRk9OVF9ESVIgPSAnaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9mb250cy8nLAogICAgICAgIFNWR19ESVIgPSAnaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdmcvJywKICAgICAgICAgICAgICAgIEJVSUxEX0hBU0ggPSAnNmFlYmUnOwoKICAgIAogICAgICAgIHZhciB2aW1lbyA9IF9leHRlbmQoKHdpbmRvdy52aW1lbyB8fCB7fSksIHsiYXBwX3ZlcnNpb24iOiJ2NiIsImRvbWFpbiI6InZpbWVvLmNvbSIsInVybCI6InZpbWVvLmNvbSIsImN1cl91c2VyIjpmYWxzZSwib3JpZ2luX3VzZXJfaWQiOm51bGwsIm9yaWdpbl91c2VyIjpmYWxzZSwiaXNfbW9iaWxlIjpmYWxzZX0pOwogICAgdmltZW8uY29uZmlnID0gX2V4dGVuZCgodmltZW8uY29uZmlnIHx8IHt9KSwgeyJzdGlja3lfdG9wbmF2Ijp7ImV4Y2x1ZGVkX3BhZ2VzIjpbIlZpbWVvXFxDb250cm9sbGVyXFxBYm91dENvbnRyb2xsZXI6bWFpbiIsIlZpbWVvXFxDb250cm9sbGVyXFxBYm91dENvbnRyb2xsZXI6cHJvZmVzc2lvbmFscyIsIlZpbWVvXFxDb250cm9sbGVyXFxBYm91dENvbnRyb2xsZXI6ZXZlcnlvbmUiLCJWaW1lb1xcQ29udHJvbGxlclxcSG9tZUNvbnRyb2xsZXI6dXBncmFkZSIsIlZpbWVvXFxDb250cm9sbGVyXFxTdG9yZUNvbnRyb2xsZXI6bWFpbiIsIlZpbWVvXFxDb250cm9sbGVyXFxVc2VyXFxTZXR0aW5nczJDb250cm9sbGVyOm1haW4iLCJWaW1lb1xcQ29udHJvbGxlclxcVXNlclxcU2V0dGluZ3MyQ29udHJvbGxlcjp0ZWFtX21lbWJlcnMiLCJWaW1lb1xcQ29udHJvbGxlclxcVXNlclxcU2V0dGluZ3MyQ29udHJvbGxlcjpwYXNzd29yZCIsIlZpbWVvXFxDb250cm9sbGVyXFxQcm9maWxlQ29udHJvbGxlcjptYWluIiwiVmltZW9cXENvbnRyb2xsZXJcXENsaXBTdGF0c0NvbnRyb2xsZXI6bWFpbiIsIlZpbWVvXFxDb250cm9sbGVyXFxDbGlwXFxTZXR0aW5nc1xcRW1iZWRDb250cm9sbGVyOmVtYmVkIiwiVmltZW9cXENvbnRyb2xsZXJcXFZpZGVvTWFuYWdlckNvbnRyb2xsZXIiLCJWaW1lb1xcQ29udHJvbGxlclxcVmlkZW9SZXZpZXdDb250cm9sbGVyIiwiVmltZW9cXENvbnRyb2xsZXJcXE1lc3NhZ2VzQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxTdGF0c0NvbnRyb2xsZXIiLCJWaW1lb1xcQ29udHJvbGxlclxcVXBsb2FkQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxPbkRlbWFuZFxcU2V0dGluZ3NDb250cm9sbGVyIiwiVmltZW9cXENvbnRyb2xsZXJcXENsaXBcXFNldHRpbmdzQ29udHJvbGxlciJdLCJzdGlja3lfaW5jbHVkZWRfcGFnZXMiOlsiVmltZW9cXENvbnRyb2xsZXJcXFN0b2NrXFxTdG9ja0hvbWVQYWdlQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxTdG9ja1xcU3RvY2tGb290YWdlQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxTdG9ja1xcU3RvY2tTZWFyY2hDb250cm9sbGVyIiwiVmltZW9cXENvbnRyb2xsZXJcXFN0b2NrXFxTdG9ja0NvbGxlY3Rpb25zQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxBbGJ1bUNvbnRyb2xsZXIiXSwidG9wbmF2X3dyYXBfc2VsZWN0b3IiOiIjdG9wbmF2X291dGVyX3dyYXAiLCJjb250ZW50X3dyYXBfc2VsZWN0b3IiOiIud3JhcF9jb250ZW50In0sImxvY2FsZSI6ImVuIiwib21uaXNlYXJjaF9lbmFibGVkIjpmYWxzZSwib21uaXNlYXJjaF9kaXNhYmxlZCI6bnVsbCwib21uaXNlYXJjaF9qd3QiOiJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpJVXpJMU5pSjkuZXlKbGVIQWlPakUyTURNNE1qTTRPREFzSW5WelpYSmZhV1FpT201MWJHd3NJbUZ3Y0Y5cFpDSTZOVGcwTnprc0luTmpiM0JsY3lJNkluQjFZbXhwWXlCd2NtbDJZWFJsSUdSbGJHVjBaU0lzSW5SbFlXMWZkWE5sY2w5cFpDSTZiblZzYkgwLjNEdVdtakoxV2VXQzNfVWE3WkRXS2xheThqWWhLZ3lGODdFMHZIa2tHaFUiLCJvbW5pc2VhcmNoX3VzZXIiOm51bGwsImFwaV91cmwiOiJhcGkudmltZW8uY29tIiwic2hvd19vbW5pc2VhcmNoX3RpcCI6ZmFsc2V9KTsKCiAgICAgICAgdmFyIF9faTE4bkxvY2FsZSA9ICdlbic7CiAgICB2YXIgbG9jYWxlQ29uZmlnID0gewogICAgICAgIGxhbmc6ICdlbicsCiAgICAgICAgJ0RhdGUnOiB7CiAgICAgICAgICAgIG1vbnRoczogWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLAogICAgICAgICAgICBtb250aHNfYWJicjogWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwKICAgICAgICAgICAgZGF5czogWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLAogICAgICAgICAgICBkYXlzX2FiYnI6IFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sCgogICAgICAgICAgICAvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogTU0vREQvWVlZWQogICAgICAgICAgICBkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCiAgICAgICAgICAgIHNob3J0RGF0ZTogJyVkLyVtLyVZJywKICAgICAgICAgICAgc2hvcnRUaW1lOiAnJUk6JU0lcCcsCiAgICAgICAgICAgIEFNOiAnQU0nLAogICAgICAgICAgICBQTTogJ1BNJywKICAgICAgICAgICAgZmlyc3REYXlPZldlZWs6IDAsCgogICAgICAgICAgICAvLyBEYXRlLkV4dHJhcwogICAgICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbihkYXlPZk1vbnRoKXsKICAgICAgICAgICAgICAgIHJldHVybiBkYXlPZk1vbnRoOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAnRGF0ZVBpY2tlcic6IHsKICAgICAgICAgICAgc2VsZWN0X2FfdGltZTogIlNlbGVjdCBhIHRpbWUiLAogICAgICAgICAgICB1c2VfbW91c2Vfd2hlZWw6ICJVc2UgdGhlIG1vdXNlIHdoZWVsIHRvIHF1aWNrbHkgY2hhbmdlIHZhbHVlIiwKICAgICAgICAgICAgdGltZV9jb25maXJtX2J1dHRvbjogIk9LIiwKICAgICAgICAgICAgYXBwbHlfcmFuZ2U6ICJBcHBseSIsCiAgICAgICAgICAgIGNhbmNlbDogIkNhbmNlbCIsCiAgICAgICAgICAgIHdlZWs6ICJXayIgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnTnVtYmVyJzogewogICAgICAgICAgICBkZWNpbWFsOiAnLicsCiAgICAgICAgICAgIGdyb3VwOiAnLCcsCiAgICAgICAgICAgIGN1cnJlbmN5OiB7CiAgICAgICAgICAgICAgICBwcmVmaXg6ICckJwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAnRm9ybVZhbGlkYXRvcic6IHsicmVxdWlyZWQiOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIsInJlcXVpcmVkQ2hrIjoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifSAgICB9OwoKICAgIHZhciBmdWxsTG9jYWxlID0gJyc7CgogICAgCiAgICAgICAgdmFyIENvcHkgPSB7dHJhbnNsYXRlOmZ1bmN0aW9uKHQsaSx1KXt2YXIgZT0nb2JqZWN0JyE9dHlwZW9mIHRoaXMuZGljdFt0XT90aGlzLmRpY3RbdF06aT90aGlzLmRpY3RbdF0ucGx1cmFsOnRoaXMuZGljdFt0XS5zaW5ndWxhcjtyZXR1cm4nb2JqZWN0Jz09dHlwZW9mIHUmJihlPXRoaXMuc3Vic3RpdHV0ZShlLHUpKSxlfSxzdWJzdGl0dXRlOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHZvaWQgMCE9PXQuc3Vic3RpdHV0ZT90LnN1YnN0aXR1dGUoaSk6dC5yZXBsYWNlKC9cXD9ceyhbXnt9XSspXH0vZyxmdW5jdGlvbih0LHUpe3JldHVybidcXCc9PXQuY2hhckF0KDApP3Quc2xpY2UoMSk6bnVsbCE9aVt1XT9pW3VdOicnfSl9LGRpY3Q6e319OwogICAgQ29weS5kaWN0ID0geyJkaWRfeW91X21lYW5fZW1haWwiOiJEaWQgeW91IG1lYW4gPGVtPntTVUdHRVNUfTxcL2VtPj8iLCJlbWFpbF9wYXNzd29yZF9taXNtYXRjaCI6IkVtYWlsIGFuZCBwYXNzd29yZCBkbyBub3QgbWF0Y2giLCJvb3BzX3RyeV9hZ2FpbiI6Ik9vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluLiIsImp1c3Rfbm93IjoianVzdCBub3ciLCJzZWNvbmRzX2FnbyI6eyJzaW5ndWxhciI6IntDT1VOVH0gc2Vjb25kIGFnbyIsInBsdXJhbCI6IntDT1VOVH0gc2Vjb25kcyBhZ28ifSwibWludXRlc19hZ28iOnsic2luZ3VsYXIiOiJ7Q09VTlR9IG1pbnV0ZSBhZ28iLCJwbHVyYWwiOiJ7Q09VTlR9IG1pbnV0ZXMgYWdvIn0sImhvdXJzX2FnbyI6eyJzaW5ndWxhciI6IntDT1VOVH0gaG91ciBhZ28iLCJwbHVyYWwiOiJ7Q09VTlR9IGhvdXJzIGFnbyJ9LCJvcGVuX2NvbW1lbnRfYm94IjoiQWRkIG5ldyBjb21tZW50IGluc3RlYWQgJnJhcXVvOyIsInVybF91bmF2YWlsYWJsZSI6IlNvcnJ5LCB0aGlzIHVybCBpcyB1bmF2YWlsYWJsZS4iLCJ1bnNhdmVkX2NoYW5nZXNfZ2VuZXJpYyI6IllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcywgYXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGxlYXZlPyIsImFkZCI6IkFkZCIsInJlbW92ZSI6IlJlbW92ZSIsInNlbGVjdCI6IlNlbGVjdCIsIm5vX2ZvbGxvd2Vyc19mb3JfbGV0dGVyIjoiWW91IGRvbiZyc3F1bzt0IGZvbGxvdyBhbnlvbmUgdGhhdCBiZWdpbiB3aXRoIHRoZSBsZXR0ZXIgJmxkcXVvO3tQQUdFX0xFVFRFUn0mcmRxdW87Iiwic2hhcmVfbGltaXRfcmVhY2hlZCI6IllvdSBoYXZlIHJlYWNoZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXJzIHRvIHNoYXJlIHdpdGguIiwiYXRfbGVhc3Rfb25lIjoiVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgdXNlci4iLCJhdmFpbGFibGUiOiJBdmFpbGFibGUiLCJ1bmF2YWlsYWJsZSI6IlVuYXZhaWxhYmxlIiwiYnJvd3NlX2Vycm9yX2dlbmVyaWMiOiJTb3JyeSwgdGhlcmUgd2FzIGFuIGVycm9yIiwiYnJvd3NlX2Vycm9yX25vX3ZpZGVvcyI6IlNvcnJ5LCBubyB2aWRlb3MgZm91bmQiLCJmb2xsb3ciOiJGb2xsb3ciLCJmb2xsb3dpbmciOiJGb2xsb3dpbmciLCJ1bmZvbGxvdyI6IlVuZm9sbG93IiwidW5mb2xsb3dpbmciOiJVbmZvbGxvd2luZyIsImNvdW50X2NvbW1lbnRzIjp7InNpbmd1bGFyIjoie0NPVU5UfSBjb21tZW50IiwicGx1cmFsIjoie0NPVU5UfSBjb21tZW50cyJ9LCJmaXJzdF9jb21tZW50IjoiQmUgdGhlIGZpcnN0IHRvIGNvbW1lbnRcdTIwMjYiLCJub19jb21tZW50c19mb3JfeW91IjoiRm9yYmlkZGVuLiBZb3UgY2Fubm90IHBvc3QgY29tbWVudHMgb24gdGhpcyBwYWdlLiIsIm9vcHMiOiJPb3BzISIsInBsYXllcl90cnlfYWdhaW4iOiJUaGF0IHdhc24ndCBzdXBwb3NlZCB0byBoYXBwZW4uIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbWludXRlcy4iLCJkdXJhdGlvbl9pbnB1dF9taW5fZHVyYXRpb24iOiJUaGUgZHVyYXRpb24gY2Fubm90IGJlIGxlc3MgdGhhbiB7TUlOX0RVUkFUSU9OfS4iLCJkdXJhdGlvbl9pbnB1dF9tYXhfZHVyYXRpb24iOiJUaGUgZHVyYXRpb24gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB7TUFYX0RVUkFUSU9OfS4iLCJkdXJhdGlvbl9pbnB1dF9pbnZhbGlkX2NoYXJhY3RlcnMiOiIwLTkgYW5kIDogYXJlIHRoZSBvbmx5IGFjY2VwdGFibGUgaW5wdXRzLiIsImNsb3NlIjoiQ2xvc2UiLCJleHBhbmQiOiJFeHBhbmQiLCJsb2FkaW5nIjoiTG9hZGluZy4uLiIsInRvcCI6InRvcCIsImFkdmFuY2VkX3NlYXJjaCI6IkFkdmFuY2VkIFNlYXJjaCIsIm5vX3N1Z2dlc3Rpb25zIjoiTm8gc3VnZ2VzdGlvbnMiLCJyZWNlbnRfc2VhcmNoZXMiOiJSZWNlbnQgU2VhcmNoZXMiLCJzZWFyY2hfYWxsIjoiU2VhcmNoIEFsbCBvZiBWaW1lbyIsImVtYWlsX2FuZF9wYXNzd29yZCI6IlBsZWFzZSBlbnRlciB5b3VyIGVtYWlsIGFuZCBwYXNzd29yZCIsImVtYWlsX2FkZHJlc3MiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzIiwibmFtZV9lbWFpbF9hbmRfcGFzc3dvcmQiOiJQbGVhc2UgZW50ZXIgeW91ciBuYW1lLCBlbWFpbCwgYW5kIHBhc3N3b3JkIn07Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9nbG9iYWwvcGxheWVyX21hbmFnZXIubWluLmpzPzcxOGIxMGY1Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQ+CiAgICAgICAgaWYgKHR5cGVvZiBwbGF5ZXJBc3NldFVybHMgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXJNYW5hZ2VyLnJ1bihwbGF5ZXJBc3NldFVybHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgIDwvc2NyaXB0PgoKICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9zdGlja3lfdG9wbmF2X2NvbWJpbmVkLm1pbi5qcz81ZmZkNmQ0ZSI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9qc19vcHQvcmVhY3RfcHJvZF9jb21iaW5lZC5taW4uanM/MDMxNzc1YTQiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0L2NsaXBfY29tYmluZWQubWluLmpzPzg1ODJlM2E1Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC90b3BuYXZfY2FydF9idXR0b25fY29tYmluZWQubWluLmpzPzQ0ODhjMDkyIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9fYnVuZGxlcy9jbGlwLmJ1bmRsZS5taW4uanM/YTE1ZTU2MDQiPjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgYXN5bmMgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9jbGlwX2JldGFfbGlic19hc3luY19jb21iaW5lZC5taW4uanM/NWNjNDZmZmIiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBhc3luYyBzcmM9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0L19idW5kbGVzL2NyZWF0ZV9mYWNlYm9va19oZWFkZXIuYnVuZGxlLm1pbi5qcz85NTRjNDYwMCI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0PgogICAgICAgIGZ1bmN0aW9uIG9uVmltZW9Eb21SZWFkeShlKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZpbWVvLmJ5cGFzc19wbGF5ZXJfcmVzcG9uc2l2ZV9kZWxlZ2F0ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzID0gdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB2aW1lby5wbGF5ZXJfcmVzcG9uc2l2ZV9kZWxlZ2F0ZXMud2lsbE9wZW5TaGFyZU92ZXJsYXkgPSB2aW1lby5wbGF5ZXJfcmVzcG9uc2l2ZV9kZWxlZ2F0ZXMud2lsbE9wZW5TaGFyZU92ZXJsYXkgfHwgZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXJNYW5hZ2VyLnBhdXNlQWxsUGxheWVycygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpbWVvLnNoYXJlLlBvcHVwKGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzLndpbGxPcGVuTG9naW5Gb3JtID0gdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzLndpbGxPcGVuTG9naW5Gb3JtIHx8IGZ1bmN0aW9uKGlkLCBjb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZpbWVvLk1vZGFsICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXllck1hbmFnZXIucGF1c2VBbGxQbGF5ZXJzKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpbWVvLlNlc3Npb24uY3JlYXRlKHsgcGxheWVyOiAxLCBjbGlwX2lkOiBpZCwgY29udGV4dDogY29udGV4dCB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpbWVvLlNlc3Npb24uY3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGxheWVyTWFuYWdlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxheWVyTWFuYWdlci5zZXREZWZhdWx0RGVsZWdhdGUodmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKFBsYXllck1hbmFnZXIpIHsKICAgICAgICAgICAgICAgICAgICBQbGF5ZXJNYW5hZ2VyLmRpc3BhdGNoUmVhZHlTaWduYWxzKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkucmVhZHkob25WaW1lb0RvbVJlYWR5KTsKICAgICAgICAgICAgPC9zY3JpcHQ+CgoKICAgIDwvYm9keT4KPC9odG1sPgo=
155
- http_version:
156
- recorded_at: Tue, 27 Oct 2020 18:22:35 GMT
157
- - request:
158
- method: head
159
- uri: https://vimeo.com/141349194
160
- body:
161
- encoding: US-ASCII
162
- string: ''
163
- headers:
164
- User-Agent:
165
- - VideoInfo/2.8.0
166
- Accept:
167
- - "*/*"
168
- response:
169
- status:
170
- code: 200
171
- message: OK
172
- headers:
173
- Connection:
174
- - keep-alive
175
- Content-Length:
176
- - '166781'
177
- Server:
178
- - nginx
179
- Content-Type:
180
- - text/html; charset=UTF-8
181
- Expires:
182
- - Tue, 27 Oct 2020 18:32:36 GMT
183
- Set-Cookie:
184
- - vuid=1947858331.1222386977; expires=Fri, 25-Oct-2030 18:22:36 GMT; Max-Age=315360000;
185
- path=/; domain=.vimeo.com; secure; SameSite=None
186
- X-Ua-Compatible:
187
- - IE=edge
188
- X-Xss-Protection:
189
- - 1; mode=block
190
- X-Content-Type-Options:
191
- - nosniff
192
- X-Frame-Options:
193
- - sameorigin
194
- Strict-Transport-Security:
195
- - max-age=31536000; includeSubDomains; preload
196
- Content-Security-Policy-Report-Only:
197
- - 'default-src https: data: blob: wss: ''unsafe-inline'' ''unsafe-eval''; report-uri
198
- /_csp'
199
- X-Bapp-Server:
200
- - pweb-v4874-whh6s
201
- Via:
202
- - 1.1 varnish
203
- - 1.1 varnish
204
- - 1.1 varnish
205
- Cache-Control:
206
- - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
207
- X-Varnish-Cache:
208
- - '0'
209
- X-Vserver:
210
- - infra-webproxy-a-7
211
- X-Vimeo-Dc:
212
- - ge
213
- Accept-Ranges:
214
- - bytes
215
- Date:
216
- - Tue, 27 Oct 2020 18:22:36 GMT
217
- Age:
218
- - '0'
219
- X-Served-By:
220
- - cache-bwi5134-BWI, cache-cwb20524-CWB
221
- X-Cache:
222
- - MISS, MISS
223
- X-Cache-Hits:
224
- - 0, 0
225
- X-Timer:
226
- - S1603822956.145477,VS0,VE663
227
- Vary:
228
- - User-Agent,Accept-Encoding
229
- body:
230
- encoding: UTF-8
231
- string: ''
232
- http_version:
233
- recorded_at: Tue, 27 Oct 2020 18:22:36 GMT
234
- recorded_with: VCR 3.0.3
@@ -1,78 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: https://api.vimeo.com/videos/141349194
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.8.0
12
- Authorization:
13
- - bearer vimeo_access_token
14
- Accept:
15
- - application/vnd.vimeo.*+json;version=3.2
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- response:
19
- status:
20
- code: 200
21
- message: OK
22
- headers:
23
- Connection:
24
- - keep-alive
25
- Content-Length:
26
- - '6519'
27
- Server:
28
- - nginx
29
- Content-Type:
30
- - application/vnd.vimeo.video+json
31
- Cache-Control:
32
- - private, no-store, no-cache
33
- Strict-Transport-Security:
34
- - max-age=31536000; includeSubDomains; preload
35
- X-Ratelimit-Limit:
36
- - '50'
37
- X-Ratelimit-Remaining:
38
- - '12'
39
- X-Ratelimit-Reset:
40
- - '2020-10-27T18:24:07+00:00'
41
- Request-Hash:
42
- - 52ef4208
43
- X-Bapp-Server:
44
- - api-v4925-8kvbk
45
- X-Vimeo-Dc:
46
- - ge
47
- Accept-Ranges:
48
- - bytes
49
- - bytes
50
- Via:
51
- - 1.1 varnish
52
- - 1.1 varnish
53
- Age:
54
- - '0'
55
- - '0'
56
- Date:
57
- - Tue, 27 Oct 2020 18:23:20 GMT
58
- X-Served-By:
59
- - cache-bwi5130-BWI, cache-cwb20524-CWB
60
- X-Cache:
61
- - MISS, MISS
62
- X-Cache-Hits:
63
- - 0, 0
64
- X-Timer:
65
- - S1603823000.988527,VS0,VE215
66
- Vary:
67
- - Accept,Vimeo-Client-Id
68
- body:
69
- encoding: UTF-8
70
- string: '{"uri":"/videos/141349194","name":"Butternut Squash Ravioli","description":null,"type":"video","link":"https://vimeo.com/141349194","duration":707,"width":1280,"language":null,"height":720,"embed":{"html":"<iframe
71
- src=\"https://player.vimeo.com/video/141349194?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=193197\"
72
- width=\"1280\" height=\"720\" frameborder=\"0\" allow=\"autoplay; fullscreen\"
73
- allowfullscreen title=\"Butternut Squash Ravioli\"></iframe>","badges":{"hdr":false,"live":{"streaming":false,"archived":false},"staff_pick":{"normal":false,"best_of_the_month":false,"best_of_the_year":false,"premiere":false},"vod":false,"weekend_challenge":false}},"created_time":"2015-10-04T21:20:15+00:00","modified_time":"2020-10-27T17:31:48+00:00","release_time":"2015-10-04T21:20:15+00:00","content_rating":["unrated"],"license":null,"privacy":{"view":"anybody","embed":"public","download":true,"add":true,"comments":"anybody"},"pictures":{"uri":"/videos/141349194/pictures/538320894","active":true,"type":"custom","sizes":[{"width":100,"height":75,"link":"https://i.vimeocdn.com/video/538320894_100x75.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F538320894_100x75.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":200,"height":150,"link":"https://i.vimeocdn.com/video/538320894_200x150.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F538320894_200x150.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":295,"height":166,"link":"https://i.vimeocdn.com/video/538320894_295x166.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F538320894_295x166.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":640,"height":360,"link":"https://i.vimeocdn.com/video/538320894_640x360.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F538320894_640x360.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":1280,"height":720,"link":"https://i.vimeocdn.com/video/538320894_1280x720.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F538320894_1280x720.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":1280,"height":720,"link":"https://i.vimeocdn.com/video/538320894_1280x720.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F538320894_1280x720.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":1280,"height":720,"link":"https://i.vimeocdn.com/video/538320894_1280x720.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F538320894_1280x720.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":1280,"height":720,"link":"https://i.vimeocdn.com/video/538320894_1280x720.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F538320894_1280x720.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"},{"width":1920,"height":1080,"link":"https://i.vimeocdn.com/video/538320894_1920x1080.jpg?r=pad","link_with_play_button":"https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F538320894_1920x1080.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"}],"resource_key":"16c1da39637a4a5bd148c8ad3bc2d2bba99473c3","default_picture":false},"tags":[],"stats":{"plays":null},"metadata":{"connections":{"comments":{"uri":"/videos/141349194/comments","options":["GET"],"total":32},"credits":{"uri":"/videos/141349194/credits","options":["GET","POST"],"total":0},"likes":{"uri":"/videos/141349194/likes","options":["GET"],"total":383},"pictures":{"uri":"/videos/141349194/pictures","options":["GET","POST"],"total":1},"texttracks":{"uri":"/videos/141349194/texttracks","options":["GET","POST"],"total":0},"related":null},"interactions":{"report":{"uri":"/videos/141349194/report","options":["POST"],"reason":["pornographic","harassment","ripoff","incorrect
74
- rating","spam","causes harm","csam"]}}},"user":{"uri":"/users/26121604","name":"Half
75
- Baked Harvest","link":"https://vimeo.com/halfbakedharvest","location":"","gender":"","bio":null,"short_bio":null,"created_time":"2014-03-20T20:45:08+00:00","pictures":null,"websites":[],"metadata":{"connections":{"activities":{"uri":"/users/26121604/activities","options":["GET"]},"albums":{"uri":"/users/26121604/albums","options":["GET"],"total":0},"appearances":{"uri":"/users/26121604/appearances","options":["GET"],"total":0},"channels":{"uri":"/users/26121604/channels","options":["GET"],"total":0},"feed":{"uri":"/users/26121604/feed","options":["GET"]},"followers":{"uri":"/users/26121604/followers","options":["GET"],"total":2611},"following":{"uri":"/users/26121604/following","options":["GET"],"total":1},"groups":{"uri":"/users/26121604/groups","options":["GET"],"total":0},"likes":{"uri":"/users/26121604/likes","options":["GET"],"total":2},"membership":{"uri":"/users/26121604/membership/","options":["PATCH"]},"moderated_channels":{"uri":"/users/26121604/channels?filter=moderated","options":["GET"],"total":0},"portfolios":{"uri":"/users/26121604/portfolios","options":["GET"],"total":0},"videos":{"uri":"/users/26121604/videos","options":["GET"],"total":346},"shared":{"uri":"/users/26121604/shared/videos","options":["GET"],"total":1},"pictures":{"uri":"/users/26121604/pictures","options":["GET","POST"],"total":0},"folders_root":{"uri":"/users/26121604/folders/root","options":["GET"]},"teams":{"uri":"/users/26121604/teams","options":["GET"],"total":1}}},"location_details":{"formatted_address":"","latitude":null,"longitude":null,"city":null,"state":null,"neighborhood":null,"sub_locality":null,"state_iso_code":null,"country":null,"country_iso_code":null},"skills":[],"available_for_hire":false,"can_work_remotely":false,"resource_key":"f448e0b6560aa935f18fae59ea4af53efd78b5eb","account":"pro","preferences":{"videos":{"privacy":null}}},"app":null,"status":"available","resource_key":"6352400b797c5c71fd213dcc92ca3064b6b75e0b","upload":null,"transcode":null,"is_playable":true,"review_link":"https://vimeo.com/halfbakedharvest/review/141349194/6db9fcba1e","embed_presets":null}'
76
- http_version:
77
- recorded_at: Tue, 27 Oct 2020 18:23:20 GMT
78
- recorded_with: VCR 3.0.3
@@ -1,233 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: head
5
- uri: https://vimeo.com/141349194
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - VideoInfo/2.8.0
12
- Accept:
13
- - "*/*"
14
- response:
15
- status:
16
- code: 200
17
- message: OK
18
- headers:
19
- Connection:
20
- - keep-alive
21
- Content-Length:
22
- - '166809'
23
- Server:
24
- - nginx
25
- Content-Type:
26
- - text/html; charset=UTF-8
27
- Expires:
28
- - Tue, 27 Oct 2020 18:32:37 GMT
29
- Set-Cookie:
30
- - vuid=1673576015.1095911960; expires=Fri, 25-Oct-2030 18:22:37 GMT; Max-Age=315360000;
31
- path=/; domain=.vimeo.com; secure; SameSite=None
32
- X-Ua-Compatible:
33
- - IE=edge
34
- X-Xss-Protection:
35
- - 1; mode=block
36
- X-Content-Type-Options:
37
- - nosniff
38
- X-Frame-Options:
39
- - sameorigin
40
- Strict-Transport-Security:
41
- - max-age=31536000; includeSubDomains; preload
42
- Content-Security-Policy-Report-Only:
43
- - 'default-src https: data: blob: wss: ''unsafe-inline'' ''unsafe-eval''; report-uri
44
- /_csp'
45
- X-Bapp-Server:
46
- - pweb-v4874-cflz2
47
- Via:
48
- - 1.1 varnish, 1.1 varnish, 1.1 varnish
49
- Cache-Control:
50
- - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
51
- X-Varnish-Cache:
52
- - '0'
53
- X-Vserver:
54
- - infra-webproxy-a-7
55
- X-Vimeo-Dc:
56
- - ge
57
- Accept-Ranges:
58
- - bytes
59
- Date:
60
- - Tue, 27 Oct 2020 18:22:37 GMT
61
- Age:
62
- - '0'
63
- X-Served-By:
64
- - cache-bwi5145-BWI, cache-cwb20520-CWB
65
- X-Cache:
66
- - MISS, MISS
67
- X-Cache-Hits:
68
- - 0, 0
69
- X-Timer:
70
- - S1603822957.080081,VS0,VE407
71
- Vary:
72
- - User-Agent,Accept-Encoding
73
- body:
74
- encoding: UTF-8
75
- string: ''
76
- http_version:
77
- recorded_at: Tue, 27 Oct 2020 18:22:37 GMT
78
- - request:
79
- method: get
80
- uri: https://vimeo.com/141349194
81
- body:
82
- encoding: US-ASCII
83
- string: ''
84
- headers:
85
- Accept-Encoding:
86
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
87
- Accept:
88
- - "*/*"
89
- User-Agent:
90
- - Ruby
91
- response:
92
- status:
93
- code: 200
94
- message: OK
95
- headers:
96
- Connection:
97
- - keep-alive
98
- Content-Length:
99
- - '39651'
100
- Server:
101
- - nginx
102
- Content-Type:
103
- - text/html; charset=UTF-8
104
- Expires:
105
- - Tue, 27 Oct 2020 18:32:37 GMT
106
- Set-Cookie:
107
- - vuid=706378545.914358482; expires=Fri, 25-Oct-2030 18:22:37 GMT; Max-Age=315360000;
108
- path=/; domain=.vimeo.com; secure; SameSite=None
109
- X-Ua-Compatible:
110
- - IE=edge
111
- X-Xss-Protection:
112
- - 1; mode=block
113
- X-Content-Type-Options:
114
- - nosniff
115
- X-Frame-Options:
116
- - sameorigin
117
- Strict-Transport-Security:
118
- - max-age=31536000; includeSubDomains; preload
119
- Content-Security-Policy-Report-Only:
120
- - 'default-src https: data: blob: wss: ''unsafe-inline'' ''unsafe-eval''; report-uri
121
- /_csp'
122
- X-Bapp-Server:
123
- - pweb-v4874-b6mwq
124
- Via:
125
- - 1.1 varnish
126
- - 1.1 varnish
127
- - 1.1 varnish
128
- Cache-Control:
129
- - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
130
- X-Varnish-Cache:
131
- - '0'
132
- X-Vserver:
133
- - infra-webproxy-a-7
134
- X-Vimeo-Dc:
135
- - ge
136
- Accept-Ranges:
137
- - bytes
138
- Date:
139
- - Tue, 27 Oct 2020 18:22:38 GMT
140
- Age:
141
- - '0'
142
- X-Served-By:
143
- - cache-bwi5127-BWI, cache-cwb20524-CWB
144
- X-Cache:
145
- - MISS, MISS
146
- X-Cache-Hits:
147
- - 0, 0
148
- X-Timer:
149
- - S1603822958.710484,VS0,VE363
150
- Vary:
151
- - User-Agent,Accept-Encoding
152
- body:
153
- encoding: ASCII-8BIT
154
- string: !binary |-
155
- PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICAgIDxoZWFkPgogICAgICAgIAo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIHByb3BlcnR5PSJmYjphcHBfaWQiIGNvbnRlbnQ9IjE5ODg0MDI4OTYzIj4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Ii8vcGxheWVyLnZpbWVvLmNvbSI+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iLy9pLnZpbWVvY2RuLmNvbSI+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iLy9mLnZpbWVvY2RuLmNvbSI+CjxsaW5rIHJlbD0ic2VhcmNoIiB0eXBlPSJhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sIiBocmVmPSIvc2VhcmNoL29wZW5zZWFyY2gueG1sIiB0aXRsZT0iVmltZW8iPgo8bGluayByZWw9ImxvZ28iIHR5cGU9ImltYWdlL3N2ZyIgaHJlZj0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9sb2dvLnN2ZyI+CgoKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEuMCxtYXhpbXVtLXNjYWxlPTUuMCx1c2VyLXNjYWxhYmxlPXllcyI+CiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOnNpdGVfbmFtZSIgY29udGVudD0iVmltZW8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vdmltZW8uY29tLzE0MTM0OTE5NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9InZpZGVvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkJ1dHRlcm51dCBTcXVhc2ggUmF2aW9saSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGlzIGlzICZxdW90O0J1dHRlcm51dCBTcXVhc2ggUmF2aW9saSZxdW90OyBieSBIYWxmIEJha2VkIEhhcnZlc3Qgb24gVmltZW8sIHRoZSBob21lIGZvciBoaWdoIHF1YWxpdHkgdmlkZW9zIGFuZCB0aGUgcGVvcGxlIHdobyBsb3ZlIHRoZW0uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXBkYXRlZF90aW1lIiBjb250ZW50PSIyMDIwLTEwLTI3VDEzOjMxOjQ4LTA0OjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vZmlsdGVyL292ZXJsYXk/c3JjMD1odHRwcyUzQSUyRiUyRmkudmltZW9jZG4uY29tJTJGdmlkZW8lMkY1MzgzMjA4OTRfMTI4MHg3MjAuanBnJnNyYzE9aHR0cHMlM0ElMkYlMkZmLnZpbWVvY2RuLmNvbSUyRmltYWdlc192NiUyRnNoYXJlJTJGcGxheV9pY29uX292ZXJsYXkucG5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2U6c2VjdXJlX3VybCIgY29udGVudD0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9maWx0ZXIvb3ZlcmxheT9zcmMwPWh0dHBzJTNBJTJGJTJGaS52aW1lb2Nkbi5jb20lMkZ2aWRlbyUyRjUzODMyMDg5NF8xMjgweDcyMC5qcGcmc3JjMT1odHRwcyUzQSUyRiUyRmYudmltZW9jZG4uY29tJTJGaW1hZ2VzX3Y2JTJGc2hhcmUlMkZwbGF5X2ljb25fb3ZlcmxheS5wbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZTp0eXBlIiBjb250ZW50PSJpbWFnZS9qcGciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZTp3aWR0aCIgY29udGVudD0iMTI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlOmhlaWdodCIgY29udGVudD0iNzIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dmlkZW86dXJsIiBjb250ZW50PSJodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vMTQxMzQ5MTk0P2F1dG9wbGF5PTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp2aWRlbzpzZWN1cmVfdXJsIiBjb250ZW50PSJodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vMTQxMzQ5MTk0P2F1dG9wbGF5PTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp2aWRlbzp0eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp2aWRlbzp3aWR0aCIgY29udGVudD0iMTI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOnZpZGVvOmhlaWdodCIgY29udGVudD0iNzIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0iYWw6aW9zOmFwcF9uYW1lIiBjb250ZW50PSJWaW1lbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9ImFsOmlvczphcHBfc3RvcmVfaWQiIGNvbnRlbnQ9IjQyNTE5NDc1OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGEgcHJvcGVydHk9ImFsOmlvczp1cmwiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvMTQxMzQ5MTk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0iYWw6YW5kcm9pZDphcHBfbmFtZSIgY29udGVudD0iVmltZW8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJhbDphbmRyb2lkOnBhY2thZ2UiIGNvbnRlbnQ9ImNvbS52aW1lby5hbmRyb2lkLnZpZGVvYXBwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0iYWw6YW5kcm9pZDp1cmwiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvMTQxMzQ5MTk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0iYWw6d2ViOnNob3VsZF9mYWxsYmFjayIgY29udGVudD0idHJ1ZSI+CiAgICAgICAgICAgIAogICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGlzIGlzICZxdW90O0J1dHRlcm51dCBTcXVhc2ggUmF2aW9saSZxdW90OyBieSBIYWxmIEJha2VkIEhhcnZlc3Qgb24gVmltZW8sIHRoZSBob21lIGZvciBoaWdoIHF1YWxpdHkgdmlkZW9zIGFuZCB0aGUgcGVvcGxlIHdobyBsb3ZlIHRoZW0uIj4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmNhcmQiIGNvbnRlbnQ9InBsYXllciI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJAdmltZW8iPgogICAgICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6dGl0bGUiIGNvbnRlbnQ9IkJ1dHRlcm51dCBTcXVhc2ggUmF2aW9saSI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpkZXNjcmlwdGlvbiIgY29udGVudD0iVGhpcyBpcyAmcXVvdDtCdXR0ZXJudXQgU3F1YXNoIFJhdmlvbGkmcXVvdDsgYnkgSGFsZiBCYWtlZCBIYXJ2ZXN0IG9uIFZpbWVvLCB0aGUgaG9tZSBmb3IgaGlnaCBxdWFsaXR5IHZpZGVvcyBhbmQgdGhlIHBlb3BsZSB3aG8gbG92ZSB0aGVtLiI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9maWx0ZXIvb3ZlcmxheT9zcmMwPWh0dHBzJTNBJTJGJTJGaS52aW1lb2Nkbi5jb20lMkZ2aWRlbyUyRjUzODMyMDg5NF8xMjgweDcyMC5qcGcmYW1wO3NyYzE9aHR0cHMlM0ElMkYlMkZmLnZpbWVvY2RuLmNvbSUyRmltYWdlc192NiUyRnNoYXJlJTJGcGxheV9pY29uX292ZXJsYXkucG5nIj4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnBsYXllciIgY29udGVudD0iaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLzE0MTM0OTE5NCI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpwbGF5ZXI6d2lkdGgiIGNvbnRlbnQ9IjEyODAiPgogICAgICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6cGxheWVyOmhlaWdodCIgY29udGVudD0iNzIwIj4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnNpdGUiIGNvbnRlbnQ9IkB2aW1lbyI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjphcHA6bmFtZTppcGhvbmUiIGNvbnRlbnQ9IlZpbWVvIj4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmFwcDppZDppcGhvbmUiIGNvbnRlbnQ9IjQyNTE5NDc1OSI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjphcHA6dXJsOmlwaG9uZSIgY29udGVudD0idmltZW86Ly9hcHAudmltZW8uY29tL3ZpZGVvcy8xNDEzNDkxOTQiPgogICAgICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6YXBwOm5hbWU6aXBhZCIgY29udGVudD0iVmltZW8iPgogICAgICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6YXBwOmlkOmlwYWQiIGNvbnRlbnQ9IjQyNTE5NDc1OSI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjphcHA6dXJsOmlwYWQiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvMTQxMzQ5MTk0Ij4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmFwcDpuYW1lOmdvb2dsZXBsYXkiIGNvbnRlbnQ9IlZpbWVvIj4KICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmFwcDppZDpnb29nbGVwbGF5IiBjb250ZW50PSJjb20udmltZW8uYW5kcm9pZC52aWRlb2FwcCI+CiAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjphcHA6dXJsOmdvb2dsZXBsYXkiIGNvbnRlbnQ9InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvMTQxMzQ5MTk0Ij4KCgoKCiAgICAgICAgICAgICAgICAgICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tL2FwaS9vZW1iZWQuanNvbj91cmw9aHR0cHMlM0ElMkYlMkZ2aW1lby5jb20lMkYxNDEzNDkxOTQiIHR5cGU9ImFwcGxpY2F0aW9uL2pzb24rb2VtYmVkIiB0aXRsZT0iQnV0dGVybnV0IFNxdWFzaCBSYXZpb2xpIj4KICAgICAgICAgICAgICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwczovL3ZpbWVvLmNvbS9hcGkvb2VtYmVkLnhtbD91cmw9aHR0cHMlM0ElMkYlMkZ2aW1lby5jb20lMkYxNDEzNDkxOTQiIHR5cGU9InRleHQveG1sK29lbWJlZCIgdGl0bGU9IkJ1dHRlcm51dCBTcXVhc2ggUmF2aW9saSI+CiAgICAgICAgICAgICAgICA8bGluayByZWw9InBpbmdiYWNrIiBocmVmPSJodHRwczovL3ZpbWVvLmNvbS9fcGluZ2JhY2siPgogICAgICAgICAgICAgICAgPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tLzE0MTM0OTE5NCI+CiAgICAgICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uLXByZWNvbXBvc2VkIiBocmVmPSJodHRwczovL2kudmltZW9jZG4uY29tL2Zhdmljb24vbWFpbi10b3VjaF8xODAiPgoKPGxpbmsgcmVsPSJtYXNrLWljb24iIGhyZWY9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vc3ZnL2xlZ2FjeV92aWV3X3N1cHBvcnQvaXJpc19pY29uX3ZfNjQuc3ZnP2UxMDEzZGViNmU4NDQ3MGM3NWQwNzVmODZkYjNjZDRkOTRkMjE4MTYiIGNvbG9yPSIjMTcyNzJlIj4KCiAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vaW1hZ2VzX3Y2L2Zhdmljb24uaWNvP2UxMDEzZGViNmU4NDQ3MGM3NWQwNzVmODZkYjNjZDRkOTRkMjE4MTYiIGRhdGEtcGxheT0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9mYXZpY29uL3BsYXlfMzIiIGRhdGEtcGF1c2U9Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vZmF2aWNvbi9wYXVzZV8zMiI+Cgo8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLVRpbGVJbWFnZSIgY29udGVudD0iaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9mYXZpY29uL21haW4tdG91Y2hfMTQ0Ij4KPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi1UaWxlQ29sb3IiIGNvbnRlbnQ9IiMwMGFkZWYiPgogICAgICAgIDx0aXRsZT5CdXR0ZXJudXQgU3F1YXNoIFJhdmlvbGkgb24gVmltZW88L3RpdGxlPgogICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAgIC8vIEZpcnN0IElucHV0IERlbGF5IHRyYWNraW5nLiBIaWdoIHByaW9yaXR5IGxvYWRpbmcgdG8gbm90IG1pc3MgZXZlbnQKICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZUxhYnMvZmlyc3QtaW5wdXQtZGVsYXkvYmxvYi9tYXN0ZXIvZGlzdC9maXJzdC1pbnB1dC1kZWxheS5taW4uanMKICAgICAgICAgICAgIWZ1bmN0aW9uKG4sZSl7dmFyIHQsbyxpLGM9W10sZj17cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSxyPW5ldyBEYXRlLGE9InBvaW50ZXJ1cCIsdT0icG9pbnRlcmNhbmNlbCI7ZnVuY3Rpb24gcChuLGMpe3R8fCh0PWMsbz1uLGk9bmV3IERhdGUsdyhlKSxzKCkpfWZ1bmN0aW9uIHMoKXtvPj0wJiZvPGktciYmKGMuZm9yRWFjaChmdW5jdGlvbihuKXtuKG8sdCl9KSxjPVtdKX1mdW5jdGlvbiBsKHQpe2lmKHQuY2FuY2VsYWJsZSl7dmFyIG89KHQudGltZVN0YW1wPjFlMTI/bmV3IERhdGU6cGVyZm9ybWFuY2Uubm93KCkpLXQudGltZVN0YW1wOyJwb2ludGVyZG93biI9PXQudHlwZT9mdW5jdGlvbih0LG8pe2Z1bmN0aW9uIGkoKXtwKHQsbykscigpfWZ1bmN0aW9uIGMoKXtyKCl9ZnVuY3Rpb24gcigpe2UoYSxpLGYpLGUodSxjLGYpfW4oYSxpLGYpLG4odSxjLGYpfShvLHQpOnAobyx0KX19ZnVuY3Rpb24gdyhuKXtbImNsaWNrIiwibW91c2Vkb3duIiwia2V5ZG93biIsInRvdWNoc3RhcnQiLCJwb2ludGVyZG93biJdLmZvckVhY2goZnVuY3Rpb24oZSl7bihlLGwsZil9KX13KG4pLHNlbGYucGVyZk1ldHJpY3M9c2VsZi5wZXJmTWV0cmljc3x8e30sc2VsZi5wZXJmTWV0cmljcy5vbkZpcnN0SW5wdXREZWxheT1mdW5jdGlvbihuKXtjLnB1c2gobikscygpfX0oYWRkRXZlbnRMaXN0ZW5lcixyZW1vdmVFdmVudExpc3RlbmVyKTsKICAgICAgICA8L3NjcmlwdD4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgLy8gQ3JlYXRlIFBlcmZvcm1hbmNlT2JzZXJ2ZXIgZm9yIHRyYWNraW5nIFRUSQogICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZUxhYnMvdHRpLXBvbHlmaWxsCiAgICAgICAgICAhZnVuY3Rpb24oKXtpZignUGVyZm9ybWFuY2VMb25nVGFza1RpbWluZycgaW4gd2luZG93KXt2YXIgZz13aW5kb3cuX190dGk9e2U6W119OwogICAgICAgICAgZy5vPW5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGZ1bmN0aW9uKGwpe2cuZT1nLmUuY29uY2F0KGwuZ2V0RW50cmllcygpKX0pOwogICAgICAgICAgZy5vLm9ic2VydmUoe2VudHJ5VHlwZXM6Wydsb25ndGFzayddfSl9fSgpOwogICAgICAgIDwvc2NyaXB0PgogICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAvLyBOZXcgUmVsaWMgQWdlbnQKICAgICAgICAgIDt3aW5kb3cuTlJFVU18fChOUkVVTT17fSk7TlJFVU0uaW5pdD17ZGlzdHJpYnV0ZWRfdHJhY2luZzp7ZW5hYmxlZDp0cnVlfSxwcml2YWN5Ontjb29raWVzX2VuYWJsZWQ6dHJ1ZX19OwogICAgICAgICAgd2luZG93Lk5SRVVNfHwoTlJFVU09e30pLF9fbnJfcmVxdWlyZT1mdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcihuKXtpZighZVtuXSl7dmFyIG89ZVtuXT17ZXhwb3J0czp7fX07dFtuXVswXS5jYWxsKG8uZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbz10W25dWzFdW2VdO3JldHVybiByKG98fGUpfSxvLG8uZXhwb3J0cyl9cmV0dXJuIGVbbl0uZXhwb3J0c31pZigiZnVuY3Rpb24iPT10eXBlb2YgX19ucl9yZXF1aXJlKXJldHVybiBfX25yX3JlcXVpcmU7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspcihuW29dKTtyZXR1cm4gcn0oezE6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe3RyeXtzLmNvbnNvbGUmJmNvbnNvbGUubG9nKHQpfWNhdGNoKGUpe319dmFyIG8saT10KCJlZSIpLGE9dCgyNSkscz17fTt0cnl7bz1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiX19ucl9mbGFncyIpLnNwbGl0KCIsIiksY29uc29sZSYmImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUubG9nJiYocy5jb25zb2xlPSEwLG8uaW5kZXhPZigiZGV2IikhPT0tMSYmKHMuZGV2PSEwKSxvLmluZGV4T2YoIm5yX2RldiIpIT09LTEmJihzLm5yRGV2PSEwKSl9Y2F0Y2goYyl7fXMubnJEZXYmJmkub24oImludGVybmFsLWVycm9yIixmdW5jdGlvbih0KXtyKHQuc3RhY2spfSkscy5kZXYmJmkub24oImZuLWVyciIsZnVuY3Rpb24odCxlLG4pe3Iobi5zdGFjayl9KSxzLmRldiYmKHIoIk5SIEFHRU5UIElOIERFVkVMT1BNRU5UIE1PREUiKSxyKCJmbGFnczogIithKHMsZnVuY3Rpb24odCxlKXtyZXR1cm4gdH0pLmpvaW4oIiwgIikpKX0se31dLDI6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSxuLHIscyl7dHJ5e2w/bC09MTpvKHN8fG5ldyBVbmNhdWdodEV4Y2VwdGlvbih0LGUsbiksITApfWNhdGNoKGYpe3RyeXtpKCJpZXJyIixbZixjLm5vdygpLCEwXSl9Y2F0Y2goZCl7fX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdSYmdS5hcHBseSh0aGlzLGEoYXJndW1lbnRzKSl9ZnVuY3Rpb24gVW5jYXVnaHRFeGNlcHRpb24odCxlLG4pe3RoaXMubWVzc2FnZT10fHwiVW5jYXVnaHQgZXJyb3Igd2l0aCBubyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIix0aGlzLnNvdXJjZVVSTD1lLHRoaXMubGluZT1ufWZ1bmN0aW9uIG8odCxlKXt2YXIgbj1lP251bGw6Yy5ub3coKTtpKCJlcnIiLFt0LG5dKX12YXIgaT10KCJoYW5kbGUiKSxhPXQoMjYpLHM9dCgiZWUiKSxjPXQoImxvYWRlciIpLGY9dCgiZ29zIiksdT13aW5kb3cub25lcnJvcixkPSExLHA9Im5yQHNlZW5FcnJvciIsbD0wO2MuZmVhdHVyZXMuZXJyPSEwLHQoMSksd2luZG93Lm9uZXJyb3I9cjt0cnl7dGhyb3cgbmV3IEVycm9yfWNhdGNoKGgpeyJzdGFjayJpbiBoJiYodCgxMyksdCgxMiksImFkZEV2ZW50TGlzdGVuZXIiaW4gd2luZG93JiZ0KDYpLGMueGhyV3JhcHBhYmxlJiZ0KDE0KSxkPSEwKX1zLm9uKCJmbi1zdGFydCIsZnVuY3Rpb24odCxlLG4pe2QmJihsKz0xKX0pLHMub24oImZuLWVyciIsZnVuY3Rpb24odCxlLG4pe2QmJiFuW3BdJiYoZihuLHAsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLHRoaXMudGhyb3duPSEwLG8obikpfSkscy5vbigiZm4tZW5kIixmdW5jdGlvbigpe2QmJiF0aGlzLnRocm93biYmbD4wJiYobC09MSl9KSxzLm9uKCJpbnRlcm5hbC1lcnJvciIsZnVuY3Rpb24odCl7aSgiaWVyciIsW3QsYy5ub3coKSwhMF0pfSl9LHt9XSwzOltmdW5jdGlvbih0LGUsbil7dCgibG9hZGVyIikuZmVhdHVyZXMuaW5zPSEwfSx7fV0sNDpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIoKXtMKyssQz1nLmhhc2gsdGhpc1t1XT15Lm5vdygpfWZ1bmN0aW9uIG8oKXtMLS0sZy5oYXNoIT09QyYmaSgwLCEwKTt2YXIgdD15Lm5vdygpO3RoaXNbaF09fn50aGlzW2hdK3QtdGhpc1t1XSx0aGlzW2RdPXR9ZnVuY3Rpb24gaSh0LGUpe0UuZW1pdCgibmV3VVJMIixbIiIrZyxlXSl9ZnVuY3Rpb24gYSh0LGUpe3Qub24oZSxmdW5jdGlvbigpe3RoaXNbZV09eS5ub3coKX0pfXZhciBzPSItc3RhcnQiLGM9Ii1lbmQiLGY9Ii1ib2R5Iix1PSJmbiIrcyxkPSJmbiIrYyxwPSJjYiIrcyxsPSJjYiIrYyxoPSJqc1RpbWUiLG09ImZldGNoIix2PSJhZGRFdmVudExpc3RlbmVyIix3PXdpbmRvdyxnPXcubG9jYXRpb24seT10KCJsb2FkZXIiKTtpZih3W3ZdJiZ5LnhocldyYXBwYWJsZSl7dmFyIHg9dCgxMCksYj10KDExKSxFPXQoOCksTz10KDYpLFI9dCgxMyksUD10KDcpLFQ9dCgxNCksTj10KDkpLE09dCgiZWUiKSxTPU0uZ2V0KCJ0cmFjZXIiKTt0KDE2KSx5LmZlYXR1cmVzLnNwYT0hMDt2YXIgQyxMPTA7TS5vbih1LHIpLE0ub24ocCxyKSxNLm9uKGQsbyksTS5vbihsLG8pLE0uYnVmZmVyKFt1LGQsInhoci1kb25lIiwieGhyLXJlc29sdmVkIl0pLE8uYnVmZmVyKFt1XSksUi5idWZmZXIoWyJzZXRUaW1lb3V0IitjLCJjbGVhclRpbWVvdXQiK3MsdV0pLFQuYnVmZmVyKFt1LCJuZXcteGhyIiwic2VuZC14aHIiK3NdKSxQLmJ1ZmZlcihbbStzLG0rIi1kb25lIixtK2YrcyxtK2YrY10pLEUuYnVmZmVyKFsibmV3VVJMIl0pLHguYnVmZmVyKFt1XSksYi5idWZmZXIoWyJwcm9wYWdhdGUiLHAsbCwiZXhlY3V0b3ItZXJyIiwicmVzb2x2ZSIrc10pLFMuYnVmZmVyKFt1LCJuby0iK3VdKSxOLmJ1ZmZlcihbIm5ldy1qc29ucCIsImNiLXN0YXJ0IiwianNvbnAtZXJyb3IiLCJqc29ucC1lbmQiXSksYShULCJzZW5kLXhociIrcyksYShNLCJ4aHItcmVzb2x2ZWQiKSxhKE0sInhoci1kb25lIiksYShQLG0rcyksYShQLG0rIi1kb25lIiksYShOLCJuZXctanNvbnAiKSxhKE4sImpzb25wLWVuZCIpLGEoTiwiY2Itc3RhcnQiKSxFLm9uKCJwdXNoU3RhdGUtZW5kIixpKSxFLm9uKCJyZXBsYWNlU3RhdGUtZW5kIixpKSx3W3ZdKCJoYXNoY2hhbmdlIixpLCEwKSx3W3ZdKCJsb2FkIixpLCEwKSx3W3ZdKCJwb3BzdGF0ZSIsZnVuY3Rpb24oKXtpKDAsTD4xKX0sITApfX0se31dLDU6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe31pZih3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcmJndpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKXt2YXIgbz10KCJlZSIpLGk9dCgiaGFuZGxlIiksYT10KDEzKSxzPXQoMTIpLGM9ImxlYXJSZXNvdXJjZVRpbWluZ3MiLGY9ImFkZEV2ZW50TGlzdGVuZXIiLHU9InJlc291cmNldGltaW5nYnVmZmVyZnVsbCIsZD0iYnN0UmVzb3VyY2UiLHA9InJlc291cmNlIixsPSItc3RhcnQiLGg9Ii1lbmQiLG09ImZuIitsLHY9ImZuIitoLHc9ImJzdFRpbWVyIixnPSJwdXNoU3RhdGUiLHk9dCgibG9hZGVyIik7eS5mZWF0dXJlcy5zdG49ITAsdCg4KSwiYWRkRXZlbnRMaXN0ZW5lciJpbiB3aW5kb3cmJnQoNik7dmFyIHg9TlJFVU0uby5FVjtvLm9uKG0sZnVuY3Rpb24odCxlKXt2YXIgbj10WzBdO24gaW5zdGFuY2VvZiB4JiYodGhpcy5ic3RTdGFydD15Lm5vdygpKX0pLG8ub24odixmdW5jdGlvbih0LGUpe3ZhciBuPXRbMF07biBpbnN0YW5jZW9mIHgmJmkoImJzdCIsW24sZSx0aGlzLmJzdFN0YXJ0LHkubm93KCldKX0pLGEub24obSxmdW5jdGlvbih0LGUsbil7dGhpcy5ic3RTdGFydD15Lm5vdygpLHRoaXMuYnN0VHlwZT1ufSksYS5vbih2LGZ1bmN0aW9uKHQsZSl7aSh3LFtlLHRoaXMuYnN0U3RhcnQseS5ub3coKSx0aGlzLmJzdFR5cGVdKX0pLHMub24obSxmdW5jdGlvbigpe3RoaXMuYnN0U3RhcnQ9eS5ub3coKX0pLHMub24odixmdW5jdGlvbih0LGUpe2kodyxbZSx0aGlzLmJzdFN0YXJ0LHkubm93KCksInJlcXVlc3RBbmltYXRpb25GcmFtZSJdKX0pLG8ub24oZytsLGZ1bmN0aW9uKHQpe3RoaXMudGltZT15Lm5vdygpLHRoaXMuc3RhcnRQYXRoPWxvY2F0aW9uLnBhdGhuYW1lK2xvY2F0aW9uLmhhc2h9KSxvLm9uKGcraCxmdW5jdGlvbih0KXtpKCJic3RIaXN0IixbbG9jYXRpb24ucGF0aG5hbWUrbG9jYXRpb24uaGFzaCx0aGlzLnN0YXJ0UGF0aCx0aGlzLnRpbWVdKX0pLGYgaW4gd2luZG93LnBlcmZvcm1hbmNlJiYod2luZG93LnBlcmZvcm1hbmNlWyJjIitjXT93aW5kb3cucGVyZm9ybWFuY2VbZl0odSxmdW5jdGlvbih0KXtpKGQsW3dpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKHApXSksd2luZG93LnBlcmZvcm1hbmNlWyJjIitjXSgpfSwhMSk6d2luZG93LnBlcmZvcm1hbmNlW2ZdKCJ3ZWJraXQiK3UsZnVuY3Rpb24odCl7aShkLFt3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZShwKV0pLHdpbmRvdy5wZXJmb3JtYW5jZVsid2Via2l0QyIrY10oKX0sITEpKSxkb2N1bWVudFtmXSgic2Nyb2xsIixyLHtwYXNzaXZlOiEwfSksZG9jdW1lbnRbZl0oImtleXByZXNzIixyLCExKSxkb2N1bWVudFtmXSgiY2xpY2siLHIsITEpfX0se31dLDY6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe2Zvcih2YXIgZT10O2UmJiFlLmhhc093blByb3BlcnR5KHUpOyllPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtlJiZvKGUpfWZ1bmN0aW9uIG8odCl7cy5pblBsYWNlKHQsW3UsZF0sIi0iLGkpfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdFsxXX12YXIgYT10KCJlZSIpLmdldCgiZXZlbnRzIikscz10KCJ3cmFwLWZ1bmN0aW9uIikoYSwhMCksYz10KCJnb3MiKSxmPVhNTEh0dHBSZXF1ZXN0LHU9ImFkZEV2ZW50TGlzdGVuZXIiLGQ9InJlbW92ZUV2ZW50TGlzdGVuZXIiO2UuZXhwb3J0cz1hLCJnZXRQcm90b3R5cGVPZiJpbiBPYmplY3Q/KHIoZG9jdW1lbnQpLHIod2luZG93KSxyKGYucHJvdG90eXBlKSk6Zi5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodSkmJihvKHdpbmRvdyksbyhmLnByb3RvdHlwZSkpLGEub24odSsiLXN0YXJ0IixmdW5jdGlvbih0LGUpe3ZhciBuPXRbMV0scj1jKG4sIm5yQHdyYXBwZWQiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuLmhhbmRsZUV2ZW50KXJldHVybiBuLmhhbmRsZUV2ZW50LmFwcGx5KG4sYXJndW1lbnRzKX12YXIgZT17b2JqZWN0OnQsImZ1bmN0aW9uIjpufVt0eXBlb2Ygbl07cmV0dXJuIGU/cyhlLCJmbi0iLG51bGwsZS5uYW1lfHwiYW5vbnltb3VzIik6bn0pO3RoaXMud3JhcHBlZD10WzFdPXJ9KSxhLm9uKGQrIi1zdGFydCIsZnVuY3Rpb24odCl7dFsxXT10aGlzLndyYXBwZWR8fHRbMV19KX0se31dLDc6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSxuKXt2YXIgcj10W2VdOyJmdW5jdGlvbiI9PXR5cGVvZiByJiYodFtlXT1mdW5jdGlvbigpe3ZhciB0PWkoYXJndW1lbnRzKSxlPXt9O28uZW1pdChuKyJiZWZvcmUtc3RhcnQiLFt0XSxlKTt2YXIgYTtlW21dJiZlW21dLmR0JiYoYT1lW21dLmR0KTt2YXIgcz1yLmFwcGx5KHRoaXMsdCk7cmV0dXJuIG8uZW1pdChuKyJzdGFydCIsW3QsYV0scykscy50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBvLmVtaXQobisiZW5kIixbbnVsbCx0XSxzKSx0fSxmdW5jdGlvbih0KXt0aHJvdyBvLmVtaXQobisiZW5kIixbdF0scyksdH0pfSl9dmFyIG89dCgiZWUiKS5nZXQoImZldGNoIiksaT10KDI2KSxhPXQoMjUpO2UuZXhwb3J0cz1vO3ZhciBzPXdpbmRvdyxjPSJmZXRjaC0iLGY9YysiYm9keS0iLHU9WyJhcnJheUJ1ZmZlciIsImJsb2IiLCJqc29uIiwidGV4dCIsImZvcm1EYXRhIl0sZD1zLlJlcXVlc3QscD1zLlJlc3BvbnNlLGw9cy5mZXRjaCxoPSJwcm90b3R5cGUiLG09Im5yQGNvbnRleHQiO2QmJnAmJmwmJihhKHUsZnVuY3Rpb24odCxlKXtyKGRbaF0sZSxmKSxyKHBbaF0sZSxmKX0pLHIocywiZmV0Y2giLGMpLG8ub24oYysiZW5kIixmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYoZSl7dmFyIHI9ZS5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKTtudWxsIT09ciYmKG4ucnhTaXplPXIpLG8uZW1pdChjKyJkb25lIixbbnVsbCxlXSxuKX1lbHNlIG8uZW1pdChjKyJkb25lIixbdF0sbil9KSl9LHt9XSw4OltmdW5jdGlvbih0LGUsbil7dmFyIHI9dCgiZWUiKS5nZXQoImhpc3RvcnkiKSxvPXQoIndyYXAtZnVuY3Rpb24iKShyKTtlLmV4cG9ydHM9cjt2YXIgaT13aW5kb3cuaGlzdG9yeSYmd2luZG93Lmhpc3RvcnkuY29uc3RydWN0b3ImJndpbmRvdy5oaXN0b3J5LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxhPXdpbmRvdy5oaXN0b3J5O2kmJmkucHVzaFN0YXRlJiZpLnJlcGxhY2VTdGF0ZSYmKGE9aSksby5pblBsYWNlKGEsWyJwdXNoU3RhdGUiLCJyZXBsYWNlU3RhdGUiXSwiLSIpfSx7fV0sOTpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCl7ZnVuY3Rpb24gZSgpe2MuZW1pdCgianNvbnAtZW5kIixbXSxwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGUsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLG4sITEpfWZ1bmN0aW9uIG4oKXtjLmVtaXQoImpzb25wLWVycm9yIixbXSxwKSxjLmVtaXQoImpzb25wLWVuZCIsW10scCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixlLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixuLCExKX12YXIgcj10JiYic3RyaW5nIj09dHlwZW9mIHQubm9kZU5hbWUmJiJzY3JpcHQiPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHIpe3ZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmFkZEV2ZW50TGlzdGVuZXI7aWYobyl7dmFyIGE9aSh0LnNyYyk7aWYoYSl7dmFyIHU9cyhhKSxkPSJmdW5jdGlvbiI9PXR5cGVvZiB1LnBhcmVudFt1LmtleV07aWYoZCl7dmFyIHA9e307Zi5pblBsYWNlKHUucGFyZW50LFt1LmtleV0sImNiLSIscCksdC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixuLCExKSxjLmVtaXQoIm5ldy1qc29ucCIsW3Quc3JjXSxwKX19fX19ZnVuY3Rpb24gbygpe3JldHVybiJhZGRFdmVudExpc3RlbmVyImluIHdpbmRvd31mdW5jdGlvbiBpKHQpe3ZhciBlPXQubWF0Y2godSk7cmV0dXJuIGU/ZVsxXTpudWxsfWZ1bmN0aW9uIGEodCxlKXt2YXIgbj10Lm1hdGNoKHApLHI9blsxXSxvPW5bM107cmV0dXJuIG8/YShvLGVbcl0pOmVbcl19ZnVuY3Rpb24gcyh0KXt2YXIgZT10Lm1hdGNoKGQpO3JldHVybiBlJiZlLmxlbmd0aD49Mz97a2V5OmVbMl0scGFyZW50OmEoZVsxXSx3aW5kb3cpfTp7a2V5OnQscGFyZW50OndpbmRvd319dmFyIGM9dCgiZWUiKS5nZXQoImpzb25wIiksZj10KCJ3cmFwLWZ1bmN0aW9uIikoYyk7aWYoZS5leHBvcnRzPWMsbygpKXt2YXIgdT0vWz8mXSg/OmNhbGxiYWNrfGNiKT0oW14mI10rKS8sZD0vKC4qKVwuKFteLl0rKS8scD0vXihcdyspKFwufCQpKC4qKSQvLGw9WyJhcHBlbmRDaGlsZCIsImluc2VydEJlZm9yZSIsInJlcGxhY2VDaGlsZCJdO05vZGUmJk5vZGUucHJvdG90eXBlJiZOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD9mLmluUGxhY2UoTm9kZS5wcm90b3R5cGUsbCwiZG9tLSIpOihmLmluUGxhY2UoSFRNTEVsZW1lbnQucHJvdG90eXBlLGwsImRvbS0iKSxmLmluUGxhY2UoSFRNTEhlYWRFbGVtZW50LnByb3RvdHlwZSxsLCJkb20tIiksZi5pblBsYWNlKEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsbCwiZG9tLSIpKSxjLm9uKCJkb20tc3RhcnQiLGZ1bmN0aW9uKHQpe3IodFswXSl9KX19LHt9XSwxMDpbZnVuY3Rpb24odCxlLG4pe3ZhciByPXQoImVlIikuZ2V0KCJtdXRhdGlvbiIpLG89dCgid3JhcC1mdW5jdGlvbiIpKHIpLGk9TlJFVU0uby5NTztlLmV4cG9ydHM9cixpJiYod2luZG93Lk11dGF0aW9uT2JzZXJ2ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP25ldyBpKG8odCwiZm4tIikpOmkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxNdXRhdGlvbk9ic2VydmVyLnByb3RvdHlwZT1pLnByb3RvdHlwZSl9LHt9XSwxMTpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCl7dmFyIGU9YS5jb250ZXh0KCksbj1zKHQsImV4ZWN1dG9yLSIsZSkscj1uZXcgZihuKTtyZXR1cm4gYS5jb250ZXh0KHIpLmdldEN0eD1mdW5jdGlvbigpe3JldHVybiBlfSxhLmVtaXQoIm5ldy1wcm9taXNlIixbcixlXSxlKSxyfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZX12YXIgaT10KCJ3cmFwLWZ1bmN0aW9uIiksYT10KCJlZSIpLmdldCgicHJvbWlzZSIpLHM9aShhKSxjPXQoMjUpLGY9TlJFVU0uby5QUjtlLmV4cG9ydHM9YSxmJiYod2luZG93LlByb21pc2U9cixbImFsbCIsInJhY2UiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWZbdF07Zlt0XT1mdW5jdGlvbihuKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe2EuZW1pdCgicHJvcGFnYXRlIixbbnVsbCwhb10saSksbz1vfHwhdH19dmFyIG89ITE7YyhuLGZ1bmN0aW9uKGUsbil7UHJvbWlzZS5yZXNvbHZlKG4pLnRoZW4ocigiYWxsIj09PXQpLHIoITEpKX0pO3ZhciBpPWUuYXBwbHkoZixhcmd1bWVudHMpLHM9Zi5yZXNvbHZlKGkpO3JldHVybiBzfX0pLFsicmVzb2x2ZSIsInJlamVjdCJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Zlt0XTtmW3RdPWZ1bmN0aW9uKHQpe3ZhciBuPWUuYXBwbHkoZixhcmd1bWVudHMpO3JldHVybiB0IT09biYmYS5lbWl0KCJwcm9wYWdhdGUiLFt0LCEwXSxuKSxufX0pLGYucHJvdG90eXBlWyJjYXRjaCJdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCx0KX0sZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShmLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnJ9fSksYyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmKSxmdW5jdGlvbih0LGUpe3RyeXtyW2VdPWZbZV19Y2F0Y2gobil7fX0pLGEub24oImV4ZWN1dG9yLXN0YXJ0IixmdW5jdGlvbih0KXt0WzBdPXModFswXSwicmVzb2x2ZS0iLHRoaXMpLHRbMV09cyh0WzFdLCJyZXNvbHZlLSIsdGhpcyl9KSxhLm9uKCJleGVjdXRvci1lcnIiLGZ1bmN0aW9uKHQsZSxuKXt0WzFdKG4pfSkscy5pblBsYWNlKGYucHJvdG90eXBlLFsidGhlbiJdLCJ0aGVuLSIsbyksYS5vbigidGhlbi1zdGFydCIsZnVuY3Rpb24odCxlKXt0aGlzLnByb21pc2U9ZSx0WzBdPXModFswXSwiY2ItIix0aGlzKSx0WzFdPXModFsxXSwiY2ItIix0aGlzKX0pLGEub24oInRoZW4tZW5kIixmdW5jdGlvbih0LGUsbil7dGhpcy5uZXh0UHJvbWlzZT1uO3ZhciByPXRoaXMucHJvbWlzZTthLmVtaXQoInByb3BhZ2F0ZSIsW3IsITBdLG4pfSksYS5vbigiY2ItZW5kIixmdW5jdGlvbih0LGUsbil7YS5lbWl0KCJwcm9wYWdhdGUiLFtuLCEwXSx0aGlzLm5leHRQcm9taXNlKX0pLGEub24oInByb3BhZ2F0ZSIsZnVuY3Rpb24odCxlLG4pe3RoaXMuZ2V0Q3R4JiYhZXx8KHRoaXMuZ2V0Q3R4PWZ1bmN0aW9uKCl7aWYodCBpbnN0YW5jZW9mIFByb21pc2UpdmFyIGU9YS5jb250ZXh0KHQpO3JldHVybiBlJiZlLmdldEN0eD9lLmdldEN0eCgpOnRoaXN9KX0pLHIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIitmfSl9LHt9XSwxMjpbZnVuY3Rpb24odCxlLG4pe3ZhciByPXQoImVlIikuZ2V0KCJyYWYiKSxvPXQoIndyYXAtZnVuY3Rpb24iKShyKSxpPSJlcXVlc3RBbmltYXRpb25GcmFtZSI7ZS5leHBvcnRzPXIsby5pblBsYWNlKHdpbmRvdyxbInIiK2ksIm1velIiK2ksIndlYmtpdFIiK2ksIm1zUiIraV0sInJhZi0iKSxyLm9uKCJyYWYtc3RhcnQiLGZ1bmN0aW9uKHQpe3RbMF09byh0WzBdLCJmbi0iKX0pfSx7fV0sMTM6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSxuKXt0WzBdPWEodFswXSwiZm4tIixudWxsLG4pfWZ1bmN0aW9uIG8odCxlLG4pe3RoaXMubWV0aG9kPW4sdGhpcy50aW1lckR1cmF0aW9uPWlzTmFOKHRbMV0pPzA6K3RbMV0sdFswXT1hKHRbMF0sImZuLSIsdGhpcyxuKX12YXIgaT10KCJlZSIpLmdldCgidGltZXIiKSxhPXQoIndyYXAtZnVuY3Rpb24iKShpKSxzPSJzZXRUaW1lb3V0IixjPSJzZXRJbnRlcnZhbCIsZj0iY2xlYXJUaW1lb3V0Iix1PSItc3RhcnQiLGQ9Ii0iO2UuZXhwb3J0cz1pLGEuaW5QbGFjZSh3aW5kb3csW3MsInNldEltbWVkaWF0ZSJdLHMrZCksYS5pblBsYWNlKHdpbmRvdyxbY10sYytkKSxhLmluUGxhY2Uod2luZG93LFtmLCJjbGVhckltbWVkaWF0ZSJdLGYrZCksaS5vbihjK3UsciksaS5vbihzK3Usbyl9LHt9XSwxNDpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlKXtkLmluUGxhY2UoZSxbIm9ucmVhZHlzdGF0ZWNoYW5nZSJdLCJmbi0iLHMpfWZ1bmN0aW9uIG8oKXt2YXIgdD10aGlzLGU9dS5jb250ZXh0KHQpO3QucmVhZHlTdGF0ZT4zJiYhZS5yZXNvbHZlZCYmKGUucmVzb2x2ZWQ9ITAsdS5lbWl0KCJ4aHItcmVzb2x2ZWQiLFtdLHQpKSxkLmluUGxhY2UodCxnLCJmbi0iLHMpfWZ1bmN0aW9uIGkodCl7eS5wdXNoKHQpLGgmJihiP2IudGhlbihhKTp2P3YoYSk6KEU9LUUsTy5kYXRhPUUpKX1mdW5jdGlvbiBhKCl7Zm9yKHZhciB0PTA7dDx5Lmxlbmd0aDt0KyspcihbXSx5W3RdKTt5Lmxlbmd0aCYmKHk9W10pfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gZX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciBuIGluIHQpZVtuXT10W25dO3JldHVybiBlfXQoNik7dmFyIGY9dCgiZWUiKSx1PWYuZ2V0KCJ4aHIiKSxkPXQoIndyYXAtZnVuY3Rpb24iKSh1KSxwPU5SRVVNLm8sbD1wLlhIUixoPXAuTU8sbT1wLlBSLHY9cC5TSSx3PSJyZWFkeXN0YXRlY2hhbmdlIixnPVsib25sb2FkIiwib25lcnJvciIsIm9uYWJvcnQiLCJvbmxvYWRzdGFydCIsIm9ubG9hZGVuZCIsIm9ucHJvZ3Jlc3MiLCJvbnRpbWVvdXQiXSx5PVtdO2UuZXhwb3J0cz11O3ZhciB4PXdpbmRvdy5YTUxIdHRwUmVxdWVzdD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbCh0KTt0cnl7dS5lbWl0KCJuZXcteGhyIixbZV0sZSksZS5hZGRFdmVudExpc3RlbmVyKHcsbywhMSl9Y2F0Y2gobil7dHJ5e3UuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtuXSl9Y2F0Y2gocil7fX1yZXR1cm4gZX07aWYoYyhsLHgpLHgucHJvdG90eXBlPWwucHJvdG90eXBlLGQuaW5QbGFjZSh4LnByb3RvdHlwZSxbIm9wZW4iLCJzZW5kIl0sIi14aHItIixzKSx1Lm9uKCJzZW5kLXhoci1zdGFydCIsZnVuY3Rpb24odCxlKXtyKHQsZSksaShlKX0pLHUub24oIm9wZW4teGhyLXN0YXJ0IixyKSxoKXt2YXIgYj1tJiZtLnJlc29sdmUoKTtpZighdiYmIW0pe3ZhciBFPTEsTz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShFKTtuZXcgaChhKS5vYnNlcnZlKE8se2NoYXJhY3RlckRhdGE6ITB9KX19ZWxzZSBmLm9uKCJmbi1lbmQiLGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udHlwZT09PXd8fGEoKX0pfSx7fV0sMTU6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQpe2lmKCFpKHQpKXJldHVybiBudWxsO3ZhciBlPXdpbmRvdy5OUkVVTTtpZighZS5sb2FkZXJfY29uZmlnKXJldHVybiBudWxsO3ZhciBuPShlLmxvYWRlcl9jb25maWcuYWNjb3VudElEfHwiIikudG9TdHJpbmcoKXx8bnVsbCxyPShlLmxvYWRlcl9jb25maWcuYWdlbnRJRHx8IiIpLnRvU3RyaW5nKCl8fG51bGwscz0oZS5sb2FkZXJfY29uZmlnLnRydXN0S2V5fHwiIikudG9TdHJpbmcoKXx8bnVsbDtpZighbnx8IXIpcmV0dXJuIG51bGw7dmFyIGM9YS5nZW5lcmF0ZUNhdElkKCksZj1hLmdlbmVyYXRlQ2F0SWQoKSx1PURhdGUubm93KCksZD1vKGMsZix1LG4scixzKTtyZXR1cm57aGVhZGVyOmQsZ3VpZDpjLHRyYWNlSWQ6Zix0aW1lc3RhbXA6dX19ZnVuY3Rpb24gbyh0LGUsbixyLG8saSl7dmFyIGE9ImJ0b2EiaW4gd2luZG93JiYiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93LmJ0b2E7aWYoIWEpcmV0dXJuIG51bGw7dmFyIHM9e3Y6WzAsMV0sZDp7dHk6IkJyb3dzZXIiLGFjOnIsYXA6byxpZDp0LHRyOmUsdGk6bn19O3JldHVybiBpJiZyIT09aSYmKHMuZC50az1pKSxidG9hKEpTT04uc3RyaW5naWZ5KHMpKX1mdW5jdGlvbiBpKHQpe3ZhciBlPSExLG49ITEscj17fTtpZigiaW5pdCJpbiBOUkVVTSYmImRpc3RyaWJ1dGVkX3RyYWNpbmciaW4gTlJFVU0uaW5pdCYmKHI9TlJFVU0uaW5pdC5kaXN0cmlidXRlZF90cmFjaW5nLG49ISFyLmVuYWJsZWQpLG4paWYodC5zYW1lT3JpZ2luKWU9ITA7ZWxzZSBpZihyLmFsbG93ZWRfb3JpZ2lucyBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgbz0wO288ci5hbGxvd2VkX29yaWdpbnMubGVuZ3RoO28rKyl7dmFyIGk9cyhyLmFsbG93ZWRfb3JpZ2luc1tvXSk7aWYodC5ob3N0bmFtZT09PWkuaG9zdG5hbWUmJnQucHJvdG9jb2w9PT1pLnByb3RvY29sJiZ0LnBvcnQ9PT1pLnBvcnQpe2U9ITA7YnJlYWt9fXJldHVybiBuJiZlfXZhciBhPXQoMjMpLHM9dCgxNyk7ZS5leHBvcnRzPXtnZW5lcmF0ZVRyYWNlUGF5bG9hZDpyLHNob3VsZEdlbmVyYXRlVHJhY2U6aX19LHt9XSwxNjpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCl7dmFyIGU9dGhpcy5wYXJhbXMsbj10aGlzLm1ldHJpY3M7aWYoIXRoaXMuZW5kZWQpe3RoaXMuZW5kZWQ9ITA7Zm9yKHZhciByPTA7cjxwO3IrKyl0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZFtyXSx0aGlzLmxpc3RlbmVyLCExKTtlLmFib3J0ZWR8fChuLmR1cmF0aW9uPWEubm93KCktdGhpcy5zdGFydFRpbWUsdGhpcy5sb2FkQ2FwdHVyZUNhbGxlZHx8NCE9PXQucmVhZHlTdGF0ZT9udWxsPT1lLnN0YXR1cyYmKGUuc3RhdHVzPTApOmkodGhpcyx0KSxuLmNiVGltZT10aGlzLmNiVGltZSx1LmVtaXQoInhoci1kb25lIixbdF0sdCkscygieGhyIixbZSxuLHRoaXMuc3RhcnRUaW1lXSkpfX1mdW5jdGlvbiBvKHQsZSl7dmFyIG49YyhlKSxyPXQucGFyYW1zO3IuaG9zdD1uLmhvc3RuYW1lKyI6IituLnBvcnQsci5wYXRobmFtZT1uLnBhdGhuYW1lLHQucGFyc2VkT3JpZ2luPWMoZSksdC5zYW1lT3JpZ2luPXQucGFyc2VkT3JpZ2luLnNhbWVPcmlnaW59ZnVuY3Rpb24gaSh0LGUpe3QucGFyYW1zLnN0YXR1cz1lLnN0YXR1czt2YXIgbj12KGUsdC5sYXN0U2l6ZSk7aWYobiYmKHQubWV0cmljcy5yeFNpemU9biksdC5zYW1lT3JpZ2luKXt2YXIgcj1lLmdldFJlc3BvbnNlSGVhZGVyKCJYLU5ld1JlbGljLUFwcC1EYXRhIik7ciYmKHQucGFyYW1zLmNhdD1yLnNwbGl0KCIsICIpLnBvcCgpKX10LmxvYWRDYXB0dXJlQ2FsbGVkPSEwfXZhciBhPXQoImxvYWRlciIpO2lmKGEueGhyV3JhcHBhYmxlKXt2YXIgcz10KCJoYW5kbGUiKSxjPXQoMTcpLGY9dCgxNSkuZ2VuZXJhdGVUcmFjZVBheWxvYWQsdT10KCJlZSIpLGQ9WyJsb2FkIiwiZXJyb3IiLCJhYm9ydCIsInRpbWVvdXQiXSxwPWQubGVuZ3RoLGw9dCgiaWQiKSxoPXQoMjEpLG09dCgyMCksdj10KDE4KSx3PXdpbmRvdy5YTUxIdHRwUmVxdWVzdDthLmZlYXR1cmVzLnhocj0hMCx0KDE0KSx0KDcpLHUub24oIm5ldy14aHIiLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZS50b3RhbENicz0wLGUuY2FsbGVkPTAsZS5jYlRpbWU9MCxlLmVuZD1yLGUuZW5kZWQ9ITEsZS54aHJHdWlkcz17fSxlLmxhc3RTaXplPW51bGwsZS5sb2FkQ2FwdHVyZUNhbGxlZD0hMSx0LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKG4pe2koZSx0KX0sITEpLGgmJihoPjM0fHxoPDEwKXx8d2luZG93Lm9wZXJhfHx0LmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbih0KXtlLmxhc3RTaXplPXQubG9hZGVkfSwhMSl9KSx1Lm9uKCJvcGVuLXhoci1zdGFydCIsZnVuY3Rpb24odCl7dGhpcy5wYXJhbXM9e21ldGhvZDp0WzBdfSxvKHRoaXMsdFsxXSksdGhpcy5tZXRyaWNzPXt9fSksdS5vbigib3Blbi14aHItZW5kIixmdW5jdGlvbih0LGUpeyJsb2FkZXJfY29uZmlnImluIE5SRVVNJiYieHBpZCJpbiBOUkVVTS5sb2FkZXJfY29uZmlnJiZ0aGlzLnNhbWVPcmlnaW4mJmUuc2V0UmVxdWVzdEhlYWRlcigiWC1OZXdSZWxpYy1JRCIsTlJFVU0ubG9hZGVyX2NvbmZpZy54cGlkKTt2YXIgbj1mKHRoaXMucGFyc2VkT3JpZ2luKTtuJiZuLmhlYWRlciYmKGUuc2V0UmVxdWVzdEhlYWRlcigibmV3cmVsaWMiLG4uaGVhZGVyKSx0aGlzLmR0PW4pfSksdS5vbigic2VuZC14aHItc3RhcnQiLGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5tZXRyaWNzLHI9dFswXSxvPXRoaXM7aWYobiYmcil7dmFyIGk9bShyKTtpJiYobi50eFNpemU9aSl9dGhpcy5zdGFydFRpbWU9YS5ub3coKSx0aGlzLmxpc3RlbmVyPWZ1bmN0aW9uKHQpe3RyeXsiYWJvcnQiIT09dC50eXBlfHxvLmxvYWRDYXB0dXJlQ2FsbGVkfHwoby5wYXJhbXMuYWJvcnRlZD0hMCksKCJsb2FkIiE9PXQudHlwZXx8by5jYWxsZWQ9PT1vLnRvdGFsQ2JzJiYoby5vbmxvYWRDYWxsZWR8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLm9ubG9hZCkpJiZvLmVuZChlKX1jYXRjaChuKXt0cnl7dS5lbWl0KCJpbnRlcm5hbC1lcnJvciIsW25dKX1jYXRjaChyKXt9fX07Zm9yKHZhciBzPTA7czxwO3MrKyllLmFkZEV2ZW50TGlzdGVuZXIoZFtzXSx0aGlzLmxpc3RlbmVyLCExKX0pLHUub24oInhoci1jYi10aW1lIixmdW5jdGlvbih0LGUsbil7dGhpcy5jYlRpbWUrPXQsZT90aGlzLm9ubG9hZENhbGxlZD0hMDp0aGlzLmNhbGxlZCs9MSx0aGlzLmNhbGxlZCE9PXRoaXMudG90YWxDYnN8fCF0aGlzLm9ubG9hZENhbGxlZCYmImZ1bmN0aW9uIj09dHlwZW9mIG4ub25sb2FkfHx0aGlzLmVuZChuKX0pLHUub24oInhoci1sb2FkLWFkZGVkIixmdW5jdGlvbih0LGUpe3ZhciBuPSIiK2wodCkrISFlO3RoaXMueGhyR3VpZHMmJiF0aGlzLnhockd1aWRzW25dJiYodGhpcy54aHJHdWlkc1tuXT0hMCx0aGlzLnRvdGFsQ2JzKz0xKX0pLHUub24oInhoci1sb2FkLXJlbW92ZWQiLGZ1bmN0aW9uKHQsZSl7dmFyIG49IiIrbCh0KSshIWU7dGhpcy54aHJHdWlkcyYmdGhpcy54aHJHdWlkc1tuXSYmKGRlbGV0ZSB0aGlzLnhockd1aWRzW25dLHRoaXMudG90YWxDYnMtPTEpfSksdS5vbigiYWRkRXZlbnRMaXN0ZW5lci1lbmQiLGZ1bmN0aW9uKHQsZSl7ZSBpbnN0YW5jZW9mIHcmJiJsb2FkIj09PXRbMF0mJnUuZW1pdCgieGhyLWxvYWQtYWRkZWQiLFt0WzFdLHRbMl1dLGUpfSksdS5vbigicmVtb3ZlRXZlbnRMaXN0ZW5lci1lbmQiLGZ1bmN0aW9uKHQsZSl7ZSBpbnN0YW5jZW9mIHcmJiJsb2FkIj09PXRbMF0mJnUuZW1pdCgieGhyLWxvYWQtcmVtb3ZlZCIsW3RbMV0sdFsyXV0sZSl9KSx1Lm9uKCJmbi1zdGFydCIsZnVuY3Rpb24odCxlLG4pe2UgaW5zdGFuY2VvZiB3JiYoIm9ubG9hZCI9PT1uJiYodGhpcy5vbmxvYWQ9ITApLCgibG9hZCI9PT0odFswXSYmdFswXS50eXBlKXx8dGhpcy5vbmxvYWQpJiYodGhpcy54aHJDYlN0YXJ0PWEubm93KCkpKX0pLHUub24oImZuLWVuZCIsZnVuY3Rpb24odCxlKXt0aGlzLnhockNiU3RhcnQmJnUuZW1pdCgieGhyLWNiLXRpbWUiLFthLm5vdygpLXRoaXMueGhyQ2JTdGFydCx0aGlzLm9ubG9hZCxlXSxlKX0pLHUub24oImZldGNoLWJlZm9yZS1zdGFydCIsZnVuY3Rpb24odCl7dmFyIGUsbj10WzFdfHx7fTsic3RyaW5nIj09dHlwZW9mIHRbMF0/ZT10WzBdOnRbMF0mJnRbMF0udXJsJiYoZT10WzBdLnVybCksZSYmKHRoaXMucGFyc2VkT3JpZ2luPWMoZSksdGhpcy5zYW1lT3JpZ2luPXRoaXMucGFyc2VkT3JpZ2luLnNhbWVPcmlnaW4pO3ZhciByPWYodGhpcy5wYXJzZWRPcmlnaW4pO2lmKHImJnIuaGVhZGVyKXt2YXIgbz1yLmhlYWRlcjtpZigic3RyaW5nIj09dHlwZW9mIHRbMF0pe3ZhciBpPXt9O2Zvcih2YXIgYSBpbiBuKWlbYV09blthXTtpLmhlYWRlcnM9bmV3IEhlYWRlcnMobi5oZWFkZXJzfHx7fSksaS5oZWFkZXJzLnNldCgibmV3cmVsaWMiLG8pLHRoaXMuZHQ9cix0Lmxlbmd0aD4xP3RbMV09aTp0LnB1c2goaSl9ZWxzZSB0WzBdJiZ0WzBdLmhlYWRlcnMmJih0WzBdLmhlYWRlcnMuYXBwZW5kKCJuZXdyZWxpYyIsbyksdGhpcy5kdD1yKX19KX19LHt9XSwxNzpbZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih0IGluIHIpcmV0dXJuIHJbdF07dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG49d2luZG93LmxvY2F0aW9uLG89e307ZS5ocmVmPXQsby5wb3J0PWUucG9ydDt2YXIgaT1lLmhyZWYuc3BsaXQoIjovLyIpOyFvLnBvcnQmJmlbMV0mJihvLnBvcnQ9aVsxXS5zcGxpdCgiLyIpWzBdLnNwbGl0KCJAIikucG9wKCkuc3BsaXQoIjoiKVsxXSksby5wb3J0JiYiMCIhPT1vLnBvcnR8fChvLnBvcnQ9Imh0dHBzIj09PWlbMF0/IjQ0MyI6IjgwIiksby5ob3N0bmFtZT1lLmhvc3RuYW1lfHxuLmhvc3RuYW1lLG8ucGF0aG5hbWU9ZS5wYXRobmFtZSxvLnByb3RvY29sPWlbMF0sIi8iIT09by5wYXRobmFtZS5jaGFyQXQoMCkmJihvLnBhdGhuYW1lPSIvIitvLnBhdGhuYW1lKTt2YXIgYT0hZS5wcm90b2NvbHx8IjoiPT09ZS5wcm90b2NvbHx8ZS5wcm90b2NvbD09PW4ucHJvdG9jb2wscz1lLmhvc3RuYW1lPT09ZG9jdW1lbnQuZG9tYWluJiZlLnBvcnQ9PT1uLnBvcnQ7cmV0dXJuIG8uc2FtZU9yaWdpbj1hJiYoIWUuaG9zdG5hbWV8fHMpLCIvIj09PW8ucGF0aG5hbWUmJihyW3RdPW8pLG99fSx7fV0sMTg6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHQsZSl7dmFyIG49dC5yZXNwb25zZVR5cGU7cmV0dXJuImpzb24iPT09biYmbnVsbCE9PWU/ZToiYXJyYXlidWZmZXIiPT09bnx8ImJsb2IiPT09bnx8Impzb24iPT09bj9vKHQucmVzcG9uc2UpOiJ0ZXh0Ij09PW58fCIiPT09bnx8dm9pZCAwPT09bj9vKHQucmVzcG9uc2VUZXh0KTp2b2lkIDB9dmFyIG89dCgyMCk7ZS5leHBvcnRzPXJ9LHt9XSwxOTpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gbyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkodCxbZi5ub3coKV0uY29uY2F0KHMoYXJndW1lbnRzKSksZT9udWxsOnRoaXMsbiksZT92b2lkIDA6dGhpc319dmFyIGk9dCgiaGFuZGxlIiksYT10KDI1KSxzPXQoMjYpLGM9dCgiZWUiKS5nZXQoInRyYWNlciIpLGY9dCgibG9hZGVyIiksdT1OUkVVTTsidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdy5uZXdyZWxpYyYmKG5ld3JlbGljPXUpO3ZhciBkPVsic2V0UGFnZVZpZXdOYW1lIiwic2V0Q3VzdG9tQXR0cmlidXRlIiwic2V0RXJyb3JIYW5kbGVyIiwiZmluaXNoZWQiLCJhZGRUb1RyYWNlIiwiaW5saW5lSGl0IiwiYWRkUmVsZWFzZSJdLHA9ImFwaS0iLGw9cCsiaXhuLSI7YShkLGZ1bmN0aW9uKHQsZSl7dVtlXT1vKHArZSwhMCwiYXBpIil9KSx1LmFkZFBhZ2VBY3Rpb249byhwKyJhZGRQYWdlQWN0aW9uIiwhMCksdS5zZXRDdXJyZW50Um91dGVOYW1lPW8ocCsicm91dGVOYW1lIiwhMCksZS5leHBvcnRzPW5ld3JlbGljLHUuaW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHIpLmdldCgpfTt2YXIgaD1yLnByb3RvdHlwZT17Y3JlYXRlVHJhY2VyOmZ1bmN0aW9uKHQsZSl7dmFyIG49e30scj10aGlzLG89ImZ1bmN0aW9uIj09dHlwZW9mIGU7cmV0dXJuIGkobCsidHJhY2VyIixbZi5ub3coKSx0LG5dLHIpLGZ1bmN0aW9uKCl7aWYoYy5lbWl0KChvPyIiOiJuby0iKSsiZm4tc3RhcnQiLFtmLm5vdygpLHIsb10sbiksbyl0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKHQpe3Rocm93IGMuZW1pdCgiZm4tZXJyIixbYXJndW1lbnRzLHRoaXMsdF0sbiksdH1maW5hbGx5e2MuZW1pdCgiZm4tZW5kIixbZi5ub3coKV0sbil9fX19O2EoImFjdGlvblRleHQsc2V0TmFtZSxzZXRBdHRyaWJ1dGUsc2F2ZSxpZ25vcmUsb25FbmQsZ2V0Q29udGV4dCxlbmQsZ2V0Ii5zcGxpdCgiLCIpLGZ1bmN0aW9uKHQsZSl7aFtlXT1vKGwrZSl9KSxuZXdyZWxpYy5ub3RpY2VFcnJvcj1mdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bmV3IEVycm9yKHQpKSxpKCJlcnIiLFt0LGYubm93KCksITEsZV0pfX0se31dLDIwOltmdW5jdGlvbih0LGUsbil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5sZW5ndGgpcmV0dXJuIHQubGVuZ3RoO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZ0LmJ5dGVMZW5ndGgpcmV0dXJuIHQuYnl0ZUxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJnQgaW5zdGFuY2VvZiBCbG9iJiZ0LnNpemUpcmV0dXJuIHQuc2l6ZTtpZighKCJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJnQgaW5zdGFuY2VvZiBGb3JtRGF0YSkpdHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh0KS5sZW5ndGh9Y2F0Y2goZSl7cmV0dXJufX19fSx7fV0sMjE6W2Z1bmN0aW9uKHQsZSxuKXt2YXIgcj0wLG89bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRmlyZWZveFtcL1xzXShcZCtcLlxkKykvKTtvJiYocj0rb1sxXSksZS5leHBvcnRzPXJ9LHt9XSwyMjpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlKXt2YXIgbj10LmdldEVudHJpZXMoKTtuLmZvckVhY2goZnVuY3Rpb24odCl7ImZpcnN0LXBhaW50Ij09PXQubmFtZT9jKCJ0aW1pbmciLFsiZnAiLE1hdGguZmxvb3IodC5zdGFydFRpbWUpXSk6ImZpcnN0LWNvbnRlbnRmdWwtcGFpbnQiPT09dC5uYW1lJiZjKCJ0aW1pbmciLFsiZmNwIixNYXRoLmZsb29yKHQuc3RhcnRUaW1lKV0pfSl9ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXQuZ2V0RW50cmllcygpO24ubGVuZ3RoPjAmJmMoImxjcCIsW25bbi5sZW5ndGgtMV1dKX1mdW5jdGlvbiBpKHQpe2lmKHQgaW5zdGFuY2VvZiB1JiYhcCl7dmFyIGUsbj1NYXRoLnJvdW5kKHQudGltZVN0YW1wKTtlPW4+MWUxMj9EYXRlLm5vdygpLW46Zi5ub3coKS1uLHA9ITAsYygidGltaW5nIixbImZpIixuLHt0eXBlOnQudHlwZSxmaWQ6ZX1dKX19aWYoISgiaW5pdCJpbiBOUkVVTSYmInBhZ2Vfdmlld190aW1pbmciaW4gTlJFVU0uaW5pdCYmImVuYWJsZWQiaW4gTlJFVU0uaW5pdC5wYWdlX3ZpZXdfdGltaW5nJiZOUkVVTS5pbml0LnBhZ2Vfdmlld190aW1pbmcuZW5hYmxlZD09PSExKSl7dmFyIGEscyxjPXQoImhhbmRsZSIpLGY9dCgibG9hZGVyIiksdT1OUkVVTS5vLkVWO2lmKCJQZXJmb3JtYW5jZU9ic2VydmVyImluIHdpbmRvdyYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5QZXJmb3JtYW5jZU9ic2VydmVyKXthPW5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKHIpLHM9bmV3IFBlcmZvcm1hbmNlT2JzZXJ2ZXIobyk7dHJ5e2Eub2JzZXJ2ZSh7ZW50cnlUeXBlczpbInBhaW50Il19KSxzLm9ic2VydmUoe2VudHJ5VHlwZXM6WyJsYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnQiXX0pfWNhdGNoKGQpe319aWYoImFkZEV2ZW50TGlzdGVuZXIiaW4gZG9jdW1lbnQpe3ZhciBwPSExLGw9WyJjbGljayIsImtleWRvd24iLCJtb3VzZWRvd24iLCJwb2ludGVyZG93biIsInRvdWNoc3RhcnQiXTtsLmZvckVhY2goZnVuY3Rpb24odCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0LGksITEpfSl9fX0se31dLDIzOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZT8xNSZlW24rK106MTYqTWF0aC5yYW5kb20oKXwwfXZhciBlPW51bGwsbj0wLHI9d2luZG93LmNyeXB0b3x8d2luZG93Lm1zQ3J5cHRvO3ImJnIuZ2V0UmFuZG9tVmFsdWVzJiYoZT1yLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgzMSkpKTtmb3IodmFyIG8saT0ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4IixhPSIiLHM9MDtzPGkubGVuZ3RoO3MrKylvPWlbc10sIngiPT09bz9hKz10KCkudG9TdHJpbmcoMTYpOiJ5Ij09PW8/KG89MyZ0KCl8OCxhKz1vLnRvU3RyaW5nKDE2KSk6YSs9bztyZXR1cm4gYX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCgpe3JldHVybiBlPzE1JmVbbisrXToxNipNYXRoLnJhbmRvbSgpfDB9dmFyIGU9bnVsbCxuPTAscj13aW5kb3cuY3J5cHRvfHx3aW5kb3cubXNDcnlwdG87ciYmci5nZXRSYW5kb21WYWx1ZXMmJlVpbnQ4QXJyYXkmJihlPXIuZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDMxKSkpO2Zvcih2YXIgbz1bXSxpPTA7aTwxNjtpKyspby5wdXNoKHQoKS50b1N0cmluZygxNikpO3JldHVybiBvLmpvaW4oIiIpfWUuZXhwb3J0cz17Z2VuZXJhdGVVdWlkOnIsZ2VuZXJhdGVDYXRJZDpvfX0se31dLDI0OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0LGUpe2lmKCFvKXJldHVybiExO2lmKHQhPT1vKXJldHVybiExO2lmKCFlKXJldHVybiEwO2lmKCFpKXJldHVybiExO2Zvcih2YXIgbj1pLnNwbGl0KCIuIikscj1lLnNwbGl0KCIuIiksYT0wO2E8ci5sZW5ndGg7YSsrKWlmKHJbYV0hPT1uW2FdKXJldHVybiExO3JldHVybiEwfXZhciBvPW51bGwsaT1udWxsLGE9L1ZlcnNpb25cLyhcUyspXHMrU2FmYXJpLztpZihuYXZpZ2F0b3IudXNlckFnZW50KXt2YXIgcz1uYXZpZ2F0b3IudXNlckFnZW50LGM9cy5tYXRjaChhKTtjJiZzLmluZGV4T2YoIkNocm9tZSIpPT09LTEmJnMuaW5kZXhPZigiQ2hyb21pdW0iKT09PS0xJiYobz0iU2FmYXJpIixpPWNbMV0pfWUuZXhwb3J0cz17YWdlbnQ6byx2ZXJzaW9uOmksbWF0Y2g6cn19LHt9XSwyNTpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlKXt2YXIgbj1bXSxyPSIiLGk9MDtmb3IociBpbiB0KW8uY2FsbCh0LHIpJiYobltpXT1lKHIsdFtyXSksaSs9MSk7cmV0dXJuIG59dmFyIG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9cn0se31dLDI2OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0LGUsbil7ZXx8KGU9MCksInVuZGVmaW5lZCI9PXR5cGVvZiBuJiYobj10P3QubGVuZ3RoOjApO2Zvcih2YXIgcj0tMSxvPW4tZXx8MCxpPUFycmF5KG88MD8wOm8pOysrcjxvOylpW3JdPXRbZStyXTtyZXR1cm4gaX1lLmV4cG9ydHM9cn0se31dLDI3OltmdW5jdGlvbih0LGUsbil7ZS5leHBvcnRzPXtleGlzdHM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcmJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnR9fSx7fV0sZWU6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKCl7fWZ1bmN0aW9uIG8odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmdCBpbnN0YW5jZW9mIHI/dDp0P2ModCxzLGkpOmkoKX1mdW5jdGlvbiBuKG4scixvLGkpe2lmKCFwLmFib3J0ZWR8fGkpe3QmJnQobixyLG8pO2Zvcih2YXIgYT1lKG8pLHM9bShuKSxjPXMubGVuZ3RoLGY9MDtmPGM7ZisrKXNbZl0uYXBwbHkoYSxyKTt2YXIgZD11W3lbbl1dO3JldHVybiBkJiZkLnB1c2goW3gsbixyLGFdKSxhfX1mdW5jdGlvbiBsKHQsZSl7Z1t0XT1tKHQpLmNvbmNhdChlKX1mdW5jdGlvbiBoKHQsZSl7dmFyIG49Z1t0XTtpZihuKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKW5bcl09PT1lJiZuLnNwbGljZShyLDEpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIGdbdF18fFtdfWZ1bmN0aW9uIHYodCl7cmV0dXJuIGRbdF09ZFt0XXx8byhuKX1mdW5jdGlvbiB3KHQsZSl7Zih0LGZ1bmN0aW9uKHQsbil7ZT1lfHwiZmVhdHVyZSIseVtuXT1lLGUgaW4gdXx8KHVbZV09W10pfSl9dmFyIGc9e30seT17fSx4PXtvbjpsLGFkZEV2ZW50TGlzdGVuZXI6bCxyZW1vdmVFdmVudExpc3RlbmVyOmgsZW1pdDpuLGdldDp2LGxpc3RlbmVyczptLGNvbnRleHQ6ZSxidWZmZXI6dyxhYm9ydDphLGFib3J0ZWQ6ITF9O3JldHVybiB4fWZ1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IHJ9ZnVuY3Rpb24gYSgpeyh1LmFwaXx8dS5mZWF0dXJlKSYmKHAuYWJvcnRlZD0hMCx1PXAuYmFja2xvZz17fSl9dmFyIHM9Im5yQGNvbnRleHQiLGM9dCgiZ29zIiksZj10KDI1KSx1PXt9LGQ9e30scD1lLmV4cG9ydHM9bygpO3AuYmFja2xvZz11fSx7fV0sZ29zOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0LGUsbil7aWYoby5jYWxsKHQsZSkpcmV0dXJuIHRbZV07dmFyIHI9bigpO2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmtleXMpdHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITF9KSxyfWNhdGNoKGkpe31yZXR1cm4gdFtlXT1yLHJ9dmFyIG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9cn0se31dLGhhbmRsZTpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCxlLG4scil7by5idWZmZXIoW3RdLHIpLG8uZW1pdCh0LGUsbil9dmFyIG89dCgiZWUiKS5nZXQoImhhbmRsZSIpO2UuZXhwb3J0cz1yLHIuZWU9b30se31dLGlkOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gcih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4hdHx8Im9iamVjdCIhPT1lJiYiZnVuY3Rpb24iIT09ZT8tMTp0PT09d2luZG93PzA6YSh0LGksZnVuY3Rpb24oKXtyZXR1cm4gbysrfSl9dmFyIG89MSxpPSJuckBpZCIsYT10KCJnb3MiKTtlLmV4cG9ydHM9cn0se31dLGxvYWRlcjpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIoKXtpZighRSsrKXt2YXIgdD1iLmluZm89TlJFVU0uaW5mbyxlPWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdO2lmKHNldFRpbWVvdXQodS5hYm9ydCwzZTQpLCEodCYmdC5saWNlbnNlS2V5JiZ0LmFwcGxpY2F0aW9uSUQmJmUpKXJldHVybiB1LmFib3J0KCk7Zih5LGZ1bmN0aW9uKGUsbil7dFtlXXx8KHRbZV09bil9KSxjKCJtYXJrIixbIm9ubG9hZCIsYSgpK2Iub2Zmc2V0XSxudWxsLCJhcGkiKTt2YXIgbj1sLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO24uc3JjPSJodHRwczovLyIrdC5hZ2VudCxlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG4sZSl9fWZ1bmN0aW9uIG8oKXsiY29tcGxldGUiPT09bC5yZWFkeVN0YXRlJiZpKCl9ZnVuY3Rpb24gaSgpe2MoIm1hcmsiLFsiZG9tQ29udGVudCIsYSgpK2Iub2Zmc2V0XSxudWxsLCJhcGkiKX1mdW5jdGlvbiBhKCl7cmV0dXJuIE8uZXhpc3RzJiZwZXJmb3JtYW5jZS5ub3c/TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSk6KHM9TWF0aC5tYXgoKG5ldyBEYXRlKS5nZXRUaW1lKCkscykpLWIub2Zmc2V0fXZhciBzPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGM9dCgiaGFuZGxlIiksZj10KDI1KSx1PXQoImVlIiksZD10KDI0KSxwPXdpbmRvdyxsPXAuZG9jdW1lbnQsaD0iYWRkRXZlbnRMaXN0ZW5lciIsbT0iYXR0YWNoRXZlbnQiLHY9cC5YTUxIdHRwUmVxdWVzdCx3PXYmJnYucHJvdG90eXBlO05SRVVNLm89e1NUOnNldFRpbWVvdXQsU0k6cC5zZXRJbW1lZGlhdGUsQ1Q6Y2xlYXJUaW1lb3V0LFhIUjp2LFJFUTpwLlJlcXVlc3QsRVY6cC5FdmVudCxQUjpwLlByb21pc2UsTU86cC5NdXRhdGlvbk9ic2VydmVyfTt2YXIgZz0iIitsb2NhdGlvbix5PXtiZWFjb246ImJhbS5uci1kYXRhLm5ldCIsZXJyb3JCZWFjb246ImJhbS5uci1kYXRhLm5ldCIsYWdlbnQ6ImpzLWFnZW50Lm5ld3JlbGljLmNvbS9uci1zcGEtMTE2OS5taW4uanMifSx4PXYmJncmJndbaF0mJiEvQ3JpT1MvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksYj1lLmV4cG9ydHM9e29mZnNldDpzLG5vdzphLG9yaWdpbjpnLGZlYXR1cmVzOnt9LHhocldyYXBwYWJsZTp4LHVzZXJBZ2VudDpkfTt0KDE5KSx0KDIyKSxsW2hdPyhsW2hdKCJET01Db250ZW50TG9hZGVkIixpLCExKSxwW2hdKCJsb2FkIixyLCExKSk6KGxbbV0oIm9ucmVhZHlzdGF0ZWNoYW5nZSIsbykscFttXSgib25sb2FkIixyKSksYygibWFyayIsWyJmaXJzdGJ5dGUiLHNdLG51bGwsImFwaSIpO3ZhciBFPTAsTz10KDI3KX0se31dLCJ3cmFwLWZ1bmN0aW9uIjpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIodCl7cmV0dXJuISh0JiZ0IGluc3RhbmNlb2YgRnVuY3Rpb24mJnQuYXBwbHkmJiF0W2FdKX12YXIgbz10KCJlZSIpLGk9dCgyNiksYT0ibnJAb3JpZ2luYWwiLHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxjPSExO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCxlLG4sbyl7ZnVuY3Rpb24gbnJXcmFwcGVyKCl7dmFyIHIsYSxzLGM7dHJ5e2E9dGhpcyxyPWkoYXJndW1lbnRzKSxzPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24ocixhKTpufHx7fX1jYXRjaChmKXtwKFtmLCIiLFtyLGEsb10sc10pfXUoZSsic3RhcnQiLFtyLGEsb10scyk7dHJ5e3JldHVybiBjPXQuYXBwbHkoYSxyKX1jYXRjaChkKXt0aHJvdyB1KGUrImVyciIsW3IsYSxkXSxzKSxkfWZpbmFsbHl7dShlKyJlbmQiLFtyLGEsY10scyl9fXJldHVybiByKHQpP3Q6KGV8fChlPSIiKSxucldyYXBwZXJbYV09dCxkKHQsbnJXcmFwcGVyKSxucldyYXBwZXIpfWZ1bmN0aW9uIGYodCxlLG8saSl7b3x8KG89IiIpO3ZhciBhLHMsYyxmPSItIj09PW8uY2hhckF0KDApO2ZvcihjPTA7YzxlLmxlbmd0aDtjKyspcz1lW2NdLGE9dFtzXSxyKGEpfHwodFtzXT1uKGEsZj9zK286byxpLHMpKX1mdW5jdGlvbiB1KG4scixvKXtpZighY3x8ZSl7dmFyIGk9YztjPSEwO3RyeXt0LmVtaXQobixyLG8sZSl9Y2F0Y2goYSl7cChbYSxuLHIsb10pfWM9aX19ZnVuY3Rpb24gZCh0LGUpe2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmtleXMpdHJ5e3ZhciBuPU9iamVjdC5rZXlzKHQpO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19LHNldDpmdW5jdGlvbihlKXtyZXR1cm4gdFtuXT1lLGV9fSl9KSxlfWNhdGNoKHIpe3AoW3JdKX1mb3IodmFyIG8gaW4gdClzLmNhbGwodCxvKSYmKGVbb109dFtvXSk7cmV0dXJuIGV9ZnVuY3Rpb24gcChlKXt0cnl7dC5lbWl0KCJpbnRlcm5hbC1lcnJvciIsZSl9Y2F0Y2gobil7fX1yZXR1cm4gdHx8KHQ9byksbi5pblBsYWNlPWYsbi5mbGFnPWEsbn19LHt9XX0se30sWyJsb2FkZXIiLDIsMTYsNSwzLDRdKTsKICAgICAgICAgIDtOUkVVTS5sb2FkZXJfY29uZmlnPXthY2NvdW50SUQ6IjM5Mjg0Iix0cnVzdEtleToiMzkyODQiLGFnZW50SUQ6Ijc0NDc0NjgiLGxpY2Vuc2VLZXk6IjY4OWQ1YjQ1NjIiLGFwcGxpY2F0aW9uSUQ6IjIwMTEyMjQifQogICAgICAgICAgO05SRVVNLmluZm89e2JlYWNvbjoiYmFtLm5yLWRhdGEubmV0IixlcnJvckJlYWNvbjoiYmFtLm5yLWRhdGEubmV0IixsaWNlbnNlS2V5OiI2ODlkNWI0NTYyIixhcHBsaWNhdGlvbklEOiIyMDExMjI0IixzYToxfQogICAgICAgIDwvc2NyaXB0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2YudmltZW9jZG4uY29tL3N0eWxlcy9jc3Nfb3B0L2dsb2JhbC9pY29uX2ZvbnRzLm1pbi5jc3M/ZTEwMTNkZWI2ZTg0NDcwYzc1ZDA3NWY4NmRiM2NkNGQ5NGQyMTgxNiI+CgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2YudmltZW9jZG4uY29tL3N0eWxlcy9jc3Nfb3B0L2NsaXBfYmV0YV9jb21iaW5lZC5taW4uY3NzPzRiMTkyZWMwIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdHlsZXMvY3NzX29wdC90b3BuYXZfY2FydF9idXR0b25fY29tYmluZWQubWluLmNzcz9hMjBhNzU2NiI+CgoKCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAKICAgICAgICB2YXIgcGxheWVyQXNzZXRVcmxzID0geyJiYXJlYm9uZV9qcyI6Imh0dHBzOlwvXC9mLnZpbWVvY2RuLmNvbVwvcFwvMy4yMy4wXC9qc1wvYmFyZWJvbmUuanMiLCJqcyI6Imh0dHBzOlwvXC9mLnZpbWVvY2RuLmNvbVwvcFwvMy4yMy4wXC9qc1wvcGxheWVyLmpzIiwiY2hyb21lbGVzc19jc3MiOiJodHRwczpcL1wvZi52aW1lb2Nkbi5jb21cL3BcLzMuMjMuMFwvY3NzXC9jaHJvbWVsZXNzLmNzcyIsImNocm9tZWxlc3NfanMiOiJodHRwczpcL1wvZi52aW1lb2Nkbi5jb21cL3BcLzMuMjMuMFwvanNcL2Nocm9tZWxlc3MuanMiLCJjc3MiOiJodHRwczpcL1wvZi52aW1lb2Nkbi5jb21cL3BcLzMuMjMuMFwvY3NzXC9wbGF5ZXIuY3NzIiwicGxheWVyX3VybCI6InBsYXllci52aW1lby5jb20ifTsKCiAgICAgICAgdmFyIF9leHRlbmQgPSBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHNbMF0sbj0xLGU9YXJndW1lbnRzLmxlbmd0aDtlPm47bisrKXt2YXIgdD1hcmd1bWVudHNbbl07Zm9yKHZhciBhIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShhKSYmKHJbYV09dFthXSl9cmV0dXJuIHJ9OwoKICAgICAgICAgICAgd2luZG93ID0gX2V4dGVuZCh3aW5kb3csIHsidmltZW9fZXNpIjp7ImNvbmZpZyI6eyJyb3V0ZSI6IlZpbWVvXFxDb250cm9sbGVyXFxDbGlwQ29udHJvbGxlcjptYWluIiwiY29udHJvbGxlciI6IlZpbWVvXFxDb250cm9sbGVyXFxDbGlwQ29udHJvbGxlciIsImF1dG9jb21wbGV0ZV9lbmFibGVkIjp0cnVlLCJvbnNpdGVfcmVmZXJyZXIiOmZhbHNlfX0sImFibGluY29sbl9jb25maWciOltdLCJ2aW1lbyI6eyJjb25maWciOnsiY2FydCI6eyJjYXJ0X2NvbnRlbnQiOnsic3RvY2siOnsic3RvcmUiOiJzdG9jayIsInZlcnNpb24iOjEsInF1YW50aXRpZXMiOltdLCJpdGVtcyI6W10sImF0dHJpYnV0ZXMiOltdLCJjdXJyZW5jeSI6IkJSTCIsIml0ZW1zX3NvcnRlZF9ieV9pbmRleCI6W10sIml0ZW1zX2NvdW50IjowfX19fX19KTsKPC9zY3JpcHQ+CgogICAgICAgICAgICAgICAgCiAgICA8c2NyaXB0PgogICAgICAgIHZhciBhYmxpbmNvbG5fY29uZmlnID0gYWJsaW5jb2xuX2NvbmZpZyB8fCB7fTsKICAgICAgICBhYmxpbmNvbG5fY29uZmlnLnRlc3RzID0geyJKUy5PbW5pc2VhcmNoIjp7ImlkIjo1MjcsIm5hbWUiOiJKUy5PbW5pc2VhcmNoIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJjdWlkIiwidXJsIjoiXC8iLCJleHBlcmltZW50cyI6W3siaWQiOjE0NTIsIm5hbWUiOiJwaGFzZTEiLCJidWNrZXRzIjoxMDAsInN0YXRlIjoxLCJwdWJsaXNoZWRfb24iOiIyMDIwLTEwLTIyIDEzOjQ2OjUxIiwicGF1c2VkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInN0b3BwZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwicGFyYW1ldGVycyI6W3siaWQiOjI1NDUsIm5hbWUiOiJvbW5pc2VhcmNoX2VuYWJsZWQiLCJjaG9pY2UiOiJ0cnVlIiwid2VpZ2h0IjoxfSx7ImlkIjoyNTQ2LCJuYW1lIjoib21uaXNlYXJjaF9lbmFibGVkIiwiY2hvaWNlIjoiZmFsc2UiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfSx7ImlkIjoxNDU0LCJuYW1lIjoicGhhc2UyIiwiYnVja2V0cyI6MjAwLCJzdGF0ZSI6MSwicHVibGlzaGVkX29uIjoiMjAyMC0xMC0yMyAwODoxNjo1NSIsInBhdXNlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJzdG9wcGVkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInBhcmFtZXRlcnMiOlt7ImlkIjoyNTUxLCJuYW1lIjoib21uaXNlYXJjaF9lbmFibGVkIiwiY2hvaWNlIjoidHJ1ZSIsIndlaWdodCI6MX0seyJpZCI6MjU1MiwibmFtZSI6Im9tbmlzZWFyY2hfZW5hYmxlZCIsImNob2ljZSI6ImZhbHNlIiwid2VpZ2h0IjoxfV0sInNlZ21lbnRzIjpbXX0seyJpZCI6MTQ1OCwibmFtZSI6InBoYXNlMyIsImJ1Y2tldHMiOjMwMCwic3RhdGUiOjEsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjYgMDg6NTQ6NDgiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU1NywibmFtZSI6Im9tbmlzZWFyY2hfZW5hYmxlZCIsImNob2ljZSI6InRydWUiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NTgsIm5hbWUiOiJvbW5pc2VhcmNoX2VuYWJsZWQiLCJjaG9pY2UiOiJmYWxzZSIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NjEsIm5hbWUiOiJwaGFzZTQiLCJidWNrZXRzIjo0MDAsInN0YXRlIjoxLCJwdWJsaXNoZWRfb24iOiIyMDIwLTEwLTI3IDA4OjQ2OjU2IiwicGF1c2VkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInN0b3BwZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwicGFyYW1ldGVycyI6W3siaWQiOjI1NjUsIm5hbWUiOiJvbW5pc2VhcmNoX2VuYWJsZWQiLCJjaG9pY2UiOiJ0cnVlIiwid2VpZ2h0IjoxfSx7ImlkIjoyNTY2LCJuYW1lIjoib21uaXNlYXJjaF9lbmFibGVkIiwiY2hvaWNlIjoiZmFsc2UiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19LCJKUy5Ub3BOYXYuQ3JlYXRlIjp7ImlkIjo0NTIsIm5hbWUiOiJKUy5Ub3BOYXYuQ3JlYXRlIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjoiOmFsbCIsImV4cGVyaW1lbnRzIjpbeyJpZCI6MTIzNSwibmFtZSI6IiogTG9nZ2VkIG91dCBKb2luIE1vZGFsIiwiYnVja2V0cyI6MTAwLCJzdGF0ZSI6MywicHVibGlzaGVkX29uIjoiMjAyMC0wNi0xNSAxNjoxNzoxNSIsInBhdXNlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJzdG9wcGVkX29uIjoiMjAyMC0xMC0xNSAwNjo1MzoyNSIsInBhcmFtZXRlcnMiOlt7ImlkIjoyMTUwLCJuYW1lIjoidG9wX25hdl9jcmVhdGUiLCJjaG9pY2UiOiJjb250cm9sIiwid2VpZ2h0IjoxfSx7ImlkIjoyMTUxLCJuYW1lIjoidG9wX25hdl9jcmVhdGUiLCJjaG9pY2UiOiJqb2luX3dpdGhvdXRfZGVzaWduIiwid2VpZ2h0IjoxfSx7ImlkIjoyMTUyLCJuYW1lIjoidG9wX25hdl9jcmVhdGUiLCJjaG9pY2UiOiJqb2luX3dpdGhfZGVzaWduIiwid2VpZ2h0IjoxfV0sInNlZ21lbnRzIjpbXX0seyJpZCI6MTMxMSwibmFtZSI6IiogKiBMb2dnZWQgb3V0IEpvaW4gTW9kYWwiLCJidWNrZXRzIjo5MDAsInN0YXRlIjozLCJwdWJsaXNoZWRfb24iOiIyMDIwLTA2LTIzIDE1OjAxOjUyIiwicGF1c2VkX29uIjoiMDAwMC0wMC0wMCAwMDowMDowMCIsInN0b3BwZWRfb24iOiIyMDIwLTEwLTE1IDA2OjUzOjM1IiwicGFyYW1ldGVycyI6W3siaWQiOjIyNzUsIm5hbWUiOiJ0b3BfbmF2X2NyZWF0ZSIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjIyNzYsIm5hbWUiOiJ0b3BfbmF2X2NyZWF0ZSIsImNob2ljZSI6ImpvaW5fd2l0aG91dF9kZXNpZ24iLCJ3ZWlnaHQiOjF9LHsiaWQiOjIyNzcsIm5hbWUiOiJ0b3BfbmF2X2NyZWF0ZSIsImNob2ljZSI6ImpvaW5fd2l0aF9kZXNpZ24iLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19LCJKUy5VcHNlbGwuUmV2aWV3Ijp7ImlkIjo0NDQsIm5hbWUiOiJKUy5VcHNlbGwuUmV2aWV3IiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjoiXC8iLCJleHBlcmltZW50cyI6W119LCJUb3BOYXYuTmV3VmlkZW8uU2NyZWVuUmVjb3JkRm9yQWxsIjp7ImlkIjo1NDEsIm5hbWUiOiJUb3BOYXYuTmV3VmlkZW8uU2NyZWVuUmVjb3JkRm9yQWxsIiwiYnVja2V0cyI6MTAwMCwiaW5wdXQiOiJ2dWlkIiwidXJsIjoiXC8iLCJleHBlcmltZW50cyI6W3siaWQiOjE0MTgsIm5hbWUiOiJTaG93IHJlY29yZGVyIGxpbmsgZm9yIGFsbCIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMDUgMTQ6MzA6NDAiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjEgMDM6Mjg6NDMiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjQ3NywibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI0NzgsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NTAsIm5hbWUiOiIqIFNob3cgcmVjb3JkZXIgbGluayBmb3IgYWxsIiwiYnVja2V0cyI6MCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjIgMTc6MTc6MTEiLCJwYXVzZWRfb24iOiIyMDIwLTEwLTIyIDE3OjE3OjI3Iiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjIgMTc6MTc6NDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU0MCwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NDEsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX0seyJpZCI6MjU0MiwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6InZhcmlhbnRfc2NyZWVuX2FuaW1hdGlvbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NTMsIm5hbWUiOiIqICogU2hvdyByZWNvcmRlciBsaW5rIGZvciBhbGwiLCJidWNrZXRzIjo1MCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjIgMTc6MzY6NDEiLCJwYXVzZWRfb24iOiIyMDIwLTEwLTI2IDE1OjA3OjI4Iiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjYgMTU6MDc6NTYiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU0NywibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NDgsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX0seyJpZCI6MjU0OSwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6InZhcmlhbnRfc2NyZWVuX2FuaW1hdGlvbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NjAsIm5hbWUiOiIqICogKiBTaG93IHJlY29yZGVyIGxpbmsgZm9yIGFsbCIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjYgMTU6MDg6NTQiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjIwMjAtMTAtMjcgMTA6MDI6NTQiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU2MiwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjI1NjMsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6MX0seyJpZCI6MjU2NCwibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6InZhcmlhbnRfc2NyZWVuX2FuaW1hdGlvbiIsIndlaWdodCI6MX1dLCJzZWdtZW50cyI6W119LHsiaWQiOjE0NjIsIm5hbWUiOiIqICogKiAqIFNob3cgcmVjb3JkZXIgbGluayBmb3IgYWxsIiwiYnVja2V0cyI6MTAwMCwic3RhdGUiOjEsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMjcgMTA6MDQ6MTAiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjU2NywibmFtZSI6InNob3dfcmVjb3JkZXJfZm9yX2FsbCIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjV9LHsiaWQiOjI1NjgsIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbiIsIndlaWdodCI6OTB9LHsiaWQiOjI1NjksIm5hbWUiOiJzaG93X3JlY29yZGVyX2Zvcl9hbGwiLCJjaG9pY2UiOiJ2YXJpYW50X3NjcmVlbl9hbmltYXRpb24iLCJ3ZWlnaHQiOjV9XSwic2VnbWVudHMiOltdfV19LCJKUy5DcmVhdGVBcHBCYW5uZXIiOnsiaWQiOjQ2MSwibmFtZSI6IkpTLkNyZWF0ZUFwcEJhbm5lciIsImJ1Y2tldHMiOjEwMDAsImlucHV0IjoidnVpZCIsInVybCI6IlwvOmNsaXBJZCIsImV4cGVyaW1lbnRzIjpbeyJpZCI6MTE1NywibmFtZSI6IlNob3cgY3JlYXRlIGJhbm5lciIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjMsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMDQtMDEgMDg6NDg6MzIiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjIwMjAtMDctMTYgMTY6MTE6MjciLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjAyNCwibmFtZSI6InNob3dfY3JlYXRlX2Jhbm5lciIsImNob2ljZSI6ImNvbnRyb2wiLCJ3ZWlnaHQiOjF9LHsiaWQiOjIwMjUsIm5hbWUiOiJzaG93X2NyZWF0ZV9iYW5uZXIiLCJjaG9pY2UiOiJ2YXJpYW50Iiwid2VpZ2h0IjoxfV0sInNlZ21lbnRzIjpbXX0seyJpZCI6MTE3OCwibmFtZSI6Iis0MCUgU2hvdyBjcmVhdGUgYmFubmVyIiwiYnVja2V0cyI6NDAwLCJzdGF0ZSI6MywicHVibGlzaGVkX29uIjoiMjAyMC0wNC0wMyAxNjoxNTo0NyIsInBhdXNlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJzdG9wcGVkX29uIjoiMjAyMC0wNy0xNiAxNjoxMTozMyIsInBhcmFtZXRlcnMiOlt7ImlkIjoyMDU4LCJuYW1lIjoic2hvd19jcmVhdGVfYmFubmVyIiwiY2hvaWNlIjoiY29udHJvbCIsIndlaWdodCI6MX0seyJpZCI6MjA1OSwibmFtZSI6InNob3dfY3JlYXRlX2Jhbm5lciIsImNob2ljZSI6InZhcmlhbnQiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19LCJKUy5DbGlwLkJhbm5lckZyZXF1ZW5jeSI6eyJpZCI6NTQzLCJuYW1lIjoiSlMuQ2xpcC5CYW5uZXJGcmVxdWVuY3kiLCJidWNrZXRzIjoxMDAwLCJpbnB1dCI6InZ1aWQiLCJ1cmwiOiJcLyoiLCJleHBlcmltZW50cyI6W3siaWQiOjE0MjIsIm5hbWUiOiJDbGlwIEJhbm5lciBGcmVxdWVuY3kgVGVzdCIsImJ1Y2tldHMiOjEwMCwic3RhdGUiOjEsInB1Ymxpc2hlZF9vbiI6IjIwMjAtMTAtMDcgMTM6MDA6MzgiLCJwYXVzZWRfb24iOiIwMDAwLTAwLTAwIDAwOjAwOjAwIiwic3RvcHBlZF9vbiI6IjAwMDAtMDAtMDAgMDA6MDA6MDAiLCJwYXJhbWV0ZXJzIjpbeyJpZCI6MjQ4NCwibmFtZSI6ImJhbm5lcl9mcmVxdWVuY3kiLCJjaG9pY2UiOiJjb250cm9sIiwid2VpZ2h0IjoxfSx7ImlkIjoyNDg1LCJuYW1lIjoiYmFubmVyX2ZyZXF1ZW5jeSIsImNob2ljZSI6InZhcmlhbnQiLCJ3ZWlnaHQiOjF9XSwic2VnbWVudHMiOltdfV19fTsKICAgIDwvc2NyaXB0Pgo8c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgICB3aW5kb3cuX2d0bSA9IFt7ImNsaXBfaWQiOjE0MTM0OTE5NCwicGFnZV9wYXRoIjoiXC8xNDEzNDkxOTQiLCJjcmVhdG9yX2lkIjoyNjEyMTYwNCwiY3JlYXRvcl91c2VyX3R5cGUiOiJwcm8iLCJ2aWRlb19jYXRlZ29yaWVzIjoiQ29va2luZyxGb29kIiwicHJpdmFjeSI6ImFueWJvZHkiLCJzdGFmZl9waWNrIjoibm8iLCJ1c2VyX2lkIjpudWxsLCJwYWdlX3R5cGUiOiJWaWRlbyIsImxhbmd1YWdlIjoiZW4iLCJ1c2VyX3N0YXR1cyI6ImxvZ2dlZF9vdXQiLCJ1c2VyX3R5cGUiOiJub25lIiwiZ2FfdW5pdmVyc2FsX2lkIjoiVUEtNzY2NDEtOCIsImNvbXNjb3JlX3NpdGVfaWQiOjEwMzQ4Mjg5fV07CgogICAgICAgIHZhciBnZHByQ29va2llID0gKGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvXig/Oi4qOyk/XHMqdmltZW9fZ2Rwcl9vcHRpblxzKj1ccyooW147XSspKD86LiopPyQvKXx8WyxudWxsXSlbMV07CiAgICBpZiAoZ2RwckNvb2tpZSA9PT0gJy0xJykgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAgICAgd2luZG93Ll9ndG0ucHVzaCh7CiAgICAgICAgJ3Z1aWQnOiBkb2N1bWVudC5jb29raWUucmVwbGFjZSgvKD86KD86XnwuKjtccyopdnVpZFxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpLAogICAgICAgICdndG0uc3RhcnQnOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKICAgICAgICAnZXZlbnQnOiAnZ3RtLmpzJwogICAgfSk7CiAgICB2YXIgZ3RtcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLAogICAgICAgIG5vZGU7CiAgICBndG1zLmFzeW5jID0gdHJ1ZTsKICAgIGd0bXMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgZ3Rtcy5zcmMgPSAnLy93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RtLmpzP2lkPUdUTS1SQktLJmw9X2d0bSc7CiAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOwogICAgbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShndG1zLCBub2RlKTsKfSkoKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+CiAgICB2YXIgZ29vZ2xldGFnID0gZ29vZ2xldGFnIHx8IHt9LAogICAgICAgIGdwdGFkc2xvdHMgPSBbXSwKICAgICAgICBsYW5ndWFnZSwKICAgICAgICBoYXNfdXBsb2FkZWQsCiAgICAgICAgY29ob3J0OwogICAgZ29vZ2xldGFnLmNtZCA9IGdvb2dsZXRhZy5jbWQgfHwgW107CgogICAgKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBnZHByQ29va2llID0gKGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvXig/Oi4qOyk/XHMqdmltZW9fZ2Rwcl9vcHRpblxzKj1ccyooW147XSspKD86LiopPyQvKXx8WyxudWxsXSlbMV07CiAgICAgICAgaWYgKGdkcHJDb29raWUgPT09ICctMScpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgZ2FkcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLAogICAgICAgICAgICB1c2VTU0wgPSAnaHR0cHM6JyA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCwKICAgICAgICAgICAgbm9kZTsKICAgICAgICBnYWRzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBnYWRzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBnYWRzLnNyYyA9ICh1c2VTU0wgPyAnaHR0cHM6JyA6ICdodHRwOicpICsgJy8vd3d3Lmdvb2dsZXRhZ3NlcnZpY2VzLmNvbS90YWcvanMvZ3B0LmpzJzsKICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOwogICAgICAgIG5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZ2Fkcywgbm9kZSk7CiAgICB9KSgpOwoKICAgIGdvb2dsZXRhZy5jbWQucHVzaChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IGRvY3VtZW50LmNvb2tpZS5yZXBsYWNlKC8oPzooPzpefC4qO1xzKilsYW5ndWFnZVxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpOwogICAgICAgICAgICBoYXNfdXBsb2FkZWQgPSAoZG9jdW1lbnQuY29va2llLnJlcGxhY2UoLyg/Oig/Ol58Lio7XHMqKWhhc191cGxvYWRlZFxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpKSA/ICdZJyA6ICdOJzsKICAgICAgICAgICAgY29uc2VudCA9IChkb2N1bWVudC5jb29raWUucmVwbGFjZSgvKD86KD86XnwuKjtccyopdmltZW9fZ2Rwcl9vcHRpblxzKlw9XHMqKFteO10qKS4qJCl8Xi4qJC8sICIkMSIpKSA9PT0gJy0xJyA/IDEgOiAwOwogICAgICAgICAgICBjb2hvcnQgPSAnQSc7CiAgICAgICAgCiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnbGFuZ3VhZ2UnLCBbbGFuZ3VhZ2VdKTsKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdpc191cGxvYWRlcicsIFtoYXNfdXBsb2FkZWRdKTsKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdjb2hvcnQnLCBbY29ob3J0XSk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnY29ob3J0X2EnLCBbKGNvaG9ydCA9PT0gJ0EnKSA/ICdZJyA6ICdOJ10pOwogICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5zZXRUYXJnZXRpbmcoJ2NvaG9ydF9iJywgWyhjb2hvcnQgPT09ICdCJykgPyAnWScgOiAnTiddKTsKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdwcm9kdWN0JywgWycnXSk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFRhcmdldGluZygnc3RvcmFnZScsIFsnTiddKTsKCiAgICAgICAgICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdzZWMnLCBbJ2ZhbHNlJ10pOwoKICAgICAgICBnb29nbGV0YWcucHViYWRzKCkuc2V0VGFyZ2V0aW5nKCdsb2dnZWRfaW4nLCBbJ2ZhbHNlJ10pOwoKICAgICAgICAgICAgICAgIGdvb2dsZXRhZy5wdWJhZHMoKS5zZXRUYXJnZXRpbmcoJ3JwdicsIChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwKSsxKS50b1N0cmluZygpKTsKCiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLnNldFJlcXVlc3ROb25QZXJzb25hbGl6ZWRBZHMoY29uc2VudCk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmVuYWJsZUFzeW5jUmVuZGVyaW5nKCk7CiAgICAgICAgZ29vZ2xldGFnLnB1YmFkcygpLmRpc2FibGVJbml0aWFsTG9hZCgpOwogICAgICAgIGdvb2dsZXRhZy5lbmFibGVTZXJ2aWNlcygpOwogICAgfSk7Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9sb2dnaW5nX2NvbWJpbmVkLm1pbi5qcz85NzQyMTNkMSI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9qc19vcHQvYWJsaW5jb2xuX2NvbWJpbmVkLm1pbi5qcz82YzRhY2I1NyI+PC9zY3JpcHQ+CgoKCiAgICA8L2hlYWQ+CiAgICA8Ym9keSBjbGFzcz0ib25zaXRlICI+CiAgICAgICAgPGRpdiBpZD0id3JhcCIgY2xhc3M9Im91dGVyX3dyYXAiPgogICAgICAgICAgICA8ZGl2IGlkPSJ0b3BuYXZfb3V0ZXJfd3JhcCI+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJjcmVhdGUtZmFjZWJvb2staGVhZGVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmltZW9CcmFuZF9Db2xvclJpYmJvbiAiPjwvZGl2PgoKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCgo8c3R5bGU+CiAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmVjb3JkX2FuaW1hdGlvbiB7CiAgICAgICAgMCUsIDIwJSwgNTAlLCA4MCUsIDEwMCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsKICAgICAgICB9CiAgICAgICAgNjAlIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7CiAgICAgICAgfQogICAgfQoKICAgIEBrZXlmcmFtZXMgcmVjb3JkX2FuaW1hdGlvbiB7CiAgICAgICAgMCUsIDIwJSwgNTAlLCA4MCUsIDEwMCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsKICAgICAgICB9CiAgICAgICAgNjAlIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoM3B4KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7CiAgICAgICAgfQogICAgfQoKICAgIC5sb2dnZWRfb3V0X3JlY29yZF9hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbjogcmVjb3JkX2FuaW1hdGlvbiAxLjVzIC4yNXMgNTsKICAgIH0KCiAgICAubG9nZ2VkX2luX3JlY29yZF9hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbjogcmVjb3JkX2FuaW1hdGlvbiAxLjVzIC4yNXMgaW5maW5pdGU7CiAgICB9CgogICAgLnJlY29yZGVyX25ld19sYWJlbCB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTE0MEM2OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgfQo8L3N0eWxlPgoKPHNjcmlwdD4KICAgIHdpbmRvdy52aW1lbyA9IHdpbmRvdy52aW1lbyB8fCB7fTsKPC9zY3JpcHQ+Cgo8ZGl2IGlkPSJ0b3BuYXZfZGVza3RvcCIgY2xhc3M9InRvcG5hdl9kZXNrdG9wICIgcm9sZT0iYmFubmVyIj4KICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3dyYXBwZXIiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9sb2dvIiBocmVmPSIvL3ZpbWVvLmNvbSIgYWx0PSJHbyB0byBWaW1lbyBob21lIHBhZ2UiIHRpdGxlPSJHbyB0byBWaW1lbyBob21lIHBhZ2UiIGFyaWEtbGFiZWw9IkdvIHRvIFZpbWVvIGhvbWUgcGFnZSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6dmltZW9faG9tZSIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfaG9tZV9jbGljayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgYWx0PSJWaW1lbyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI0MCI+PHBhdGggZD0iTTIyLjQ0OCAxNC41NzVjLS4xMDQgMi4xNy0xLjYxOCA1LjE0Ni00LjU0NCA4LjkxMi0zLjAzIDMuOTQyLTUuNTkgNS45MTItNy42ODYgNS45MTItMS4yOTcgMC0yLjM5Ny0xLjIwNC0zLjMtMy42LS42LTIuMi0xLjIwMi00LjM5OC0xLjc5NC02LjU5OC0uNjY0LTIuMzk2LTEuMzgtMy42LTIuMTQ3LTMuNi0uMTY2IDAtLjc0Ny4zNTQtMS43NTMgMS4wNWwtMS4wNDgtMS4zNWMxLjEtLjk2NSAyLjE5LTEuOTMgMy4yNTctMi45MDUgMS40NjMtMS4yNjUgMi41NzMtMS45NCAzLjMtMi4wMDIgMS43MzItLjE2NiAyLjggMS4wMTcgMy4yMDUgMy41NTguNDM1IDIuNzQuNzM2IDQuNDQuOTAyIDUuMTE1LjQ5OCAyLjI3IDEuMDQ4IDMuNDAyIDEuNjUgMy40MDIuNDY2IDAgMS4xNzItLjczNyAyLjEwNS0yLjIxLjkzNC0xLjQ3MyAxLjQzMi0yLjU5MyAxLjUwNC0zLjM3LjEzMy0xLjI3Ny0uMzY1LTEuOTEtMS41MDYtMS45MS0uNTMgMC0xLjA4LjEyNS0xLjY1LjM2NCAxLjEtMy41OSAzLjE4Ni01LjMzMyA2LjI3Ny01LjIzIDIuMjczLjA3MyAzLjM1IDEuNTU2IDMuMjI3IDQuNDZtMTMuNzU1IDcuMDM0Yy0uOTMzIDEuNzY0LTIuMjIgMy4zNy0zLjg2IDQuODAzLTIuMjQgMS45My00LjQ3IDIuOTA1LTYuNyAyLjkwNS0xLjAzNy4wMDItMS44MjYtLjMzLTIuMzc2LS45OTQtLjU1LS42NjMtLjgxLTEuNTM1LS43NzctMi42MDMuMDMtMS4xLjM3Mi0yLjggMS4wMjUtNS4xMDQuNjU0LTIuMzAzLjk3Ni0zLjUzNy45NzYtMy43MDMgMC0uODYtLjMtMS4yOTctLjkwMi0xLjI5Ny0uMTk4IDAtLjc3LjM1My0xLjcwMiAxLjA0OGwtMS4xNTItMS4zNWMxLjA3LS45NjIgMi4xMzctMS45MjcgMy4yMDYtMi45MDIgMS40My0xLjI2NiAyLjUtMS45NCAzLjIwNS0yLjAwMiAxLjEtLjEwMyAxLjkxLjIzIDIuNDI4Ljk3Ni41MTguNzQ3LjcwNSAxLjcyMi41OCAyLjkxNS0uNDM1IDIuMDM0LS45MDIgNC42MDctMS40IDcuNzMtLjAzIDEuNDMuNDg4IDIuMTQ2IDEuNTU2IDIuMTQ2LjQ2NyAwIDEuMjk3LS40OTggMi41LTEuNDgzLjk5Ni0uODIgMS44MTUtMS41OTggMi40NS0yLjMyNGwuOTQyIDEuMjQ0bS00LjM1Ny0xNy44Yy0uMDMuODMtLjQ0NiAxLjYyOC0xLjI1NSAyLjM5NS0uOS44Ni0xLjk3IDEuMjk2LTMuMjA0IDEuMjk2LTEuOSAwLTIuODIyLS44My0yLjc1LTIuNDkuMDMyLS44Ni41NC0xLjY5IDEuNTI2LTIuNDkuOTg1LS43OTcgMi4wNzQtMS4xOSAzLjI3OC0xLjE5LjcwNSAwIDEuMjg2LjI3IDEuNzUzLjgyLjQ2Ny41NC42ODQgMS4xLjY1MyAxLjY2bTM1LjYxMiAxNy44Yy0uOTMzIDEuNzYzLTIuMjIgMy4zNy0zLjg2IDQuODAyLTIuMjQgMS45My00LjQ3IDIuOTA0LTYuNyAyLjkwNC0yLjE2OC4wMDItMy4yMTYtMS4yMDItMy4xNTMtMy41OTguMDMtMS4wNy4yMzgtMi4zNTUuNjIyLTMuODUuMzg0LTEuNTAzLjU5LTIuNjY1LjYyMy0zLjUwNS4wMy0xLjI2NS0uMzUzLTEuODk4LTEuMTUyLTEuODk4LS44NyAwLTEuOTEgMS4wMzYtMy4xMTIgMy4xLTEuMjc2IDIuMTY4LTEuOTYgNC4yNzQtMi4wNjQgNi4zMDgtLjA3MyAxLjQzLjA3MiAyLjU0LjQyNSAzLjI5OC0yLjMyNC4wNjQtMy45NjMtLjMyLTQuODg2LTEuMTUtLjgzLS43MzctMS4yMTItMS45NS0xLjE1LTMuNjUyLjAzLTEuMDY4LjE5OC0yLjEzNy40ODgtMy4yMDUuMjktMS4wNy40NTctMi4wMjMuNDg4LTIuODUzLjA2Mi0xLjIzNC0uMzg0LTEuODU3LTEuMzUtMS44NTctLjg0IDAtMS43NC45NTUtMi43MDYgMi44NTMtLjk2NiAxLjktMS41MDUgMy44OS0xLjYxIDUuOTU2LS4wNiAxLjg2Ny4wNTMgMy4xNzQuMzY0IDMuOS0yLjI5My4wNjItMy45Mi0uNDE1LTQuODc2LTEuNDUyLS43OTgtLjg2LTEuMTYtMi4xOC0xLjEtMy45NDIuMDMyLS44Ni4xODgtMi4wNzUuNDU3LTMuNjIuMjgtMS41NDYuNDI1LTIuNzUuNDU3LTMuNjIuMDYyLS42MDMtLjA4My0uOTAzLS40NDYtLjkwMy0uMTk3IDAtLjc2OC4zNC0xLjcwMiAxLjAxNWwtMS4yMDMtMS4zNDhjLjE2OC0uMTM1IDEuMjE2LTEuMSAzLjE1Ni0yLjkwNSAxLjQtMS4yOTcgMi4zNTQtMS45NyAyLjg1Mi0yLjAwMi44NzItLjA3MyAxLjU2Ny4yOSAyLjEwNiAxLjA4LjUzLjc4Ny44IDEuNjkuOCAyLjcyNyAwIC4zMzItLjAzMi42NTQtLjEwNS45NTQuNDk3LS43NjYgMS4wOC0xLjQzIDEuNzUyLTIgMS41MzctMS4zNCAzLjI2LTIuMDg2IDUuMTU3LTIuMjUyIDEuNjQtLjEzNSAyLjguMjUgMy41MDUgMS4xNTIuNTcuNzM2LjgzIDEuNzg0LjggMy4xNTMuMjM3LS4xOTguNDg2LS40MTYuNzQ2LS42NTQuNzY3LS45MDMgMS41MTQtMS42MiAyLjI1LTIuMTQ4IDEuMjM1LS45MDIgMi41Mi0xLjQgMy44Ni0xLjUwNCAxLjU5Ny0uMTM1IDIuNzUuMjUgMy40NTQgMS4xNTIuNjAyLjcyNi44NyAxLjc3NC44IDMuMTQzLS4wMzIuOTMzLS4yNiAyLjI4LS42NzUgNC4wNjUtLjQxNiAxLjc3My0uNjI0IDIuOC0uNjI0IDMuMDctLjAzLjY5NS4wMyAxLjE4Mi4xOTcgMS40NDIuMTY2LjI3LjU3LjM5NCAxLjIwMy4zOTQuNDY3IDAgMS4yOTctLjQ5NyAyLjUtMS40ODIuOTk2LS44MiAxLjgxNi0xLjU5OCAyLjQ1LTIuMzI0bC45NjMgMS4yNTRtMTguNzY1LS4wNTJjLS45NjUgMS41OTgtMi44NzQgMy4xOTUtNS43MDYgNC43OTMtMy41MzggMi4wMzItNy4xMjcgMy4wNS0xMC43NTggMy4wNS0yLjcwNiAwLTQuNjM2LS45MDQtNS44MDgtMi43LS44My0xLjIzMy0xLjIzNC0yLjY5Ni0xLjIwMy00LjQwNy4wMy0yLjY5OCAxLjIzNC01LjI3IDMuNi03LjcxIDIuNjAzLTIuNjY1IDUuNjc0LTQuMDAzIDkuMjEtNC4wMDMgMy4yNyAwIDUgMS4zMjggNS4yMDggMy45OTQuMTM1IDEuNzAyLS43OTggMy40NDUtMi44IDUuMjQtMi4xMzcgMS45Ni00LjgyNCAzLjIxNS04LjA2IDMuNzQ0LjYuODMgMS41MDQgMS4yNDUgMi43MDcgMS4yNDUgMi4zOTYgMCA1LjAyLS42MTMgNy44NjMtMS44MzcgMi4wMzMtLjg2IDMuNjMtMS43NTMgNC44MDMtMi42NzZsLjk0NSAxLjI2NW0tMTEuMzYtNS4yMjhjLjAzMi0uODkyLS4zMy0xLjM1LTEuMS0xLjM1LS45OTQgMC0yLjAxLjY4Ni0zLjA0OCAyLjA2Ni0xLjAzOCAxLjM4LTEuNTY3IDIuNjk3LTEuNTk4IDMuOTYyLS4wMiAwLS4wMi4yMTggMCAuNjQzIDEuNjMtLjYgMy4wNS0xLjUxNCA0LjI0Mi0yLjczOC45NjYtMS4wNTggMS40NjMtMS45MiAxLjUwNS0yLjU4M20yNC45NDYgMS44NjhjLS4xMzUgMy4wNzItMS4yNjUgNS43MTctMy40MDIgNy45NDctMi4xMzUgMi4yMy00Ljc5IDMuMzUtNy45NTUgMy4zNS0yLjYzNSAwLTQuNjM3LS44NS02LjAwNi0yLjU1LS45OTctMS4yNjctMS41NTctMi44NTQtMS42NS00Ljc1Mi0uMTY2LTIuODYzLjg2LTUuNDk4IDMuMS03Ljg5NCAyLjQwOC0yLjY2NSA1LjQyNy0zLjk5MyA5LjA1Ny0zLjk5MyAyLjMzNCAwIDQuMDk4Ljc4OCA1LjMgMi4zNDQgMS4xMzIgMS40NDMgMS42NSAzLjI5IDEuNTU3IDUuNTVtLTUuNjY0LS4xODVjLjAzLS45MDMtLjA5NC0xLjczMy0uMzc0LTIuNDgtLjI4LS43NDctLjY5NS0xLjEzLTEuMjI0LTEuMTMtMS43MDIgMC0zLjEwMi45MjMtNC4yMDIgMi43Ni0uOTMzIDEuNTAzLTEuNDMgMy4xMS0xLjUwNCA0LjgxMi0uMDMuODQuMTE0IDEuNTc3LjQ0NiAyLjIxLjM2NC43MzYuODgyIDEuMSAxLjU1NiAxLjEgMS41MDUgMCAyLjc5LS44ODMgMy44Ni0yLjY1Ni44OTItMS40NzIgMS4zOC0zLjAwOCAxLjQ0LTQuNjE1aC4wMDJ6IiBmaWxsPSIjMTEyMjMzIi8+PC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfc3RvY2tfbG9nbyIgaHJlZj0iL3N0b2NrIj4KICAgICAgICAgICAgICAgIDxzdmcgYWx0PSJWaW1lbyIgd2lkdGg9IjE3MCIgaGVpZ2h0PSI0MCIgZGF0YS1uYW1lPSJMYXllciAxIiB2aWV3Qm94PSIwIDAgNzgwIDEyMCI+PHBhdGggZD0iTTQ3MS45IDcwLjMxYy0xMi4xNC0yLjc0LTI0LjI4LTMuOS0yNC4yOC0xMiAwLTYuNSA4LjgyLTcuNjYgMTMuNTktNy42NiA3LjIyIDAgMTMuNzMgMi4xNyAxNS4xNyAxMGgxNy4yYy0yLTE2LjYyLTE1LjktMjMtMzEuMjItMjMtMTMuNTggMC0zMS4yMSA1LjA1LTMxLjIxIDIxLjM4IDAgMTUuMTcgMTEuODUgMTkuNTEgMjQgMjIuMTFzMjQgMy43NiAyNC40MiAxMi40M2MuNDMgOC41Mi0xMC40IDkuODItMTYuNjIgOS44Mi04LjgxIDAtMTYtMy40Ni0xNi45LTEzaC0xNi40OWMuMjkgMTcuNjMgMTQuMzEgMjYgMzMuMDkgMjYgMTUuNDYgMCAzMy4zOC02LjUgMzMuMzgtMjQuMjgtLjAzLTE0LjcyLTEyLjE0LTE5LjA1LTI0LjEzLTIxLjh6TTUyNS42NiAxNy4yOGgtMTYuNDh2MjIuNGgtMTIuNDJWNTJoMTIuNDJ2NDRjLjI5IDEyLjQzIDMuNDcgMTkuMDggMjAuNjcgMTkuMDggMy42MSAwIDcuMDgtLjU4IDEwLjY5LS44N3YtMTIuNjhhMjguNTIgMjguNTIgMCAwIDEtNi45NC41N2MtNy4zNyAwLTcuOTQtMy40Ny03Ljk0LTEwLjI2VjUyaDE0Ljg4VjM5LjY4aC0xNC44OHpNNTgwLjg1IDM3LjY2Yy0yNCAwLTM3LjcxIDE2LjQ3LTM3LjcxIDM5LjMgMCAyMyAxMy43MyAzOS40NSAzNy43MSAzOS40NVM2MTguNTcgOTkuOTQgNjE4LjU3IDc3YzAtMjIuODctMTMuNzMtMzkuMzQtMzcuNzItMzkuMzR6bTAgNjUuNzRjLTE0LjczIDAtMjEuMjQtMTMuNC0yMS4yNC0yNi40czYuNTEtMjYuMyAyMS4yNC0yNi4zUzYwMi4xIDY0LjEgNjAyLjEgNzdzLTYuNTEgMjYuNC0yMS4yNSAyNi40ek02NjIuNzkgNTAuNjZjOS4xIDAgMTUuNzUgNC45MSAxNy4wNSAxNGgxNi40N2MtMS41OS0xOC4zNS0xNi4zMy0yNy0zMy42Ny0yNy0yNC41NiAwLTM2Ljg1IDE3LjYzLTM2Ljg1IDQwLjE3IDAgMjIgMTIuODYgMzguNTggMzYuMjcgMzguNTggMTkuMjIgMCAzMS4yMi0xMC42OSAzNC4yNS0zMC4wNmgtMTYuNDdjLTEuNTkgMTAuNy04LjI0IDE3LjA1LTE3Ljc4IDE3LjA1LTE0LjMgMC0xOS43OS0xMy4xNS0xOS43OS0yNS41NyAwLTIyLjY5IDExLjk5LTI3LjE3IDIwLjUyLTI3LjE3ek03NDIuMjYgNjcuMTNsMjguNjEtMjcuNDVoLTIwLjIzbC0yOS43NiAzMC4yVjExLjIxSDcwNC40djEwMy4xOGgxNi40OFY4Ny42NWw5LjgyLTkuNTMgMjIuODMgMzYuMjdoMjAuMDlsLTMxLjM2LTQ3LjI2eiIgZmlsbD0iI2ZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik0xMTcuMjUgMjYuNzJhMTguMzcgMTguMzcgMCAwIDAgMTMuMTQtNS4zMXE0LjkyLTQuNjkgNS4xMy05LjhhOS42MiA5LjYyIDAgMCAwLTIuNjctNi44NCA5LjA4IDkuMDggMCAwIDAtNy4xOC0zLjM3IDIwLjkxIDIwLjkxIDAgMCAwLTEzLjQ1IDQuOXEtNi4wNiA0LjkxLTYuMjYgMTAuMjEtLjQgMTAuMjIgMTEuMjkgMTAuMjF6TTM4Ni4xMiAzOC4yNXEtMjIuMzggMC0zNy4xNSAxNi4zOVEzMzUuMiA2OS40IDMzNi4yNCA4N2MuMDUuODYuMTIgMS43LjIyIDIuNTNsLTEuNTQuNjhxLTE3LjQ2IDcuNTItMzIuMjMgNy41MS03LjQgMC0xMS4wOS01LjEyIDE5LjktMy4yNyAzMy0xNS4zNSAxMi40LTExLjAzIDExLjU0LTIxLjQ3LTEuMjMtMTYuMzctMjEuMzQtMTYuMzgtMjEuOCAwLTM3LjggMTYuNDItMTQuNTYgMTUtMTQuNzcgMzEuNmEzNy41NyAzNy41NyAwIDAgMCAuMjcgNS4zN2MtMi4yOSAxLjUxLTQgMi4yNy01LjIgMi4yN3EtMy45IDAtNC45Mi0xLjYzYy0uNjktMS4wOS0xLTMuMDYtLjgzLTUuOTNxMC0xLjY0IDIuNTctMTIuNTd0Mi43Ny0xNi42N3EuNC04LjM3LTMuMjgtMTIuODgtNC4zMi01LjUyLTE0LjE3LTQuN2EzMC40MiAzMC40MiAwIDAgMC0xNS44IDYuMTYgNTQuNTcgNTQuNTcgMCAwIDAtOS4yMyA4LjgyYy0xLjEgMS0yLjEyIDEuODYtMy4wOCAyLjY3cS4xOS04LjQxLTMuMjgtMTIuOTMtNC4zMi01LjUzLTE0LjM4LTQuNzJhMzYuNDYgMzYuNDYgMCAwIDAtMjEuMTMgOS4yNCAzNy42NyAzNy42NyAwIDAgMC03LjE5IDguMjEgMTguMTUgMTguMTUgMCAwIDAgLjQxLTMuOUExOS40MiAxOS40MiAwIDAgMCAxNjIuNSA0M3EtMy4yOC00LjgyLTguNjItNC40MS0zLjA3LjIxLTExLjY5IDguMjEtMTEuOTEgMTEuMDgtMTIuOTMgMTEuOWw0LjkyIDUuNTRjMy44My0yLjc2IDYuMTYtNC4xNSA3LTQuMTVxMi4yNSAwIDEuODUgMy42OGExMTQuMTEgMTE0LjExIDAgMCAxLTEuODkgMTQuODRjLS43IDMuOTQtMS4yIDcuMzMtMS41MiAxMC4xOWwtLjE4LjE1cS03LjM5IDYuMDgtMTAuMjYgNi4wN2MtNC4zOCAwLTYuNS0yLjkyLTYuMzctOC43OXEzLjA4LTE5LjIyIDUuNzYtMzEuNjkuODEtNy4zNi0yLjM3LTEydC0xMC00cS00LjMyLjQtMTMuMTQgOC4yMUw5NyA1Mi4zOWMtLjQxLTkuNjgtNC44Mi0xNC42Ni0xMy4yOC0xNC45MXEtMTktLjYtMjUuNzQgMjEuNDZhMTcuMTkgMTcuMTkgMCAwIDEgNi43Ni0xLjVxNyAwIDYuMTYgNy44NC0uNDYgNC43Mi02LjIgMTMuODF0LTguNjIgOS4wNnEtMy42OSAwLTYuNzctMTQtMS00LjExLTMuNjktMjEtMi40Ny0xNS41NC0xMy4xNC0xNC41MlEyOCAzOSAxOC45NCA0Ni44NHEtNi41NyA2LTEzLjM0IDExLjlsNC4zIDUuNTRRMTYuMDUgNjAgMTcuMDcgNjBxNC43MSAwIDguODEgMTQuNzZsNy4zOCAyNy4wNnE1LjUyIDE0Ljc2IDEzLjUxIDE0Ljc2IDEyLjkyIDAgMzEuNTUtMjQuMjQgMTMuMS0xNi44NCAxNy0yOC41YzMuNDQtMi41NSA1LjU3LTMuODQgNi4zNS0zLjg0cTMuNjkgMCAzLjY5IDUuMzMgMCAxLTQgMTUuMTh0LTQuMiAyMC45MnEtLjIxIDYuNTcgMy4xOCAxMC42NmMyLjI1IDIuNzQgNS41MSA0LjExIDkuNzUgNC4xMXExMy43NSAwIDI3LjUtMTEuOWMuODItLjcxIDEuNjEtMS40NCAyLjM5LTIuMThhMTYuNTEgMTYuNTEgMCAwIDAgMy43NyA3LjU2cTUuOTMgNi4zNCAyMCA1LjkzLTEuODktNC41Mi0xLjQ3LTE2YTU5LjcgNTkuNyAwIDAgMSA2LjU3LTI0LjQzcTYtMTEuNjggMTEuMS0xMS43IDYgMCA1LjU1IDcuNTlhNTMuMTMgNTMuMTMgMCAwIDEtMiAxMS43MSA1NS4yMyA1NS4yMyAwIDAgMC0yIDEzLjEzcS0uNDEgMTAuNDcgNC43MSAxNSA1LjczIDUuMTMgMjAuMDUgNC43Mi0yLjEzLTQuNzEtMS43Mi0xMy41NC42LTEyLjUyIDguNDQtMjUuODYgNy40MS0xMi43MiAxMi43Ni0xMi43MyA1IDAgNC43NCA3LjhhNzQuOTQgNzQuOTQgMCAwIDEtMi41NiAxNC4zNiA3NC42MSA3NC42MSAwIDAgMC0yLjU3IDE1Ljc5cS0uNDEgMTQuNzggMTIuOTQgMTQuNzcgMTMuNzQgMCAyNy41LTExLjlsLjQ0LS40Yy4zMi41NC42NCAxLjA4IDEgMS42cTcuMTkgMTEuMDggMjMuODEgMTEuMDggMjIuMzYgMCA0NC4xMy0xMi41YzEuNjMtLjkyIDMuMTctMS44MyA0LjY1LTIuNzVhMjkuNDMgMjkuNDMgMCAwIDAgMy4yNCA1LjE4cTguNDIgMTAuNDUgMjQuNjMgMTAuNDUgMTkuNSAwIDMyLjY0LTEzLjczYTQ4Ljc5IDQ4Ljc5IDAgMCAwIDE0LTMyLjU4cS42MS0xMy45My02LjM2LTIyLjc1LTcuNDktOS42NS0yMS44NS05LjY3em0tOTcuNzYgNDYuNTZhMTEuMTIgMTEuMTIgMCAwIDEgMC0yLjY2cS4xOS03Ljc1IDYuNTUtMTYuMjN0MTIuNS04LjQ4YzMuMTUgMCA0LjY1IDEuODUgNC41MSA1LjUycS0uMTkgNC4wOC02LjE0IDEwLjYyYTQ2LjI1IDQ2LjI1IDAgMCAxLTE3LjQyIDExLjIzek0zOTEgNjkuODVhMzkgMzkgMCAwIDEtNiAxOC45MnEtNi41NyAxMC45MS0xNS44MSAxMC45LTQuMTEgMC02LjM2LTQuNTJhMTcuNjYgMTcuNjYgMCAwIDEtMS44NS05LjA1IDM5LjgxIDM5LjgxIDAgMCAxIDYuMTYtMTkuNzRxNi44Ni0xMS4zMSAxNy4zMy0xMS4zMWMyLjE5IDAgMy44NiAxLjU0IDUgNC42M0EyNS44MiAyNS44MiAwIDAgMSAzOTEgNjkuODV6IiBmaWxsPSIjMDBhZGVmIj48L3BhdGg+PC9zdmc+CiAgICAgICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnUiIHJvbGU9Im5hdmlnYXRpb24iIGFyaWEtbGFiZWw9Ik1haW4gbWVudSI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InRvcG5hdl9tZW51X2Rlc2t0b3BfbWFpbiIgcm9sZT0ibWVudWJhciI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtcyIgZGF0YS1tZW51LWlkPSJqb2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfbWVudV9qb2luIGpzLXRvcG5hdl9tZW51X2F1dGgiIG9uY2xpY2s9ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7dmltZW8uTW9kYWwuY3JlYXRlKHtzaXplOid4c21hbGwnLGNvbnRlbnQ6Jy9qb2luP21vZGFsPW5ldyd9KS50aGVuKGNvbXBsZXRlVXNlckxvZ2luKSIgZGF0YS1nYS1ldmVudC1jbGljaz0idG9wX25hdnxqb2luIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpqb2luIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9qb2luX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS9qb2luIiB0aXRsZT0iQmVjb21lIGEgVmltZW8gbWVtYmVyIiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9qb2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKb2luICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zIiBkYXRhLW1lbnUtaWQ9ImxvZ2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJqcy10b3BuYXZfbWVudV9hdXRoIiBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO3ZpbWVvLk1vZGFsLmNyZWF0ZSh7c2l6ZToneHNtYWxsJyxjb250ZW50OicvbG9nX2luP21vZGFsPW5ldyd9KS50aGVuKGNvbXBsZXRlVXNlckxvZ2luKSIgZGF0YS1nYS1ldmVudC1jbGljaz0idG9wX25hdnxsb2dpbiIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6bG9naW4iIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2xvZ2luX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS9sb2dfaW4iIHRpdGxlPSJMb2cgaW4gdG8geW91ciBhY2NvdW50IiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9sb2dpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nIGluICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zIiBkYXRhLW1lbnUtaWQ9InByaWNpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJpY2luZyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJpY2luZ19jbGljayIgaHJlZj0iLy92aW1lby5jb20vdXBncmFkZSIgdGl0bGU9IlByaWNpbmciIHJlbD0idG9nZ2xlIiByb2xlPSJidXR0b24iIGFyaWEtb3ducz0idG9wbmF2X3ByaWNpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaWNpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXMiIGRhdGEtbWVudS1pZD0icHJvZHVjdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnRhcmdldC5ibHVyKCk7IiBjbGFzcz0idG9wbmF2X21lbnVfbm9fbGluayB0b3BuYXZfaGFzX2Ryb3Bkb3duIHRvcG5hdl9pY29uX2NoZXZyb25fYSIgaHJlZj0iIyIgdGl0bGU9IlByb2R1Y3QiIHJlbD0idG9nZ2xlIiByb2xlPSJidXR0b24iIGFyaWEtb3ducz0idG9wbmF2X3Byb2R1Y3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd24tLXdyYXBwZXIiIHJvbGU9Im1lbnUiIGFyaWEtaGlkZGVuPSJ0cnVlIiBpZD0idG9wbmF2X3Byb2R1Y3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X2Rlc2t0b3Bfc29sdXRpb25zLS1mZWF0dXJlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bi0tbGFiZWxzIj5GRUFUVVJFUzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19saXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOnZpZGVvX3BsYXllciIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJvZHVjdF92aWRlb19wbGF5ZXIiIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL3ZpZGVvLXBsYXllciIgdGl0bGU9IlZpZGVvIHBsYXllciI+VmlkZW8gcGxheWVyPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpwcm9kdWN0fGtleXdvcmQ6c2NyZWVuX3JlY29yZGVyIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X3NjcmVlbl9yZWNvcmRlciIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvc2NyZWVuLXJlY29yZGVyIiB0aXRsZT0iU2NyZWVuIHJlY29yZGVyIj5TY3JlZW4gcmVjb3JkZXI8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnByb2R1Y3R8a2V5d29yZDpsaXZlX3N0cmVhbWluZyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJvZHVjdF9saXZlX3N0cmVhbWluZyIgaHJlZj0iLy92aW1lby5jb20vbGl2ZSIgdGl0bGU9IkxpdmUgc3RyZWFtaW5nIj5MaXZlIHN0cmVhbWluZzwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOnByaXZhY3kiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X3Byb2R1Y3RfcHJpdmFjeSIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tcHJpdmFjeSIgdGl0bGU9IlByaXZhY3kiPlByaXZhY3k8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnByb2R1Y3R8a2V5d29yZDpjb2xsYWJvcmF0aW9uIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2NvbGxhYm9yYXRpb24iIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL3ZpZGVvLWNvbGxhYm9yYXRpb24iIHRpdGxlPSJDb2xsYWJvcmF0aW9uIj5Db2xsYWJvcmF0aW9uPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpwcm9kdWN0fGtleXdvcmQ6ZGlzdHJpYnV0aW9uIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2Rpc3RyaWJ1dGlvbiIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tbWFya2V0aW5nIiB0aXRsZT0iRGlzdHJpYnV0aW9uIGFuZCBtYXJrZXRpbmciPkRpc3RyaWJ1dGlvbiAmIG1hcmtldGluZzwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOm1vbmV0aXphdGlvbiIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfcHJvZHVjdF9tb25ldGl6YXRpb24iIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL3ZpZGVvLW1vbmV0aXphdGlvbiIgdGl0bGU9Ik1vbmV0aXphdGlvbiI+TW9uZXRpemF0aW9uPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpwcm9kdWN0fGtleXdvcmQ6YW5hbHl0aWNzIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2FuYWx5dGljcyIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tYW5hbHl0aWNzIiB0aXRsZT0iQW5hbHl0aWNzIj5BbmFseXRpY3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnByb2R1Y3R8a2V5d29yZDpob3N0aW5nIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9wcm9kdWN0X2hvc3RpbmciIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL29ubGluZS12aWRlby1ob3N0aW5nIiB0aXRsZT0iSG9zdGluZyBhbmQgbWFuYWdlbWVudCI+SG9zdGluZyAmIG1hbmFnZW1lbnQ8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91cGdyYWRlIiBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bi0tY29tcGFyZV9wbGFucyIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6cHJvZHVjdHxrZXl3b3JkOmNvbXBhcmVfcGxhbnN8dGFyZ2V0Oi91cGdyYWRlfHR5cGU6Y2xpY2siPkNvbXBhcmUgUGxhbnM8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd24tLWxhYmVscyI+U0VSVklDRVM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9zb2x1dGlvbnMtLXNlcnZpY2VzX2NvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZXJ2aWNlc193cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpzb2x1dGlvbnN8a2V5d29yZDpjcmVhdGV8dGFyZ2V0Oi9jcmVhdGV8dHlwZTpjbGljayIgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXNfYmxvY2siIGhyZWY9Ii8vdmltZW8uY29tL2NyZWF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5NYWtlIHNvY2lhbCB2aWRlb3MgaW4gYW4gaW5zdGFudDogdXNlIGN1c3RvbSB0ZW1wbGF0ZXMgdG8gdGVsbCB0aGUgcmlnaHQgc3RvcnkgZm9yIHlvdXIgYnVzaW5lc3MuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VydmljZXNfd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6Zm9yX2hpcmV8dGFyZ2V0Oi9mb3ItaGlyZXx0eXBlOmNsaWNrIiBjbGFzcz0idG9wbmF2X2Rlc2t0b3Bfc29sdXRpb25zLS1zZXJ2aWNlc19ibG9jayIgaHJlZj0iLy92aW1lby5jb20vZm9yLWhpcmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgSGlyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Qb3N0IGpvYnMsIGZpbmQgcHJvcywgYW5kIGNvbGxhYm9yYXRlIGNvbW1pc3Npb24tZnJlZSBpbiBvdXIgcHJvZmVzc2lvbmFsIG1hcmtldHBsYWNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlcnZpY2VzX3dyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOmVudGVycHJpc2V8dGFyZ2V0Oi9lbnRlcnByaXNlfHR5cGU6Y2xpY2siIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9zb2x1dGlvbnMtLXNlcnZpY2VzX2Jsb2NrIiBocmVmPSIvL3ZpbWVvLmNvbS9lbnRlcnByaXNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXJwcmlzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5HZXQgeW91ciB0ZWFtIGFsaWduZWQgd2l0aCBhbGwgdGhlIHRvb2xzIHlvdSBuZWVkIG9uIG9uZSBzZWN1cmUsIHJlbGlhYmxlIHZpZGVvIHBsYXRmb3JtLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlcnZpY2VzX3dyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOnN0b2NrfHRhcmdldDovc3RvY2t8dHlwZTpjbGljayIgY2xhc3M9InRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXNfYmxvY2siIGhyZWY9Ii8vdmltZW8uY29tL3N0b2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+QnJvd3NlIGFuZCBidXkgZXhjZXB0aW9uYWwsIHJveWFsdHktZnJlZSBzdG9jayBjbGlwcywgaGFuZHBpY2tlZCBieSB0aGUgYmVzdC48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXMiIGRhdGEtbWVudS1pZD0ic29sdXRpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ0b3BuYXZfaGFzX2Ryb3Bkb3duIHRvcG5hdl9pY29uX2NoZXZyb25fYSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6c29sdXRpb25zIiBocmVmPSIjIiB0aXRsZT0iU29sdXRpb25zIiByZWw9InRvZ2dsZSIgcm9sZT0iYnV0dG9uIiBhcmlhLW93bnM9InRvcG5hdl9zb2x1dGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbHV0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIiByb2xlPSJtZW51IiBhcmlhLWhpZGRlbj0idHJ1ZSIgaWQ9InRvcG5hdl9zb2x1dGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbSIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpzb2x1dGlvbnN8a2V5d29yZDpjcmVhdGl2ZV9wcm9mZXNzaW9uYWxzIiBocmVmPSIvL3ZpbWVvLmNvbS9zb2x1dGlvbnMvY3JlYXRpdmUtcHJvZmVzc2lvbmFscy1zb2x1dGlvbnMiIHRpdGxlPSJBbGwgeW91IG5lZWQgdG8gbWFrZSBncmVhdCB2aWRlby4iPkNyZWF0aXZlIFByb2Zlc3Npb25hbHM8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6c21hbGxfYnVzaW5lc3MiIGhyZWY9Ii8vdmltZW8uY29tL3NvbHV0aW9ucy9zbWFsbC1idXNpbmVzcy1zb2x1dGlvbnMiIHRpdGxlPSJDYXB0dXJlIHlvdXIgY3VzdG9tZXJz4oCZIGF0dGVudGlvbiB3aXRoIHZpZGVvLiI+U21hbGwgQnVzaW5lc3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZW50ZXJwcmlzZSIgaHJlZj0iLy92aW1lby5jb20vZW50ZXJwcmlzZSIgdGl0bGU9IkVudGVycHJpc2UiPkVudGVycHJpc2U8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZWR1Y2F0aW9uIiBocmVmPSIvL3ZpbWVvLmNvbS9zb2x1dGlvbnMvZWR1Y2F0aW9uLXNvbHV0aW9ucyIgdGl0bGU9IlNoYXJlIGtub3dsZWRnZSB3aXRoIHZpZGVvLiI+RWR1Y2F0aW9uPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOmZpdG5lc3MiIGhyZWY9Ii8vdmltZW8uY29tL3NvbHV0aW9ucy9maXRuZXNzLXNvbHV0aW9ucyIgdGl0bGU9IkdldCB5b3VyIGZpdG5lc3Mgc3R1ZGlvIG9ubGluZS4iPkZpdG5lc3M8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZmFpdGgiIGhyZWY9Ii8vdmltZW8uY29tL3NvbHV0aW9ucy9mYWl0aC1zb2x1dGlvbnMiIHRpdGxlPSJLZWVwIHlvdXIgY29tbXVuaXR5IGNvbm5lY3RlZC4iPkZhaXRoPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zIiBkYXRhLW1lbnUtaWQ9Imluc3BpcmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG9uY2xpY2s9ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQudGFyZ2V0LmJsdXIoKTsiIGNsYXNzPSJ0b3BuYXZfbWVudV9ub19saW5rIHRvcG5hdl9oYXNfZHJvcGRvd24gdG9wbmF2X2ljb25fY2hldnJvbl9hIiBocmVmPSIjIiB0aXRsZT0iV2F0Y2giIHJlbD0idG9nZ2xlIiByb2xlPSJidXR0b24iIGFyaWEtb3ducz0idG9wbmF2X2luc3BpcmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIiByb2xlPSJtZW51IiBhcmlhLWhpZGRlbj0idHJ1ZSIgaWQ9InRvcG5hdl9pbnNwaXJhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OndhdGNofGtleXdvcmQ6d2F0Y2giIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X3dhdGNoX2NsaWNrIiBocmVmPSIvL3ZpbWVvLmNvbS93YXRjaCIgdGl0bGU9IkV4cGxvcmUiPkV4cGxvcmU8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW0iIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6d2F0Y2h8a2V5d29yZDpzdGFmZl9waWNrcyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfd2F0Y2hfc3RhZmZfcGlja3NfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL2NoYW5uZWxzL3N0YWZmcGlja3MiIHRpdGxlPSJUaGUgYmVzdCB2aWRlb3Mgb24gVmltZW8sIGN1cmF0ZWQgZGFpbHkgYnkgb3VyIHRlYW0iPlN0YWZmIFBpY2tzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfbWVudV9pdGVtc19kcm9wZG93bl9pdGVtIiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50Om1hbmFnZV92aWRlb3N8a2V5d29yZDp2aWRlb19zY2hvb2wiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2NyZWF0ZV92aWRlb19zY2hvb2xfY2xpY2siIGhyZWY9Ii8vdmltZW8uY29tL3ZpZGVvc2Nob29sIiB0aXRsZT0iTGVhcm4gaG93IHRvIG1ha2UgYmV0dGVyIHZpZGVvcyI+VmlkZW8gU2Nob29sPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvbmF2PjwhLS0gLy50b3BuYXZfZGVza3RvcF9tZW51IC0tPgogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0idG9wbmF2X21lbnVfc2VhcmNoX29tbmlzZWFyY2giIGNsYXNzPSJ0b3BuYXZfbWVudV9zZWFyY2giIGRhdGEtcXVlcnk9IiIgZGF0YS1wbGFjZWhvbGRlcj0iU2VhcmNoIHZpZGVvcywgcGVvcGxlLCBhbmQgbW9yZSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X21lbnVfcmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJyZWNvcmRfdGlwX3dyYXBwZXIiIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF92aWRlb19wb3BvdmVyIiBvbk1vdXNlZW50ZXI9InRyYWNrTmV3VmlkZW9Ecm9wZG93bkltcHJlc3Npb24oJycpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9Im5ld192aWRlb19kcm9wZG93bl9idXR0b24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfdmlkZW9fcG9wb3Zlcl9idXR0b24gaXJpc19idG4tLXByaW1hcnkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpuZXdfdmlkZW8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJoYW5kbGVOZXdWaWRlb0NsaWNrKCkiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF92aWRlb19wb3BvdmVyX3NwYW5fd3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3IHZpZGVvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0icmVjb3JkX2FuaW1hdGlvbl93cmFwcGVyIiBjbGFzcz0idG9wbmF2X2Rlc2t0b3BfdmlkZW9fcG9wb3Zlcl9zcGFuX3ZhcmlhbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9Ik0xMiAxNS41YTEgMSAwIDAgMS0uNjctLjI2bC01LTQuNSAxLjM0LTEuNDhMMTIgMTMuMTVsNC4zMy0zLjkgMS4zNCAxLjQ5LTUgNC41YTEgMSAwIDAgMS0uNjcuMjZ6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0ibmV3X3ZpZGVvX2Ryb3Bkb3duX3ZhcmlhbnQiIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duIHRvcG5hdl9kZXNrdG9wX3ZpZGVvX3BvcG92ZXJfZHJvcGRvd25fdmFyaWFudCIgcm9sZT0ibWVudSIgYXJpYS1oaWRkZW49InRydWUiIHN0eWxlPSJwYWRkaW5nOiB1bnNldDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InRvcG5hdl9kZXNrdG9wX21lbnVfaXRlbXNfZHJvcGRvd25faXRlbV92YXJpYW50IiByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG9uY2xpY2s9IihmdW5jdGlvbihldmVudCkgeyBpZiAod2luZG93LmhhbmRsZVVwbG9hZEJ1dHRvbkNsaWNrKSB7IGhhbmRsZVVwbG9hZEJ1dHRvbkNsaWNrKGV2ZW50KTsgfX0pKGV2ZW50KSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6bmV3X3ZpZGVvfGtleXdvcmQ6eydhY3Rpb24nOid1cGxvYWQnfXx0YXJnZXQ6L3VwbG9hZHx0eXBlOmNsaWNrIiBpZD0idG9wbmF2X2Rlc2t0b3BfdXBsb2FkX2J1dHRvbiIgaHJlZj0iLy92aW1lby5jb20vdXBsb2FkIiA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxpZ25fdG9wbmF2X2Ryb3Bkb3duX2ljb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvcG5hdl9kcm9wZG93bl9pY29ucyI+PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPSJNMTggOC40OGE3LjE2IDcuMTYgMCAwIDAtMS44NC00Ljc2QTUuODEgNS44MSAwIDAgMCA2LjkyIDVhNS4yNCA1LjI0IDAgMCAwLTQuNjkgMy44NUE0LjkxIDQuOTEgMCAwIDAgMCAxM2E1LjEzIDUuMTMgMCAwIDAgNSA1aDEwYTUuMSA1LjEgMCAwIDAgNS00Ljk0IDUuODkgNS44OSAwIDAgMC0yLTQuNTh6TTE1IDE2aC00di0zLjU5bDEuMjkgMS4yOSAxLjQxLTEuNDEtMy43LTMuNy0zLjcxIDMuN0w3LjcgMTMuNyA5IDEyLjQxVjE2SDVhMy4xNiAzLjE2IDAgMCAxLTMtMyAyLjkxIDIuOTEgMCAwIDEgMS41Mi0yLjU4bC40LS4yLjA4LS40NEEzLjM4IDMuMzggMCAwIDEgNy41OSA3aC43bC4yNC0uNjZBMy42OSAzLjY5IDAgMCAxIDEyIDRhMy43MyAzLjczIDAgMCAxIDIuNzIgMS4xMkE1LjQ1IDUuNDUgMCAwIDEgMTYgOXYuNTRsLjQ1LjNBMy43OSAzLjc5IDAgMCAxIDE4IDEzLjA2IDMuMDkgMy4wOSAwIDAgMSAxNSAxNnoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iIzFhMmUzYiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0b3BuYXZfZGVza3RvcF9tZW51X2l0ZW1zX2Ryb3Bkb3duX2l0ZW1fdmFyaWFudCIgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSJoYW5kbGVDcmVhdGVWaWRlb0NsaWNrKGV2ZW50KSIgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6bmV3X3ZpZGVvfGtleXdvcmQ6eydhY3Rpb24nOidjcmVhdGUnfXx0YXJnZXQ6L2NyZWF0ZS92aWRlby1tYWtlcnx0eXBlOmNsaWNrIiBpZD0idG9wbmF2X2Rlc2t0b3BfY3JlYXRlX3ZpZGVvX2J1dHRvbiIgaHJlZj0iLy92aW1lby5jb20vY3JlYXRlL3ZpZGVvLW1ha2VyIiA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxpZ25fdG9wbmF2X2Ryb3Bkb3duX2ljb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvcG5hdl9kcm9wZG93bl9pY29ucyI+PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZD0iTTMuMiAxNi44bDMuOC0xIDEwLTEwYy4yLS4yLjItLjUgMC0uN0wxNC45IDNjLS4yLS4yLS41LS4yLS43IDBsLTIuMSAyLjEgMi44IDIuOEwxMy44IDkgMTEgNi4yIDQuMiAxM2wtMSAzLjh6bTkuOS0xNC45Yy44LS44IDItLjggMi44IDBMMTguMSA0Yy44LjguOCAyIDAgMi44TDcuOCAxNy4ybC01LjYgMS41Yy0uNS4xLS45LS4yLS43LS43bDEuNC01LjdMMTMuMSAxLjl6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iIzFhMmUzYiIKICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBhIHZpZGVvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBpZD0iY2FydF90b3BfbmF2IiBjbGFzcz0idG9wbmF2X2NhcnRfYnV0dG9uIj48L2Rpdj4KCiAgICAgICAgICAgIDwvZGl2PjwhLS0gLy50b3BuYXZfbWVudV9yaWdodCAtLT4KICAgICAgICAgICAgPC9kaXY+PCEtLSAvLnRvcG5hdl9kZXNrdG9wX3dyYXBwZXIgLS0+CjwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgdmFyIGlzTW9iaWxlID0gL2lwaG9uZXxpcG9kfGFuZHJvaWR8d2Vib3N8YmxhY2tiZXJyeXx3aW5kb3dzIHBob25lL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpOwoKICAgICAgICAvLyBETyBOT1QgUkVNT1ZFLiBUaGlzIGlzIGEgY2FsbGJhY2sgZm9yIHRoZSBsb2dpbiAmIGpvaW4gYnV0dG9ucyBpbiBUb3BOYXZCdWlsZGVyLgogICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlVXNlckxvZ2luKHJlc3BvbnNlKSB7CiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiAhcmVzcG9uc2Uuc2lnbnVwKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gaGFuZGxlVXBsb2FkQnV0dG9uQ2xpY2soZXZlbnQpIHsKICAgICAgICAgICAgLy8gT3BlbnMgdGhlIGF1dGggbW9kYWwgZm9yIGxvZ2dlZCBvdXQgdXNlcnMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICB3aW5kb3cudmltZW8KICAgICAgICAgICAgICAgJiYgd2luZG93LnZpbWVvLmNvbmZpZwogICAgICAgICAgICAgICAmJiB3aW5kb3cudmltZW8uTW9kYWwKICAgICAgICAgICAgICAgJiYgIXdpbmRvdy52aW1lby5jdXJfdXNlcgogICAgICAgICAgICApewogICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIGlzTW9iaWxlID8gd2luZG93LmxvY2F0aW9uLmhyZWY9Ii91cGxvYWQiIDogdmltZW8uTW9kYWwuY3JlYXRlKHsKICAgICAgICAgICAgICAgICAgICBzaXplOiAneHNtYWxsJywKICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnL2pvaW4/bW9kYWw9bmV3JnJlZGlyZWN0PS91cGxvYWQnLAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgIDwvc2NyaXB0PgoKPHNjcmlwdD4KICAgIHZhciBzZXJ2aWNlRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2VydmljZXNfd3JhcHBlcicpOwogICAgdmFyIGhpZGRlblNlcnZpY2VFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZXJ2aWNlc193cmFwcGVyLmhpZGUnKTsKICAgIHZhciBjb3VudCA9IHNlcnZpY2VFbGVtZW50cy5sZW5ndGggLSBoaWRkZW5TZXJ2aWNlRWxlbWVudHMubGVuZ3RoOwogICAgaWYgKGNvdW50ID4gMikgewogICAgICAgIHZhciBzZXJ2aWNlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRvcG5hdl9kZXNrdG9wX3NvbHV0aW9ucy0tc2VydmljZXNfY29udGFpbmVyJyk7CiAgICAgICAgaWYgKHNlcnZpY2VDb250YWluZXIpIHsKICAgICAgICAgICAgc2VydmljZUNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICc0NTBweCc7CiAgICAgICAgfQogICAgfQo8L3NjcmlwdD4KCjxzY3JpcHQ+CiAgICBmdW5jdGlvbiBoYW5kbGVOZXdWaWRlb0NsaWNrKCkgewogICAgICAgIGlmICh3aW5kb3cudmltZW8gJiYgd2luZG93LnZpbWVvLmN1cl91c2VyKSB7CiAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgIT09ICcvdXBsb2FkJykgewogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL3VwbG9hZCc7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3aW5kb3cudmltZW8uTW9kYWwuY3JlYXRlKHsgc2l6ZTogJ3hzbWFsbCcsIGNvbnRlbnQ6ICcvam9pbj9tb2RhbD1uZXcmcmVkaXJlY3Q9L3VwbG9hZCcgfSkKICAgICAgICAgICAgICAgIC50aGVuKGNvbXBsZXRlVXNlckxvZ2luKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFuZGxlQ3JlYXRlVmlkZW9DbGljayhlLCBpc1JlY29yZFNjcmVlbiA9IGZhbHNlKSB7CiAgICAgICAgaWYgKHdpbmRvdy52aW1lbyAmJiAhd2luZG93LnZpbWVvLmN1cl91c2VyKSB7CiAgICAgICAgICAgIGlmICghaXNSZWNvcmRTY3JlZW4pIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICAgICAgICB3aW5kb3cudmltZW8uTW9kYWwuY3JlYXRlKHsKICAgICAgICAgICAgICAgICAgICBzaXplOiAneHNtYWxsJywKICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnL2pvaW4/bW9kYWw9bmV3JnJlZGlyZWN0PS9jcmVhdGUvdmlkZW8tbWFrZXInCiAgICAgICAgICAgICAgICB9KS50aGVuKGNvbXBsZXRlVXNlckxvZ2luKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB0cmFja05ld1ZpZGVvRHJvcGRvd25JbXByZXNzaW9uKHJlY29yZE9wdGlvbikgewogICAgICAgIGlmICh3aW5kb3cuX19mYSkgewogICAgICAgICAgICB3aW5kb3cuX19mYS5wdXNoKFsndHJhY2tFdmVudCcsIHsKICAgICAgICAgICAgICAgIHR5cGU6ICdpbXByZXNzaW9uJywKICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogJ3RvcF9uYXYnLAogICAgICAgICAgICAgICAgY29tcG9uZW50OiAnbmV3X3ZpZGVvJywKICAgICAgICAgICAgfV0pOwoKICAgICAgICAgICAgaWYgKHJlY29yZE9wdGlvbikgewogICAgICAgICAgICAgICAgd2luZG93Ll9fZmEucHVzaChbJ3RyYWNrRXZlbnQnLCB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ltcHJlc3Npb24nLAogICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogJ3RvcF9uYXYnLAogICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogJ3JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogcmVjb3JkT3B0aW9uLAogICAgICAgICAgICAgICAgfV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQo8L3NjcmlwdD4KCjxzY3JpcHQ+CiAgICAvKioKICAgICAqIFRoaXMgaXMgcGFydCBvZiBhbiBBQiBFeHBlcmltZW50CiAgICAgKiBFeHBlcmltZW50IGxpbms6IGh0dHBzOi8vdmltZW8uY29tL21vZHdvcmxkL2FibGluY29sbi81MjgKICAgICAqIEV4cGVyaW1lbnQgcGFyYW06IHNob3dfbXlfZHJhZnRzCiAgICAgKi8KICAgIHZhciBzaG93VmFyaWFudCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgc2hvd015RHJhZnRzOwogICAgICAgIGlmICh3aW5kb3cuQUJMaW5jb2xuICYmIHdpbmRvdy5BQkxpbmNvbG4uZ2V0VGVzdCgnSlMuVG9wbmF2Lk15RHJhZnRzJykuZ2V0KCdzaG93X215X2RyYWZ0cycsICdjb250cm9sJykgPT09ICd2YXJpYW50JykgewogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2LW1hbmFnZS1kcmFmdHMnKS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRlJyk7CiAgICAgICAgfQogICAgfTsKICAgIHNob3dWYXJpYW50KCk7Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgdmFyIGFycm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlY29yZF9hbmltYXRpb25fd3JhcHBlcicpOwogICAgICAgIHZhciBuZXdWaWRlb0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNvcmRfdGlwX3dyYXBwZXInKTsKCiAgICAgICAgaWYgKGFycm93KSB7CiAgICAgICAgICAgIGFycm93LmNsYXNzTGlzdC5hZGQoJ25vX2FuaW1hdGlvbicpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGlzSG92ZXJlZCA9IGZhbHNlOwoKICAgICAgICBpZiAobmV3VmlkZW9CdG4gJiYgZmFsc2UpIHsKICAgICAgICAgICAgbmV3VmlkZW9CdG4uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKGlzSG92ZXJlZCkgcmV0dXJuOwoKICAgICAgICAgICAgICAgIGlzSG92ZXJlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgaWYgKGFycm93KSB7CiAgICAgICAgICAgICAgICAgICAgYXJyb3cuY2xhc3NMaXN0LnJlbW92ZSgnbm9fYW5pbWF0aW9uJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RvcmVfcmVjb3JkX3RpcF9zZXR0aW5ncygxKTsKCiAgICAgICAgICAgIH0sIGZhbHNlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHN0b3JlX3JlY29yZF90aXBfc2V0dGluZ3ModmFsdWUpIHsKICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoKICAgICAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCAnL3NldHRpbmdzL25hdl9yZWNvcmRlcl90aXAnKTsKICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCAnWE1MSHR0cFJlcXVlc3QnKTsKICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsKICAgICAgICAgICAgeGhyLnNlbmQoJ3JlY29yZF9zY3JlZW5fdGlwX3N0YXRlPScgKyB2YWx1ZSArICcmdG9rZW49JyArIHZpbWVvLnhzcmZ0KTsKCiAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gaGFuZGxlLiBXZSBob3BlIGZvciB0aGUgYmVzdCBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH07CiAgICA8L3NjcmlwdD4KCgogICAgCjwhLS0gUmVzcG9uc2l2ZSBUb3AgTmF2IChFeHBsb3JlLCBMT0hQLCBXYXRjaCwgdGMpIC0tPgo8bmF2IGlkPSJ0b3BuYXZfbW9iaWxlIiBjbGFzcz0idG9wbmF2X21vYmlsZSAgICBuYXZfYmFyLS1saSIgcm9sZT0iYmFubmVyIj4KCiAgICA8ZGl2IGNsYXNzPSJ0b3BuYXZfbW9iaWxlX2JhciI+CiAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBkYXRhLWFjdGlvbj0ibWVudS5vcGVuIiBjbGFzcz0ibmF2YmFyX2hhbWJ1cmdlciBuYXZfYmFyX2ljb24gdG9wbmF2X21vYmlsZV9idXR0b24gdG9wbmF2X21vYmlsZV9wdWxsX2xlZnQganMtdG9wbmF2X21vYmlsZV9oZWFkZXJfbG9nbyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiPgogICAgICAgICAgICAgICAgPHRpdGxlPk1lbnU8L3RpdGxlPgogICAgICAgICAgICAgICAgPHBhdGggaWQ9IlJlY3RhbmdsZS00IiBkPSJNNyw4SDI1YTEsMSwwLDAsMSwxLDFoMGExLDEsMCwwLDEtMSwxSDdBMSwxLDAsMCwxLDYsOUg2QTEsMSwwLDAsMSw3LDhaIiAvPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTcsMTVIMjVhMSwxLDAsMCwxLDEsMWgwYTEsMSwwLDAsMS0xLDFIN2ExLDEsMCwwLDEtMS0xSDZBMSwxLDAsMCwxLDcsMTVaIi8+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNywyMkgyNWExLDEsMCwwLDEsMSwxaDBhMSwxLDAsMCwxLTEsMUg3YTEsMSwwLDAsMS0xLTFINkExLDEsMCwwLDEsNywyMloiLz4KICAgICAgICAgICAgPC9zdmc+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BuYXZfYWN0aW9uX2J1dHRvbnMiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iLy92aW1lby5jb20vc2VhcmNoIiBjbGFzcz0idG9wbmF2X21vYmlsZV9idXR0b24gdG9wbmF2X21vYmlsZV9wdWxsX3JpZ2h0IHRvcG5hdl9tb2JpbGVfaGVhZGVyX3NlYXJjaCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibmF2X2Jhcl9zZWFyY2hfaWNvbiBuYXZfYmFyX2ljb24iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMyIDMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlNlYXJjaDwvdGl0bGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi43NCwyNS4zMmwtNC41My00LjUzYTEsMSwwLDAsMC0uMjEtLjE0QTksOSwwLDEsMCwyMC42NSwyMmExLDEsMCwwLDAsLjE0LjIxbDQuNTMsNC41M2ExLDEsMCwwLDAsMS40MS0xLjQxWk0xNSwyMmE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNSwyMloiLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJjYXJ0X3RvcF9uYXZfbW9iaWxlIiBjbGFzcz0idG9wbmF2X2NhcnRfYnV0dG9uIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwhLS0gVmltZW8gTG9nbyAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2X2Jhcl90aXRsZSBqcy1uYXZfYmFyX3RpdGxlIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tIiBndG0tZGF0YS1jbGljaz0ibW9iaWxlX25hdl9ob21lX2xvZ29fY2xpY2siPgogICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0NDEgMTI0LjY4MiIgd2lkdGg9Ijg2cHgiIGhlaWdodD0iMjdweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEyMC40ODEsMjcuMzI2YzUuNDYyLDAsMTAuMTg4LTEuOTEsMTQuMTc0LTUuNzI4YzMuNTQ3LTMuMzc5LDUuMzkyLTYuOTA2LDUuNTQtMTAuNTgzYzAuMTQzLTIuNDkyLTAuODE1LTQuOTUxLTIuODgtNy4zNzhDMTM1LjI0NCwxLjIxNywxMzIuNjYyLDAsMTI5LjU2MiwwYy01LjMyLDAtMTAuMTU1LDEuNzY3LTE0LjUxMSw1LjI4OGMtNC4zNTYsMy41MjctNi42MDgsNy4yMDQtNi43NSwxMS4wMjJDMTA4LjAwMiwyMy42NTYsMTEyLjA2NywyNy4zMjYsMTIwLjQ4MSwyNy4zMjZ6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDM0LjA3OSw1MC4xNmMtNS4zMTktNi45MjUtMTMuMTQ1LTEwLjM5NS0yMy40NzUtMTAuMzk1Yy0xNi4wOTcsMC0yOS40NTUsNS44OTYtNDAuMDgzLDE3LjY4OGMtOS45MDIsMTAuNjE0LTE0LjQ3OCwyMi4yNjUtMTMuNzMzLDM0Ljk0NGMwLjA0OSwwLjkzMiwwLjEzMiwxLjg0LDAuMjI5LDIuNzM4Yy0wLjU1NCwwLjI0MS0xLjA5MywwLjQ4My0xLjY2MiwwLjcyNGMtMTIuNTU2LDUuNDExLTI0LjE0Nyw4LjExLTM0Ljc3NSw4LjExYy01LjMyLDAtOS4zMDctMS44MzktMTEuOTYtNS41MjFjMTQuMzE2LTIuMzU1LDI2LjIwNi03Ljg3NiwzNS42NjItMTYuNTY4YzguODU0LTcuOTU1LDEyLjk4OS0xNS42ODksMTIuNC0yMy4xOTdjLTAuODg3LTExLjc4LTguNTYyLTE3LjY3Ni0yMy4wMzQtMTcuNjc2Yy0xNS42NSwwLTI5LjIzNSw1LjkwOS00MC43NSwxNy43MTRjLTEwLjQ4NCwxMC43ODMtMTUuODA1LDIyLjE0OC0xNS45NDcsMzQuMTAzYy0wLjA0LDIuMDA1LDAuMDY2LDMuOTMyLDAuMyw1Ljc4OWMtMi40NzcsMS42MzItNC4zNTIsMi40NTYtNS42MTMsMi40NTZjLTIuODEsMC00LjU3Ni0wLjU4Mi01LjMxNC0xLjc2Yy0wLjczNy0xLjE3OC0xLjAzNS0zLjMwOC0wLjg4Ny02LjQwMWMwLTEuMTc4LDAuOTE5LTUuNjk1LDIuNzcxLTEzLjU2NWMxLjg0NS03Ljg3LDIuODQxLTEzLjg2NCwyLjk5LTE3Ljk4N2MwLjI5MS02LjAyNS0wLjg5NC0xMC42Ni0zLjU0Ny0xMy44OTZjLTMuMTAxLTMuOTc0LTguMTk0LTUuNjYzLTE1LjI4MS01LjA3NGMtNS45MDIsMC40NDctMTEuNTkyLDIuNjYtMTcuMDU0LDYuNjQ3Yy0zLjI0OSwyLjM2My02LjU2OSw1LjUzNC05Ljk2MSw5LjUyMWMtMS4xODUsMS4wMzYtMi4yOTEsMi0zLjMyNywyLjg4YzAuMTQzLTYuMDUxLTEuMDM2LTEwLjcwNS0zLjU0LTEzLjk1NGMtMy4xMDctMy45ODctOC4yNzItNS42ODMtMTUuNTA4LTUuMDk0Yy04LjQxNSwwLjczOC0xNi4wMiw0LjA2NS0yMi44MDksOS45NjdjLTIuOTU4LDIuNTExLTUuNTQsNS40NjktNy43NTMsOC44NjFjMC4yOTEtMS4zMjcsMC40NC0yLjczMSwwLjQ0LTQuMjA3YzAtNC41NzYtMS4xODUtOC42MDItMy41NDctMTIuMDcxcy01LjQ2Mi01LjA1NS05LjMwMS00Ljc1N2MtMi4yMTMsMC4xNDktNi40MiwzLjEwMS0xMi42MjEsOC44NTRjLTguNTY5LDcuOTc0LTEzLjIxNiwxMi4yNTktMTMuOTU0LDEyLjg0MWw1LjMxMyw1Ljk4YzQuMTM2LTIuOTg0LDYuNjQ3LTQuNDc5LDcuNTM0LTQuNDc5YzEuNjE4LDAsMi4yODUsMS4zMjcsMS45OTQsMy45NzVjLTAuMTQzLDMuODMxLTAuODIyLDkuMTY0LTIuMDM5LDE2LjAxMmMtMC43NTQsNC4yNDMtMS4yOTgsNy45MDQtMS42MzgsMTAuOTg4Yy0wLjA2NiwwLjA1NS0wLjEyOSwwLjEwOS0wLjE5NiwwLjE2NGMtNS4zMiw0LjM3NS05LjAwOSw2LjU1Ni0xMS4wNzQsNi41NTZjLTQuNzI1LDAtNy4wMTYtMy4xNTgtNi44NjctOS40ODhjMi4yMTMtMTMuODI0LDQuMjg1LTI1LjIyMiw2LjIwNy0zNC4xOTljMC41ODMtNS4yOTQtMC4yNjYtOS41OTItMi41NS0xMi45MDZjLTIuMjkxLTMuMzE0LTUuODctNC43NDQtMTAuNzM3LTQuMzA0Yy0zLjEwNywwLjI5OC03LjgzMiwzLjI0OS0xNC4xODEsOC44NmMtMi4yMDUsMi00LjQxLDMuOTk2LTYuNjE1LDUuOTkzYy0wLjQzNy0xMC40NDctNS4yMDQtMTUuODIyLTE0LjMyOS0xNi4wOWMtMTMuNjY5LTAuNDQtMjIuOTMxLDcuMjc1LTI3Ljc3OSwyMy4xNThjMi41MDQtMS4wNzQsNC45MzgtMS42MTgsNy4zMDEtMS42MThjNS4wMTYsMCw3LjIyOSwyLjgyMiw2LjY0LDguNDUzYy0wLjI5NywzLjQxMS0yLjUxMSw4LjM3NS02LjY0LDE0Ljg5OWMtNC4xMzYsNi41MjMtNy4yMzYsOS43ODYtOS4zMDEsOS43ODZjLTIuNjYsMC01LjA5NC01LjAyMy03LjMwNy0xNS4wODFjLTAuNzQ1LTIuOTUxLTIuMDcxLTEwLjQ5MS0zLjk4Ny0yMi42MTRjLTEuNzczLTExLjIzNi02LjQ5OS0xNi40ODUtMTQuMTc0LTE1Ljc0N2MtMy4yNDksMC4yOTgtOC4xMjMsMy4yNDktMTQuNjE0LDguODZDOS42NjksNTMuMzE4LDQuODY3LDU3LjU5NywwLDYxLjg3NWw0LjY0MSw1Ljk4YzQuNDItMy4wOTQsNy4wMDMtNC42NDcsNy43NDEtNC42NDdjMy4zODUsMCw2LjU1LDUuMzEzLDkuNTAxLDE1LjkyOWMyLjY1Myw5LjczMyw1LjMwNywxOS40NjgsNy45NjEsMjkuMjAyYzMuOTc0LDEwLjYyMSw4Ljg0MSwxNS45MjksMTQuNTg4LDE1LjkyOWM5LjI4MSwwLDIwLjYyNy04LjcxOSwzNC4wMzgtMjYuMTU0Qzg3Ljg5Miw4NS45ODcsOTMuOTksNzUuNzQsOTYuOCw2Ny4zNTRjMy43Mi0yLjc0OCw2LjAxOC00LjE0Niw2Ljg1My00LjE0NmMyLjY1MywwLDMuOTg3LDEuOTIyLDMuOTg3LDUuNzU0YzAsMC43MzgtMS40NDMsNi4yLTQuMzI0LDE2LjM4MWMtMi44OCwxMC4xODItNC4zOTUsMTcuNzA5LTQuNTM3LDIyLjU3NWMtMC4xNDksNC43MjYsMC45OTcsOC41NTcsMy40MywxMS41MDhjMi40MzQsMi45NTIsNS45NDEsNC40MjgsMTAuNTI0LDQuNDI4YzkuODksMCwxOS43NzktNC4yNzgsMjkuNjc1LTEyLjgzNWMwLjg4MS0wLjc3MiwxLjczOC0xLjU1NywyLjU3My0yLjM1MmMwLjc4MywzLjMxMiwyLjEyNCw2LjA0NSw0LjA3LDguMTVjNC4yNTksNC41NjksMTEuNDU2LDYuNzA2LDIxLjU5Miw2LjQwOGMtMS4zNTMtMy4yNDktMS44ODQtOS4wMDMtMS41ODYtMTcuMjc0YzAuNDQtOS4xNTIsMi44MDktMTcuOTQxLDcuMDk0LTI2LjM1NXM4LjI3OC0xMi42MjcsMTEuOTgtMTIuNjI3YzQuMjg1LDAsNi4yODUsMi43MzEsNS45ODcsOC4xOTNjLTAuMTQ5LDMuNjk2LTAuODc0LDcuOTAzLTIuMTc1LDEyLjYyOGMtMS4zMDcsNC43MjUtMi4wMzIsOS40NDktMi4xNzQsMTQuMTc0Yy0wLjI5OCw3LjUzNCwxLjM5MiwxMi45MTksNS4wODEsMTYuMTY4YzQuMTE2LDMuNjg5LDExLjMzNCw1LjM5MiwyMS42MzgsNS4wOTRjLTEuNTQxLTMuMzkyLTIuMTYyLTguMjY2LTEuODY0LTE0LjYyMWMwLjQ0LTkuMDAzLDMuNDgyLTE4LjMwNCw5LjExMy0yNy45MDJjNS4zMzMtOS4xNTEsOS45MjItMTMuNzMzLDEzLjc3Mi0xMy43MzNjMy41NiwwLDUuMjYzLDIuODA5LDUuMTEzLDguNDE0Yy0wLjE0OCwzLjY4OC0xLjA3NCw4Ljg1NC0yLjc3MSwxNS40OTRjLTEuNjk1LDYuNjQxLTIuNjIxLDEyLjMxNi0yLjc2NCwxNy4wNDFjLTAuMjk3LDEwLjYyOCw0LjM1LDE1LjkzNiwxMy45NTUsMTUuOTM2YzkuODg5LDAsMTkuNzc5LTQuMjc4LDI5LjY3NS0xMi44MzVjMC4xNjQtMC4xNDQsMC4zMTYtMC4yOTMsMC40NzktMC40MzhjMC4zNCwwLjU4NiwwLjY4OCwxLjE2OCwxLjA2OCwxLjczMmM1LjE2NSw3Ljk2NywxMy43MzQsMTEuOTU0LDI1LjY5NSwxMS45NTRjMTYuMDksMCwzMS45NjYtNC40OTIsNDcuNjE2LTEzLjQ4OGMxLjc1Ni0wLjk5LDMuNDIyLTEuOTc5LDUuMDE3LTIuOTdjMC45ODYsMS45OTEsMi4xMzgsMy44NjYsMy41MDIsNS41OTFjNi4wNTIsNy41MjEsMTQuOTEyLDExLjI4MSwyNi41NzUsMTEuMjgxYzE0LjAyNSwwLDI1Ljc2Ny00LjkzOCwzNS4yMTYtMTQuODE1YzkuNDQ5LTkuODc2LDE0LjQ2Ni0yMS41OTgsMTUuMDYxLTM1LjE2M0M0NDEuMzg3LDY0LjY4NCw0MzkuMTAyLDU2LjUwMyw0MzQuMDc5LDUwLjE2eiBNMzA1LjExOCw5MC4wMDNjLTAuMDg0LTEuOTA5LTAuMDg0LTIuODY3LDAtMi44NjdjMC4xNDMtNS41NzksMi41MDUtMTEuNDE3LDcuMDc0LTE3LjUxNHM5LjA2Mi05LjE0NiwxMy40ODgtOS4xNDZjMy4zOTIsMCw1LjAxLDEuOTg3LDQuODY3LDUuOTQ4Yy0wLjE0OSwyLjkzOC0yLjM2Miw2Ljc2NC02LjYzNCwxMS40NjJDMzE4LjYwNiw4My4zMjQsMzEyLjM0MSw4Ny4zNjIsMzA1LjExOCw5MC4wMDN6IE00MTUuOTE4LDczLjg2OGMtMC4yOTcsNy4xLTIuNDM0LDEzLjkwMi02LjQyLDIwLjQxM2MtNC43MjUsNy44NDUtMTAuNDE0LDExLjc2LTE3LjA1NSwxMS43NmMtMi45NTgsMC01LjI0OS0xLjYyNC02Ljg2Ny00Ljg4Yy0xLjQ3Ni0yLjgwOS0yLjE0Mi02LjA2NC0xLjk5My05Ljc2N2MwLjI5MS03LjU0LDIuNTA1LTE0LjY0LDYuNjQ3LTIxLjNjNC44NjYtOC4xMzYsMTEuMDY3LTEyLjIwNywxOC42MDEtMTIuMjA3YzIuMzU2LDAsNC4xNjgsMS42Nyw1LjQyNCw0Ljk5N1M0MTYuMDY3LDY5Ljg3NSw0MTUuOTE4LDczLjg2OHoiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9tb2JpbGVfbWVudSBqcy10b3BuYXZfbW9iaWxlX21lbnVfbWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0idG9wbmF2X21vYmlsZV9iYXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGRhdGEtZ3RtLWNsaWNrPSJtb2JpbGVfbmF2X21lbnVfY2xvc2VfY2xpY2siIGNsYXNzPSJtZW51X2Nsb3NlIHB1bGxfbGVmdCBqcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9jbG9zZSI+CiAgICAgICAgICAgICAgICA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxMC40OXB4IgogICAgICAgICAgICAgICAgCSBoZWlnaHQ9IjEwLjQ5cHgiIHZpZXdCb3g9IjAgMCAxMC40OSAxMC40OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAuNDkgMTAuNDk7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJjbG9zZV8xXyI+CiAgICAgICAgICAgICAgICAJPGc+CiAgICAgICAgICAgICAgICAJCTxnIGlkPSJHcm91cF8xXyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNi41MDAwMDAsIDYuNTAwMDAwKSI+CiAgICAgICAgICAgICAgICAJCQk8cGF0aCBpZD0iUmVjdGFuZ2xlLTRfMV8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiNGRkZGRkY7IiBkPSJNMy42OS02LjIxTDMuNjktNi4yMWMwLjM5LDAuMzksMC4zOSwxLjAyLDAsMS40MWwtOC40OSw4LjQ5CiAgICAgICAgICAgICAgICAJCQkJYy0wLjM5LDAuMzktMS4wMiwwLjM5LTEuNDEsMGwwLDBjLTAuMzktMC4zOS0wLjM5LTEuMDIsMC0xLjQxbDguNDktOC40OUMyLjY3LTYuNiwzLjMtNi42LDMuNjktNi4yMXoiLz4KICAgICAgICAgICAgICAgIAkJCTxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiNGRkZGRkY7IiBkPSJNLTYuMjEtNi4yMUwtNi4yMS02LjIxYzAuMzktMC4zOSwxLjAyLTAuMzksMS40MSwwbDguNDksOC40OWMwLjM5LDAuMzksMC4zOSwxLjAyLDAsMS40MWwwLDAKICAgICAgICAgICAgICAgIAkJCQljLTAuMzksMC4zOS0xLjAyLDAuMzktMS40MSwwbC04LjQ5LTguNDlDLTYuNi01LjE4LTYuNi01LjgyLTYuMjEtNi4yMXoiLz4KICAgICAgICAgICAgICAgIAkJPC9nPgogICAgICAgICAgICAgICAgCTwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8L2J1dHRvbj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uPSJtZW51LnNldHRpbmdzLm9wZW4iCiAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0ibW9iaWxlX25hdl9zZXR0aW5nc19jbGljayIKICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnNldHRpbmdzIgogICAgICAgICAgICAgICAgY2xhc3M9Im1lbnVfc2V0dGluZ3MgcHVsbF9yaWdodCBqcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9zZXR0aW5ncyIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTguODZweCIKICAgICAgICAgICAgICAgIAkgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMTguODYgMjAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE4Ljg2IDIwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iZ2Vhcl8xXyI+CiAgICAgICAgICAgICAgICAJPGc+CiAgICAgICAgICAgICAgICAJCTxnIGlkPSJJY29uXzFfIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1LjAwMDAwMCwgNS4wMDAwMDApIj4KICAgICAgICAgICAgICAgIAkJCTxnIGlkPSJHcm91cC0xMF8xXyI+CiAgICAgICAgICAgICAgICAJCQk8L2c+CiAgICAgICAgICAgICAgICAJCTwvZz4KICAgICAgICAgICAgICAgIAkJPHBhdGggaWQ9IkNvbWJpbmVkLVNoYXBlXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTEyLDQuNThsLTAuNTctMC4yN1YxLjk5YzAtMC41NC0wLjQ1LTAuOTktMS0wLjk5aC0yYy0wLjU1LDAtMSwwLjQ1LTEsMC45OXYyLjMxCiAgICAgICAgICAgICAgICAJCQlMNi44Niw0LjU4Yy0wLjI5LDAuMTQtMC41NywwLjMtMC44NCwwLjQ4TDUuNSw1LjQyTDMuNDksNC4yNkMzLjAyLDMuOTksMi40MSw0LjE2LDIuMTQsNC42M2wtMSwxLjc0CiAgICAgICAgICAgICAgICAJCQlDMC44Niw2Ljg0LDEuMDIsNy40NiwxLjQ5LDcuNzNMMy41LDguODlMMy40NSw5LjUyQzMuNDQsOS42OCwzLjQzLDkuODQsMy40MywxMHMwLjAxLDAuMzIsMC4wMiwwLjQ4bDAuMDUsMC42M2wtMi4wMSwxLjE2CiAgICAgICAgICAgICAgICAJCQljLTAuNDcsMC4yNy0wLjYzLDAuODgtMC4zNiwxLjM2bDEsMS43NGMwLjI3LDAuNDgsMC44OSwwLjY0LDEuMzYsMC4zN2wyLjAxLTEuMTZsMC41MiwwLjM2YzAuMjcsMC4xOCwwLjU1LDAuMzUsMC44NCwwLjQ4CiAgICAgICAgICAgICAgICAJCQlsMC41NywwLjI3djIuMzFjMCwwLjU0LDAuNDUsMC45OSwxLDAuOTloMmMwLjU1LDAsMS0wLjQ1LDEtMC45OXYtMi4zMUwxMiwxNS40MmMwLjI5LTAuMTQsMC41Ny0wLjMsMC44NC0wLjQ4bDAuNTItMC4zNgogICAgICAgICAgICAgICAgCQkJbDIuMDEsMS4xNmMwLjQ3LDAuMjcsMS4wOCwwLjExLDEuMzYtMC4zN2wxLTEuNzRjMC4yNy0wLjQ4LDAuMTEtMS4wOS0wLjM2LTEuMzZsLTIuMDEtMS4xNmwwLjA1LTAuNjMKICAgICAgICAgICAgICAgIAkJCWMwLjAxLTAuMTYsMC4wMi0wLjMyLDAuMDItMC40OHMtMC4wMS0wLjMyLTAuMDItMC40OGwtMC4wNS0wLjYzbDIuMDEtMS4xNmMwLjQ3LTAuMjcsMC42My0wLjg4LDAuMzYtMS4zNmwtMS0xLjc0CiAgICAgICAgICAgICAgICAJCQljLTAuMjctMC40OC0wLjg5LTAuNjQtMS4zNi0wLjM3bC0yLjAxLDEuMTZsLTAuNTItMC4zNkMxMi41Nyw0Ljg4LDEyLjI5LDQuNzIsMTIsNC41OHoiLz4KICAgICAgICAgICAgICAgIAkJPGNpcmNsZSBpZD0iT3ZhbF8xXyIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I0ZGRkZGRjtzdHJva2Utd2lkdGg6MjsiIGN4PSI5LjQzIiBjeT0iMTAiIHI9IjIiLz4KICAgICAgICAgICAgICAgIAk8L2c+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgPHVsIGlkPSJtZW51X2xpc3QiIGNsYXNzPSJtZW51X2xpc3RfbG9nZ2VkX291dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpqb2luIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9qb2luX2NsaWNrIiBpZD0ianMtam9pbi1saW5rIiBocmVmPSIvL3ZpbWVvLmNvbS9qb2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl9qb2luIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTZweCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAwIDE2IDIwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNiAyMDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPSJqb2luLWxvZy1pbl8xXyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbC04XzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgY3g9IjgiIGN5PSI1IiByPSI0Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD0iUmVjdGFuZ2xlLTI1XzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTEsMTloMTR2LTNjMC0yLjIxLTEuNzktNC00LTRINWMtMi4yMSwwLTQsMS43OS00LDRWMTl6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSm9pbiBvciBsb2cgaW4gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhICBpZD0ianMtZmVhdHVyZXMtbGluayIgY2xhc3M9ImZlYXR1cmVzLWxhYmVsIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibWVudV9pY29uX2hvc3QiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDIwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9ImZlYXR1cmVzXzFfIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iR3JvdXAtMl8xXyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMi4wMDAwMDAsIDIuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9IlJlY3RhbmdsZS04XzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTEtMWgxMGMxLjEsMCwyLDAuOSwyLDJ2MTBjMCwxLjEtMC45LDItMiwySDFjLTEuMSwwLTItMC45LTItMlYxQy0xLTAuMS0wLjEtMSwxLTF6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9IlBhdGgtNV8xXyIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0ZGRkZGRjsiIGQ9Ik0zLjYsMy41MWMwLTAuNTUsMC4zOS0wLjc3LDAuODYtMC41bDQuMjgsMi41YzAuNDcsMC4yOCwwLjQ4LDAuNzMsMCwxLjAxTDQuNDYsOS4wOAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDMy45OCw5LjM2LDMuNiw5LjE1LDMuNiw4LjU5TDMuNiwzLjUxeiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPSJHcm91cF8xXyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMy4wMDAwMDAsIDMuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPSJQYWdlLTFfMV8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiNGRkZGRkY7IiBkPSJNMTEsMTVjMi4yMSwwLDQtMS43OSw0LTRWMGMwLTEuMTEtMC45LTItMi0ydjEzYzAsMS4xLTAuOSwyLTIsMkgtMmMwLDEuMSwwLjg5LDIsMiwySDExeiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJyZWV6ZS1pZ25vcmUgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDp2aWRlb19wbGF5ZXIiIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2ZlYXR1cmVzX3ZpZGVvX3BsYXllciIgaHJlZj0iLy92aW1lby5jb20vZmVhdHVyZXMvdmlkZW8tcGxheWVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8gcGxheWVyICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJyZWV6ZS1pZ25vcmUgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpsaXZlX3N0cmVhbWluZyIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfZmVhdHVyZXNfbGl2ZV9zdHJlYW1pbmciIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL2xpdmVzdHJlYW1pbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibWVudV9pY29uX3VwbG9hZCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjIwcHgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAyMCAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjAgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXZlIHN0cmVhbWluZyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOnRvcF9uYXZ8Y29tcG9uZW50OnN0b2NrIiAiIGhyZWY9Ii8vdmltZW8uY29tL3N0b2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvY2sgdmlkZW9zICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJyZWV6ZS1pZ25vcmUgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6dG9wX25hdnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpwcml2YWN5IiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9mZWF0dXJlc19wcml2YWN5IiBocmVmPSIvL3ZpbWVvLmNvbS9mZWF0dXJlcy92aWRlby1wcml2YWN5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaXZhY3kgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOmRpc3RyaWJ1dGlvbiIgZGF0YS1ndG0tY2xpY2s9InRvcF9uYXZfZmVhdHVyZXNfZGlzdHJpYnV0aW9uIiBocmVmPSIvL3ZpbWVvLmNvbS9mZWF0dXJlcy92aWRlby1tYXJrZXRpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ibWVudV9pY29uX3VwbG9hZCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjIwcHgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAyMCAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjAgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRpb24gJiBNYXJrZXRpbmcgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOmhvc3RpbmciIGRhdGEtZ3RtLWNsaWNrPSJ0b3BfbmF2X2ZlYXR1cmVzX2hvc3RpbmciIGhyZWY9Ii8vdmltZW8uY29tL2ZlYXR1cmVzL29ubGluZS12aWRlby1ob3N0aW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdGluZyAmIE1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDppbnNwaXJhdGlvbnxrZXl3b3JkOndhdGNoIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl9pbnNwaXJhdGlvbl93YXRjaCIgaWQ9ImpzLWluc3BpcmF0aW9uLWxpbmsiICBocmVmPSIvL3ZpbWVvLmNvbS93YXRjaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJtZW51X2ljb25fd2F0Y2giIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNHB4IiB2aWV3Qm94PSIwIDAgMjAgMTQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Imluc3BpcmF0aW9uXzFfIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iR3JvdXBfMV8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuMDAwMDAwLCA2LjAwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPSJPdmFsXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lam9pbjpyb3VuZDsiIGQ9Ik03LDdjMy4zMSwwLDYuMzEtMiw5LTZjLTIuNjktNC01LjY5LTYtOS02UzAuNjktMy0yLDFDMC42OSw1LDMuNjksNyw3LDd6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbC0yXzFfIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkZGRkZGOyIgY3g9IjciIGN5PSIxIiByPSIzIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGlyYXRpb24gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnJlZXplLWlnbm9yZSBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGtleXdvcmQ6dXBsb2FkIiBkYXRhLWd0bS1jbGljaz0idG9wX25hdl91cGxvYWRfY2xpY2siIGlkPSJqcy11cGxvYWQtbGluayIgaHJlZj0iLy92aW1lby5jb20vdXBsb2FkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im1lbnVfaWNvbl91cGxvYWQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMjAgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9InVwbG9hZF8xXyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMDAwMDAwLCAxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9IkNvbWJpbmVkLVNoYXBlXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgZD0iTTAsMTBjMCwyLjE3LDEuOTYsNCw0LDRoMTBjMi4wNCwwLDQtMS43Niw0LTMuOTRjMC0xLjc5LTAuOC0zLjI4LTEuOTktNC4wNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMxNi4wMSwxLjc5LDEzLjQ5LDAsMTEsMEM5LjA4LDAsNy4yNCwxLjE5LDYuNTksM0MzLjgyLDMuMDEsMi41Nyw0LjcxLDIuMDcsNi41MkMxLjA4LDcuMDIsMCw4LjI2LDAsMTB6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlXzFfIiB4PSI4IiB5PSI4IiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkZGRkZGOyIgd2lkdGg9IjIiIGhlaWdodD0iNiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvbHlsaW5lIGlkPSJQYXRoLTEzXzFfIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoyOyIgcG9pbnRzPSI2LDEwIDksNyAxMiwxMCAgICAgICAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjp0b3BfbmF2fGNvbXBvbmVudDp1cGdyYWRlIiBkYXRhLWd0bS1jbGljaz0ibW9iaWxlX25hdl91cGdyYWRlX2NsaWNrIiBpZD0gImpzLXVwZ3JhZGUtbGluayIgY2xhc3M9IiIgaHJlZj0iLy92aW1lby5jb20vdXBncmFkZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJtZW51X2ljb25fdXBncmFkZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIzMnB4IiBoZWlnaHQ9IjMycHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0LDdIMTVWOWg2LjU4TDcuMjksMjMuMjlsMS40MSwxLjQxTDIzLDEwLjQxVjE3aDJWOEExLDEsMCwwLDAsMjQsN1oiIGZpbGw9IiNmZmZmZmYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwZ3JhZGUgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgIDwvZGl2PgoKICAgICAgICA8c2VjdGlvbiBjbGFzcz0idG9wbmF2X21vYmlsZV9tZW51IHRvcG5hdl9tb2JpbGVfbWVudV9zZXR0aW5ncyBqcy10b3BuYXZfbW9iaWxlX21lbnVfc2V0dGluZ3MiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9tb2JpbGVfYmFyIHN1Ym1lbnUiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0b3BuYXZfbW9iaWxlX2J1dHRvbiB0b3BuYXZfbW9iaWxlX3B1bGxfbGVmdCBqcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9zZXR0aW5zX2Nsb3NlIHRvcG5hdl9pY29uX21vYmlsZV9hcnJvd2xlZnRfYiI+IDwvYnV0dG9uPgogICAgICAgICAgICA8aDEgY2xhc3M9InRvcG5hdl9tb2JpbGVfaGVhZGVyX3RpdGxlIHN1Ym1lbnUiPk1vcmUgc3R1ZmY8L2gxPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8dWwgY2xhc3M9Im1lbnVfbGlzdF9zZXR0aW5nc19sb2dnZWRfb3V0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0ibWVudS5jbG9zZSIgY2xhc3M9IiAiIGhyZWY9Ii8vdmltZW8uY29tL3Rlcm1zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1zIG9mIFNlcnZpY2UgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0ibWVudS5jbG9zZSIgY2xhc3M9IiAiIGhyZWY9Ii8vdmltZW8uY29tL3ByaXZhY3kiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdmFjeSBQb2xpY3kgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0ibWVudS5jbG9zZSIgY2xhc3M9IiAiIGhyZWY9Ii8vdmltZW8uY29tL2RtY2EiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1hY3Rpb249Im1lbnUuY2xvc2UiIGNsYXNzPSIgIiBocmVmPSIvL3ZpbWVvLmNvbS9jb29raWVfcG9saWN5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvb2tpZXMgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWFjdGlvbj0iZGVza3RvcCIgb25jbGljaz0idmltZW8ubW9iaWxlLmRlc2t0b3Bfc2hhcmVkLl9zMmRzKCk7IHJldHVybiBmYWxzZSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2t0b3Agc2l0ZSAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGxhbmd1YWdlIGhyZWY9IiMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG9uY2hhbmdlPSJ2aW1lby5tb2JpbGUuZGVza3RvcF9zaGFyZWQuX3MybCh0aGlzKSIgdGl0bGU9IkNob29zZSBhIGRpZmZlcmVudCBsYW5ndWFnZSIgY2xhc3M9InRvcG5hdl9tb2JpbGVfbWVudV9zZXR0aW5nc19sYW5ndWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGNsYXNzPSJzZWxlY3RlZCIgc2VsZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InNlbGVjdF9sYW5ndWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZ2xpc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc3Bhw7FvbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iZGUtREUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InNlbGVjdF9sYW5ndWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldXRzY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImZyLUZSIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFuw6dhaXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImphLUpQIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDml6XmnKzoqp4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9InB0LUJSIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RfbGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0dWd1w6pzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJrby1LUiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0ic2VsZWN0X2xhbmd1YWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg7ZWc6rWt7Ja0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBjbGFzcz0iICIgaHJlZj0iLy92aW1lby5jb20vZmFxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBUSAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYWN0aW9uPSJtZW51LmNsb3NlIiBjbGFzcz0iICIgaHJlZj0iLy92aW1lby5jb21oZWxwLnZpbWVvLmNvbS9oYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWxwICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KCgogICAgICAgIDxkaXYgY2xhc3M9InRvcG5hdl9tb2JpbGVfbWVudV9jb3B5cmlnaHQiPlRNICsgwqkgMjAyMCBWaW1lbywgSW5jLjwvZGl2PgogICAgPC9zZWN0aW9uPgoKCiAgICAgICAgPC9uYXY+Cgo8c2NyaXB0PgooZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCl7CgogICAgLy8gR2xvYmFsIHZhbHVlcwogICAgd2luZG93LnZpbWVvID0gd2luZG93LnZpbWVvIHx8IHt9OwogICAgdmltZW8ubW9iaWxlID0gdmltZW8ubW9iaWxlIHx8IHt9OwogICAgVmltZW8gPSB2aW1lby5tb2JpbGUgfHwge307CiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZCA9IFZpbWVvLmRlc2t0b3Bfc2hhcmVkIHx8IHt9OwoKICAgIC8vIERFU0tUT1AgSEFORExFUlMKCiAgICB2YXIgZGVza3RvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3BuYXZfZGVza3RvcCcpOwoKICAgIC8vIFByZXZlbnQgdG91Y2ggZGV2aWNlIHRvIGhpZ3RsaWdodCB0aGUgYXJlYSB0YXBwZWQKICAgIGRlc2t0b3AuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpewogICAgICAgIC8vIFRha2UgaW50byBjb25zaWRlcmF0aW9uIGF2YXRhciBpbWcKICAgICAgICB2YXIgdGFyZ2V0ID0gKGUudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ltZycpID8gZS50YXJnZXQucGFyZW50Tm9kZSA6IGUudGFyZ2V0OwoKICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndG9wbmF2X2hhc19kcm9wZG93bicpKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB9CiAgICB9LCBmYWxzZSk7CgogICAgLy8gQWRkIGxhc3RfcGFnZSBjb29raWUKICAgIHZhciBsaXN0ZW4gPSAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgPyAndG91Y2hzdGFydCcgOiB3aW5kb3cuUG9pbnRlckV2ZW50ID8gJ3BvaW50ZXJkb3duJyA6IHdpbmRvdy5NU1BvaW50ZXJFdmVudCA/ICdNU1BvaW50ZXJEb3duJyA6ICdjbGljayc7CiAgICBkZXNrdG9wLmFkZEV2ZW50TGlzdGVuZXIobGlzdGVuLCBmdW5jdGlvbihlKXsKICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdqcy10b3BuYXZfbWVudV9hdXRoJykpIHsKICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gJ2xhc3RfcGFnZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSkgKyAnO3BhdGg9XCcvXCc7bWF4LWFnZT0xODAwOyc7CiAgICAgICAgfQogICAgfSwgZmFsc2UpOwoKICAgIC8vIE1PQklMRSBIQU5ETEVSUwoKICAgIC8vIFRyaWdnZXIgaU9TIFVwbG9hZCBmbG93CiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZC5fdXBsb2FkID0gZnVuY3Rpb24oZSkgewogICAgICAgIC8vIHNob3cgaVR1bmVzIG9ubHkgaWYgd2UgYXJlIGluIGlPUyB3b3JsZAogICAgICAgIGlmICgvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7CiAgICAgICAgICAgIHZhciBkZWVwbGluayA9ICd2aW1lbzovL2FwcC52aW1lby5jb20vdXBsb2FkP3JlZj1tb2JpbGV3ZWInLAogICAgICAgICAgICAgICAgZmFsbGJhY2sgPSAnL3VwbG9hZCcsCiAgICAgICAgICAgICAgICB3ZWJraXRIaWRkZW5DYWxsYmFjaywKICAgICAgICAgICAgICAgIGhpdENhbGxiYWNrOwoKICAgICAgICAgICAgLy8gQ2FsbGJhY2tzCiAgICAgICAgICAgIHdlYmtpdEhpZGRlbkNhbGxiYWNrID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBpcyBzdGlsbCBoZXJlIG9wZW4gdGhlIHVybCBwYWdlLgogICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC53ZWJraXRIaWRkZW4pIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBmYWxsYmFjazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIC8vIFRyeSB0byBvcGVuIHRoZSBWaW1lbyBBcHAKICAgICAgICAgICAgaGl0Q2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGRlZXBsaW5rOwogICAgICAgICAgICAgICAgc2V0VGltZW91dCh3ZWJraXRIaWRkZW5DYWxsYmFjaywgMjUpOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgaGl0Q2FsbGJhY2soKTsKCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGUuaHJlZjsKCiAgICB9CgoKLy8gQUZURVIgTU9CSUxFIE5BViBURVNUIFJFQ09OQ0lMRSBXSVRIIFRIRSBgbW9iaWxlX21lbnVfc2NyaXB0LnBodG1sYAovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTd2l0Y2ggdG8gZGVza3RvcCBzaXRlCiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZC5fczJkcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRvY3VtZW50LmNvb2tpZT0nb3B0X291dF9tb2JpbGU9MTtleHBpcmVzPUZyaSwgMzEgRGVjIDk5OTkgMjM6NTk6NTkgR01UO2RvbWFpbj0nICsgdmltZW8uZG9tYWluOwogICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgIH07CgogICAgLy8gU3dpdGNoIHRvIGxhbmd1YWdlCiAgICBWaW1lby5kZXNrdG9wX3NoYXJlZC5fczJsID0gZnVuY3Rpb24oc2VsKSB7CiAgICAgICAgdmFyIGxhbmcgPSBzZWwudmFsdWUsCiAgICAgICAgICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoKICAgICAgICB4aHIub3BlbignUE9TVCcsICcvc2V0dGluZ3MvbG9jYWxlJyk7CiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCAnWE1MSHR0cFJlcXVlc3QnKTsKICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwogICAgICAgIHhoci5zZW5kKCdsb2NhbGU9JyArIGxhbmcgKyAnJnRva2VuPScgKyB2aW1lby54c3JmdCk7CiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIHBvc3QoKSB7CiAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9OwoKICAgIHZhciBtb2JpbGVNZW51RWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXRvcG5hdl9tb2JpbGVfaGVhZGVyX2xvZ28nKTsKICAgIGlmIChtb2JpbGVNZW51RWxlKSB7CiAgICAgICAgbW9iaWxlTWVudUVsZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKCiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgLy8gT3BlbiBNZW51CiAgICAgICAgICAgIHZhciBtb2JpbGVfbWVudV9tYWluID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXRvcG5hdl9tb2JpbGVfbWVudV9tYWluJyk7CiAgICAgICAgICAgIG1vYmlsZV9tZW51X21haW4uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CgogICAgICAgICAgICAvLyBDbG9zZSBNZW51CiAgICAgICAgICAgIHZhciBtb2JpbGVfaGVhZGVyX2Nsb3NlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXRvcG5hdl9tb2JpbGVfaGVhZGVyX2Nsb3NlJyk7CiAgICAgICAgICAgIG1vYmlsZV9oZWFkZXJfY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfbWFpbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIFRvZ2dsZSBTZXR0aW5ncwogICAgICAgICAgICB2YXIgbW9iaWxlX21lbnVfc2V0dGluZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9tZW51X3NldHRpbmdzJyk7CiAgICAgICAgICAgIHZhciB0b3BuYXYyMDE1X21vYmlsZV9oZWFkZXJfc2V0dGluZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9oZWFkZXJfc2V0dGluZ3MnKTsKICAgICAgICAgICAgdG9wbmF2MjAxNV9tb2JpbGVfaGVhZGVyX3NldHRpbmdzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIG1vYmlsZV9tZW51X3NldHRpbmdzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfbWFpbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgICAgdmFyIHRvcG5hdjIwMTVfbW9iaWxlX2hlYWRlcl9zZXR0aW5nc19jbG9zZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy10b3BuYXZfbW9iaWxlX2hlYWRlcl9zZXR0aW5zX2Nsb3NlJyk7CiAgICAgICAgICAgICAgICB0b3BuYXYyMDE1X21vYmlsZV9oZWFkZXJfc2V0dGluZ3NfY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfc2V0dGluZ3Muc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICAgICAgICBtb2JpbGVfbWVudV9tYWluLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICB9LCBmYWxzZSk7CiAgICB9OwoKICAgIHZhciBtb2JpbGVBbGJ1bXNFbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9oZWFkZXJfYWxidW1zJyk7CiAgICBpZiAobW9iaWxlQWxidW1zRWxlKSB7CiAgICAgICAgbW9iaWxlQWxidW1zRWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHZhciBtb2JpbGVfbWVudV9hbGJ1bXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtdG9wbmF2X21vYmlsZV9hbGJ1bV9saXN0Jyk7CiAgICAgICAgICAgIG1vYmlsZV9tZW51X2FsYnVtcy5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CgogICAgICAgICAgICAvLyBDbG9zZQogICAgICAgICAgICB2YXIgbW9iaWxlX2FsYnVtc19jbG9zZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy10b3BuYXZfbW9iaWxlX2FsYnVtX2xpc3RfY2xvc2UnKTsKICAgICAgICAgICAgaWYgKG1vYmlsZV9hbGJ1bXNfY2xvc2UpIHsKICAgICAgICAgICAgICAgIG1vYmlsZV9hbGJ1bXNfY2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgbW9iaWxlX21lbnVfYWxidW1zLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSwgZmFsc2UpOwogICAgfTsKCgoKLy8gXl5eXl5eXl5eXl5eXl5eXl5eXl4KLy8gQUZURVIgTU9CSUxFIE5BViBURVNUIFJFQ09OQ0lMRSBXSVRIIFRIRSBgbW9iaWxlX21lbnVfc2NyaXB0LnBodG1sYAovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgLy8gVVNFUiBNRVNTQUdFCgogICAgLy8gU2hvdyBub3RpZmljYXRpb24gaWYgaXQgaXMgdGhlIGNhc2UKICAgIC8vIFdlIHdyYXAgdGhpcyBpbiBhIHNldFRpbWVvdXQgc2luY2UgdGhlIG5vdGlmaWNhdGlvbnMgc2hvdWxkCiAgICAvLyBoYXZlIGEgbG93ZXIgcHJpb3JpdHkgaW4gdGVybXMgb2YgdmlzdWFsIGNvbXBhcmVkIHRvIG90aGVyCiAgICAvLyBpdGVtcyBvbiB0aGUgcGFnZS4KICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgLy8gRE9NIEVsZW1lbnRzCiAgICAgICAgdmFyIGF2YXRhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3BuYXZfbWVudV9hdmF0YXInKTsKICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBhdmF0YXIgdGhlbiBzdG9wIGl0CiAgICAgICAgaWYgKCFhdmF0YXIpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIGJ1YmJsZSA9IGF2YXRhci5xdWVyeVNlbGVjdG9yKCcudG9wbmF2X21lbnVfYXZhdGFyX2J1YmJsZScpOwogICAgICAgIHZhciBkcm9wZG93biA9IGF2YXRhci5xdWVyeVNlbGVjdG9yKCcjdG9wbmF2X3VzZXJfZHJvcGRvd24nKTsKICAgICAgICAvL3ZhciBtZXNzYWdlID0gYXZhdGFyLnF1ZXJ5U2VsZWN0b3IoJy50b3BuYXZfdXNlcl9tZW51X21lc3NhZ2UnKTsKICAgICAgICAvL3ZhciBjbG9zZSA9IGF2YXRhci5xdWVyeVNlbGVjdG9yKCcudG9wbmF2X3VzZXJfbWVudV9tZXNzYWdlX2Nsb3NlJyk7CiAgICAgICAgdmFyIG9uX2hvdmVyID0gZmFsc2U7CgogICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGJ1YmJsZSB0aGVuIHN0b3AgaXQKICAgICAgICBpZiAoYnViYmxlKSB7CiAgICAgICAgICAgIGJ1YmJsZS5jbGFzc0xpc3QuYWRkKCdvbicpOwogICAgICAgIH0KCiAgICAgICAgLy8gQW5kIHdlIGF0dGFjaCBoaWRlIHRoZSBidWJibGUKICAgICAgICBhdmF0YXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChvbl9ob3ZlcikgcmV0dXJuOwoKICAgICAgICAgICAgb25faG92ZXIgPSB0cnVlOwoKICAgICAgICAgICAgaWYgKGJ1YmJsZSkgewogICAgICAgICAgICAgICAgYnViYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ29uJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNhdmUgcmVtb3ZlZCBzdGF0ZSBbMSBtZWFucyB0aGUgdXNlciBvcGVuIHRoZSBkcm9wZG93bl0KICAgICAgICAgICAgc3RvcmVfdXNlcl9tZXNzYWdlX3NldHRpbmdzKDEpOwoKICAgICAgICB9LCBmYWxzZSk7CgogICAgICAgIC8vIFN0b3JlIHN0YXR1cyBvZiB1c2VyIG5hdiBtZXNzYWdlIChidWJibGUgY2xvc2VkIFsxXSwgbWVzc2FnZSBoaWRkZW4gWzJdKQogICAgICAgIGZ1bmN0aW9uIHN0b3JlX3VzZXJfbWVzc2FnZV9zZXR0aW5ncyh2YWx1ZSkgewogICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgogICAgICAgICAgICB4aHIub3BlbignUE9TVCcsICcvc2V0dGluZ3MvbmF2Jyk7CiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0Jyk7CiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7CiAgICAgICAgICAgIHhoci5zZW5kKCdtZXNzYWdlX3N0YXRlPScgKyB2YWx1ZSArICcmdG9rZW49JyArIHZpbWVvLnhzcmZ0KTsKCiAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gaGFuZGxlLiBXZSBob3BlIGZvciB0aGUgYmVzdCBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH07CgogICAgfSwgMTAwMCk7Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwo8L3NjcmlwdD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3cmFwX2NvbnRlbnQgdmFyaWFudC12MiI+CiAgICAgICAgICAgICAgICAKICAgIAogICAgCiAgICAgICAgCjxkaXYgY2xhc3M9ImFwcF9iYW5uZXJfY29udGFpbmVyIj4KCiAgICA8ZGl2IGNsYXNzPSJhcHBfYmFubmVyIGhpZGUganMtYXBwX2Jhbm5lciBqcy1kZWVwbGluay1icmFuY2giPgoKICAgICAgICA8YnV0dG9uIGNsYXNzPSJhcHBfYmFubmVyX2Nsb3NlIGpzLWFwcF9iYW5uZXJfY2xvc2UiPiZ0aW1lczs8L2J1dHRvbj4KCiAgICAgICAgPGRpdiBjbGFzcz0iYXBwX2Jhbm5lcl9pY29uX3dyYXBwZXIiPgogICAgICAgICAgICA8c3ZnIGNsYXNzPSJhcHBfYmFubmVyX2ljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGhlaWdodD0iMjRweCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMjQgNi42NDNDMjQgMTEuMjg2IDE1IDIyIDEwLjg3NSAyMiA2IDIyIDYgNy43MTQgMy4wMTMgNy43MTRjLS4zODggMC0xLjg4MyAxLjA3LTEuODgzIDEuMDdMMCA3LjM1OHM1LjI1LTUgNy41LTVjNC41IDAgMyAxMi41IDUuNjI1IDEyLjUgMS41IDAgNi43NS03Ljg1NyAyLjI1LTcuODU3LS43NSAwLTEuNS4zNTctMS41LjM1N0MxNSAzLjc4NyAxNy4yNSAyIDIwLjYyNSAyIDIyLjg3NSAyIDI0IDMuNzg2IDI0IDYuNjQzeiIvPjwvc3ZnPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJhcHBfYmFubmVyX2N0YSI+CiAgICAgICAgICAgIFdhdGNoIGluIG91ciBhcHAgICAgICAgIDwvZGl2PgoKICAgICAgICA8YQogICAgICAgICAgICBjbGFzcz0iYXBwX2Jhbm5lcl9idXR0b24ganMtYXBwX2Jhbm5lcl9vcGVuX2FwcCIKICAgICAgICAgICAgZGF0YS1kZWVwLWxpbms9InZpZGVvcy8xNDEzNDkxOTQiICAgICAgICAgICAgZGF0YS1zb3VyY2UtY29udGV4dD0iY2xpcCIgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFwcF9iYW5uZXJfYnV0dG9uX3RleHQiPk9wZW4gaW4gYXBwPC9zcGFuPgogICAgICAgIDwvYT4KCiAgICA8L2Rpdj4KCjwvZGl2PgoKICAgICAgICAKICAgICAgICAKCjxzY3JpcHQ+CiAgICB3aW5kb3cudmltZW8gPSB3aW5kb3cudmltZW8gfHwge307CgogICAgCiAgICB3aW5kb3cudmltZW8uY2xpcF9wYWdlX2NvbmZpZyA9IHsiY2xpcCI6eyJpZCI6MTQxMzQ5MTk0LCJ0aXRsZSI6IkJ1dHRlcm51dCBTcXVhc2ggUmF2aW9saSIsImRlc2NyaXB0aW9uIjpudWxsLCJ1cGxvYWRlZF9vbiI6IjIwMTUtMTAtMDQgMTc6MjA6MTUiLCJ1cGxvYWRlZF9vbl9yZWxhdGl2ZSI6IjUgeWVhcnMgYWdvIiwidXBsb2FkZWRfb25fZnVsbCI6IlN1bmRheSwgT2N0b2JlciA0LCAyMDE1IGF0IDU6MjAgUE0gRVNUIiwiaXNfc3BhdGlhbCI6ZmFsc2UsImlzX2hkciI6ZmFsc2UsInByaXZhY3kiOnsiaXNfcHVibGljIjp0cnVlLCJ0eXBlIjoiYW55Ym9keSIsImRlc2NyaXB0aW9uIjoiUHVibGljIn0sImR1cmF0aW9uIjp7InJhdyI6NzA3LCJmb3JtYXR0ZWQiOiIxMTo0NyJ9LCJpc19saWtlZCI6ZmFsc2UsImlzX3VuYXZhaWxhYmxlIjpmYWxzZSwibGlrZXNfdXJsIjoiXC8xNDEzNDkxOTRcL2xpa2VzIiwiaXNfbGl2ZSI6ZmFsc2UsInVubGlzdGVkX2hhc2giOm51bGx9LCJvd25lciI6eyJpZCI6MjYxMjE2MDQsImRpc3BsYXlfbmFtZSI6IkhhbGYgQmFrZWQgSGFydmVzdCIsImhhc19hZHZhbmNlZF9zdGF0cyI6dHJ1ZSwiaXNfcHJvX2xhcHNlZCI6ZmFsc2UsImlzX3BhaWQiOnRydWUsImJhZGdlIjp7InR5cGUiOiJwcm8iLCJhbHRfdGV4dCI6IkxlYXJuIG1vcmUgYWJvdXQgVmltZW8gUFJPIiwidXJsIjoiXC9wcm8iLCJ0ZXh0IjoiUFJPIiwicHJpbWFyeV90YWciOiJzcGFuIiwiY2xhc3NOYW1lIjoiaXJpc19iYWRnZSBpcmlzX2JhZGdlLS1wcm8gYmFkZ2UgYmFkZ2UtLXBybyBiYWRnZV9wcm8iLCJndG1fY2xpY2tfZXZlbnQiOiJiYWRnZV9wcm9fY2xpY2siLCJmYXRhbF9hdHRyYWN0aW9uX2V2ZW50IjoiY29udGFpbmVyOmJhZGdlfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwcm8ifSwicG9ydHJhaXQiOnsic3JjIjoiaHR0cHM6XC9cL2kudmltZW9jZG4uY29tXC9wb3J0cmFpdFwvZGVmYXVsdHMtYmx1ZV83NXg3NS5wbmciLCJzcmNfMngiOiJodHRwczpcL1wvaS52aW1lb2Nkbi5jb21cL3BvcnRyYWl0XC9kZWZhdWx0cy1ibHVlXzE1MHgxNTAucG5nIn0sImlzX21vZCI6ZmFsc2UsInVybCI6IlwvaGFsZmJha2VkaGFydmVzdCIsInZlcmlmaWVkIjp0cnVlLCJpc19mb2xsb3dpbmciOmZhbHNlLCJpc19hdmFpbGFibGVfZm9yX2hpcmUiOm51bGx9LCJvbmRlbWFuZCI6bnVsbCwiYnJhbmRfY2hhbm5lbCI6bnVsbCwiYXBpX3VybCI6ImFwaS52aW1lby5jb20iLCJqd3QiOiJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpJVXpJMU5pSjkuZXlKbGVIQWlPakUyTURNNU1Ea3pPREFzSW5WelpYSmZhV1FpT201MWJHd3NJbUZ3Y0Y5cFpDSTZOVGcwTnprc0luTmpiM0JsY3lJNkluQjFZbXhwWXlCemRHRjBjeUlzSW5SbFlXMWZkWE5sY2w5cFpDSTZiblZzYkgwLk5pMnB5SlpreHJwczhhTHRBZ0J1NGVWVmpDUG5Qd1pGU01aTkdSUXE0YkkiLCJjaGF0IjpudWxsLCJjdXJfdXNlciI6bnVsbCwic3RhdHVzIjp7InN0YXRlIjoicmVhZHkifSwiY29weXJpZ2h0X3N0YXR1cyI6eyJpc19ibG9ja2VkIjpmYWxzZX0sImNvbnRlbnRfYmxvY2tfc3RhdHVzIjp7ImlzX2Jsb2NrZWQiOmZhbHNlLCJtZXNzYWdlIjpudWxsLCJjb250aW51b3VzX3BsYXlfZW5hYmxlZCI6ZmFsc2UsImFsbG93QnlwYXNzIjp0cnVlfSwicGxheWVyIjp7ImNvbmZpZ191cmwiOiJodHRwczpcL1wvcGxheWVyLnZpbWVvLmNvbVwvdmlkZW9cLzE0MTM0OTE5NFwvY29uZmlnP2F1dG9wYXVzZT0xJmJ5bGluZT0wJmNvbGxlY3Rpb25zPTEmY29udGV4dD1WaW1lbyU1Q0NvbnRyb2xsZXIlNUNDbGlwQ29udHJvbGxlci5tYWluJmRlZmF1bHRfdG9faGQ9MSZvdXRybz1ub3RoaW5nJnBvcnRyYWl0PTAmc2hhcmU9MSZ0aXRsZT0wJndhdGNoX3RyYWlsZXI9MCZzPWRhZGE5MDJiNzMyOWNlNGY0MGJiYjFjZDNiODdlZDcwMTA2ZDM1YzRfMTYwMzkyMzc1NyIsInBsYXllcl91cmwiOiJwbGF5ZXIudmltZW8uY29tIiwiZGltZW5zaW9ucyI6eyJoZWlnaHQiOjU0MCwid2lkdGgiOjk2MH0sInBvc3RlciI6eyJ1cmwiOiJodHRwczpcL1wvaS52aW1lb2Nkbi5jb21cL3ZpZGVvXC81MzgzMjA4OTQuanBnP213PTIwMDAmbWg9MTA4MCZxPTcwIn19LCJzaGFyZV9lbmFibGVkIjp0cnVlLCJjb250aW51b3VzX3BsYXlfZW5hYmxlZCI6dHJ1ZSwic2VuZF90b193aXBzdGVyX2VuYWJsZWQiOmZhbHNlLCJ0aHVtYm5haWwiOnsic3JjIjoiaHR0cHM6XC9cL2kudmltZW9jZG4uY29tXC92aWRlb1wvNTM4MzIwODk0XzE5MHgxMDcuanBnIiwic3JjXzJ4IjoiaHR0cHM6XC9cL2kudmltZW9jZG4uY29tXC92aWRlb1wvNTM4MzIwODk0XzM4MHgyMTQuanBnIiwid2lkdGgiOjE5MCwiaGVpZ2h0IjoxMDcsImlkIjo1MzgzMjA4OTR9LCJhZHMiOnsiaG91c2VfYWRzX2VuYWJsZWQiOmZhbHNlLCJ0aGlyZF9wYXJ0eV9hZHNfZW5hYmxlZCI6ZmFsc2V9LCJjb250ZW50X3JhdGluZyI6bnVsbCwibm90aWZpY2F0aW9ucyI6W10sImNhdGVnb3JpZXNfY29uZmlnIjp7ImNhdGVnb3JpZXMiOlt7Im5hbWUiOiJDb29raW5nIiwidXJsIjoiXC9jYXRlZ29yaWVzXC9mb29kXC9jb29raW5nXC92aWRlb3MifSx7Im5hbWUiOiJGb29kIiwidXJsIjoiXC9jYXRlZ29yaWVzXC9mb29kIn1dLCJ0b3RhbF9jYXRlZ29yaWVzIjoyfSwibXVzaWNfdHJhY2siOm51bGwsImNjX2xpY2Vuc2UiOm51bGwsImNyZWRpdHMiOnsidG90YWxfY3JlZGl0cyI6eyJyYXciOjAsImZvcm1hdHRlZCI6IjAifSwiZGlzcGxheWVkX2NyZWRpdHMiOltdfSwic3RyZWFtIjp7ImlkIjpudWxsLCJwb3MiOjB9LCJjb2xsZWN0aW9uX2FkZGVyIjp7ImVuYWJsZWQiOnRydWV9LCJyZWNhcHRjaGFfc2l0ZV9rZXkiOiI2TGVSQ0x3U0FBQUFBT0oxYmFfeHFkM05CT2xWNVBfWFJXSlZFUGR3IiwiY2xpcF9zdGF0cyI6eyJlbmFibGVkIjpmYWxzZX0sImRvd25sb2FkX2NvbmZpZyI6W10sImhhc19yZXZpZXdfbW9kZXMiOmZhbHNlLCJzdXJ2ZXlfdXJsIjoiaHR0cHM6XC9cL3d3dy5tYXJrZXRpbmdyZXNlYXJjaHJlc291cmNlcy5jb21cL2ltYWdlc1wvb3ZtMDA1MTZcL21yci5hc3A/SS5Vc2VyMT1PJnVzZXI9bG9nZ2Vkb3V0JmNsaXA9MTQxMzQ5MTk0JnZ1aWQ9IiwiZGF0YV9sYXllciI6eyJjbGlwX2lkIjoxNDEzNDkxOTQsInBhZ2VfcGF0aCI6IlwvMTQxMzQ5MTk0IiwiY3JlYXRvcl9pZCI6MjYxMjE2MDQsImNyZWF0b3JfdXNlcl90eXBlIjoicHJvIiwidmlkZW9fY2F0ZWdvcmllcyI6IkNvb2tpbmcsRm9vZCIsInByaXZhY3kiOiJhbnlib2R5Iiwic3RhZmZfcGljayI6Im5vIiwidXNlcl9pZCI6bnVsbCwicGFnZV90eXBlIjoiVmlkZW8ifSwicHJlZl90aXBzIjp7ImZpbGVfdHJhbnNmZXJfdG91cl9wb2ludCI6eyJrZXkiOiJ2c3RwZnQiLCJ2YWx1ZSI6ZmFsc2V9fX07CgogICAgLy8gQXV0b3BsYXkgdGVzdCBmb3Igb25zaXRlIHJlZmVycmFscyB0byBjbGlwIHBhZ2UKICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGNsaXAgPSB3aW5kb3cudmltZW8uY2xpcF9wYWdlX2NvbmZpZzsKICAgICAgICB2YXIgaXNPd25lciA9IGNsaXAuY3VyX3VzZXIgPyBjbGlwLmN1cl91c2VyLmlkID09PSBjbGlwLm93bmVyLmlkIDogZmFsc2U7CiAgICAgICAgdmFyIGhhc0F1dG9wbGF5UGFyYW0gPSAvKFw/fCYpYXV0b3BsYXk9MSgmfCQpLy50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKICAgICAgICB2YXIgaGFzT25zaXRlUmVmZXJyZXIgPSB3aW5kb3cudmltZW9fZXNpLmNvbmZpZy5vbnNpdGVfcmVmZXJyZXI7CgogICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYXV0b3BsYXkgcmVmcmVzaGVzIGFuZCBoaXN0b3J5IHRyYXZlcnNhbHMKICAgICAgICB2YXIgaXNOZXdQYWdlID0gd2luZG93LnBlcmZvcm1hbmNlLm5hdmlnYXRpb24udHlwZSA9PT0gMDsKCiAgICAgICAgLy8gSWYgd2UgcGFzcyBhbGwgdGhlIGNvbmRpdGlvbnMgb3ZlcnJpZGUgcGxheWVyIGNvbmZpZyB3aXRoIG5ldyBvbmUgaW5jbHVkaW5nIGF1dG9wbGF5IHBhcmFtCiAgICAgICAgaWYgKGlzTmV3UGFnZSAmJiBoYXNPbnNpdGVSZWZlcnJlciAmJiAhaGFzQXV0b3BsYXlQYXJhbSAmJiAhaXNPd25lcikgewogICAgICAgICAgICB3aW5kb3cudmltZW8uY2xpcF9wYWdlX2NvbmZpZy5wbGF5ZXIgPSB7ImNvbmZpZ191cmwiOiJodHRwczpcL1wvcGxheWVyLnZpbWVvLmNvbVwvdmlkZW9cLzE0MTM0OTE5NFwvY29uZmlnP2F1dG9wYXVzZT0xJmF1dG9wbGF5PTEmYnlsaW5lPTAmY29sbGVjdGlvbnM9MSZjb250ZXh0PVZpbWVvJTVDQ29udHJvbGxlciU1Q0NsaXBDb250cm9sbGVyLm1haW4mZGVmYXVsdF90b19oZD0xJm91dHJvPW5vdGhpbmcmcG9ydHJhaXQ9MCZzaGFyZT0xJnRpdGxlPTAmd2F0Y2hfdHJhaWxlcj0wJnM9MzM3MGJlODA1ZDYxYWNjZjliNTg1ZjY5MzcxNTI5N2RkZjI3ZWEyZl8xNjAzOTIzNzU3IiwicGxheWVyX3VybCI6InBsYXllci52aW1lby5jb20iLCJkaW1lbnNpb25zIjp7ImhlaWdodCI6NTQwLCJ3aWR0aCI6OTYwfSwicG9zdGVyIjp7InVybCI6Imh0dHBzOlwvXC9pLnZpbWVvY2RuLmNvbVwvdmlkZW9cLzUzODMyMDg5NC5qcGc/bXc9MjAwMCZtaD0xMDgwJnE9NzAifX07CiAgICAgICAgfQogICAgfSgpKTsKPC9zY3JpcHQ+CgogICAgPHNjcmlwdD4KICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy52aW1lbyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHdpbmRvdy52aW1lby5jbGlwcyA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgd2luZG93LnZpbWVvID0gd2luZG93LnZpbWVvIHx8IHt9OwogICAgICAgICAgICB3aW5kb3cudmltZW8uY2xpcHMgPSB3aW5kb3cudmltZW8uY2xpcHMgfHwge307CiAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHdpbmRvdy52aW1lby5jbGlwX3BhZ2VfY29uZmlnLnBsYXllci5jb25maWdfdXJsICwgdHJ1ZSk7CiAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy52aW1lby5jbGlwc1snMTQxMzQ5MTk0J10gPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOwogICAgICAgICAgICB9OwogICAgICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTsKICAgICAgICAgICAgeGhyLnNlbmQoKTsKICAgICAgICB9CiAgICA8L3NjcmlwdD4KCjwhLS1baWYgbHRlIElFIDldPgogICAgPHNjcmlwdD53aW5kb3cubG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24gKyAnP2xpdGU9MSc7PC9zY3JpcHQ+CjwhW2VuZGlmXS0tPgoKPGRpdiBpZD0ib25ib2FyZGluZ19tb3VudCI+PC9kaXY+Cgo8bWFpbiBpZD0ibWFpbiIgY2xhc3M9ImlzX2xvYWRpbmciPgogICAgPGRpdiBjbGFzcz0iaXJpc19ncmlkIGlyaXNfZ3JpZF9mcDk2MCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2xpcF9tYWluIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxheWVyX2FyZWEiPgogICAgICAgICAgICAgICAgPG5vc2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2kudmltZW9jZG4uY29tL3ZpZGVvLzUzODMyMDg5NC5qcGc/bXc9MTkyMCZhbXA7bWg9MTA4MCZhbXA7cT03MCIgYWx0PSIiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiAwIGF1dG87IG1heC1oZWlnaHQ6IDU0MHB4OyIgLz4KICAgICAgICAgICAgICAgIDwvbm9zY3JpcHQ+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPG5vc2NyaXB0PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2xpcF9tYWluLWNvbnRlbnQgaXJpc19ncmlkLXdyYXBwZXItLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlyaXNfZ3JpZC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHUtY29sbGFwc2UgY2xpcC1ub3RpZmljYXRpb24iIHN0eWxlPSJtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDEuNWVtOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpcmlzX25vdGlmaWNhdGlvbiBpcmlzX25vdGlmaWNhdGlvbi1jbGlwIGlyaXNfbm90aWZpY2F0aW9uLWNsaXAtLWNhdXRpb24gaXJpc19ub3RpZmljYXRpb24tLW5vLWNsb3NlIGNsZWFyZml4IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCB0byBleHBlcmllbmNlIFZpbWVvIGluIGFsbCBvZiBpdHMgZ2xvcnkuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXJpc19ncmlkLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2xpcF9pbmZvLXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNsaXBfaW5mbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz0iY2xpcF9pbmZvLWhlYWRlciI+QnV0dGVybnV0IFNxdWFzaCBSYXZpb2xpPC9oMT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjbGlwX2luZm8tc3VibGluZS0td2F0Y2ggY2xpcF9pbmZvLXN1YmxpbmUtLWlubGluZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ1c2VyYnlsaW5lLXN1YmxpbmUgdXNlcmJ5bGluZS1zdWJsaW5lLS1sZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5mcm9tPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InVzZXJsaW5rIHVzZXJsaW5rLS1tZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL2hhbGZiYWtlZGhhcnZlc3QiPkhhbGYgQmFrZWQgSGFydmVzdDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PSItMSIgaHJlZj0iL3BybyIgdGl0bGU9IkxlYXJuIG1vcmUgYWJvdXQgVmltZW8gUFJPIiBkYXRhLWd0bS1jbGljaz0iYmFkZ2VfcHJvX2NsaWNrIiBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpiYWRnZXxjb21wb25lbnQ6dXBncmFkZV9saW5rfGtleXdvcmQ6cHJvIj4KICAgIDxzcGFuIGNsYXNzPSJpcmlzX2JhZGdlIGlyaXNfYmFkZ2UtLXBybyBiYWRnZSBiYWRnZS0tcHJvIGJhZGdlX3BybyI+CiAgICAgICAgUFJPICAgIDwvc3Bhbj4KICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNsaXBfaW5mby10aW1lIj48dGltZSBkYXRldGltZT0iMjAxNS0xMC0wNFQxNzoyMDoxNS0wNDowMCIgdGl0bGU9IlN1bmRheSwgT2N0b2JlciA0LCAyMDE1IGF0IDU6MjAgUE0iPjUgeWVhcnMgYWdvPC90aW1lPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2xpcF9kZXRhaWxzIGlyaXNfZGl2aWRlci0tZGFyayBpcmlzX2RpdmlkZXItdG9wIGlyaXNfZGl2aWRlci10b3AtLW0gaXJpc19kaXZpZGVyLWJvdCBpcmlzX2RpdmlkZXItYm90LS1tIHUtY29sbGFwc2UgY2xlYXJmaXgiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpcmlzX2dyaWQtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjbGlwX2RldGFpbHMtZGVzY3JpcHRpb24gZGVzY3JpcHRpb24td3JhcHBlciBpcmlzX2Rlc2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmaXJzdCI+PC9wPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9ub3NjcmlwdD4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L21haW4+Cgo8c2NyaXB0PgogICAgd2luZG93LmNhbl9wcmVsb2FkID0gdHJ1ZTsKCiAgICA8L3NjcmlwdD4KCgo8c2NyaXB0Pgpjb25zb2xlLmxvZygnJWMgXG5cCuKOnCAgICAgICBAQEAmICAgICAgIEBAQEBAQFxuXArijpwgICAgI0BAQEBAQEAgICAgJkBAQEBAQEBAICAgICAgIEJ1aWx0IHVzaW5nOlxuXArijpwgICNAQEBAQEBAQEAuICAlJSZAQEBAQEBAICAgICAgICDigKIgUmVhY3QgKyBGbHV4XG5cCuKOnCAgICAgICZAQEBAQCUgICAgIChAQEBAQCggICAgICAg4oCiIEVTNlxuXArijpwgICAgICAgQEBAQEBAICAgICBAQEBAQEAgICAgICAgIOKAoiBGZXRjaCBBUElcblwK4o6cICAgICAgICVAQEBAQCggIC5AQEBAQCggICAgICAgICDigKIgRmxleGJveFxuXArijpwgICAgICAgIEBAQEBAQChAQEBAQEBcblwK4o6cICAgICAgICAvQEBAQEBAQEBAQCUgICAgICAgICAgICBMaWtlIHBsYXlpbmcgd2l0aCBuZXcgdGVjaG5vbG9neSwgdG9vP1xuXArijpwgICAgICAgICAmQEBAQEBAQCUgICAgICAgICAgICAgIGh0dHBzOi8vdmltZW8uY29tL2pvYnNcblwK4o6cICAgICAgICAgIEBAQEBAI1xuXApcblwKJywgJ2NvbG9yOiAjMDBhZGVmOycpOwo8L3NjcmlwdD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPGZvb3RlciBjbGFzcz0iZm9vdGVyX3YyIGZvb3Rlcl92Mi0tcmVzcG9uc2l2ZSI+CiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fc2l0ZW1hcCI+CiAgICA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfX2xpbmtzIj4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rIGZvb3Rlcl92Ml9hY2NvcmRpb24iPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX2NoZWNrIiB0eXBlPSJjaGVja2JveCI+CiAgICAgICAgICAgIDxoNCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlci10ZXh0Ij5WSU1FTzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvaDQ+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWxpc3QgZm9vdGVyX3YyX2FjY29yZGlvbl9fbWVudSI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvdXBncmFkZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ByaWNpbmciCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6dmltZW98a2V5d29yZDpwcmljaW5nIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgUHJpY2luZyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii91cGxvYWQiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGxvYWRfY2xpY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6dmltZW98a2V5d29yZDp1cGxvYWQiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvY2hhbm5lbHMvc3RhZmZwaWNrcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3N0YWZmX3BpY2tzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnZpbWVvfGtleXdvcmQ6c3RhZmZfcGlja3MiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTdGFmZiBQaWNrcyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9vbmRlbWFuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX29uX2RlbWFuZF9jbGljayIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp2aW1lb3xrZXl3b3JkOm9uX2RlbWFuZCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIE9uIERlbWFuZCAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vdmltZW8uY29tL290dCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ZpbWVvX290dCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp2aW1lb3xrZXl3b3JkOm90dCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFZpbWVvIE9UVCAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9zaXRlX21hcCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3NpdGVfbWFwX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnZpbWVvfGtleXdvcmQ6c2l0ZV9tYXAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTaXRlIG1hcCAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJmb290ZXJfdjJfX2xpbmsgZm9vdGVyX3YyX2FjY29yZGlvbiI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fY2hlY2siIHR5cGU9ImNoZWNrYm94Ij4KICAgICAgICAgICAgPGg0IGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyLXRleHQiPlNPTFVUSU9OUzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvaDQ+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWxpc3QgZm9vdGVyX3YyX2FjY29yZGlvbl9fbWVudSI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZmVhdHVyZXMvdmlkZW8tcGxheWVyIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfdmlkZW9fcGxheWVyIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmZlYXR1cmVzfGtleXdvcmQ6dmlkZW9fcGxheWVyIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8gUGxheWVyICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2NyZWF0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2NyZWF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnNvbHV0aW9uc3xrZXl3b3JkOmNyZWF0ZSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9mZWF0dXJlcy92aWRlby1wcml2YWN5IgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfcHJpdmFjeSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOnByaXZhY3kiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBQcml2YWN5ICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2ZlYXR1cmVzL3ZpZGVvLWNvbGxhYm9yYXRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19jb2xsYWJvcmF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmZlYXR1cmVzfGtleXdvcmQ6Y29sbGFib3JhdGlvbiIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIENvbGxhYm9yYXRpb24gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZmVhdHVyZXMvdmlkZW8tbWFya2V0aW5nIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfZGlzdHJpYnV0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmZlYXR1cmVzfGtleXdvcmQ6ZGlzdHJpYnV0aW9uIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgRGlzdHJpYnV0aW9uICYgbWFya2V0aW5nICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2ZlYXR1cmVzL3ZpZGVvLW1vbmV0aXphdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX21vbmV0aXphdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOm1vbmV0aXphdGlvbiIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIE1vbmV0aXphdGlvbiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9saXZlIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfbGl2ZV9zdHJlYW1pbmciCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpsaXZlX3N0cmVhbWluZyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIExpdmUgc3RyZWFtaW5nICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2ZlYXR1cmVzL3ZpZGVvLWFuYWx5dGljcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2FuYWx5dGljcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpmZWF0dXJlc3xrZXl3b3JkOmFuYWx5dGljcyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5dGljcyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9mZWF0dXJlcy9vbmxpbmUtdmlkZW8taG9zdGluZyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2hvc3RpbmciCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6ZmVhdHVyZXN8a2V5d29yZDpob3N0aW5nIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgSG9zdGluZyAmIG1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZW50ZXJwcmlzZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2VudGVycHJpc2UiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6ZW50ZXJwcmlzZSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEVudGVycHJpc2UgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvZm9yLWhpcmUiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19mb3JfaGlyZSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDpzb2x1dGlvbnN8a2V5d29yZDpmb3JfaGlyZSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEZvciBIaXJlICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL3N0b2NrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfc3RvY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6c29sdXRpb25zfGtleXdvcmQ6c3RvY2siCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTdG9jayAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJmb290ZXJfdjJfX2xpbmsgZm9vdGVyX3YyX2FjY29yZGlvbiI+CiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fY2hlY2siIHR5cGU9ImNoZWNrYm94Ij4KICAgICAgICAgICAgPGg0IGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaGVhZGVyLXRleHQiPkFQUFM8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19yZXZlYWwiPgogICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImlyaXNfaWMgaXMtLTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA4IDgiPjxwYXRoIGQ9Ik03LjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMEw0IDQuNTg2IDEuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwLS4zOS4zOS0uMzkgMS4wMjQgMCAxLjQxNGwzIDNjLjM5LjM5IDEuMDI0LjM5IDEuNDE0IDBsMy0zYy4zOS0uMzkuMzktMS4wMjQgMC0xLjQxNHoiLz48L3N2Zz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2g0PgogICAgICAgICAgICA8dWwgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1saXN0IGZvb3Rlcl92Ml9hY2NvcmRpb25fX21lbnUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2FwcHMuYXBwbGUuY29tL2FwcC9hcHBsZS1zdG9yZS9pZDEzNTY2ODY3NjM/cHQ9NDE3NzMxJmFtcDtjdD1sb2hwJmFtcDttdD04IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDphcHBzfGtleXdvcmQ6bWFjb3MiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpbWVvIGZvciBtYWNPUyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2l0dW5lcy5hcHBsZS5jb20vYXBwL3ZpbWVvL2lkNDI1MTk0NzU5P210PTgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDppb3MiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpbWVvIGZvciBpT1MgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS52aW1lby5hbmRyb2lkLnZpZGVvYXBwJmFtcDtyZWZlcnJlcj11dG1fc291cmNlJTNEZm9vdGVyJTI2dXRtX21lZGl1bSUzRGxvaHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDphbmRyb2lkIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaW1lbyBmb3IgQW5kcm9pZCAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2FwcHMuYXBwbGUuY29tL3VzL2FwcC92aW1lby1jcmVhdGUvaWQxNDkxNzkxNTEzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDphcHBzfGtleXdvcmQ6Y3JlYXRlX2lvcyIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gQ3JlYXRlIGZvciBpT1MgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS52aW1lb2NyZWF0ZS52aWRlb2VkaXRvci5tb3ZpZW1ha2VyJmFtcDtyZWZlcnJlcj11dG1fc291cmNlJTNEZm9vdGVyJTI2dXRtX21lZGl1bSUzRGxvaHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDpjcmVhdGVfYW5kcm9pZCIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gQ3JlYXRlIGZvciBBbmRyb2lkICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vbWFnaXN0by5jb20iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmFwcHN8a2V5d29yZDptYWdpc3RvIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWdpc3RvICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fbGluayBmb290ZXJfdjJfYWNjb3JkaW9uIj4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19jaGVjayIgdHlwZT0iY2hlY2tib3giPgogICAgICAgICAgICA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXItdGV4dCI+UkVTT1VSQ0VTPC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fcmV2ZWFsIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpcmlzX2ljIGlzLS0xMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOCA4Ij48cGF0aCBkPSJNNy43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNCA0LjU4NiAxLjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMC0uMzkuMzktLjM5IDEuMDI0IDAgMS40MTRsMyAzYy4zOS4zOSAxLjAyNC4zOSAxLjQxNCAwbDMtM2MuMzktLjM5LjM5LTEuMDI0IDAtMS40MTR6Ii8+PC9zdmc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9oND4KICAgICAgICAgICAgPHVsIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstbGlzdCBmb290ZXJfdjJfYWNjb3JkaW9uX19tZW51Ij4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvaGVscCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2hlbHBfY2VudGVyX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnJlc291cmNlc3xrZXl3b3JkOmhlbHBfY2VudGVyIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgSGVscCBDZW50ZXIgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvYmxvZyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3ZpbWVvX2Jsb2dfY2xpY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6dmltZW9fYmxvZyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEJsb2cgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvYmxvZy9jYXRlZ29yeS92aWRlby1zY2hvb2wiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua192aWRlb19zY2hvb2xfY2xpY2siCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6dmlkZW9fc2Nob29sIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8gU2Nob29sICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly92aW1lby5jb20vb3R0L3Jlc291cmNlcyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX290dF9yZXNvdXJjZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6b3R0X3Jlc291cmNlcyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIE9UVCBSZXNvdXJjZXMgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2RldmVsb3Blci52aW1lby5jb20iCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19kZXZlbG9wZXJzX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnJlc291cmNlc3xrZXl3b3JkOmRldmVsb3BlcnMiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXJzICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL3N0dWRlbnRzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfc3R1ZGVudHMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmZvb3Rlcnxjb21wb25lbnQ6cmVzb3VyY2VzfGtleXdvcmQ6c3R1ZGVudHMiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50cyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9oZWxwL2d1aWRlbGluZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua192aW1lb19ndWlkZWxpbmVzX2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnJlc291cmNlc3xrZXl3b3JkOnZpbWVvX2d1aWRlbGluZXMiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBHdWlkZWxpbmVzICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImZvb3Rlcl92Ml9fbGluayBmb290ZXJfdjJfYWNjb3JkaW9uIj4KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb290ZXJfdjJfYWNjb3JkaW9uX19jaGVjayIgdHlwZT0iY2hlY2tib3giPgogICAgICAgICAgICA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1oZWFkZXItdGV4dCI+VVBHUkFERTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX3JldmVhbCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaXJpc19pYyBpcy0tMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDggOCI+PHBhdGggZD0iTTcuNzA3IDIuMjkzYy0uMzktLjM5LTEuMDI0LS4zOS0xLjQxNCAwTDQgNC41ODYgMS43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDAtLjM5LjM5LS4zOSAxLjAyNCAwIDEuNDE0bDMgM2MuMzkuMzkgMS4wMjQuMzkgMS40MTQgMGwzLTNjLjM5LS4zOS4zOS0xLjAyNCAwLTEuNDE0eiIvPjwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvaDQ+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWxpc3QgZm9vdGVyX3YyX2FjY29yZGlvbl9fbWVudSI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvc3RvcmUvcGx1cyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3VwZ3JhZGVfcGx1cyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwbHVzIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gUGx1cyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9zdG9yZS9wcm8iCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGdyYWRlX3BybyIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwcm8iCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBWaW1lbyBQUk8gICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvc3RvcmUvYnVzaW5lc3MiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGdyYWRlX2J1c2luZXNzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnVwZ3JhZGVfbGlua3xrZXl3b3JkOmJ1c2luZXNzIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gQnVzaW5lc3MgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZvb3Rlcl92Ml9fbGluay1pdGVtIj4KICAgICAgICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS0zIGlyaXNfbGluay0tZm9vdGVyIgogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIvc3RvcmUvcHJlbWl1bSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX3VwZ3JhZGVfcHJlbWl1bSIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1mYXRhbC1hdHRyYWN0aW9uPSJjb250YWluZXI6Zm9vdGVyfGNvbXBvbmVudDp1cGdyYWRlX2xpbmt8a2V5d29yZDpwcmVtaXVtIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgVmltZW8gUHJlbWl1bSAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9lbnRlcnByaXNlIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWd0bS1jbGljaz0iZm9vdGVyX2xpbmtfdXBncmFkZV9lbnRlcnByaXNlIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnVwZ3JhZGVfbGlua3xrZXl3b3JkOmVudGVycHJpc2UiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICBWaW1lbyBFbnRlcnByaXNlICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cDovL3ZpbWVvLmV4dG9sZS5jb20vd2Vic2l0ZV9mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua191cGdyYWRlX3JlZl9mcmllbmQiCiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OnVwZ3JhZGVfbGlua3xrZXl3b3JkOnJlZmVyX2FfZnJpZW5kIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXIgYSBmcmllbmQgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9zZWN0aW9uPgoKICAgICAgICA8c2VjdGlvbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rIGZvb3Rlcl92Ml9hY2NvcmRpb24iPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvb3Rlcl92Ml9hY2NvcmRpb25fX2NoZWNrIiB0eXBlPSJjaGVja2JveCI+CiAgICAgICAgICAgIDxoNCBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWhlYWRlci10ZXh0Ij5DT01QQU5ZPC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyX3YyX2FjY29yZGlvbl9fcmV2ZWFsIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpcmlzX2ljIGlzLS0xMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOCA4Ij48cGF0aCBkPSJNNy43MDcgMi4yOTNjLS4zOS0uMzktMS4wMjQtLjM5LTEuNDE0IDBMNCA0LjU4NiAxLjcwNyAyLjI5M2MtLjM5LS4zOS0xLjAyNC0uMzktMS40MTQgMC0uMzkuMzktLjM5IDEuMDI0IDAgMS40MTRsMyAzYy4zOS4zOSAxLjAyNC4zOSAxLjQxNCAwbDMtM2MuMzktLjM5LjM5LTEuMDI0IDAtMS40MTR6Ii8+PC9zdmc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9oND4KICAgICAgICAgICAgPHVsIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstbGlzdCBmb290ZXJfdjJfYWNjb3JkaW9uX19tZW51Ij4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19saW5rLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTMgaXJpc19saW5rLS1mb290ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Ii9hYm91dCIKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1ndG0tY2xpY2s9ImZvb3Rlcl9saW5rX2Fib3V0X2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmNvbXBhbnl8a2V5d29yZDphYm91dF92aW1lbyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIEFib3V0ICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xpbmstaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktMyBpcmlzX2xpbmstLWZvb3RlciIKICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iL2pvYnMiCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3RtLWNsaWNrPSJmb290ZXJfbGlua19qb2JzIgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZhdGFsLWF0dHJhY3Rpb249ImNvbnRhaW5lcjpmb290ZXJ8Y29tcG9uZW50OmNvbXBhbnl8a2V5d29yZDpqb2JzIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgSm9icyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L3NlY3Rpb24+CiAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8YXNpZGUgaWQ9ImZvb3Rlcl90aXAiIGNsYXNzPSJmb290ZXJfdjJfX3RpcCIgYXJpYS1saXZlPSJwb2xpdGUiPgogICAgICAgICAgICA8aDQgY2xhc3M9ImZvb3Rlcl92Ml9fdGlwLWhlYWRlciI+RGlkIHlvdSBrbm93PzwvaDQ+CiAgICAgICAgICAgIDxwIGNsYXNzPSJhY3RpdmUgZm9vdGVyX3YyX190aXAtY29udGVudCI+VmltZW8gZ2l2ZXMgY29udHJvbCBmcmVha3MgdGhlIHBvd2VyIHRvIDxhIGhyZWY9Imh0dHBzOi8vaGVscC52aW1lby5jb20vaGMvZW4tdXMvYXJ0aWNsZXMvMjI0OTcyODA4LUN1c3RvbWl6aW5nLXRoZS1lbWJlZGRlZC1wbGF5ZXIiIGRhdGEtZmF0YWwtYXR0cmFjdGlvbj0iY29udGFpbmVyOmRpZF95b3Vfa25vd19ib3h8Y29tcG9uZW50OmhlbHAiPnR3ZWFrIGV2ZXJ5IGFzcGVjdDwvYT4gb2YgdGhlaXIgZW1iZWRkZWQgdmlkZW9zOiBjb2xvcnMsIGJ1dHRvbnMsIGVuZCBzY3JlZW5zLCBhbmQgbW9yZS48L3A+CiAgICAgICAgPC9hc2lkZT4KICAgIDwvc2VjdGlvbj4KICAgIAogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJmb290ZXJfdjJfX2F1eGlsaWFyeSAiPgoKICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9fbGVnYWwiPgogICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlcl92Ml9fYXV4aWxpYXJ5LWNvbnRlbnQiPgogICAgICAgICAgICA8cD5UTSArICZjb3B5OyAyMDIwIFZpbWVvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDx1bCBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0Ij4KICAgICAgICAgICAgPGxpIGNsYXNzPSJmb290ZXJfdjJfX2xlZ2FsLWxpc3QtaXRlbSI+CiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS00IiBocmVmPSIvdGVybXMiIHRpdGxlPSJUZXJtcyAmYW1wOyBDb25kaXRpb25zIj4KICAgICAgICAgICAgICAgICAgICBUZXJtcyAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL3ByaXZhY3kiIHRpdGxlPSJQcml2YWN5IFBvbGljeSI+CiAgICAgICAgICAgICAgICAgICAgUHJpdmFjeSAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL3ByaXZhY3kvY2FsaWZvcm5pYS1wcml2YWN5IiB0aXRsZT0iQ0EgUHJpdmFjeSI+CiAgICAgICAgICAgICAgICAgICAgQ0EgUHJpdmFjeSAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL2RtY2EiIHRpdGxlPSJDb3B5cmlnaHQgSW5mb3JtYXRpb24iPgogICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9vdGVyX3YyX19sZWdhbC1saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlyaXNfbGluayBpcmlzX2xpbmstLWdyYXktNCIgaHJlZj0iL2Nvb2tpZV9wb2xpY3kiIHRpdGxlPSJMZWFybiBtb3JlIGFib3V0IGhvdyBWaW1lbyB1c2VzIGNvb2tpZXMiPgogICAgICAgICAgICAgICAgICAgIENvb2tpZXMgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyX3YyX19hdXhpbGlhcnktY29udGVudCBmb290ZXJfdjJfX3dpdGhsb3ZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hZGUgd2l0aCA8c3ZnIGNsYXNzPSJpcmlzX2ljIGlzLS0xMiBmb290ZXJfdjJfX2xvdmVoZWFydCBmb290ZXJfdjJfX2F1eGlsaWFyeS1pY29uIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+PHBhdGggZD0iTTkgMkM3LjMxMiAyIDYgMy41IDYgMy41UzQuNjg3IDIgMyAyQzEuMzEyIDIgMCAzLjMxMiAwIDVjMCAzLjE4OCAzLjc1IDMuMDEyIDYgNiAyLjI1LTIuOTg4IDYtMi44MTIgNi02IDAtMS42ODgtMS4zMTMtMy0zLTN6Ii8+PC9zdmc+IGluIE5ZQy4gICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZm9vdGVyX3YyX19maWx0ZXJzIGZvb3Rlcl92Ml9fYXV4aWxpYXJ5LWNvbnRlbnQiPgogICAgICAgIDxzcGFuIGNsYXNzPSJsYW5ndWFnZSI+CiAgICAgICAgICAgIExhbmd1YWdlOgogICAgICAgICAgICA8YSBjbGFzcz0iaXJpc19saW5rIGlyaXNfbGluay0tZ3JheS00IiBocmVmPSIjbGFuZ3VhZ2UiIG9uY2xpY2s9InZpbWVvLk1vZGFsLmNyZWF0ZSh7Y29udGVudDogJy9zZXR0aW5ncy9sb2NhbGUnLCBzaXplOiAnc21hbGwnfSk7IHJldHVybiBmYWxzZTsiIHRpdGxlPSJDaG9vc2UgYSBkaWZmZXJlbnQgbGFuZ3VhZ2UiPkVuZ2xpc2g8L2E+CiAgICAgICAgPC9zcGFuPgoKICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9vdGVyX3YyX19maWx0ZXIiPk1hdHVyZSBjb250ZW50IGZpbHRlcjogPC9zcGFuPjxhIGNsYXNzPSJpcmlzX2xpbmsgaXJpc19saW5rLS1ncmF5LTQgZm9vdGVyX3YyX19maWx0ZXJzX19sYW5nIGNvbnRlbnRmaWx0ZXIganMtZm9vdGVyX2NvbnRlbnRmaWx0ZXJfbGluayIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJ2aW1lby5Nb2RhbC5jcmVhdGUoe2NvbnRlbnQ6ICcvc2V0dGluZ3MvY29udGVudHJhdGluZyd9KSIgdGl0bGU9IkNoYW5nZSB5b3VyIG1hdHVyZSBjb250ZW50IGZpbHRlciI+Tm9uZTwvYT4KICAgICAgICAgICAgPC9kaXY+Cgo8L3NlY3Rpb24+CjwvZm9vdGVyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI+CiAgICAgICAgW3sidXJsIjoiaHR0cHM6Ly92aW1lby5jb20vMTQxMzQ5MTk0IiwidGh1bWJuYWlsVXJsIjoiaHR0cHM6Ly9pLnZpbWVvY2RuLmNvbS9maWx0ZXIvb3ZlcmxheT9zcmMwPWh0dHBzJTNBJTJGJTJGaS52aW1lb2Nkbi5jb20lMkZ2aWRlbyUyRjUzODMyMDg5NF8xMjgweDcyMC5qcGcmc3JjMT1odHRwcyUzQSUyRiUyRmYudmltZW9jZG4uY29tJTJGaW1hZ2VzX3Y2JTJGc2hhcmUlMkZwbGF5X2ljb25fb3ZlcmxheS5wbmciLCJlbWJlZFVybCI6Imh0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8xNDEzNDkxOTQiLCJuYW1lIjoiQnV0dGVybnV0IFNxdWFzaCBSYXZpb2xpIiwiZGVzY3JpcHRpb24iOiJUaGlzIGlzICZxdW90O0J1dHRlcm51dCBTcXVhc2ggUmF2aW9saSZxdW90OyBieSBIYWxmIEJha2VkIEhhcnZlc3Qgb24gVmltZW8sIHRoZSBob21lIGZvciBoaWdoIHF1YWxpdHkgdmlkZW9zIGFuZCB0aGUgcGVvcGxlIHdobyBsb3ZlIHRoZW0uIiwiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjgwLCJwbGF5ZXJUeXBlIjoiSFRNTDUgRmxhc2giLCJ2aWRlb1F1YWxpdHkiOiJIRCIsImR1cmF0aW9uIjoiUFQwMEgxMU00N1MiLCJ1cGxvYWREYXRlIjoiMjAxNS0xMC0wNFQxNzoyMDoxNS0wNDowMCIsImRhdGVNb2RpZmllZCI6IjIwMjAtMTAtMjdUMTM6MzE6NDgtMDQ6MDAiLCJ0aHVtYm5haWwiOnsiQHR5cGUiOiJJbWFnZU9iamVjdCIsInVybCI6Imh0dHBzOi8vaS52aW1lb2Nkbi5jb20vZmlsdGVyL292ZXJsYXk/c3JjMD1odHRwcyUzQSUyRiUyRmkudmltZW9jZG4uY29tJTJGdmlkZW8lMkY1MzgzMjA4OTRfMTI4MHg3MjAuanBnJnNyYzE9aHR0cHMlM0ElMkYlMkZmLnZpbWVvY2RuLmNvbSUyRmltYWdlc192NiUyRnNoYXJlJTJGcGxheV9pY29uX292ZXJsYXkucG5nIiwid2lkdGgiOjEyODAsImhlaWdodCI6NzIwfSwiYXV0aG9yIjp7IkB0eXBlIjoiUGVyc29uIiwibmFtZSI6IkhhbGYgQmFrZWQgSGFydmVzdCIsInVybCI6Imh0dHBzOi8vdmltZW8uY29tL2hhbGZiYWtlZGhhcnZlc3QifSwicG90ZW50aWFsQWN0aW9uIjp7IkB0eXBlIjoiVmlld0FjdGlvbiIsInRhcmdldCI6InZpbWVvOi8vYXBwLnZpbWVvLmNvbS92aWRlb3MvMTQxMzQ5MTk0In0sImludGVyYWN0aW9uU3RhdGlzdGljIjpbeyJAdHlwZSI6IkludGVyYWN0aW9uQ291bnRlciIsImludGVyYWN0aW9uVHlwZSI6Imh0dHA6Ly9zY2hlbWEub3JnL0NvbW1lbnRBY3Rpb24iLCJ1c2VySW50ZXJhY3Rpb25Db3VudCI6MzJ9LHsiQHR5cGUiOiJJbnRlcmFjdGlvbkNvdW50ZXIiLCJpbnRlcmFjdGlvblR5cGUiOiJodHRwOi8vc2NoZW1hLm9yZy9MaWtlQWN0aW9uIiwidXNlckludGVyYWN0aW9uQ291bnQiOjM4M30seyJAdHlwZSI6IkludGVyYWN0aW9uQ291bnRlciIsImludGVyYWN0aW9uVHlwZSI6Imh0dHA6Ly9zY2hlbWEub3JnL1dhdGNoQWN0aW9uIiwidXNlckludGVyYWN0aW9uQ291bnQiOjQxMTE5fV0sIkB0eXBlIjoiVmlkZW9PYmplY3QiLCJAY29udGV4dCI6Imh0dHA6Ly9zY2hlbWEub3JnIn0seyJpdGVtTGlzdEVsZW1lbnQiOlt7IkB0eXBlIjoiTGlzdEl0ZW0iLCJwb3NpdGlvbiI6MSwiaXRlbSI6eyJAaWQiOiJodHRwczovL3ZpbWVvLmNvbS9oYWxmYmFrZWRoYXJ2ZXN0IiwibmFtZSI6IkhhbGYgQmFrZWQgSGFydmVzdCJ9fSx7IkB0eXBlIjoiTGlzdEl0ZW0iLCJwb3NpdGlvbiI6MiwiaXRlbSI6eyJAaWQiOiJodHRwczovL3ZpbWVvLmNvbS9oYWxmYmFrZWRoYXJ2ZXN0L3ZpZGVvcyIsIm5hbWUiOiJWaWRlb3MifX1dLCJAdHlwZSI6IkJyZWFkY3J1bWJMaXN0IiwiQGNvbnRleHQiOiJodHRwOi8vc2NoZW1hLm9yZyJ9XSAgICA8L3NjcmlwdD4KCjxzY3JpcHQ+CiAgICB2YXIgX19mYSA9IF9fZmEgfHwgW107CiAgICAvKioKICAgICAqIEJlY2F1c2Ugc2luZ2xlIHBhZ2UgYXBwbGljYXRpb25zIHN1Y2ggYXMgdGhlIGFwcCBzaGVsbCB3aWxsIGJlIHRyYWNraW5nCiAgICAgKiBGYXRhbCBBdHRyYWN0aW9uIHBhZ2Ugdmlld3Mgb24gUmVhY3QgbGlmZWN5Y2xlIGhvb2tzIChjb21wb25lbnREaWRNb3VudCkKICAgICAqIHdlIHdhbnQgdG8gYXZvaWQgZGlzcGF0Y2hpbmcgdGhlIHBhZ2V2aWV3IGV2ZW50IGZyb20gdGhlIFBIUCB0ZW1wbGF0ZQogICAgICogYW5kIGRlZmVyIHRoaXMgc29ydCBvZiB0cmFja2luZyBsb2dpYyB0byB0aGUgZnJvbnQgZW5kLgogICAgICoKICAgICAqIFRoaXMgY2hlY2sgYWxsb3dzIHVzIHRvIGRlY2xhcmUgaW4gYSBjb250cm9sbGVyIHdoZXRoZXIgb3Igbm90IHdlCiAgICAgKiB3YW50IHRvIGRpc3BhdGNoIHRoYXQgcHJlbGltaW5hcnkgcGFnZXZpZXcuCiAgICAgKgogICAgICogVGhlIHByb3BlcnR5IGlzIGFkZGl0aXZlIG9ubHksIGFzIHRvIG5vdCBhZmZlY3QgZXhpc3RpbmcgcGFnZXZpZXdzLgogICAgICovCiAgICAgICAgICAgIF9fZmEucHVzaChbJ3RyYWNrUGFnZXZpZXcnXSk7CiAgICAKICAgIC8qKgogICAgICogQWRkIHNlcnZlciBzaWRlIEFCTGluY29sbiBleHBlcmltZW50cyB0byBHVE0gZGF0YSBsYXllci4KICAgICAqLwogICAgCiAgICAgICAgdmFyIF9leHRlbmQgPSBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHNbMF0sbj0xLGU9YXJndW1lbnRzLmxlbmd0aDtlPm47bisrKXt2YXIgdD1hcmd1bWVudHNbbl07Zm9yKHZhciBhIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShhKSYmKHJbYV09dFthXSl9cmV0dXJuIHJ9OwoKICAgICAgICB2YXIgQ1NTX0RJUiA9ICdodHRwczovL2YudmltZW9jZG4uY29tL3N0eWxlcy9jc3Nfb3B0LycsCiAgICAgICAgSlNfRElSID0gJ2h0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0LycsCiAgICAgICAgSU1BR0VfRElSID0gJ2h0dHBzOi8vZi52aW1lb2Nkbi5jb20vaW1hZ2VzX3Y2LycsCiAgICAgICAgRk9OVF9ESVIgPSAnaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9mb250cy8nLAogICAgICAgIFNWR19ESVIgPSAnaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9zdmcvJywKICAgICAgICAgICAgICAgIEJVSUxEX0hBU0ggPSAnNmFlYmUnOwoKICAgIAogICAgICAgIHZhciB2aW1lbyA9IF9leHRlbmQoKHdpbmRvdy52aW1lbyB8fCB7fSksIHsiYXBwX3ZlcnNpb24iOiJ2NiIsImRvbWFpbiI6InZpbWVvLmNvbSIsInVybCI6InZpbWVvLmNvbSIsImN1cl91c2VyIjpmYWxzZSwib3JpZ2luX3VzZXJfaWQiOm51bGwsIm9yaWdpbl91c2VyIjpmYWxzZSwiaXNfbW9iaWxlIjpmYWxzZX0pOwogICAgdmltZW8uY29uZmlnID0gX2V4dGVuZCgodmltZW8uY29uZmlnIHx8IHt9KSwgeyJzdGlja3lfdG9wbmF2Ijp7ImV4Y2x1ZGVkX3BhZ2VzIjpbIlZpbWVvXFxDb250cm9sbGVyXFxBYm91dENvbnRyb2xsZXI6bWFpbiIsIlZpbWVvXFxDb250cm9sbGVyXFxBYm91dENvbnRyb2xsZXI6cHJvZmVzc2lvbmFscyIsIlZpbWVvXFxDb250cm9sbGVyXFxBYm91dENvbnRyb2xsZXI6ZXZlcnlvbmUiLCJWaW1lb1xcQ29udHJvbGxlclxcSG9tZUNvbnRyb2xsZXI6dXBncmFkZSIsIlZpbWVvXFxDb250cm9sbGVyXFxTdG9yZUNvbnRyb2xsZXI6bWFpbiIsIlZpbWVvXFxDb250cm9sbGVyXFxVc2VyXFxTZXR0aW5nczJDb250cm9sbGVyOm1haW4iLCJWaW1lb1xcQ29udHJvbGxlclxcVXNlclxcU2V0dGluZ3MyQ29udHJvbGxlcjp0ZWFtX21lbWJlcnMiLCJWaW1lb1xcQ29udHJvbGxlclxcVXNlclxcU2V0dGluZ3MyQ29udHJvbGxlcjpwYXNzd29yZCIsIlZpbWVvXFxDb250cm9sbGVyXFxQcm9maWxlQ29udHJvbGxlcjptYWluIiwiVmltZW9cXENvbnRyb2xsZXJcXENsaXBTdGF0c0NvbnRyb2xsZXI6bWFpbiIsIlZpbWVvXFxDb250cm9sbGVyXFxDbGlwXFxTZXR0aW5nc1xcRW1iZWRDb250cm9sbGVyOmVtYmVkIiwiVmltZW9cXENvbnRyb2xsZXJcXFZpZGVvTWFuYWdlckNvbnRyb2xsZXIiLCJWaW1lb1xcQ29udHJvbGxlclxcVmlkZW9SZXZpZXdDb250cm9sbGVyIiwiVmltZW9cXENvbnRyb2xsZXJcXE1lc3NhZ2VzQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxTdGF0c0NvbnRyb2xsZXIiLCJWaW1lb1xcQ29udHJvbGxlclxcVXBsb2FkQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxPbkRlbWFuZFxcU2V0dGluZ3NDb250cm9sbGVyIiwiVmltZW9cXENvbnRyb2xsZXJcXENsaXBcXFNldHRpbmdzQ29udHJvbGxlciJdLCJzdGlja3lfaW5jbHVkZWRfcGFnZXMiOlsiVmltZW9cXENvbnRyb2xsZXJcXFN0b2NrXFxTdG9ja0hvbWVQYWdlQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxTdG9ja1xcU3RvY2tGb290YWdlQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxTdG9ja1xcU3RvY2tTZWFyY2hDb250cm9sbGVyIiwiVmltZW9cXENvbnRyb2xsZXJcXFN0b2NrXFxTdG9ja0NvbGxlY3Rpb25zQ29udHJvbGxlciIsIlZpbWVvXFxDb250cm9sbGVyXFxBbGJ1bUNvbnRyb2xsZXIiXSwidG9wbmF2X3dyYXBfc2VsZWN0b3IiOiIjdG9wbmF2X291dGVyX3dyYXAiLCJjb250ZW50X3dyYXBfc2VsZWN0b3IiOiIud3JhcF9jb250ZW50In0sImxvY2FsZSI6ImVuIiwib21uaXNlYXJjaF9lbmFibGVkIjpmYWxzZSwib21uaXNlYXJjaF9kaXNhYmxlZCI6bnVsbCwib21uaXNlYXJjaF9qd3QiOiJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpJVXpJMU5pSjkuZXlKbGVIQWlPakUyTURNNE1qTTRPREFzSW5WelpYSmZhV1FpT201MWJHd3NJbUZ3Y0Y5cFpDSTZOVGcwTnprc0luTmpiM0JsY3lJNkluQjFZbXhwWXlCd2NtbDJZWFJsSUdSbGJHVjBaU0lzSW5SbFlXMWZkWE5sY2w5cFpDSTZiblZzYkgwLjNEdVdtakoxV2VXQzNfVWE3WkRXS2xheThqWWhLZ3lGODdFMHZIa2tHaFUiLCJvbW5pc2VhcmNoX3VzZXIiOm51bGwsImFwaV91cmwiOiJhcGkudmltZW8uY29tIiwic2hvd19vbW5pc2VhcmNoX3RpcCI6ZmFsc2V9KTsKCiAgICAgICAgdmFyIF9faTE4bkxvY2FsZSA9ICdlbic7CiAgICB2YXIgbG9jYWxlQ29uZmlnID0gewogICAgICAgIGxhbmc6ICdlbicsCiAgICAgICAgJ0RhdGUnOiB7CiAgICAgICAgICAgIG1vbnRoczogWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLAogICAgICAgICAgICBtb250aHNfYWJicjogWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwKICAgICAgICAgICAgZGF5czogWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLAogICAgICAgICAgICBkYXlzX2FiYnI6IFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sCgogICAgICAgICAgICAvLyBDdWx0dXJlJ3MgZGF0ZSBvcmRlcjogTU0vREQvWVlZWQogICAgICAgICAgICBkYXRlT3JkZXI6IFsnZGF0ZScsICdtb250aCcsICd5ZWFyJ10sCiAgICAgICAgICAgIHNob3J0RGF0ZTogJyVkLyVtLyVZJywKICAgICAgICAgICAgc2hvcnRUaW1lOiAnJUk6JU0lcCcsCiAgICAgICAgICAgIEFNOiAnQU0nLAogICAgICAgICAgICBQTTogJ1BNJywKICAgICAgICAgICAgZmlyc3REYXlPZldlZWs6IDAsCgogICAgICAgICAgICAvLyBEYXRlLkV4dHJhcwogICAgICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbihkYXlPZk1vbnRoKXsKICAgICAgICAgICAgICAgIHJldHVybiBkYXlPZk1vbnRoOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAnRGF0ZVBpY2tlcic6IHsKICAgICAgICAgICAgc2VsZWN0X2FfdGltZTogIlNlbGVjdCBhIHRpbWUiLAogICAgICAgICAgICB1c2VfbW91c2Vfd2hlZWw6ICJVc2UgdGhlIG1vdXNlIHdoZWVsIHRvIHF1aWNrbHkgY2hhbmdlIHZhbHVlIiwKICAgICAgICAgICAgdGltZV9jb25maXJtX2J1dHRvbjogIk9LIiwKICAgICAgICAgICAgYXBwbHlfcmFuZ2U6ICJBcHBseSIsCiAgICAgICAgICAgIGNhbmNlbDogIkNhbmNlbCIsCiAgICAgICAgICAgIHdlZWs6ICJXayIgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnTnVtYmVyJzogewogICAgICAgICAgICBkZWNpbWFsOiAnLicsCiAgICAgICAgICAgIGdyb3VwOiAnLCcsCiAgICAgICAgICAgIGN1cnJlbmN5OiB7CiAgICAgICAgICAgICAgICBwcmVmaXg6ICckJwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAnRm9ybVZhbGlkYXRvcic6IHsicmVxdWlyZWQiOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIsInJlcXVpcmVkQ2hrIjoiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifSAgICB9OwoKICAgIHZhciBmdWxsTG9jYWxlID0gJyc7CgogICAgCiAgICAgICAgdmFyIENvcHkgPSB7dHJhbnNsYXRlOmZ1bmN0aW9uKHQsaSx1KXt2YXIgZT0nb2JqZWN0JyE9dHlwZW9mIHRoaXMuZGljdFt0XT90aGlzLmRpY3RbdF06aT90aGlzLmRpY3RbdF0ucGx1cmFsOnRoaXMuZGljdFt0XS5zaW5ndWxhcjtyZXR1cm4nb2JqZWN0Jz09dHlwZW9mIHUmJihlPXRoaXMuc3Vic3RpdHV0ZShlLHUpKSxlfSxzdWJzdGl0dXRlOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHZvaWQgMCE9PXQuc3Vic3RpdHV0ZT90LnN1YnN0aXR1dGUoaSk6dC5yZXBsYWNlKC9cXD9ceyhbXnt9XSspXH0vZyxmdW5jdGlvbih0LHUpe3JldHVybidcXCc9PXQuY2hhckF0KDApP3Quc2xpY2UoMSk6bnVsbCE9aVt1XT9pW3VdOicnfSl9LGRpY3Q6e319OwogICAgQ29weS5kaWN0ID0geyJkaWRfeW91X21lYW5fZW1haWwiOiJEaWQgeW91IG1lYW4gPGVtPntTVUdHRVNUfTxcL2VtPj8iLCJlbWFpbF9wYXNzd29yZF9taXNtYXRjaCI6IkVtYWlsIGFuZCBwYXNzd29yZCBkbyBub3QgbWF0Y2giLCJvb3BzX3RyeV9hZ2FpbiI6Ik9vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluLiIsImp1c3Rfbm93IjoianVzdCBub3ciLCJzZWNvbmRzX2FnbyI6eyJzaW5ndWxhciI6IntDT1VOVH0gc2Vjb25kIGFnbyIsInBsdXJhbCI6IntDT1VOVH0gc2Vjb25kcyBhZ28ifSwibWludXRlc19hZ28iOnsic2luZ3VsYXIiOiJ7Q09VTlR9IG1pbnV0ZSBhZ28iLCJwbHVyYWwiOiJ7Q09VTlR9IG1pbnV0ZXMgYWdvIn0sImhvdXJzX2FnbyI6eyJzaW5ndWxhciI6IntDT1VOVH0gaG91ciBhZ28iLCJwbHVyYWwiOiJ7Q09VTlR9IGhvdXJzIGFnbyJ9LCJvcGVuX2NvbW1lbnRfYm94IjoiQWRkIG5ldyBjb21tZW50IGluc3RlYWQgJnJhcXVvOyIsInVybF91bmF2YWlsYWJsZSI6IlNvcnJ5LCB0aGlzIHVybCBpcyB1bmF2YWlsYWJsZS4iLCJ1bnNhdmVkX2NoYW5nZXNfZ2VuZXJpYyI6IllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcywgYXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGxlYXZlPyIsImFkZCI6IkFkZCIsInJlbW92ZSI6IlJlbW92ZSIsInNlbGVjdCI6IlNlbGVjdCIsIm5vX2ZvbGxvd2Vyc19mb3JfbGV0dGVyIjoiWW91IGRvbiZyc3F1bzt0IGZvbGxvdyBhbnlvbmUgdGhhdCBiZWdpbiB3aXRoIHRoZSBsZXR0ZXIgJmxkcXVvO3tQQUdFX0xFVFRFUn0mcmRxdW87Iiwic2hhcmVfbGltaXRfcmVhY2hlZCI6IllvdSBoYXZlIHJlYWNoZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXJzIHRvIHNoYXJlIHdpdGguIiwiYXRfbGVhc3Rfb25lIjoiVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgdXNlci4iLCJhdmFpbGFibGUiOiJBdmFpbGFibGUiLCJ1bmF2YWlsYWJsZSI6IlVuYXZhaWxhYmxlIiwiYnJvd3NlX2Vycm9yX2dlbmVyaWMiOiJTb3JyeSwgdGhlcmUgd2FzIGFuIGVycm9yIiwiYnJvd3NlX2Vycm9yX25vX3ZpZGVvcyI6IlNvcnJ5LCBubyB2aWRlb3MgZm91bmQiLCJmb2xsb3ciOiJGb2xsb3ciLCJmb2xsb3dpbmciOiJGb2xsb3dpbmciLCJ1bmZvbGxvdyI6IlVuZm9sbG93IiwidW5mb2xsb3dpbmciOiJVbmZvbGxvd2luZyIsImNvdW50X2NvbW1lbnRzIjp7InNpbmd1bGFyIjoie0NPVU5UfSBjb21tZW50IiwicGx1cmFsIjoie0NPVU5UfSBjb21tZW50cyJ9LCJmaXJzdF9jb21tZW50IjoiQmUgdGhlIGZpcnN0IHRvIGNvbW1lbnRcdTIwMjYiLCJub19jb21tZW50c19mb3JfeW91IjoiRm9yYmlkZGVuLiBZb3UgY2Fubm90IHBvc3QgY29tbWVudHMgb24gdGhpcyBwYWdlLiIsIm9vcHMiOiJPb3BzISIsInBsYXllcl90cnlfYWdhaW4iOiJUaGF0IHdhc24ndCBzdXBwb3NlZCB0byBoYXBwZW4uIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbWludXRlcy4iLCJkdXJhdGlvbl9pbnB1dF9taW5fZHVyYXRpb24iOiJUaGUgZHVyYXRpb24gY2Fubm90IGJlIGxlc3MgdGhhbiB7TUlOX0RVUkFUSU9OfS4iLCJkdXJhdGlvbl9pbnB1dF9tYXhfZHVyYXRpb24iOiJUaGUgZHVyYXRpb24gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB7TUFYX0RVUkFUSU9OfS4iLCJkdXJhdGlvbl9pbnB1dF9pbnZhbGlkX2NoYXJhY3RlcnMiOiIwLTkgYW5kIDogYXJlIHRoZSBvbmx5IGFjY2VwdGFibGUgaW5wdXRzLiIsImNsb3NlIjoiQ2xvc2UiLCJleHBhbmQiOiJFeHBhbmQiLCJsb2FkaW5nIjoiTG9hZGluZy4uLiIsInRvcCI6InRvcCIsImFkdmFuY2VkX3NlYXJjaCI6IkFkdmFuY2VkIFNlYXJjaCIsIm5vX3N1Z2dlc3Rpb25zIjoiTm8gc3VnZ2VzdGlvbnMiLCJyZWNlbnRfc2VhcmNoZXMiOiJSZWNlbnQgU2VhcmNoZXMiLCJzZWFyY2hfYWxsIjoiU2VhcmNoIEFsbCBvZiBWaW1lbyIsImVtYWlsX2FuZF9wYXNzd29yZCI6IlBsZWFzZSBlbnRlciB5b3VyIGVtYWlsIGFuZCBwYXNzd29yZCIsImVtYWlsX2FkZHJlc3MiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzIiwibmFtZV9lbWFpbF9hbmRfcGFzc3dvcmQiOiJQbGVhc2UgZW50ZXIgeW91ciBuYW1lLCBlbWFpbCwgYW5kIHBhc3N3b3JkIn07Cjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9nbG9iYWwvcGxheWVyX21hbmFnZXIubWluLmpzPzcxOGIxMGY1Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQ+CiAgICAgICAgaWYgKHR5cGVvZiBwbGF5ZXJBc3NldFVybHMgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXJNYW5hZ2VyLnJ1bihwbGF5ZXJBc3NldFVybHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgIDwvc2NyaXB0PgoKICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9zdGlja3lfdG9wbmF2X2NvbWJpbmVkLm1pbi5qcz81ZmZkNmQ0ZSI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9mLnZpbWVvY2RuLmNvbS9qc19vcHQvcmVhY3RfcHJvZF9jb21iaW5lZC5taW4uanM/MDMxNzc1YTQiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0L2NsaXBfY29tYmluZWQubWluLmpzPzg1ODJlM2E1Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC90b3BuYXZfY2FydF9idXR0b25fY29tYmluZWQubWluLmpzPzQ0ODhjMDkyIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9fYnVuZGxlcy9jbGlwLmJ1bmRsZS5taW4uanM/YTE1ZTU2MDQiPjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgYXN5bmMgc3JjPSJodHRwczovL2YudmltZW9jZG4uY29tL2pzX29wdC9jbGlwX2JldGFfbGlic19hc3luY19jb21iaW5lZC5taW4uanM/NWNjNDZmZmIiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBhc3luYyBzcmM9Imh0dHBzOi8vZi52aW1lb2Nkbi5jb20vanNfb3B0L19idW5kbGVzL2NyZWF0ZV9mYWNlYm9va19oZWFkZXIuYnVuZGxlLm1pbi5qcz85NTRjNDYwMCI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0PgogICAgICAgIGZ1bmN0aW9uIG9uVmltZW9Eb21SZWFkeShlKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZpbWVvLmJ5cGFzc19wbGF5ZXJfcmVzcG9uc2l2ZV9kZWxlZ2F0ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzID0gdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB2aW1lby5wbGF5ZXJfcmVzcG9uc2l2ZV9kZWxlZ2F0ZXMud2lsbE9wZW5TaGFyZU92ZXJsYXkgPSB2aW1lby5wbGF5ZXJfcmVzcG9uc2l2ZV9kZWxlZ2F0ZXMud2lsbE9wZW5TaGFyZU92ZXJsYXkgfHwgZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXJNYW5hZ2VyLnBhdXNlQWxsUGxheWVycygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpbWVvLnNoYXJlLlBvcHVwKGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzLndpbGxPcGVuTG9naW5Gb3JtID0gdmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzLndpbGxPcGVuTG9naW5Gb3JtIHx8IGZ1bmN0aW9uKGlkLCBjb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZpbWVvLk1vZGFsICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXllck1hbmFnZXIucGF1c2VBbGxQbGF5ZXJzKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpbWVvLlNlc3Npb24uY3JlYXRlKHsgcGxheWVyOiAxLCBjbGlwX2lkOiBpZCwgY29udGV4dDogY29udGV4dCB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpbWVvLlNlc3Npb24uY3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGxheWVyTWFuYWdlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxheWVyTWFuYWdlci5zZXREZWZhdWx0RGVsZWdhdGUodmltZW8ucGxheWVyX3Jlc3BvbnNpdmVfZGVsZWdhdGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKFBsYXllck1hbmFnZXIpIHsKICAgICAgICAgICAgICAgICAgICBQbGF5ZXJNYW5hZ2VyLmRpc3BhdGNoUmVhZHlTaWduYWxzKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkucmVhZHkob25WaW1lb0RvbVJlYWR5KTsKICAgICAgICAgICAgPC9zY3JpcHQ+CgoKICAgIDwvYm9keT4KPC9odG1sPgo=
156
- http_version:
157
- recorded_at: Tue, 27 Oct 2020 18:22:38 GMT
158
- - request:
159
- method: head
160
- uri: https://vimeo.com/141349194
161
- body:
162
- encoding: US-ASCII
163
- string: ''
164
- headers:
165
- User-Agent:
166
- - VideoInfo/2.8.0
167
- Accept:
168
- - "*/*"
169
- response:
170
- status:
171
- code: 200
172
- message: OK
173
- headers:
174
- Connection:
175
- - keep-alive
176
- Content-Length:
177
- - '166756'
178
- Server:
179
- - nginx
180
- Content-Type:
181
- - text/html; charset=UTF-8
182
- Expires:
183
- - Tue, 27 Oct 2020 18:32:38 GMT
184
- Set-Cookie:
185
- - vuid=1006669355.1140889689; expires=Fri, 25-Oct-2030 18:22:38 GMT; Max-Age=315360000;
186
- path=/; domain=.vimeo.com; secure; SameSite=None
187
- X-Ua-Compatible:
188
- - IE=edge
189
- X-Xss-Protection:
190
- - 1; mode=block
191
- X-Content-Type-Options:
192
- - nosniff
193
- X-Frame-Options:
194
- - sameorigin
195
- Strict-Transport-Security:
196
- - max-age=31536000; includeSubDomains; preload
197
- Content-Security-Policy-Report-Only:
198
- - 'default-src https: data: blob: wss: ''unsafe-inline'' ''unsafe-eval''; report-uri
199
- /_csp'
200
- X-Bapp-Server:
201
- - pweb-v4875-zz858
202
- Via:
203
- - 1.1 varnish, 1.1 varnish, 1.1 varnish
204
- Cache-Control:
205
- - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
206
- X-Varnish-Cache:
207
- - '0'
208
- X-Vserver:
209
- - infra-webproxy-a-7
210
- X-Vimeo-Dc:
211
- - ge
212
- Accept-Ranges:
213
- - bytes
214
- Date:
215
- - Tue, 27 Oct 2020 18:22:38 GMT
216
- Age:
217
- - '0'
218
- X-Served-By:
219
- - cache-bwi5136-BWI, cache-cwb20521-CWB
220
- X-Cache:
221
- - MISS, MISS
222
- X-Cache-Hits:
223
- - 0, 0
224
- X-Timer:
225
- - S1603822959.504910,VS0,VE338
226
- Vary:
227
- - User-Agent,Accept-Encoding
228
- body:
229
- encoding: UTF-8
230
- string: ''
231
- http_version:
232
- recorded_at: Tue, 27 Oct 2020 18:22:38 GMT
233
- recorded_with: VCR 3.0.3