openbeautyfacts 0.6.3 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +19 -1
  3. data/Rakefile +5 -3
  4. data/lib/openbeautyfacts/additive.rb +9 -39
  5. data/lib/openbeautyfacts/allergen.rb +14 -22
  6. data/lib/openbeautyfacts/brand.rb +14 -22
  7. data/lib/openbeautyfacts/category.rb +14 -22
  8. data/lib/openbeautyfacts/city.rb +14 -22
  9. data/lib/openbeautyfacts/contributor.rb +14 -22
  10. data/lib/openbeautyfacts/country.rb +14 -22
  11. data/lib/openbeautyfacts/entry_date.rb +15 -23
  12. data/lib/openbeautyfacts/faq.rb +16 -41
  13. data/lib/openbeautyfacts/ingredient.rb +14 -22
  14. data/lib/openbeautyfacts/ingredient_that_may_be_from_palm_oil.rb +14 -22
  15. data/lib/openbeautyfacts/label.rb +14 -22
  16. data/lib/openbeautyfacts/last_edit_date.rb +15 -23
  17. data/lib/openbeautyfacts/locale.rb +8 -31
  18. data/lib/openbeautyfacts/manufacturing_place.rb +14 -22
  19. data/lib/openbeautyfacts/mission.rb +16 -63
  20. data/lib/openbeautyfacts/number_of_ingredients.rb +15 -23
  21. data/lib/openbeautyfacts/origin.rb +14 -22
  22. data/lib/openbeautyfacts/packager_code.rb +14 -22
  23. data/lib/openbeautyfacts/packaging.rb +14 -22
  24. data/lib/openbeautyfacts/period_after_opening.rb +14 -22
  25. data/lib/openbeautyfacts/press.rb +16 -47
  26. data/lib/openbeautyfacts/product.rb +18 -175
  27. data/lib/openbeautyfacts/product_state.rb +14 -22
  28. data/lib/openbeautyfacts/purchase_place.rb +14 -22
  29. data/lib/openbeautyfacts/store.rb +14 -22
  30. data/lib/openbeautyfacts/trace.rb +14 -22
  31. data/lib/openbeautyfacts/user.rb +15 -30
  32. data/lib/openbeautyfacts/version.rb +3 -1
  33. data/lib/openbeautyfacts.rb +6 -9
  34. data/test/fixtures/additives.yml +48 -0
  35. data/test/fixtures/brands.yml +48 -0
  36. data/test/fixtures/entry_dates.yml +48 -0
  37. data/test/fixtures/entry_dates_locale.yml +48 -0
  38. data/test/fixtures/faq.yml +48 -0
  39. data/test/fixtures/fetch_product_3600550362626.yml +54 -0
  40. data/test/fixtures/index.yml +48 -0
  41. data/test/fixtures/ingredients.yml +99 -0
  42. data/test/fixtures/ingredients_locale.yml +99 -0
  43. data/test/fixtures/last_edit_dates.yml +48 -0
  44. data/test/fixtures/last_edit_dates_locale.yml +48 -0
  45. data/test/fixtures/login_user.yml +363 -0
  46. data/test/fixtures/mission.yml +48 -0
  47. data/test/fixtures/missions.yml +48 -0
  48. data/test/fixtures/number_of_ingredients_locale.yml +48 -0
  49. data/test/fixtures/numbers_of_ingredients.yml +48 -0
  50. data/test/fixtures/press.yml +48 -0
  51. data/test/fixtures/product_3600550362626.yml +54 -0
  52. data/test/fixtures/product_states.yml +48 -0
  53. data/test/fixtures/product_states_locale.yml +48 -0
  54. data/test/fixtures/products_for_brand.yml +99 -0
  55. data/test/fixtures/products_for_entry_date.yml +99 -0
  56. data/test/fixtures/products_for_ingredient.yml +99 -0
  57. data/test/fixtures/products_for_last_edit_date.yml +99 -0
  58. data/test/fixtures/products_for_number_of_ingredients.yml +99 -0
  59. data/test/fixtures/products_for_period_after_opening.yml +99 -0
  60. data/test/fixtures/products_for_state.yml +99 -0
  61. data/test/fixtures/products_with_additive.yml +99 -0
  62. data/test/fixtures/search_doux.yml +105 -0
  63. data/test/fixtures/search_doux_1_000_000.yml +54 -0
  64. data/test/minitest_helper.rb +5 -3
  65. data/test/test_openbeautyfacts.rb +129 -97
  66. metadata +59 -17
@@ -0,0 +1,99 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://world.openbeautyfacts.org/number-of-ingredients/38/1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 301
19
+ message: Moved Permanently
20
+ headers:
21
+ Access-Control-Allow-Headers:
22
+ - DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,If-None-Match,Authorization
23
+ Access-Control-Allow-Methods:
24
+ - HEAD, GET, PATCH, POST, PUT, OPTIONS
25
+ Access-Control-Allow-Origin:
26
+ - "*"
27
+ Access-Control-Expose-Headers:
28
+ - Content-Length,Content-Range
29
+ Connection:
30
+ - close
31
+ Content-Type:
32
+ - text/html; charset=iso-8859-1
33
+ Date:
34
+ - Mon, 29 Sep 2025 14:07:15 GMT
35
+ Location:
36
+ - "/facets/numbers-of-ingredients/38"
37
+ Server:
38
+ - nginx/1.18.0
39
+ Transfer-Encoding:
40
+ - chunked
41
+ body:
42
+ encoding: UTF-8
43
+ string: |
44
+ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
45
+ <html><head>
46
+ <title>301 Moved Permanently</title>
47
+ </head><body>
48
+ <h1>Moved Permanently</h1>
49
+ <p>The document has moved <a href="/facets/numbers-of-ingredients/38">here</a>.</p>
50
+ <hr>
51
+ <address>Apache/2.4.61 (Debian) Server at world.openbeautyfacts.org Port 80</address>
52
+ </body></html>
53
+ recorded_at: Mon, 29 Sep 2025 14:07:15 GMT
54
+ - request:
55
+ method: get
56
+ uri: https://world.openbeautyfacts.org/facets/numbers-of-ingredients/38
57
+ body:
58
+ encoding: US-ASCII
59
+ string: ''
60
+ headers:
61
+ Accept-Encoding:
62
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
63
+ Accept:
64
+ - "*/*"
65
+ User-Agent:
66
+ - Ruby
67
+ response:
68
+ status:
69
+ code: 200
70
+ message: OK
71
+ headers:
72
+ Connection:
73
+ - close
74
+ Content-Type:
75
+ - text/html; charset=UTF-8
76
+ Date:
77
+ - Mon, 29 Sep 2025 14:07:16 GMT
78
+ Expires:
79
+ - Sun, 28 Sep 2025 14:07:16 GMT
80
+ Server:
81
+ - nginx/1.18.0
82
+ Transfer-Encoding:
83
+ - chunked
84
+ Vary:
85
+ - Accept-Encoding
86
+ X-Content-Type-Options:
87
+ - nosniff
88
+ X-Download-Options:
89
+ - noopen
90
+ X-Request-Id:
91
+ - giue0gtlVz4WrATw
92
+ X-Xss-Protection:
93
+ - 1; mode=block
94
+ body:
95
+ encoding: ASCII-8BIT
96
+ string: !binary |-
97
+ PCEtLSBzdGFydCB0ZW1wbGF0ZXMvd2ViL2NvbW1vbi9zaXRlX2xheW91dC50dC5odG1sIC0tPgoKPCFkb2N0eXBlIGh0bWw+CjxodG1sIGNsYXNzPSJuby1qcyIgbGFuZz0iZW4iIGRhdGEtc2VydmVyZG9tYWluPSJvcGVuYmVhdXR5ZmFjdHMub3JnIiBkaXI9Imx0ciI+CjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHRpdGxlPuKAkyBXb3JsZDwvdGl0bGU+CiAgICAKICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KCTxtZXRhIHByb3BlcnR5PSJmYjphcHBfaWQiIGNvbnRlbnQ9IjIxOTMzMTM4MTUxODA0MSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0iZm9vZCI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IuKAkyBXb3JsZCI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL3dvcmxkLm9wZW5iZWF1dHlmYWN0cy5vcmcvZmFjZXRzL251bWJlcnMtb2YtaW5ncmVkaWVudHMvMzgiPgogICAgCiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vc3RhdGljLm9wZW5mb29kZmFjdHMub3JnL2ltYWdlcy9sb2dvcy9vYmYtbG9nby12ZXJ0aWNhbC13aGl0ZS1zb2NpYWwtbWVkaWEtcHJldmlldy5wbmciPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJBIGNvbGxhYm9yYXRpdmUsIGZyZWUgYW5kIG9wZW4gZGF0YWJhc2Ugb2YgaW5ncmVkaWVudHMsIGFuZCBpbmZvcm1hdGlvbiBvbiBjb3NtZXRpYyBwcm9kdWN0cyBmcm9tIGFyb3VuZCB0aGUgd29ybGQiPgogICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTgweDE4MCIgaHJlZj0iL2ltYWdlcy9mYXZpY29uL29iZi9hcHBsZS10b3VjaC1pY29uLnBuZyI+CjxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiBzaXplcz0iMzJ4MzIiIGhyZWY9Ii9pbWFnZXMvZmF2aWNvbi9vYmYvZmF2aWNvbi0zMngzMi5wbmciPgo8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3BuZyIgc2l6ZXM9IjE2eDE2IiBocmVmPSIvaW1hZ2VzL2Zhdmljb24vb2JmL2Zhdmljb24tMTZ4MTYucG5nIj4KPGxpbmsgcmVsPSJtYW5pZmVzdCIgaHJlZj0iL2ltYWdlcy9mYXZpY29uL29iZi9zaXRlLndlYm1hbmlmZXN0Ij4KPGxpbmsgcmVsPSJtYXNrLWljb24iIGhyZWY9Ii9pbWFnZXMvZmF2aWNvbi9vYmYvc2FmYXJpLXBpbm5lZC10YWIuc3ZnIiBjb2xvcj0iIzViYmFkNSI+CjxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iL2ltYWdlcy9mYXZpY29uL29iZi9mYXZpY29uLmljbyI+CjxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tVGlsZUNvbG9yIiBjb250ZW50PSIjMmI1Nzk3Ij4KPG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi1jb25maWciIGNvbnRlbnQ9Ii9pbWFnZXMvZmF2aWNvbi9vYmYvYnJvd3NlcmNvbmZpZy54bWwiPgo8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciIgY29udGVudD0iI2ZmZmZmZiI+CgoJPG1ldGEgbmFtZT0iYXBwbGUtaXR1bmVzLWFwcCIgY29udGVudD0iYXBwLWlkPTU4ODc5Nzk0OCI+CiAgICA8bGluayByZWw9ImNhbm9uaWNhbCIgaHJlZj0iaHR0cHM6Ly93b3JsZC5vcGVuYmVhdXR5ZmFjdHMub3JnL2ZhY2V0cy9udW1iZXJzLW9mLWluZ3JlZGllbnRzLzM4Ij4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9jc3MvZGlzdC9hcHAtbHRyLmNzcz92PTE3NTc2NTgxMDIiIGRhdGEtYmFzZS1sYXlvdXQ9InRydWUiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2Nzcy9kaXN0L2pxdWVyeXVpL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiIGRhdGEtYmFzZS1sYXlvdXQ9InRydWUiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2Nzcy9kaXN0L3NlbGVjdDIubWluLmNzcyI+CiAgICA8bGluayByZWw9InNlYXJjaCIgaHJlZj0iaHR0cHM6Ly93b3JsZC5vcGVuYmVhdXR5ZmFjdHMub3JnL2NnaS9vcGVuc2VhcmNoLnBsIiB0eXBlPSJhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sIiB0aXRsZT0iT3BlbiBCZWF1dHkgRmFjdHMiPgogICAgPHNjcmlwdCB0eXBlPSJtb2R1bGUiIHNyYz0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9qcy9kaXN0L29mZi13ZWJjb21wb25lbnRzLmJ1bmRsZWQuanMiPjwvc2NyaXB0PgoJCiAgICA8c3R5bGUgbWVkaWE9ImFsbCI+CiAgICAgICAgLnNob3ctd2hlbi1uby1hY2Nlc3MtdG8tcHJvZHVjZXJzLXBsYXRmb3JtIHtkaXNwbGF5Om5vbmV9Ci5zaG93LXdoZW4tbG9nZ2VkLWluIHtkaXNwbGF5Om5vbmV9CgoJCQoJCS5iYWRnZS1jb250YWluZXJ7CgkJCW1hcmdpbjogMCBhdXRvOwoJCX0KCgkJLmJhZGdlLWNvbnRhaW5lciBpbWd7CgkJCW1hcmdpbjogNXB4OwoJCX0KCQlAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUzN3B4ICkgYW5kIChtaW4td2lkdGg6IDI4MHB4KSB7CgkJCS5iYWRnZS1jb250YWluZXJ7CgkJCQl3aWR0aDogMjgwcHg7CgkJCX0KCQl9CgkJQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAyNzlweCApewoJCQkuYmFkZ2UtY29udGFpbmVyewoJCQkJd2lkdGg6IDEzMHB4OwoJCQl9CgkJfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keSBjbGFzcz0ibGlzdF9vZl90YWdzX3BhZ2UiPgoKCTwhLS0gTWF0b21vIC0tPgo8c2NyaXB0PgogIHZhciBfcGFxID0gd2luZG93Ll9wYXEgPSB3aW5kb3cuX3BhcSB8fCBbXTsKICAvKiB0cmFja2VyIG1ldGhvZHMgbGlrZSAic2V0Q3VzdG9tRGltZW5zaW9uIiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSAidHJhY2tQYWdlVmlldyIgKi8KICBfcGFxLnB1c2goWyJzZXREb2N1bWVudFRpdGxlIiwgZG9jdW1lbnQuZG9tYWluICsgIi8iICsgZG9jdW1lbnQudGl0bGVdKTsKICBfcGFxLnB1c2goWyJzZXRDb29raWVEb21haW4iLCAiKi5vcGVuYmVhdXR5ZmFjdHMub3JnIl0pOwogIF9wYXEucHVzaChbInNldERvbWFpbnMiLCBbIioub3BlbmJlYXV0eWZhY3RzLm9yZyJdXSk7CiAgX3BhcS5wdXNoKFsic2V0RG9Ob3RUcmFjayIsIHRydWVdKTsKICBfcGFxLnB1c2goWyJkaXNhYmxlQ29va2llcyJdKTsKICBfcGFxLnB1c2goWyd0cmFja1BhZ2VWaWV3J10pOwogIF9wYXEucHVzaChbJ2VuYWJsZUxpbmtUcmFja2luZyddKTsKICAoZnVuY3Rpb24oKSB7CiAgICB2YXIgdT0iLy9hbmFseXRpY3Mub3BlbmZvb2RmYWN0cy5vcmcvIjsKICAgIF9wYXEucHVzaChbJ3NldFRyYWNrZXJVcmwnLCB1KydtYXRvbW8ucGhwJ10pOwogICAgX3BhcS5wdXNoKFsnc2V0U2l0ZUlkJywgJzEwJ10pOwogICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTsKICAgIGcuYXN5bmM9dHJ1ZTsgZy5zcmM9dSsnbWF0b21vLmpzJzsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpOwogIH0pKCk7Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+PHA+PGltZyBzcmM9Ii8vYW5hbHl0aWNzLm9wZW5mb29kZmFjdHMub3JnL21hdG9tby5waHA/aWRzaXRlPTEwJmFtcDtyZWM9MSIgc3R5bGU9ImJvcmRlcjowOyIgYWx0PSIiIC8+PC9wPjwvbm9zY3JpcHQ+CgoKCTxvZmYtd2ViY29tcG9uZW50cy1jb25maWd1cmF0aW9uCiAgbGFuZ3VhZ2UtY29kZT0iZW4iCiAgY291bnRyeS1jb2RlPSJ3b3JsZCIKICByb2JvdG9mZi1jb25maWd1cmF0aW9uPSd7CiAgICAiYXBpVXJsIjogImh0dHBzOi8vcm9ib3RvZmYub3BlbmZvb2RmYWN0cy5vcmcvYXBpL3YxIiwKICAgICJpbWdVcmwiOiAiaHR0cHM6Ly9pbWFnZXMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvcHJvZHVjdHMiCiAgfScKICAKICBvcGVuZm9vZGZhY3RzLWFwaS11cmw9Imh0dHBzOi8vd29ybGQub3BlbmJlYXV0eWZhY3RzLm9yZyIKICBhc3NldHMtaW1hZ2VzLXBhdGg9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvY3NzL2Rpc3QvaW1hZ2VzIgogID48L29mZi13ZWJjb21wb25lbnRzLWNvbmZpZ3VyYXRpb24+CgkKCQoJPGRpdiBjbGFzcz0ic2tpcCI+PGEgaHJlZj0iI2NvbnRlbnQiIHRhYmluZGV4PSIwIj5Ta2lwIHRvIENvbnRlbnQ8L2E+PC9kaXY+CgkKCgk8ZGl2IGlkPSJiYXJjb2RlLXNjYW5uZXItbW9kYWwiIGNsYXNzPSJtb2RhbCBpc19oaWRkZW4iPgogIDxkaXYgY2xhc3M9Im1vZGFsLWJhY2tkcm9wIj48L2Rpdj4KICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgIDxzcGFuPjxoMj5TY2FuIGEgcHJvZHVjdDxoMj48L3NwYW4+CiAgICAgIDxidXR0b24gY2xhc3M9Im1vZGFsLWNsb3NlLWJ1dHRvbiI+JnRpbWVzOzwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2PgogICAgICA8YmFyY29kZS1zY2FubmVyIGlkPSJiYXJjb2RlLXNjYW5uZXIiPjwvYmFyY29kZS1zY2FubmVyPgogICAgPC9kaXY+CiAgICA8ZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2ID4KICAgICAgPGxhYmVsIGZvcj0iYmFyY29kZS1tb2RhbC1pbnB1dCI+T3IgZW50ZXIgYmFyY29kZSBtYW51YWxseTwvbGFiZWw+CiAgICAgIDxkaXYgY2xhc3M9ImJhcmNvZGUtbW9kYWwtZ3JvdXAiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iYmFyY29kZS1tb2RhbC1pbnB1dCIgY2xhc3M9ImJhcmNvZGUtbW9kYWwtaW5wdXQiIGlucHV0bW9kZT0ibnVtZXJpYyIgcGF0dGVybj0iXGQqIiAvPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJhcmNvZGUtbW9kYWwtYnV0dG9uIGJ1dHRvbiIgaWQ9ImJhcmNvZGUtbW9kYWwtYnV0dG9uIiBkaXNhYmxlZD5TY2FuPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPHNjcmlwdCBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvanMvZGlzdC9iYXJjb2RlLXNjYW5uZXIuanMiPjwvc2NyaXB0PgoKCgk8ZGl2IGlkPSJwYWdlIj4KCQkKCQk8ZGl2IGNsYXNzPSJ1cHBlci1uYXYgY29udGFpbi10by1ncmlkIiAgaWQ9InVwTmF2Ij4KCQkJPG5hdiBjbGFzcz0idG9wLWJhciAiIGRhdGEtdG9wYmFyIHJvbGU9Im5hdmlnYXRpb24iPgoJCQkJCgkJCQk8c2VjdGlvbiBjbGFzcz0idG9wLWJhci1zZWN0aW9uIj4KCQkJCQkKCQkJCQk8IS0tIExlZnQgTmF2IFNlY3Rpb24gLS0+CgkJCQkJPHVsIGNsYXNzPSJsZWZ0Ij4KCgkJCQkJCTxsaSBjbGFzcz0iaGFzLWRyb3Bkb3duIj4KCQkJCQkJCTxhIGlkPSJtZW51X2xpbmsiPgoJCQkJCQkJCTxzcGFuIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+CgkJCQkJCQkJCW1lbnUKCQkJCQkJCQk8L3NwYW4+CgkJCQkJCQk8L2E+CgkJCQkJCQk8dWwgY2xhc3M9ImRyb3Bkb3duIj4JCQkJCgkJCQkJCQkJCgkJCQkJCQkJCTxsaT48YSBocmVmPSIvZGlzY292ZXIiPkRpc2NvdmVyPC9hPjwvbGk+CgkJCQkJCQkJCTxsaT48YSBocmVmPSIvY29udHJpYnV0ZSI+Q29udHJpYnV0ZTwvYT48L2xpPgoJCQkJCQkJCQk8bGkgY2xhc3M9ImRpdmlkZXIiPjwvbGk+CgkJCQkJCQkJCTxsaT48bGFiZWw+QWRkIHByb2R1Y3RzPC9sYWJlbD48L2xpPgogICAgICAgICAgICAgICAgPCEtLSBGb3IgcmVmZXJlbmNlOiBnZXRfdGhlX2FwcF9saW5rX29mZiIgPSAvb3Blbi1mb29kLWZhY3RzLW1vYmlsZS1hcHAiIC0tPgoJCQkJCQkJCQk8bGk+PGEgaHJlZj0iL29wZW4tYmVhdXR5LWZhY3RzLW1vYmlsZS1hcHA/dXRtX3NvdXJjZT1vZmYmdXRmX21lZGl1bT13ZWImdXRtX2NhbXBhaWduPXByb19wbGF0Zm9ybV9pbnN0YWxsX3RoZV9hcHBfdG9fYWRkX3Byb2R1Y3RzX2VuIj5JbnN0YWxsIHRoZSBhcHAgdG8gYWRkIHByb2R1Y3RzPC9hPjwvbGk+CgkJCQkJCQkJCTxsaT48YSBocmVmPSIvY2dpL3Byb2R1Y3QucGw/dHlwZT1zZWFyY2hfb3JfYWRkJmFjdGlvbj1kaXNwbGF5Ij5BZGQgYSBwcm9kdWN0PC9hPjwvbGk+CgkJCQkJCQkJCgoJCQkJCQkJCTxsaSBjbGFzcz0iZGl2aWRlciI+PC9saT4KCQkJCQkJCQk8bGk+PGxhYmVsPlNlYXJjaCBhbmQgYW5hbHl6ZSBwcm9kdWN0czwvbGFiZWw+PC9saT4KCgkJCQkJCQkJPGxpPgoJCQkJCQkJCQk8YSBocmVmPSIvY2dpL3NlYXJjaC5wbCI+QWR2YW5jZWQgc2VhcmNoPC9hPgoJCQkJCQkJCTwvbGk+CgkJCQkJCQkJPGxpPgoJCQkJCQkJCQk8YSBocmVmPSIvY2dpL3NlYXJjaC5wbD9ncmFwaD0xIj5HcmFwaHMgYW5kIG1hcHM8L2E+CgkJCQkJCQkJPC9saT4KCQkJCQkJCQkKCQkJCQkJCTwvdWw+CgkJCQkJCTwvbGk+CgkJCQkJCQoJCQkJCQk8bGk+CgkJCQkJCQk8dWwgY2xhc3M9ImNvdW50cnlfbGFuZ3VhZ2Vfc2VsZWN0aW9uIj4KCQkJCQkJCQk8bGkgY2xhc3M9Imhhcy1mb3JtIGhhcy1kcm9wZG93biIgaWQ9InNlbGVjdF9jb3VudHJ5X2xpIj4KCQkJCQkJCQkJPHNlbGVjdCBpZD0ic2VsZWN0X2NvdW50cnkiIHN0eWxlPSJ3aWR0aDoxMDAlIiBkYXRhLXBsYWNlaG9sZGVyPSJDb3VudHJ5Ij4KCQkJCQkJCQkJCTxvcHRpb24+PC9vcHRpb24+CgkJCQkJCQkJCTwvc2VsZWN0PgoJCQkJCQkJCTwvbGk+CgkJCQkJCQkJPGxpIGNsYXNzPSJoYXMtZHJvcGRvd24iPgoJCQkJCQkJCQk8YSBocmVmPSJodHRwczovL3dvcmxkLm9wZW5iZWF1dHlmYWN0cy5vcmcvIj5FbmdsaXNoPC9hPgoKCQkJCQkJCQkJPHVsIGNsYXNzPSJkcm9wZG93biI+CgkJCQkJCQkJCQkKCQkJCQkJCQkJPC91bD4KCQkJCQkJCQk8L2xpPgoJCQkJCQkJPC91bD4KCQkJCQkJPC9saT4KCQkJCQk8L3VsPgoKCgkJCQkJPCEtLSBSaWdodCBOYXYgU2VjdGlvbiAtLT4KCQkJCQkKCQkJCQk8dWwgY2xhc3M9InJpZ2h0Ij4KCQkJCQkJCgkJCQkJCQk8bGkgY2xhc3M9Imgtc3BhY2UtdGlueSBoYXMtZm9ybSI+CgkJCQkJCQkJPGEgaHJlZj0iL2NnaS9zZXNzaW9uLnBsIiBjbGFzcz0icm91bmQgYnV0dG9uIHNlY29uZGFyeSI+CgkJCQkJCQkJCTxzcGFuIGNsYXNzPSJtYXRlcmlhbC1pY29ucyBtYXRlcmlhbC1zeW1ib2xzLWJ1dHRvbiI+YWNjb3VudF9jaXJjbGU8L3NwYW4+CgkJCQkJCQkJCVNpZ24gaW4KCQkJCQkJCQk8L2E+CgkJCQkJCQk8L2xpPgoJCQkJCQkKCQkJCQk8L3VsPgoJCQkJPC9zZWN0aW9uPgoJCQk8L25hdj4KCQk8L2Rpdj4KCQkKCgkJPGRpdiBpZD0ibWFpbl9jb250YWluZXIiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZSIgY2xhc3M9ImJsb2NrX2xhdHRlIj4KCQkKCQkKCQk8ZGl2IGNsYXNzPSJ0b3BiYXJzdGlja3kiPgoJCQk8ZGl2IGNsYXNzPSJjb250YWluLXRvLWdyaWQgIiBpZD0ib2ZmTmF2IiA+CgkJCQk8bmF2IGNsYXNzPSJ0b3AtYmFyIiBkYXRhLXRvcGJhciByb2xlPSJuYXZpZ2F0aW9uIiA+CgoJCQkJCTx1bCBjbGFzcz0idGl0bGUtYXJlYSI+CgkJCQkJCTxsaSBjbGFzcz0ibmFtZSI+CgkJCQkJCQk8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MjkycHg7Ij4KCQkJCQkJCQk8YSBocmVmPSIvIj4KCQkJCQkJCQk8aW1nIGlkPSJsb2dvIiBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1hZ2VzL2xvZ29zL29iZi1sb2dvLWhvcml6b250YWwtbGlnaHQuc3ZnIiBhbHQ9Ik9wZW4gQmVhdXR5IEZhY3RzIiBzdHlsZT0ibWFyZ2luOjhweDtoZWlnaHQ6NDhweDt3aWR0aDphdXRvOyI+CgkJCQkJCQkJCgkJCQkJCQk8L2E+CgkJCQkJCQk8L2Rpdj4KCQkJCQkJPC9saT4KCQkJCQk8L3VsPgoKCQkJCQkKCQkJCQkKCQkJCQk8c2VjdGlvbiBjbGFzcz0idG9wLWJhci1zZWN0aW9uIj4KCQkJCQkKCQkJCQkJPHVsIGNsYXNzPSJsZWZ0IHNtYWxsLTQiPgoJCQkJCQkJPGxpIGNsYXNzPSJzZWFyY2gtbGkiPgoJCQkJCQkJCgkJCQkJCQkJPGZvcm0gYWN0aW9uPSIvY2dpL3NlYXJjaC5wbCI+CgkJCQkJCQkJPGRpdiBjbGFzcz0icm93Ij48ZGl2IGNsYXNzPSJzbWFsbC0xMiI+CgkJCQkJCQkJPGRpdiBjbGFzcz0icm93IGNvbGxhcHNlIHBvc3RmaXgtcm91bmQiPgoJCQkJCQkJCQk8ZGl2IGNsYXNzPSJjb2x1bW5zIj4KCQkJCQkJCQkJPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2ggZm9yIGEgcHJvZHVjdCIgbmFtZT0ic2VhcmNoX3Rlcm1zIiB2YWx1ZT0iIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjp3aGl0ZSI+CgkJCQkJCQkJCTxpbnB1dCBuYW1lPSJzZWFyY2hfc2ltcGxlIiB2YWx1ZT0iMSIgdHlwZT0iaGlkZGVuIj4KCQkJCQkJCQkJPGlucHV0IG5hbWU9ImFjdGlvbiIgdmFsdWU9InByb2Nlc3MiIHR5cGU9ImhpZGRlbiI+CgkJCQkJCQkJCTwvZGl2PgoJCQkJCQkJCQk8ZGl2IGNsYXNzPSJjb2x1bW5zIHBvc3RmaXgtYnV0dG9uLXdyYXBwZXIiPgoJCQkJCQkJCQk8YnV0dG9uIHR5cGU9InN1Ym1pdCIgdGl0bGU9IlNlYXJjaCIgY2xhc3M9ImJ1dHRvbiBwb3N0Zml4IiBzdHlsZT0ibGluZS1oZWlnaHQ6bm9ybWFsIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI0IDI0IiBjbGFzcz0iaWNvbiIgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz48L2J1dHRvbj4KCQkJCQkJCQkJPC9kaXY+CgkJCQkJCQkJCTxkaXYgY2xhc3M9ImNvbHVtbnMgcG9zdGZpeC1idXR0b24td3JhcHBlciBpc19oaWRkZW4iPgogIDxidXR0b24KICAgIHR5cGU9ImJ1dHRvbiIKICAgIHRpdGxlPSJTY2FuIGEgcHJvZHVjdCIKICAgIGNsYXNzPSJidXR0b24gYmFyY29kZS1zY2FubmVyLWJ1dHRvbiIKICAgIGlkPSJiYXJjb2RlLXNjYW5uZXItYnV0dG9uIgogID4KICAgIDxzdmcgc3R5bGU9IndpZHRoOjI0cHg7aGVpZ2h0OjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgY2xhc3M9Imljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIj48cGF0aCBkPSJNMiw2SDRWMThIMlY2TTUsNkg2VjE4SDVWNk03LDZIMTBWMThIN1Y2TTExLDZIMTJWMThIMTFWNk0xNCw2SDE2VjE4SDE0VjZNMTcsNkgyMFYxOEgxN1Y2TTIxLDZIMjJWMThIMjFWNloiLz48L3N2Zz4KICA8L2J1dHRvbj4KCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvanMvZGlzdC9iYXJjb2RlLXNjYW5uZXItYnV0dG9uLmpzIj48L3NjcmlwdD4KPC9kaXY+CgoJCQkJCQkJCTwvZGl2PgoJCQkJCQkJCTwvZGl2PjwvZGl2PgoJCQkJCQkJCTwvZm9ybT4KCQkJCQkJCTwvbGk+CgkJCQkJCTwvdWw+CgkJCQkJPHVsIGNsYXNzPSJzZWFyY2hfYW5kX2xpbmtzIj4KCQkJCQkJPGxpPjxhIGhyZWY9Ii9kaXNjb3ZlciIgY2xhc3M9InRvcC1iYXItbGlua3MiPkRpc2NvdmVyPC9hPjwvbGk+CgkJCQkJCTxsaT48YSBocmVmPSIvY29udHJpYnV0ZSIgY2xhc3M9InRvcC1iYXItbGlua3MiPkNvbnRyaWJ1dGU8L2E+PC9saT4KCQkJCQkJPGxpIGNsYXNzPSJzaG93LWZvci14bGFyZ2UtdXAiPjxhIGhyZWY9Imh0dHBzOi8vd29ybGQucHJvLm9wZW5mb29kZmFjdHMub3JnLyIgY2xhc3M9InRvcC1iYXItbGlua3MiPlByb2R1Y2VyczwvYT48L2xpPgoJCQkJCQk8bGkgY2xhc3M9ImZsZXgtZ3JpZCBnZXRhcHAiPjxhIGhyZWY9Ii9vcGVuLWJlYXV0eS1mYWN0cy1tb2JpbGUtYXBwP3V0bV9zb3VyY2U9b2ZmJnV0Zl9tZWRpdW09d2ViJnV0bV9jYW1wYWlnbj1zZWFyY2hfYW5kX2xpbmtzX3Byb21vX2VuIiBjbGFzcz0iYnV0dG9uYmFyIGJ1dHRvbiIgc3R5bGU9InRvcDowOyI+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgY2xhc3M9Imljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIj48cGF0aCBkPSJNMTYgMUg4QzYuMzQgMSA1IDIuMzQgNSA0djE2YzAgMS42NiAxLjM0IDMgMyAzaDhjMS42NiAwIDMtMS4zNCAzLTNWNGMwLTEuNjYtMS4zNC0zLTMtM3ptLTIgMjBoLTR2LTFoNHYxem0zLjI1LTNINi43NVY0aDEwLjV2MTR6Ii8+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPiA8c3BhbiBjbGFzcz0iYnQtdGV4dCI+R2V0IHRoZSBhcHA8L3NwYW4+PC9hPjwvbGk+CgkJCQk8IS0tIEZvciByZWZlcmVuY2U6IGdldF90aGVfYXBwX2xpbmtfb2ZmIiA9IC9vcGVuLWZvb2QtZmFjdHMtbW9iaWxlLWFwcCIgLS0+CiAgICAgICAgICA8L3VsPgoJCQkJCTwvc2VjdGlvbj4KCQkJCQkKCQkJCTwvbmF2PgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCgkKCQoJCTxuYXYgY2xhc3M9InRhYi1iYXIgaGlkZSI+CgkJCTxkaXYgY2xhc3M9ImxlZnQtc21hbGwiPgoJCQkJPGEgaHJlZj0iI2lkT2ZMZWZ0TWVudSIgcm9sZT0iYnV0dG9uIiBhcmlhLWNvbnRyb2xzPSJpZE9mTGVmdE1lbnUiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIiBjbGFzcz0ibGVmdC1vZmYtY2FudmFzLXRvZ2dsZSBidXR0b24gcG9zdGZpeCBhbm9ueW1vdXMiPgoJCQkJPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgY2xhc3M9Imljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIj48cGF0aCBkPSJNMyA1djE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJINWMtMS4xMSAwLTIgLjktMiAyem0xMiA0YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3ptLTkgOGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MUg2di0xeiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4KCQkJCTwvYT4KCQkJPC9kaXY+CgkJCTxkaXYgY2xhc3M9Im1pZGRsZSB0YWItYmFyLXNlY3Rpb24iPgoJCQkJPGZvcm0gYWN0aW9uPSIvY2dpL3NlYXJjaC5wbCI+CgkJCQkJPGRpdiBjbGFzcz0icm93IGNvbGxhcHNlIj4KCQkJCQkJPGRpdiBjbGFzcz0ic21hbGwtOCBjb2x1bW5zIj4KCQkJCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBhIHByb2R1Y3QiIG5hbWU9InNlYXJjaF90ZXJtcyI+CgkJCQkJCQk8aW5wdXQgbmFtZT0ic2VhcmNoX3NpbXBsZSIgdmFsdWU9IjEiIHR5cGU9ImhpZGRlbiI+CgkJCQkJCQk8aW5wdXQgbmFtZT0iYWN0aW9uIiB2YWx1ZT0icHJvY2VzcyIgdHlwZT0iaGlkZGVuIj4KCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9InNtYWxsLTIgY29sdW1ucyI+CgkJCQkJCQk8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ1dHRvbiBwb3N0Zml4Ij48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI0IDI0IiBjbGFzcz0iaWNvbiIgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz48L2J1dHRvbj4KCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9InNtYWxsLTIgY29sdW1ucyI+CgkJCQkJCQk8YSBocmVmPSIvY2dpL3NlYXJjaC5wbCIgdGl0bGU9IkFkdmFuY2VkIHNlYXJjaCI+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgY2xhc3M9Imljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIj48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+IDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGNsYXNzPSJpY29uIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSI+PHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PC9zdmc+PC9hPgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZm9ybT4KCQkJPC9kaXY+CgkJPC9uYXY+CgkJCgoJCTxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJvZmYtY2FudmFzLXdyYXAgYmxvY2tfbGF0dGUiIGRhdGEtb2ZmY2FudmFzPgoJCQk8ZGl2IGNsYXNzPSJpbm5lci13cmFwIj4KCQkJCgkJCQk8YSBjbGFzcz0iZXhpdC1vZmYtY2FudmFzIj48L2E+CgoJCQkJCgkJCQkKCQkJCTwhLS0gZnVsbCB3aWR0aCBiYW5uZXIgb24gbW9iaWxlIC0tPgoJCQkJCgkJCQkKCgkJCQkKCgkJCQk8ZGl2IGNsYXNzPSJtYWluIGJsb2NrX2xpZ2h0Ij4KCQkJCQk8ZGl2IGlkPSJtYWluX2NvbHVtbiI+CgoJCQkJCQkKCQkJCQkJCgkJCQkJCQkKCQkJCQkJCQoJCQkJCQkJCTwhLS0gc3RhcnQgdGVtcGxhdGVzL3dlYi9jb21tb24vaW5jbHVkZXMvZG9uYXRlX2Jhbm5lci50dC5odG1sIC0tPgoKCgo8IS0tIERvbmF0aW9uIGJhbm5lciBAIGZvb3RlciAtLT4KCgo8IS0tIGVuZCB0ZW1wbGF0ZXMvd2ViL2NvbW1vbi9pbmNsdWRlcy9kb25hdGVfYmFubmVyLnR0Lmh0bWwgLS0+CgoJCQkJCQkJCQoKCjxzZWN0aW9uIGlkPSJkb25hdGlvbi1iYW5uZXItdG9wIiBjbGFzcz0icm93IiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmUiPgogIAogIDxhIGhyZWY9Imh0dHBzOi8vY29ubmVjdC5vcGVuZm9vZGZhY3RzLm9yZy9ldmVudC9vcGVuLWZvb2QtZmFjdHMtZGF5cy0yMDI1LTMwL3JlZ2lzdGVyIj4KICAgIDxpbWcgc3JjPSIvaW1hZ2VzL21pc2MvZG9uYXRpb24tYmFubmVycy9vZmYtZGF5cy0yMDI1LWVuLjEyODB4MTkxLnBuZyIKICAgICAgIGFsdD0iT3BlbiBGb29kIEZhY3RzIERheXMgMjAyNSIKICAgICAgIHdpZHRoPSIxMjgwIgogICAgICAgaGVpZ2h0PSIxOTEiIGNsYXNzPSJzaG93LWZvci1tZWRpdW0tdXAiLz4KICAgIDxpbWcgc3JjPSIvaW1hZ2VzL21pc2MvZG9uYXRpb24tYmFubmVycy9vZmYtZGF5cy0yMDI1LWVuLm1vYmlsZS5wbmciCiAgICAgICBhbHQ9Ik9wZW4gRm9vZCBGYWN0cyBEYXlzIDIwMjUiCiAgICAgICB3aWR0aD0iMTI4MCIKICAgICAgIGhlaWdodD0iNDc3IiBjbGFzcz0ic2hvdy1mb3Itc21hbGwtb25seSIvPiAgICAKICA8L2E+CiAgCgoKICA8ZGl2IGNsYXNzPSJkb25hdGlvbi1iYW5uZXJfX2Nsb3NlIj4KICAgIDxidXR0b24gaWQ9ImhpZGUtZG9uYXRlLWJhbm5lciIgY2xhc3M9Im1hdGVyaWFsLWljb25zIG1vZGVzdCIgb25jbGljaz0iRG9uYXRpb25CdXR0b24oKTsiIG9ua2V5cHJlc3M9IkRvbmF0aW9uQnV0dG9uKCk7Ij5jbG9zZTwvYnV0dG9uPgogIDwvZGl2Pgo8L3NlY3Rpb24+Cgo8c2NyaXB0PgogIGxldCBkID0gbmV3IERhdGUoKTsKICBsZXQgYmFubmVySUQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9uYXRpb24tYmFubmVyLXRvcCcpOwogIGxldCBnZXREb21haW4gPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLnNwbGl0KCcuJyk7CgogIGZ1bmN0aW9uIHNldEJhbm5lckNvb2tpZShiY25hbWUsIGJjdmFsLCBiY2V4ZGF5cykgewogICAgZC5zZXRUaW1lKGQuZ2V0VGltZSgpICsgKGJjZXhkYXlzKjYwKjYwKjI0KjEwMDApKTsKICAgIGxldCBleHBpcmVzID0gJ2V4cGlyZXM9JyArIGQudG9VVENTdHJpbmcoKTsKICAgIC8vIEFwcGx5IGNvb2tpZSBmb3IgZXZlcnkgZG9tYWluIGNvbnRhaW5zIG9wZW4uLi5mYWN0cwogICAgbGV0IGRvbWFpbiA9ICdkb21haW49LicgKyBnZXREb21haW4uc2xpY2UoMSkuam9pbignLicpOwogICAgZG9jdW1lbnQuY29va2llID0gYmNuYW1lICsgJz0nICsgYmN2YWwgKyAnOycgKyBleHBpcmVzICsgJzsnICsgZG9tYWluICsgJztTYW1lU2l0ZT1Ob25lO1NlY3VyZTtwYXRoPS8nOwogIH0KCiAgZnVuY3Rpb24gZ2V0QmFubmVyQ29va2llKGJjbmFtZSkgewogICAgY29uc3QgbmFtZSA9IGJjbmFtZSArICc9JzsKICAgIGNvbnN0IGRlY29kZWRDb29raWVzID0gZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZSk7CiAgICBjb25zdCBjb29raWVzID0gZGVjb2RlZENvb2tpZXMuc3BsaXQoJzsnKTsKICAgIGZvciAoY29uc3QgY29va2llIG9mIGNvb2tpZXMpIHsKICAgICAgbGV0IGMgPSBjb29raWU7CiAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PSAnICcpIHsgYyA9IGMuc3Vic3RyaW5nKDEpOyB9CiAgICAgIGlmIChjLmluZGV4T2YobmFtZSkgPT0gMCkgeyByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsIGMubGVuZ3RoKTsgfQogICAgfQoKICAgIHJldHVybiAnJzsKICB9CgogIGZ1bmN0aW9uIERvbmF0aW9uQnV0dG9uKCkgewogICAgc2V0QmFubmVyQ29va2llKCdvZmZfZGF5c18yMDI1JywgMSwgMTgwKTsKICAgIGJhbm5lcklELnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgfQoKICBpZiAoZ2V0QmFubmVyQ29va2llKCdvZmZfZGF5c18yMDI1JykgIT09ICcnKSB7CiAgICBiYW5uZXJJRC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIH0gZWxzZSB7CiAgICBiYW5uZXJJRC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOwogIH0KPC9zY3JpcHQ+CgoKCQkJCQkJCQoJCQkJCQkKCQkJCQkJCiAgICAgICAgICAgIAkJCQoJCQkJCQkKCQkJCQkJCTxkaXYgY2xhc3M9InJvdyI+CgkJCQkJCQkJPGRpdiBjbGFzcz0ic21hbGwtMTIgY29sdW1uIj4KCQkJCQkJCQkJPGgxIGNsYXNzPSJpZi1lbXB0eS1kbm9uZSI+4oCTIFdvcmxkPC9oMT4KCQkJCQkJCQkJPCEtLSBzdGFydCB0ZW1wbGF0ZXMvd2ViL3BhZ2VzL3RhZy90YWcudHQuaHRtbCAtLT4KPGRpdiBjbGFzcz0idGFnIj4KICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0ibGFyZ2UtNiBjb2x1bW4iPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFnX25hdmlnYXRpb24iPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgCgogICAgICAgICAgICAKCiAgICAgICAgICAgIAogICAgICAgIDwvZGl2PgoKICAgICAgICAKICAgIDwvZGl2Pgo8L2Rpdj4KCjwhLS0gZW5kIHRlbXBsYXRlcy93ZWIvcGFnZXMvdGFnL3RhZy50dC5odG1sIC0tPgo8cD5ObyBwcm9kdWN0cy48L3A+CgkJCQkJCQkJPC9kaXY+CgkJCQkJCQk8L2Rpdj4KCQkJCQkJCgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJPC9kaXY+CgkJPC9kaXY+CgoJCQoJCTxmb290ZXI+CgkJCTxkaXYgY2xhc3M9ImJsb2NrX2xpZ2h0IGJnLXdoaXRlIiBpZD0iaW5zdGFsbF90aGVfYXBwX2Jsb2NrIj4KCQkJCTxkaXYgY2xhc3M9InJvdyI+CgkJCQkJPGRpdiBjbGFzcz0ic21hbGwtMTIgZmxleC1ncmlkIHYtc3BhY2Utc2hvcnQgdi1hbGlnbi1jZW50ZXIgZGlyZWN0aW9uLXJvdyBoLXNwYWNlLXRpbnkiPgoJCQkJCQk8ZGl2IGNsYXNzPSJjZWxsIHNtYWxsLTEwMCBtZWRpdW0tMTAwIGxhcmdlLTUwIGZsZXgtZ3JpZCB2LWFsaWduLWNlbnRlciBkaXJlY3Rpb24tcm93Ij4KCQkJCQkJCTxpbWcgY2xhc3M9ImNlbGwgc21hbGwtNTAgdi1hbGlnbi1jZW50ZXIiIHNyYz0iL2ltYWdlcy9pbGx1c3RyYXRpb25zL2FwcC1pY29uLWluLXRoZS1jbG91ZHMuc3ZnIiBhbHQ9IlRoZSBPcGVuIEZvb2QgRmFjdHMgbG9nbyBpbiB0aGUgY2xvdWQiIHN0eWxlPSJoZWlnaHQ6MTIwcHgiPgoJCQkJCQkJPGRpdiBjbGFzcz0iY2VsbCBzbWFsbC01MCB2LWFsaWduLWNlbnRlciIgaWQ9ImZvb3Rlcl9zY2FuIiBzdHlsZT0iZGlzcGxheTpibG9jayI+CgkJCQkJCQkJPGRpdiBpZD0iZm9vdGVyX2luc3RhbGxfdGhlX2FwcCI+CgkJCQkJCQkJCUluc3RhbGwgdGhlIGFwcCEKCQkJCQkJCQk8L2Rpdj4KCQkJCQkJCQlTY2FuIHlvdXIgPHNwYW4gaWQ9ImV2ZXJ5ZGF5Ij5ldmVyeWRheTwvc3Bhbj4gPHNwYW4gaWQ9ImZvb2RzIj5mb29kczwvc3Bhbj4KCQkJCQkJCTwvZGl2PgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGRpdiBjbGFzcz0icm93Ij4KCQkJCQkJCTxkaXYgY2xhc3M9InNtYWxsLTEyIG1lZGl1bS0xMiBsYXJnZS0xMiB2LXNwYWNlLW5vcm1hbCBjb2x1bW4gYmFkZ2UtY29udGFpbmVyIj4KCQkJCQkJCQk8IS0tIGFuZHJvaWRfYXBwX2xpbmsgLSBodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9b3JnLm9wZW5iZWF1dHlmYWN0cy5zY2FubmVyJmhsPWVuIC0tPgoJCQkJCQkJCTxhICBocmVmPSJodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9b3JnLm9wZW5mb29kZmFjdHMuc2Nhbm5lciZ1dG1fc291cmNlPW9iZiZ1dGZfbWVkaXVtPXdlYiZ1dG1fY2FtcGFpZ249aW5zdGFsbF90aGVfYXBwX2FuZHJvaWRfZm9vdGVyX2VuIj48aW1nIHNyYz0iL2ltYWdlcy9taXNjL3BsYXlzdG9yZS9pbWcvbGF0ZXN0L0dldEl0T25Hb29nbGVQbGF5X0JhZGdlX1dlYl9jb2xvcl9FbmdsaXNoLnN2ZyIgYWx0PSJHZXQgSXQgT24gR29vZ2xlIFBsYXkiIGxvYWRpbmc9ImxhenkiIGhlaWdodD0iNDAiIHdpZHRoPSIxMjAiPjwvYT4KCQkJCQkJCQkKCQkJCQkJCQk8YSBocmVmPSIiPjxpbWcgc3JjPSIvaW1hZ2VzL21pc2MvZi1kcm9pZC9zdmcvZ2V0LWl0LW9uLWVuLnN2ZyIgYWx0PSJBdmFpbGFibGUgb24gRi1Ecm9pZCIgbG9hZGluZz0ibGF6eSIgaGVpZ2h0PSI0MCIgd2lkdGg9IjEyMCI+PC9hPgoKCQkJCQkJCQk8IS0tIGFuZHJvaWRfYXBrX2FwcF9saW5rIC0gaHR0cHM6Ly93b3JsZC5vcGVuZm9vZGZhY3RzLm9yZy9pbWFnZXMvYXBwcy9vZmYuYXBrIC0tPgoJCQkJCQkJCTxhIGhyZWY9Imh0dHBzOi8vd29ybGQub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvYXBwcy9vYmYuYXBrP3V0bV9zb3VyY2U9b2JmJnV0Zl9tZWRpdW09d2ViP3V0bV9zb3VyY2U9b2ZmJnV0Zl9tZWRpdW09d2ViJnV0bV9jYW1wYWlnbj1pbnN0YWxsX3RoZV9hcHBfYXBrX2Zvb3Rlcl9lbiI+PGltZyBzcmM9Ii9pbWFnZXMvbWlzYy9hcHAtbGFuZGluZy1wYWdlL2Rvd25sb2FkLWFway9kb3dubG9hZC1hcGtfZW4uc3ZnIiBhbHQ9IkFuZHJvaWQgQVBLIiBsb2FkaW5nPSJsYXp5IiBoZWlnaHQ9IjQwIiB3aWR0aD0iMTIwIj48L2E+CgkJCQkJCQkJCgkJCQkJCQkJPCEtLSBtc2dpZCAiaHR0cHM6Ly9hcHBzLmFwcGxlLmNvbS9hcHAvb3Blbi1iZWF1dHktZmFjdHMvaWQxMTIyOTI2MzgwIiAtLT4KCQkJCQkJCQk8YSBocmVmPSJodHRwczovL2FwcHMuYXBwbGUuY29tL2FwcC9vcGVuLWJlYXV0eS1mYWN0cy9pZDExMjI5MjYzODA/dXRtX3NvdXJjZT1vYmYmdXRmX21lZGl1bT13ZWImdXRtX2NhbXBhaWduPWluc3RhbGxfdGhlX2FwcF9pb3NfZm9vdGVyX2VuIj48aW1nIHNyYz0iL2ltYWdlcy9taXNjL2FwcHN0b3JlL2JsYWNrL2FwcHN0b3JlX1VTLnN2ZyIgYWx0PSJEb3dubG9hZCBvbiB0aGUgQXBwIFN0b3JlIiAgbG9hZGluZz0ibGF6eSIgaGVpZ2h0PSI0MCIgd2lkdGg9IjEyMCI+PC9hPgoJCQkJCQkJPC9kaXY+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoKCQkJCiAgICAgIAkJCTwhLS0gc3RhcnQgdGVtcGxhdGVzL3dlYi9jb21tb24vaW5jbHVkZXMvZG9uYXRlX2Jhbm5lci50dC5odG1sIC0tPgoKCgo8IS0tIERvbmF0aW9uIGJhbm5lciBAIGZvb3RlciAtLT4KCgo8IS0tIGVuZCB0ZW1wbGF0ZXMvd2ViL2NvbW1vbi9pbmNsdWRlcy9kb25hdGVfYmFubmVyLnR0Lmh0bWwgLS0+CgoJCQkJCgo8c2VjdGlvbiBjbGFzcz0iZG9uYXRpb24tYmFubmVyLWZvb3RlciByb3ciPgogIDxkaXYgY2xhc3M9ImRvbmF0aW9uLWJhbm5lci1mb290ZXJfX2xlZnQtYXNpZGUiPgogICAgPGRpdiBjbGFzcz0iZG9uYXRpb24tYmFubmVyLWZvb3Rlcl9faG9vay1zZWN0aW9uIj4KICAgICAgPHA+SGVscCB1cyBpbmZvcm0gbWlsbGlvbnMgb2YgY29uc3VtZXJzIGFyb3VuZCB0aGUgd29ybGQgYWJvdXQgd2hhdCB0aGV5IGVhdDwvcD4KICAgIDwvZGl2PgogICAgPGltZyBzcmM9Ii9pbWFnZXMvbWlzYy9kb25hdGlvbi1iYW5uZXJzL2RvbmF0aW9uLWJhbm5lci1ncm91cC1waG90by5wbmciIGFsdD0iZ3JvdXAgcGhvdG8gZG9uYXRpb24gMjAyNCIgLz4KICA8L2Rpdj4KICA8ZGl2PgogICAgPGRpdj4KICAgICAgPGRpdiBjbGFzcz0iZG9uYXRpb24tYmFubmVyLWZvb3Rlcl9fbWFpbi1zZWN0aW9uIj4KICAgICAgICA8aW1nCiAgICAgICAgICB3aWR0aD0iNTAiCiAgICAgICAgICBoZWlnaHQ9IjUwIgogICAgICAgICAgc3JjPSJodHRwczovL3dvcmxkLm9wZW5mb29kZmFjdHMub3JnL2ltYWdlcy9sb2dvcy9sb2dvLXZhcmlhbnRzL0NNSk4tSUNPTl9XSElURV9CR19PRkYuc3ZnIgogICAgICAgICAgYWx0PSJvcGVuIGZvb2QgZmFjdHMgbG9nbyIKICAgICAgICAvPgogICAgICAgIDxoMyBjbGFzcz0iZG9uYXRpb24tYmFubmVyLWZvb3Rlcl9fbWFpbi10aXRsZSI+UGxlYXNlIGdpdmUgdG8gb3VyIDIwMjUgRnVuZHJhaXNlcjwvaDM+CiAgICAgIDwvZGl2PgogICAgICA8cD5Zb3VyIGRvbmF0aW9ucyBmdW5kIHRoZSBkYXktdG8tZGF5IG9wZXJhdGlvbnMgb2Ygb3VyIG5vbi1wcm9maXQgYXNzb2NpYXRpb246PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPgogICAgICAgICAga2VlcGluZyBvdXIgZGF0YWJhc2Ugb3BlbiAmIGF2YWlsYWJsZSB0byBhbGwsCiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT50ZWNobmljYWwgaW5mcmFzdHJ1Y3R1cmUgKHdlYnNpdGUvbW9iaWxlIGFwcCkgJiBhIHNtYWxsIHBlcm1hbmVudCB0ZWFtPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+CiAgICAgICAgICA8cD5yZW1haW4gaW5kZXBlbmRlbnQgb2YgdGhlIGZvb2QgaW5kdXN0cnksPC9wPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHA+ZW5nYWdlIGEgY29tbXVuaXR5IG9mIGNvbW1pdHRlZCBjaXRpemVucyw8L3A+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+CiAgICAgICAgICA8cD5zdXBwb3J0IHRoZSBhZHZhbmNlbWVudCBvZiBwdWJsaWMgaGVhbHRoIHJlc2VhcmNoLjwvcD4KICAgICAgICA8L2xpPgogICAgICA8L3VsPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJkb25hdGlvbi1iYW5uZXItZm9vdGVyX19hY3Rpb25zLXNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJkb25hdGlvbi1iYW5uZXItZm9vdGVyX19hY3Rpb25zLXNlY3Rpb25fX2ZpbmFuY2lhbCI+CiAgICAgICAgPHA+CiAgICAgICAgICBFYWNoIGRvbmF0aW9uIGNvdW50cyEgV2UgYXBwcmVjaWF0ZSB5b3VyIHN1cHBvcnQgaW4gYnJpbmdpbmcgZnVydGhlciBmb29kIHRyYW5zcGFyZW5jeSBpbiB0aGUgd29ybGQuCiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZG9uYXRpb24tYmFubmVyLWZvb3Rlcl9fYWN0aW9ucy1zZWN0aW9uX19kb25hdGUtYnV0dG9uIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL3dvcmxkLm9wZW5mb29kZmFjdHMub3JnL2RvbmF0ZS10by1vcGVuLWZvb2QtZmFjdHM/dXRtX3NvdXJjZT1vZmYmdXRmX21lZGl1bT13ZWImdXRtX2NhbXBhaWduPWRvbmF0ZS0yMDI0LWEmdXRtX3Rlcm09ZW4tdGV4dC1idXR0b24iPgogICAgICAgICAgPGJ1dHRvbj5JIFNVUFBPUlQ8L2J1dHRvbj4KICAgICAgICA8L2E+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+Cjwvc2VjdGlvbj4KCgoJCQkKICAgICAgCQkKCQkJPGRpdiBjbGFzcz0iYmxvY2tfbGlnaHQgYmxvY2tfY2FwcHVjaW5vIiBpZD0iY29udHJpYnV0ZV9hbmRfZGlzY292ZXJfbGlua3NfYmxvY2siPgoJCQkJPGRpdiBjbGFzcz0icm93Ij4KCQkJCQk8ZGl2IGNsYXNzPSJzbWFsbC0xMiBsYXJnZS02IGNvbHVtbnMgdi1zcGFjZS1ub3JtYWwgYmxvY2tfb2ZmIj4KCQkJCQkJPGgzIGNsYXNzPSJ0aXRsZS01IHRleHQtbWVkaXVtIj5Kb2luIHRoZSBjb21tdW5pdHk8L2gzPgoJCQkJCQk8cD5EaXNjb3ZlciBvdXIgPGEgaHJlZj0iL2NvZGUtb2YtY29uZHVjdCI+Q29kZSBvZiBjb25kdWN0PC9hPjwvcD4KCQkJCQkJPHA+Sm9pbiB1cyBvbiA8YSBocmVmPSJodHRwczovL3NsYWNrLm9wZW5mb29kZmFjdHMub3JnIj5TbGFjazwvYT48L3A+CgkJCQkJCTxwPjxhIGhyZWY9Imh0dHBzOi8vZm9ydW0ub3BlbmZvb2RmYWN0cy5vcmcvIj5Gb3J1bTwvYT48L3A+CgkJCQkJCTxwIGlkPSJmb290ZXJfc29jaWFsX2ljb25zIj5Gb2xsb3cgdXM6IAoJCQkJCQkJPGEgaHJlZj0iaHR0cHM6Ly94LmNvbS9PcGVuRm9vZEZhY3RzIj48aW1nIHNyYz0iL2ltYWdlcy9pY29ucy9kaXN0L3guc3ZnIiBjbGFzcz0iZm9vdGVyX3NvY2lhbF9pY29uIiBhbHQ9IngiPjwvYT4KCQkJCQkJCTxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9vcGVuZm9vZGZhY3RzP3V0bV9zb3VyY2U9b2JmJnV0Zl9tZWRpdW09d2ViIj48aW1nIHNyYz0iL2ltYWdlcy9pY29ucy9kaXN0L2ZhY2Vib29rLnN2ZyIgY2xhc3M9ImZvb3Rlcl9zb2NpYWxfaWNvbiIgYWx0PSJGYWNlYm9vayI+PC9hPgoJCQkJCQkJPGEgaHJlZj0iaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9vcGVuLmZvb2QuZmFjdHMvIj48aW1nIHNyYz0iL2ltYWdlcy9pY29ucy9kaXN0L2luc3RhZ3JhbS5zdmciIGNsYXNzPSJmb290ZXJfc29jaWFsX2ljb24iIGFsdD0iSW5zdGFncmFtIj48L2E+CgkJCQkJCQkKCQkJCQkJPC9wPgoJCQkJCQk8cD48YSBocmVmPSJodHRwczovL2xpbmsub3BlbmZvb2RmYWN0cy5vcmcvbmV3c2xldHRlci1lbiI+U3Vic2NyaWJlIHRvIG91ciBuZXdzbGV0dGVyPC9hPjwvcD4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJzbWFsbC0xMiBsYXJnZS02IGNvbHVtbnMgcHJvamVjdCB2LXNwYWNlLW5vcm1hbCI+CgkJCQkJCTxoMyBjbGFzcz0idGl0bGUtNSB0ZXh0LW1lZGl1bSI+RGlzY292ZXIgdGhlIHByb2plY3Q8L2gzPgoJCQkJCQk8dWwgY2xhc3M9ImlubGluZS1saXN0IHRhZ3NfbGlua3Mgdi1zcGFjZS10aW55IGgtc3BhY2UtdGlueSIgPgoJCQkJCQkJPGxpPjxhIGNsYXNzPSJidXR0b24gc21hbGwgd2hpdGUtYnV0dG9uIHJhZGl1cyIgaHJlZj0iL3doby13ZS1hcmUiPldobyB3ZSBhcmU8L2E+PC9saT4KCQkJCQkJCTxsaT48YSBjbGFzcz0iYnV0dG9uIHNtYWxsIHdoaXRlLWJ1dHRvbiByYWRpdXMiIGhyZWY9Imh0dHBzOi8vd29ybGQub3BlbmZvb2RmYWN0cy5vcmcvb3Blbi1mb29kLWZhY3RzLXZpc2lvbi1taXNzaW9uLXZhbHVlcy1hbmQtcHJvZ3JhbXMiPlZpc2lvbiwgTWlzc2lvbiwgVmFsdWVzIGFuZCBQcm9ncmFtczwvYT48L2xpPgoJCQkJCQkJPGxpPjxhIGNsYXNzPSJidXR0b24gc21hbGwgd2hpdGUtYnV0dG9uIHJhZGl1cyIgaHJlZj0iaHR0cHM6Ly9zdXBwb3J0Lm9wZW5mb29kZmFjdHMub3JnL2hlbHAvZW4tZ2IiPkZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zPC9hPjwvbGk+CgkJCQkJCQk8bGk+PGEgY2xhc3M9ImJ1dHRvbiBzbWFsbCB3aGl0ZS1idXR0b24gcmFkaXVzIiBocmVmPSJodHRwczovL2Jsb2cub3BlbmZvb2RmYWN0cy5vcmcvZW4vIj5PcGVuIEJlYXV0eSBGYWN0cyBibG9nPC9hPjwvbGk+CgkJCQkJCQk8bGk+PGEgY2xhc3M9ImJ1dHRvbiBzbWFsbCB3aGl0ZS1idXR0b24gcmFkaXVzIiBocmVmPSIvcHJlc3MiPlByZXNzPC9hPjwvbGk+CgkJCQkJCQk8bGk+PGEgY2xhc3M9ImJ1dHRvbiBzbWFsbCB3aGl0ZS1idXR0b24gcmFkaXVzIiBocmVmPSJodHRwczovL3dpa2kub3BlbmZvb2RmYWN0cy5vcmciPk9wZW4gQmVhdXR5IEZhY3RzIHdpa2kgKGVuKTwvYT48L2xpPgoJCQkJCQkJPGxpPjxhIGNsYXNzPSJidXR0b24gc21hbGwgd2hpdGUtYnV0dG9uIHJhZGl1cyIgaHJlZj0iL2NnaS90b3BfdHJhbnNsYXRvcnMucGwiPlRyYW5zbGF0b3JzPC9hPjwvbGk+CgkJCQkJCQk8bGk+PGEgY2xhc3M9ImJ1dHRvbiBzbWFsbCB3aGl0ZS1idXR0b24gcmFkaXVzIiBocmVmPSIvcGFydG5lcnMiPlBhcnRuZXJzPC9hPjwvbGk+CgkJCQkJCQk8bGk+PGEgY2xhc3M9ImJ1dHRvbiBzbWFsbCB3aGl0ZS1idXR0b24gcmFkaXVzIiBocmVmPSJodHRwczovL3dvcmxkLm9wZW5iZWF1dHlmYWN0cy5vcmciPk9wZW4gQmVhdXR5IEZhY3RzIC0gQ29zbWV0aWNzPC9hPjwvbGk+CgkJCQkJCQk8bGk+PGEgY2xhc3M9ImJ1dHRvbiBzbWFsbCB3aGl0ZS1idXR0b24gcmFkaXVzIiBocmVmPSJodHRwczovL3dvcmxkLnByby5vcGVuYmVhdXR5ZmFjdHMub3JnLyI+T3BlbiBGb29kIEZhY3RzIGZvciBQcm9kdWNlcnM8L2E+PC9saT4KCQkJCQkJPC91bD4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCgkJCTxkaXYgY2xhc3M9ImJsb2NrX29mZiBibG9ja19kYXJrIGJsb2NrX3Jpc3RyZXRvIiBpZD0iZm9vdGVyX2Jsb2NrIj4KCgkJCQk8ZGl2IGlkPSJmb290ZXJfYmxvY2tfaW1hZ2VfYmFubmVyX291dHNpZGUiPgoJCQkJCTxkaXYgaWQ9ImZvb3Rlcl9ibG9ja19pbWFnZV9iYW5uZXJfb3V0c2lkZTIiPgoKCQkJCQkJPGRpdiBjbGFzcz0icm93Ij4KCgkJCQkJCQk8ZGl2IGNsYXNzPSJzbWFsbC0xMiB0ZXh0LWNlbnRlciB2LXNwYWNlLXNob3J0IGgtc3BhY2UtbGFyZ2UiPgoJCQkJCQkJCTxhIGhyZWY9Ii8iIHN0eWxlPSJmb250LXNpemU6MXJlbTsiPjxpbWcgaWQ9ImxvZ28iIHNyYz0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9pbWFnZXMvbG9nb3Mvb2JmLWxvZ28taG9yaXpvbnRhbC1tb25vLXdoaXRlLnN2ZyIgYWx0PSJPcGVuIEJlYXV0eSBGYWN0cyIgc3R5bGU9Im1hcmdpbjo4cHg7aGVpZ2h0OjQ4cHg7d2lkdGg6YXV0bzsiPjwvYT4KCgkJCQkJCQkJPHA+QSBjb2xsYWJvcmF0aXZlLCBmcmVlIGFuZCBvcGVuIGRhdGFiYXNlIG9mIGNvc21ldGljIHByb2R1Y3RzIGZyb20gYXJvdW5kIHRoZSB3b3JsZC48L3A+CgkJCQkJCQkJCgkJCQkJCQkJPHVsIGNsYXNzPSJpbmxpbmUtbGlzdCB0ZXh0LWNlbnRlciB0ZXh0LXNtYWxsIj4KCQkJCQkJCQkJPGxpPjxhIGhyZWY9Ii9sZWdhbCI+TGVnYWw8L2E+PC9saT4KCQkJCQkJCQkJPGxpPjxhIGhyZWY9Ii9wcml2YWN5Ij5Qcml2YWN5PC9hPjwvbGk+CgkJCQkJCQkJCTxsaT48YSBocmVmPSIvdGVybXMtb2YtdXNlIj5UZXJtcyBvZiB1c2U8L2E+PC9saT4KCQkJCQkJCQkJPGxpPjxhIGhyZWY9Ii9kYXRhIj5EYXRhLCBBUEkgYW5kIFNES3M8L2E+PC9saT4KCQkJCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vd29ybGQub3BlbmZvb2RmYWN0cy5vcmcvZG9uYXRlLXRvLW9wZW4tZm9vZC1mYWN0cyI+RG9uYXRlIHRvIE9wZW4gRm9vZCBGYWN0czwvYT48L2xpPgoJCQkJCQkJCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly93b3JsZC5wcm8ub3BlbmZvb2RmYWN0cy5vcmcvIj5Qcm9kdWNlcnM8L2E+PC9saT4KCQkJCQkJCQkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vbGluay5vcGVuZm9vZGZhY3RzLm9yZy9uZXdzbGV0dGVyLWVuIj5TdWJzY3JpYmUgdG8gb3VyIG5ld3NsZXR0ZXI8L2E+PC9saT4KCQkJCQkJCQk8L3VsPgoJCQkJCQkJPC9kaXY+CgoJCQkJCQk8L2Rpdj4KCgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJPC9mb290ZXI+CgkJCgoJPC9kaXY+Cgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9qcy9kaXN0L21vZGVybml6ci5qcyIgZGF0YS1iYXNlLWxheW91dD0idHJ1ZSI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRwczovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2pzL2Rpc3QvanF1ZXJ5LmpzIiBkYXRhLWJhc2UtbGF5b3V0PSJ0cnVlIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvanMvZGlzdC9qcXVlcnktdWkuanMiIGRhdGEtYmFzZS1sYXlvdXQ9InRydWUiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9qcy9kaXN0L2hjLXN0aWNreS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRwczovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2pzL2Rpc3QvZGlzcGxheS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRwczovL3N0YXRpYy5vcGVuYmVhdXR5ZmFjdHMub3JnL2pzL2Rpc3Qvc3Rpa2VsZW0uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGF0aWMub3BlbmJlYXV0eWZhY3RzLm9yZy9qcy9kaXN0L3Njcm9sbE5hdi5qcyI+PC9zY3JpcHQ+CiAgCgo8c2NyaXB0PgokKGZ1bmN0aW9uKCkgewoKCn0pOwo8L3NjcmlwdD4KCgoKPHNjcmlwdCBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvanMvZGlzdC9mb3VuZGF0aW9uLmpzIiBkYXRhLWJhc2UtbGF5b3V0PSJ0cnVlIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvanMvZGlzdC9qcXVlcnkuY29va2llLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Imh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvanMvZGlzdC9zZWxlY3QyLm1pbi5qcyI+PC9zY3JpcHQ+Cgo8c2NyaXB0PgokKGRvY3VtZW50KS5mb3VuZGF0aW9uKHsKCWVxdWFsaXplciA6IHsKCQllcXVhbGl6ZV9vbl9zdGFjazogdHJ1ZQoJfSwKCWFjY29yZGlvbjogewoJCWNhbGxiYWNrIDogZnVuY3Rpb24gKGFjY29yZGlvbikgewoJCQkkKGRvY3VtZW50KS5mb3VuZGF0aW9uKCdlcXVhbGl6ZXInLCAncmVmbG93Jyk7CgkJfQoJfQp9KTsKCjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPgp7CgkiQGNvbnRleHQiIDogImh0dHBzOi8vc2NoZW1hLm9yZyIsCgkiQHR5cGUiIDogIldlYlNpdGUiLAoJIm5hbWUiIDogIk9wZW4gQmVhdXR5IEZhY3RzIiwKCSJ1cmwiIDogImh0dHBzOi8vd29ybGQub3BlbmJlYXV0eWZhY3RzLm9yZyIsCgkicG90ZW50aWFsQWN0aW9uIjogewoJCSJAdHlwZSI6ICJTZWFyY2hBY3Rpb24iLAoJCSJ0YXJnZXQiOiAiaHR0cHM6Ly93b3JsZC5vcGVuYmVhdXR5ZmFjdHMub3JnL2NnaS9zZWFyY2gucGw/c2VhcmNoX3Rlcm1zPT97c2VhcmNoX3Rlcm1fc3RyaW5nfSIsCgkJInF1ZXJ5LWlucHV0IjogInJlcXVpcmVkIG5hbWU9c2VhcmNoX3Rlcm1fc3RyaW5nIgoJfQp9Cjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPgp7CgkiQGNvbnRleHQiOiAiaHR0cHM6Ly9zY2hlbWEub3JnLyIsCgkiQHR5cGUiOiAiT3JnYW5pemF0aW9uIiwKCSJ1cmwiOiAiaHR0cHM6Ly93b3JsZC5vcGVuYmVhdXR5ZmFjdHMub3JnIiwKCSJsb2dvIjogImh0dHBzOi8vc3RhdGljLm9wZW5iZWF1dHlmYWN0cy5vcmcvaW1hZ2VzL2xvZ29zL29iZi1sb2dvLXZlcnRpY2FsLWxpZ2h0LnN2ZyIsCgkibmFtZSI6ICJPcGVuIEJlYXV0eSBGYWN0cyIsCgkic2FtZUFzIiA6IFsiaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL29wZW5mb29kZmFjdHM/dXRtX3NvdXJjZT1vYmYmdXRmX21lZGl1bT13ZWIiLCAiaHR0cHM6Ly94LmNvbS9PcGVuRm9vZEZhY3RzIl0KfQo8L3NjcmlwdD4KCgoKCgo8L2JvZHk+CjwvaHRtbD4KCjwhLS0gZGF0YV9kZWJ1ZzogZGF0YV9kZWJ1ZyBzdGFydApwbGF0Zm9ybTogcHVibGljCmNhbl91c2VfY2FjaGU6IDEKY2FjaGVfbWlzcwpvZmZfcXVlcnk6IDEKcGxhdGZvcm06IHB1YmxpYwpxdWVyeV91cmw6IApjYW5fdXNlX29mZl9xdWVyeTogCnBsYXRmb3JtOiBwdWJsaWMKY2FuX3VzZV9jYWNoZTogMQpjYWNoZV9oaXQKLS0+Cgo8IS0tIGVuZCB0ZW1wbGF0ZXMvd2ViL2NvbW1vbi9zaXRlX2xheW91dC50dC5odG1sIC0tPgo=
98
+ recorded_at: Mon, 29 Sep 2025 14:07:16 GMT
99
+ recorded_with: VCR 6.3.1