primer_view_components 0.0.97 → 0.0.98

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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/app/components/primer/beta/avatar.rb +10 -10
  4. data/app/components/primer/beta/avatar_stack.rb +9 -9
  5. data/app/components/primer/beta/blankslate.rb +2 -2
  6. data/app/components/primer/button_component.rb +1 -1
  7. data/app/components/primer/image.rb +4 -4
  8. data/app/components/primer/image_crop.rb +3 -3
  9. data/app/components/primer/timeline_item_component.rb +1 -1
  10. data/lib/primer/deprecations.rb +0 -1
  11. data/lib/primer/example_image.rb +7 -0
  12. data/lib/primer/view_components/version.rb +1 -1
  13. data/lib/tasks/docs.rake +4 -4
  14. data/lib/tasks/test.rake +1 -1
  15. data/previews/primer/alpha/action_list_preview/heading.html.erb +4 -0
  16. data/previews/primer/alpha/action_list_preview.rb +308 -0
  17. data/previews/primer/alpha/auto_complete_preview.rb +42 -0
  18. data/previews/primer/alpha/button_marketing_preview.rb +17 -0
  19. data/previews/primer/alpha/dialog_preview/custom_header.html.erb +7 -0
  20. data/previews/primer/alpha/dialog_preview/test.html.erb +7 -0
  21. data/previews/primer/alpha/dialog_preview/with_footer.html.erb +8 -0
  22. data/previews/primer/alpha/dialog_preview/with_form.html.erb +12 -0
  23. data/previews/primer/alpha/dialog_preview.rb +85 -0
  24. data/previews/primer/alpha/hidden_text_expander_preview.rb +15 -0
  25. data/previews/primer/alpha/layout_preview.rb +23 -0
  26. data/previews/primer/alpha/nav_list_preview.rb +64 -0
  27. data/previews/primer/alpha/tab_panels_preview.rb +23 -0
  28. data/previews/primer/alpha/text_field_preview.rb +66 -0
  29. data/previews/primer/alpha/toggle_switch_preview.rb +50 -0
  30. data/previews/primer/alpha/tooltip_preview/with_multiple_on_a_page.html.erb +14 -0
  31. data/previews/primer/alpha/tooltip_preview/with_right_most_position.html.erb +7 -0
  32. data/previews/primer/alpha/tooltip_preview.rb +83 -0
  33. data/previews/primer/alpha/underline_nav_preview/default.html.erb +8 -0
  34. data/previews/primer/alpha/underline_nav_preview.rb +41 -0
  35. data/previews/primer/alpha/underline_panels_preview.rb +23 -0
  36. data/previews/primer/beta/auto_complete_item_preview/default.html.erb +9 -0
  37. data/previews/primer/beta/auto_complete_item_preview/with_description.html.erb +11 -0
  38. data/previews/primer/beta/auto_complete_item_preview.rb +40 -0
  39. data/previews/primer/beta/auto_complete_preview/with_submit_button.html.erb +20 -0
  40. data/previews/primer/beta/auto_complete_preview.rb +245 -0
  41. data/previews/primer/beta/avatar_preview.rb +17 -0
  42. data/previews/primer/beta/avatar_stack_preview.rb +44 -0
  43. data/previews/primer/beta/base_button_preview.rb +17 -0
  44. data/previews/primer/beta/blankslate_preview.rb +94 -0
  45. data/previews/primer/beta/border_box_preview.rb +32 -0
  46. data/previews/primer/beta/breadcrumbs_preview.rb +19 -0
  47. data/previews/primer/beta/button_group_preview.rb +20 -0
  48. data/previews/primer/beta/button_preview/all_schemes.html.erb +26 -0
  49. data/previews/primer/beta/button_preview/leading_visual.html.erb +10 -0
  50. data/previews/primer/beta/button_preview/trailing_action.html.erb +10 -0
  51. data/previews/primer/beta/button_preview/trailing_visual.html.erb +11 -0
  52. data/previews/primer/beta/button_preview/with_tooltip.html.erb +10 -0
  53. data/previews/primer/beta/button_preview.rb +256 -0
  54. data/previews/primer/beta/close_button_preview.rb +15 -0
  55. data/previews/primer/beta/counter_preview.rb +24 -0
  56. data/previews/primer/beta/details_preview.rb +45 -0
  57. data/previews/primer/beta/flash_preview.rb +20 -0
  58. data/previews/primer/beta/heading_preview.rb +16 -0
  59. data/previews/primer/beta/icon_button_preview.rb +107 -0
  60. data/previews/primer/beta/text_preview.rb +16 -0
  61. data/previews/primer/beta/truncate_preview.rb +47 -0
  62. data/previews/primer/clipboard_copy_preview/element.html.erb +2 -0
  63. data/previews/primer/clipboard_copy_preview.rb +29 -0
  64. data/previews/primer/dropdown_preview.rb +39 -0
  65. data/previews/primer/forms/forms_preview/after_content_form.html.erb +3 -0
  66. data/previews/primer/forms/forms_preview/array_check_box_group_form.html.erb +3 -0
  67. data/previews/primer/forms/forms_preview/caption_template_form.html.erb +3 -0
  68. data/previews/primer/forms/forms_preview/check_box_group_form.html.erb +3 -0
  69. data/previews/primer/forms/forms_preview/composed_form.html.erb +4 -0
  70. data/previews/primer/forms/forms_preview/horizontal_form.html.erb +3 -0
  71. data/previews/primer/forms/forms_preview/invalid_form.html.erb +3 -0
  72. data/previews/primer/forms/forms_preview/multi_input_form.html.erb +3 -0
  73. data/previews/primer/forms/forms_preview/multi_text_field_form.html.erb +3 -0
  74. data/previews/primer/forms/forms_preview/radio_button_group_form.html.erb +3 -0
  75. data/previews/primer/forms/forms_preview/radio_button_with_nested_form.html.erb +3 -0
  76. data/previews/primer/forms/forms_preview/select_list_form.html.erb +3 -0
  77. data/previews/primer/forms/forms_preview/single_text_field_form.html.erb +3 -0
  78. data/previews/primer/forms/forms_preview/submit_button_form.html.erb +3 -0
  79. data/previews/primer/forms/forms_preview/text_field_and_checkbox_form.html.erb +3 -0
  80. data/previews/primer/forms/forms_preview.rb +37 -0
  81. data/previews/primer/hellip_button_preview.rb +14 -0
  82. data/previews/primer/image_crop_preview.rb +22 -0
  83. data/previews/primer/label_component_preview.rb +15 -0
  84. data/previews/primer/layout_component_preview.rb +18 -0
  85. data/previews/primer/link_component_preview.rb +29 -0
  86. data/previews/primer/local_time_component_preview.rb +41 -0
  87. data/previews/primer/markdown_preview.rb +280 -0
  88. data/previews/primer/menu_component_preview/default.html.erb +17 -0
  89. data/previews/primer/menu_component_preview.rb +9 -0
  90. data/previews/primer/octicon_component_preview.rb +14 -0
  91. data/previews/primer/popover_component_preview.rb +20 -0
  92. data/previews/primer/progress_bar_component_preview.rb +17 -0
  93. data/previews/primer/spinner_component_preview.rb +13 -0
  94. data/previews/primer/state_component_preview.rb +16 -0
  95. data/previews/primer/subhead_component_preview.rb +23 -0
  96. data/previews/primer/time_ago_component_preview.rb +16 -0
  97. data/previews/primer/timeline_item_component_preview.rb +17 -0
  98. data/static/statuses.json +1 -1
  99. metadata +87 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e350542f645d77a1d752b926ee53d2e197a5f97d89e39a89cbc09e3431e93d5c
4
- data.tar.gz: 252230dd0d07e03433a13f03bd49fc65b8cc2035a0c133029f7a2c134ded8ea5
3
+ metadata.gz: 47893a22bb4a08e254dae2744724c97bcc998116747da9c6596ae156b71ba5e9
4
+ data.tar.gz: f54f340e71d3dc92edcffd5b5e1aaa507dc0dab4d268d855e6d3f0fc06895c3c
5
5
  SHA512:
6
- metadata.gz: 77068320cb0755cb82c7403df704c4c3d112f64a9784570f551a9dd518525e688c49b64940cf4b59c1758147373b4034b6ca59530bb816a7ef7a151f718e6cb1
7
- data.tar.gz: 04d8bcefddc160b67c0e30c778c12f9a0ff8b3632ca524a796f5b0af6d17c40142aca0094ec4087038b341f5d435e7014963f673383da915712fda9ce615df65
6
+ metadata.gz: c5e6d60d6de17b2c74f05c2e988dbe4b90a4581c16dda91c0a181013c2e2c1147cac6ec350f059a8363dd81e24517b4d40ad90ace61d1bf899478c06bcc22f4e
7
+ data.tar.gz: 9c3fd3c0cec9c5077f885293703076ff183ebb865ed962930e1440a92504abebc16c22d5dcba3bda7b6463a2ae0daa763e7f3a028481231d5f92017e1c00165e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.0.98
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1420](https://github.com/primer/view_components/pull/1420) [`d6623553`](https://github.com/primer/view_components/commit/d662355359b1b5d8801cc6a86a1376cb1d2da63b) Thanks [@mxriverlynn](https://github.com/mxriverlynn)! - un-deprecate Primer::ButtonComponent for now, due to inconsistencies and issues in migrating to Primer::Beta::Button
8
+
9
+ * [`1d4b6851`](https://github.com/primer/view_components/commit/1d4b685174ca82cb0f67e65cc095810841b0b390) Thanks [@jonrohan](https://github.com/jonrohan)! - Move previews into root and include in gemspec. Thanks [@steves](https://github.com/steves)! [#1404](https://github.com/primer/view_components/pull/1404)
10
+
11
+ - [#1416](https://github.com/primer/view_components/pull/1416) [`f99156fd`](https://github.com/primer/view_components/commit/f99156fddcab45467a4da773387efa4ea13401c3) Thanks [@jonrohan](https://github.com/jonrohan)! - Don't use outside images in docs examples
12
+
3
13
  ## 0.0.97
4
14
 
5
15
  ### Patch Changes
@@ -28,22 +28,22 @@ module Primer
28
28
  SIZE_OPTIONS = [16, DEFAULT_SIZE, SMALL_THRESHOLD, 32, 40, 48, 80].freeze
29
29
 
30
30
  # @example Default
31
- # <%= render(Primer::Beta::Avatar.new(src: "http://placekitten.com/200/200", alt: "@kittenuser")) %>
31
+ # <%= render(Primer::Beta::Avatar.new(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser")) %>
32
32
  #
33
33
  # @example Square
34
- # <%= render(Primer::Beta::Avatar.new(src: "http://placekitten.com/200/200", alt: "@kittenuser", shape: :square)) %>
34
+ # <%= render(Primer::Beta::Avatar.new(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser", shape: :square)) %>
35
35
  #
36
36
  # @example Link
37
- # <%= render(Primer::Beta::Avatar.new(href: "#", src: "http://placekitten.com/200/200", alt: "@kittenuser profile")) %>
37
+ # <%= render(Primer::Beta::Avatar.new(href: "#", src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser profile")) %>
38
38
  #
39
39
  # @example With size
40
- # <%= render(Primer::Beta::Avatar.new(src: "http://placekitten.com/200/200", alt: "@kittenuser", size: 16)) %>
41
- # <%= render(Primer::Beta::Avatar.new(src: "http://placekitten.com/200/200", alt: "@kittenuser", size: 20)) %>
42
- # <%= render(Primer::Beta::Avatar.new(src: "http://placekitten.com/200/200", alt: "@kittenuser", size: 24)) %>
43
- # <%= render(Primer::Beta::Avatar.new(src: "http://placekitten.com/200/200", alt: "@kittenuser", size: 32)) %>
44
- # <%= render(Primer::Beta::Avatar.new(src: "http://placekitten.com/200/200", alt: "@kittenuser", size: 40)) %>
45
- # <%= render(Primer::Beta::Avatar.new(src: "http://placekitten.com/200/200", alt: "@kittenuser", size: 48)) %>
46
- # <%= render(Primer::Beta::Avatar.new(src: "http://placekitten.com/200/200", alt: "@kittenuser", size: 80)) %>
40
+ # <%= render(Primer::Beta::Avatar.new(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser", size: 16)) %>
41
+ # <%= render(Primer::Beta::Avatar.new(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser", size: 20)) %>
42
+ # <%= render(Primer::Beta::Avatar.new(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser", size: 24)) %>
43
+ # <%= render(Primer::Beta::Avatar.new(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser", size: 32)) %>
44
+ # <%= render(Primer::Beta::Avatar.new(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser", size: 40)) %>
45
+ # <%= render(Primer::Beta::Avatar.new(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser", size: 48)) %>
46
+ # <%= render(Primer::Beta::Avatar.new(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser", size: 80)) %>
47
47
  #
48
48
  # @param src [String] The source url of the avatar image.
49
49
  # @param alt [String] Passed through to alt on img tag.
@@ -21,23 +21,23 @@ module Primer
21
21
 
22
22
  # @example Default
23
23
  # <%= render(Primer::Beta::AvatarStack.new) do |c| %>
24
- # <% c.with_avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
25
- # <% c.with_avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
26
- # <% c.with_avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
24
+ # <% c.with_avatar(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser") %>
25
+ # <% c.with_avatar(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser") %>
26
+ # <% c.with_avatar(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser") %>
27
27
  # <% end %>
28
28
  #
29
29
  # @example Align right
30
30
  # <%= render(Primer::Beta::AvatarStack.new(align: :right)) do |c| %>
31
- # <% c.with_avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
32
- # <% c.with_avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
33
- # <% c.with_avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
31
+ # <% c.with_avatar(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser") %>
32
+ # <% c.with_avatar(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser") %>
33
+ # <% c.with_avatar(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser") %>
34
34
  # <% end %>
35
35
  #
36
36
  # @example With tooltip
37
37
  # <%= render(Primer::Beta::AvatarStack.new(tooltipped: true, body_arguments: { label: 'This is a tooltip!' })) do |c| %>
38
- # <% c.with_avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
39
- # <% c.with_avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
40
- # <% c.with_avatar(src: "http://placekitten.com/200/200", alt: "@kittenuser") %>
38
+ # <% c.with_avatar(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser") %>
39
+ # <% c.with_avatar(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser") %>
40
+ # <% c.with_avatar(src: Primer::ExampleImage::BASE64_SRC, alt: "@kittenuser") %>
41
41
  # <% end %>
42
42
  #
43
43
  # @param tag [Symbol] <%= one_of(Primer::Beta::AvatarStack::TAG_OPTIONS) %>
@@ -83,7 +83,7 @@ module Primer
83
83
  system_arguments[:size] = :medium
84
84
  system_arguments[:scheme] ||= :primary
85
85
 
86
- Primer::ButtonComponent.new(**system_arguments)
86
+ Primer::ButtonComponent.new(**system_arguments) # rubocop:disable Primer/ComponentNameMigration
87
87
  }
88
88
 
89
89
  # Optional secondary action
@@ -130,7 +130,7 @@ module Primer
130
130
  # Add an `image` to give context that an Octicon couldn't.
131
131
  # @code
132
132
  # <%= render Primer::Beta::Blankslate.new do |c| %>
133
- # <% c.visual_image(src: "https://github.githubassets.com/images/modules/site/features/security-icon.svg", alt: "Security - secure vault") %>
133
+ # <% c.visual_image(src: Primer::ExampleImage::BASE64_SRC, alt: "Security - secure vault") %>
134
134
  # <% c.heading(tag: :h2).with_content("Title") %>
135
135
  # <% c.description { "Description"} %>
136
136
  # <% end %>
@@ -3,7 +3,7 @@
3
3
  module Primer
4
4
  # Use `Button` for actions (e.g. in forms). Use links for destinations, or moving from one page to another.
5
5
  class ButtonComponent < Primer::Component
6
- status :deprecated
6
+ status :beta
7
7
 
8
8
  DEFAULT_SCHEME = :default
9
9
  LINK_SCHEME = :link
@@ -8,19 +8,19 @@ module Primer
8
8
  class Image < Primer::Component
9
9
  # @example Default
10
10
  #
11
- # <%= render(Primer::Image.new(src: "https://github.com/github.png", alt: "GitHub")) %>
11
+ # <%= render(Primer::Image.new(src: Primer::ExampleImage::BASE64_SRC, alt: "GitHub")) %>
12
12
  #
13
13
  # @example Helper
14
14
  #
15
- # <%= primer_image(src: "https://github.com/github.png", alt: "GitHub") %>
15
+ # <%= primer_image(src: Primer::ExampleImage::BASE64_SRC, alt: "GitHub") %>
16
16
  #
17
17
  # @example Lazy loading
18
18
  #
19
- # <%= render(Primer::Image.new(src: "https://github.com/github.png", alt: "GitHub", lazy: true)) %>
19
+ # <%= render(Primer::Image.new(src: Primer::ExampleImage::BASE64_SRC, alt: "GitHub", lazy: true)) %>
20
20
  #
21
21
  # @example Custom size
22
22
  #
23
- # <%= render(Primer::Image.new(src: "https://github.com/github.png", alt: "GitHub", height: 100, width: 100)) %>
23
+ # <%= render(Primer::Image.new(src: Primer::ExampleImage::BASE64_SRC, alt: "GitHub", height: 100, width: 100)) %>
24
24
  #
25
25
  # @param src [String] The source url of the image.
26
26
  # @param alt [String] Specifies an alternate text for the image.
@@ -14,13 +14,13 @@ module Primer
14
14
  }
15
15
 
16
16
  # @example Simple cropper
17
- # <%= render(Primer::ImageCrop.new(src: "https://github.com/koddsson.png")) %>
17
+ # <%= render(Primer::ImageCrop.new(src: Primer::ExampleImage::BASE64_SRC)) %>
18
18
  #
19
19
  # @example Square cropper
20
- # <%= render(Primer::ImageCrop.new(src: "https://github.com/koddsson.png", rounded: false)) %>
20
+ # <%= render(Primer::ImageCrop.new(src: Primer::ExampleImage::BASE64_SRC, rounded: false)) %>
21
21
  #
22
22
  # @example Cropper with a custom loader
23
- # <%= render(Primer::ImageCrop.new(src: "https://github.com/koddsson.png", rounded: false)) do |cropper| %>
23
+ # <%= render(Primer::ImageCrop.new(src: Primer::ExampleImage::BASE64_SRC, rounded: false)) do |cropper| %>
24
24
  # <% cropper.with_loading(style: "width: 120px").with_content("Loading...") %>
25
25
  # <% end %>
26
26
  #
@@ -40,7 +40,7 @@ module Primer
40
40
  # @example Default
41
41
  # <div style="padding-left: 60px">
42
42
  # <%= render(Primer::TimelineItemComponent.new) do |component| %>
43
- # <% component.with_avatar(src: "https://github.com/github.png", alt: "github") %>
43
+ # <% component.with_avatar(src: Primer::ExampleImage::BASE64_SRC, alt: "github") %>
44
44
  # <% component.with_badge(bg: :success_emphasis, color: :on_emphasis, icon: :check) %>
45
45
  # <% component.with_body { "Success!" } %>
46
46
  # <% end %>
@@ -9,7 +9,6 @@ module Primer
9
9
  "Primer::Alpha::AutoComplete::Item" => "Primer::Beta::AutoComplete::Item",
10
10
  "Primer::BlankslateComponent" => "Primer::Beta::Blankslate",
11
11
  "Primer::BoxComponent" => "Primer::Box",
12
- "Primer::ButtonComponent" => "Primer::Beta::Button",
13
12
  "Primer::CloseButton" => "Primer::Beta::CloseButton",
14
13
  "Primer::CounterComponent" => "Primer::Beta::Counter",
15
14
  "Primer::DetailsComponent" => "Primer::Beta::Details",
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ class ExampleImage
5
+ BASE64_SRC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4AAAAOACAMAAABc6u1lAAAC+lBMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAFBgYMCwoXExA0KyVEODFWSD9oV0x6ZVmReGmYfm6ninmyk4G8m4jIpZHSrZjWsZvhuqPnvqfOqpW3l4SrjnyihnaKcmRwXVFMPzc7MSspIh5eTUSBa16bgXHBoIzwxq30yrHrwanctqDzybAgGhefg3N2YVX1zbX32cf54dP65dj76+L87+f76d743c331cH20Lr9+PX////98+3//v7++/r79PHt29jZtK/JlI28eW6yZ1y2bWHCgXTdvbjy5eTixcHOn5nCh3+5cmfTqKLmzcr27OusXFGvYVbq1dLv3tzir5nKinnZoY3SloTpuKENEhNBTEhkdG5ugHlOWlYfJCKEmpLD49egurAxQEMxOja518wUGRqatKt5jYW00cZaaGOVrqW/3tKow7kjLCyPp56a2fCb2e+c2vCZ1/Cb2fCc2u+c2vCe2eub2vCZ1+6Z2PCb2vCc2vCc2u+e2++c2vCb2e8jMDWuy8AXICOb2vCb2vCc2u+a2PCc2u+c3f6c2vCb2vCZ1++b2vCY1++b2u+b2O9Sc3+c2fBXeocvQ0mZ2fCc2vBdg5Bpk6KAs8V2pbVhiJab2fBpk6FObnt3qsAxRU2W0ueGu86TzuNxn6+Qyt5tmKdGY3CZ1usbJiuKwdWOxtpAWmU6UVlcgY4oOD6Z1++U0u6GxOp8uuZ+veeDwemLyeuOzOyJx+qRz+2W1e+S0O2Av+iMy+tciqt1sNljlrlReZaIxuqGxOmEwuiAv+iKyOqHxemFw+mDweg7Nu1hAAAA/nRSTlMAMGuRtc7m9f/Yy7qhh0ckAyBAXXyW+px3B0OqSxsSpdKtO98PNi1wsPBnF1D/xiqBY8BgDI3rWQn9VXMnJv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yohl2zit/8K93NKwJP8D95T////fJ3pNqYDrdFCiFzKY/3w/6IY13jE//////////////////////////////////////////////////////+XwuP3ibXV7ty8AmoAAEHZSURBVHgB7MEBAQAQAAAgAPB/LxMMqAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP2LKpbY+nt7m2ueyXx+IiXJRFIAPTgLHYHkYReyOyESwDrap+1/W33uxUvLI/ZZw+62WanUFkS/lNJ6brYfH8q+pcc2y3fYaHYiC6fK/uOVesz+AyMOw5o3GFv9LE6JgKvx/5ntv0oHIjjJKI5//z0exiKnF0yzbCxREBj68zEKe0UWhiIgXCHvPc4g0TRdtnxcYoVDEEy+zXHl1iHQMogeXl3GnKBCx5hXGmzVE0gal1ZKX+whRIBte59EbQCRnGMVLXiWGKBCf11rG2x1EElT/vctrLQcQhRHwFlZ7AnGv9f7AW3gQhfGONyq/THE70TnGvNEjRFEokzez2gFuI5z9gberQxTEhHd5OiqIq3VnS97DgyiIPe9kekOIa3yKyrzTI0RB+Lyb1apDXGrYPPB+DkQhGEzCsmdAXMJ5ZzEJJYhC2DAhdgPniPXoM5NhQxTCIxOzquEUYfSWTIo7hSiAOUlpwUwEMybpC0QBbElpwSwYMyarDVEAPSZt1cU/iXWPSTOhP6FCJs8O8FeiXlkyeWtoTwRMxfs1fifmLZdp+ArtCY/p+Nwe4Gdi17SYjgdoT9hMi7XZQajIZFpCBc0JZTE9ZqTwxvXLTFEAzYkJUzXu4y1b2zxFnkDhMWUP3/BWDVufma4ZNCdmTJtbneItUi8h03aA5sSB6TO3eHu6ZWbgO7QmHGbiKUC21HTgOIYRNH7WXyz6jZ8YP6k7znyH1A16zMQztCaOzMayNUR61PB70H9+2ezbvYfV2DfDJU+zDv54Fc9G7b0XfWl8GHSQKOVZzEYLQmt7ZuXwjITNjX7UbPXi8oF3s8yxPdp/PU6cjibX56+eILQWMzvxGkkYGouXfW/lu0zHYWy3N1HXUbjNfMTsuApCZyEz5FY/4XbK6Ub72ThkRlzfbnlfjCmu8zFklj5AaKzObPk13GA42VZnZZf5OKwq3qKucJF1zGxtITT2hVmrDHGFaRC9i02+Au545C0cnNbZuMzYHkJjG2bucMRFnMVm5vOVsVatj0YH/2NSZuZsCI31mIMHB6fVj/s45KvljttRoPBPu9aS2TMhNDZmHqwXhf8xX1TtkBpwn1pHB39R85mLIYS2lMt8xA7+RRmlkU+tHGbepIOfTdvMyQRCW3XmxSrhrzqNpm1RS268qe36JvOyhdBWjfmJHfzqU3cTu9TaZ+anCm2JEnNklQAVNO9rPtGD0NaeuYpnIcWdVviRvbtAb5xbgjBcIbvCcsAwiR1mJo81z9z9L+v+TBtQq3W+dw8d6KOqBmncMOgJnGVBmLoSiMMjzFRJYWKE4SEQA+eH7wKdoAgzVlJ4NMLwEo97I7+RQCs2wpwJSX0ZYYjkYmTktyaQh0eYCyGpVSO/O4FWXsQRaIRBHIEBRJyJkNO60QGXQk4XBgMIBhAEAhlAJDVQiRhAMIBgADFTo8AAgiUM74BgAMEAohJy2nAHQGHAx9gYKgxopsdcSGrLyG9dSOrQYcB5JBw4DChlwr2R34nCgGZsHCoMuA2BAyGpXSO/DyGpTyO/HSGrvpHei8DX2CAMAb5FoxgbmXw5DLjNgmUjuyMhrR0ju1eFAQ+B2BfSqvpGcleKAkopUH8qF3CkmjguWIOCJSj2HAZkIXDp3LCjbMCNTg5DgC0M2MHgzZlhS6nhxZnhXrlh7sTwU7nhyHmhp+Rw7zCgExQDxwGNaLhwWnhQdlhxGFBHgW8OA9LwqO6cFE4flB5OHAZMIB6dFjYulRwmd04LzwuFAYkIbE4UBpwJxFmlMCCVi5FSQ/XuKOA5EFvODW/KC9tODvWOwoBqUNxdKyc81s4PFw/KCFd9dwGeJ8oH056DgMcILNbcFbhRNjhzZ6DeUy44cIegN1UmOH5yl+C5Uh7YvXO34EtpYHHqrsGxwoAUIOZT5YAPdxDeK2WAn313EcZKAJM1dxKGS2o/fLmjsD5RGNCGjS+1HC577izUV0KRXdjgj1BQhY1ttRhmPXcahtcKA0rQsFGprbDjzsOyWgqLC3ce7h70X6AFFDTE4GVolOBcbYRNowgbaiH8MAqxrzBgA4PeQmFADRoO1DKY9o1i3M30B1ADA3JJeKmNgvQHahPcGkU5VIvgyijLcCDwBg9+BSL0FyD4FYh3ozgragmcG+Xpz9QOWDUK9KpWwLVRovlCYUATIe4VD5rWRpHWFQfcgsCOwuHzzijUrcJh2ShVPVU0rDsKeInAnlGuXqVYODIKdqxQmA2Ngp0pFG6Mkg1nioRTo2g3CgOCgHhWIKwYhdtVGFRzRwEdveAgJ04F2njj4H8KgurOKN5YQbBjYENBMDLgqcAOFDRT0EYIYrlozLYBuz8Rwr4DBb4pAKb+DbCtAHjzb4A1ISwLDzzNhObN/Tvgh8BFCHCpjD5Q8E8gGnHmPwD1p9C0noGoIxEYGAiLxWPffwFWhYYd+i/AXGjYhv8GDIRGVUP/DXgUGrVkgDtlfImN0kO5VGIDF0Kj3v0P4GkhhEUhgCWhQQ/+N+C7UOJleLAGZQkKHAkN+jIQVlCPW/8bcCfEVYICl0Jz7oxf2LsLbEeRKIzjHJtT4z5Hxr2NdhckAaK4E7jIe/vfQrt7EqrIS77fGvjjdUsIRX1KxncIeO43totkTR+NDdOaTGfzxdK2HfcJx7a9xcL3g2k4iczYGCepnmkq2ymqlqWjJDfMwloFfrnwbNt1K3pZ7diLchZaRTweZSrbMb9Ihwq/YmtpXoRl09JaKmf55HDOxyO9U5lgipalSR4X1tGs9JyK1lV7QWSMOuyRdIh+YTtC1vPId+mxlrbSOst5sIrMRxfITFNY/9RnyYWzhV1TP9y5lWcy5tMfljNsB6hJ4dfES9148+DIKo4fB9ltUKSidVmajI3jwjoK5l5TETfuzEwVNqwvJGHg4vBXPnPeEl8tvcpt7EXpB9OJFRWmGRtG/jLDMEzTjKzJ9NETnN24JFgdGB0b0OfSgcDe1PLIcgjeoow7DOfFd3i+dNT3PqWhskF8IgkD59lAVKMkeL96orMB/CQJA5+yQXRRTfAR5omMX2GwHLdn2aQi+EheLmMy4f66xYTrVi3BGryEifWfJAhcZaKpRU2wprnORPpLEgR+ZYKNHYL1tZaKn0H30V0mVDcj2EjbJNinGv9ib0c2aoKNhSoT5IokCPzFxNFmBNtoUiyHwEy0jaUNwXbaWGYi/C8JAueYKEZLw8BtKHbJRYDKhKAPCw2TQRHg2tQZQT/sDAEiwDVpC4K+ODoC3B83GH+y5hH0x00R4N64wvjrlgR9qhMEuC9uM+6yhqBf1RgB4hnwI3Xor39VggARIPrb8QIRIALUbIKBCkSACFBbEvBRpwgQAX6AuiDgxc0QICbTv5fiE/DTdIyTO9IewGoIOSTgaalhNQQCfLeIgK+5ggBPuH8ZNzkBbysEiJEUbyfrFQF3MQJEgG+lNQT8tSMEeKJ9y/hQSnrA3l1wN64rcQC/XF1mZsbFx1S6y8y82k3vcdixYruQUnDSfux38L0eN9nYM1pZaub3Gfy3aDSi8oqlcqVSrdTKdd+TB49fL9Uq1WqlVio2CIcRS9wTZj/uC3qKGr5aoPZqln15gDRK1VDtEVVL2BCen+WuaA77TjwNh25JCr8Sqv2CckMeCF69qfYJVbUuUU4J7f7GwTDlY/E0LF2WeMWmGiOs+NJ5XjlSYwQlTyLov5v0GwfDGNsWgH5TPUmtId1WitQTBIhRsPBoiVvTu+tnod9JieXV1ARRXTrMj9UEzYbM7Oohodc7nAuX3wdcKEgkP1CTNRvSVWU1WViSmZ3gAP4Pv5A7e0UilUKVRlSUTmo0VSpVT2b06I7Q6lnOhTEvCt3uSaSKSqskHeRHKqW4ITN6cMjRALLjQrM7BYniNVV6NemcYqhSi3zCJNSpJ6rZT0KvQ+eQ+YtVFhXpmPrk/BESWLg872YA2WtCr98N5M/BBNZVNpGf572IXzkXxrwvtJq7RJ9/HsBZaFGpp53A20Kf7zgXxhy14hJuVWVXks7wQ5VZ0MhvH4ZjYc6PQqelhxKjpjCK0hGNSCHEXl4VaTMcC3PeFTrdpy+Q6LO0/NDn14Rl7oVZoclLHAtzPsv9CKKAmaChxoic1BRSKaejiJc5Fo42hTljYAPUuY2YosIKfZnFJV1D4IscC3P+o3MAlAiFmsIrSut5kUKL8xkCj3MszPlz3itAXxEEnrRdRRGUZRYXNQ2BP3EsDJoRuiwVJEKsKGoOTEAJwobM4q7Q4jVOhUHf5tsHpqTGCZdXVtdardb6xurmlhrHl1bzAjVOvN3udFutVrfT6wdqjKrM4sohocP7nAqDDgtN5h7pXCENeuuwx9pKrEZqSpsVymq0sN8Zwv8NV3e0rHIXhQ6vcypcrMY+oXGLfrAKScNeQPhC7dqBCbe7kLQxOoKBzOKM0OE9ToVBHwpNzsvsGqEaIVoZwgjrfTVC7N4R4FYHRlkdqBHqWQbcwrzQ4DlOhUHvCT0WtH2ggw0YYzUgfKFU2v4vm0MYrdUnD4EnuSuha44JPU7r+kB3WjDW2sCpIbCs9ovaMN4K9Qdz8ZCge4NTYdAbQovZy5oGwP4QnmB9i74KzHUFGHTgSdoh8QezwB0pHHNEaHFL0weazF9Sa8udjdCS2ifqAGRNYFFmcEPQfc6pcK8U5g89H+jOECZYHzhzFhiopHAVJunRzgIfHxJkH3MqnGvNO/tISxHMVgsmWgtUQs2ZIpgeTLapkhqIm/HOXAdkXwkNFrVUgQZrkMKqSog8aaOqStqGFIbLKqFsdg76LWfCqK/zakVRU0ltSGXTiZMIL1QJgxak0Q0oJxHnBdUrnAmj/iI0wHTDjlTCDqTTGlBWSfk1QutAOm3SIndeEL3AmTDqOUG3pGOJFHUhKeUkNPSkfZoZJqAJy5RF7l1B9CFnwrmmFHd1zEB7kFrf/jmopxLiFqS1FhHmoH9wLfb03Yk/pWEGOhhCamuh9XPQOuH/AtuEOegFQfQRZ8Kotz7IpRDb378Dg/9CI/v3QOMhpNeNCPug89NWCsovlM0V6HWSgyFk0A1tP4tPRCjsQRabhGKfW/w64LTdCLytYY+iB5n0CUMEAnmAD1pA+cF4Mr17guZNjoRj5xCHTtBPyaIWZNIhDBF51IFuQjY7+HrQa4Lm7xwJ1y4knaKPENuQ0ZbaK7R8CRiuAekHUza3C/MzJ8KwbwTVVfoI0YGMeuYXgYQl4DJkFaNH+MKsoPiKE2HYd4LqMXmEGEBWXavfSmrgVrh7bOK3ee9wIcx0dSaco1/V2YTMdi2+EVFInAKG65BVB38j4pZbTQnZC+Zb0nvUGWhyDtq0uhnFLgBxDlo31qL+XxwI014XNLfJezDREDLbMLcLQ55hr0B2ffQuzElB8U8OhGl/M/8ufD15D4I8RDSkTWLyAA9tdLHdKUHxPQfCtH8LmhPkKVoPEPoWt2YKyQM8rKm9YmMHgV9wIEx7a0aQnCS/GdQBoC4C6xZvgu4CRozdBj0nCP7KeXDufYgb5EK0FiB07C1G8xOd6AFjB1uMdl4QHOY4mPe88QAG+08BiSeBFYvvIrUBYxNbaXCF3yZzzLvGm2KH9D0YgNjaK4El+gw7sQsTFmVqFwXBUY6DeUdMB9CjHsPvP4qPLT4G7AJGB7vGfcy3AaerN+h96iZFD4C8DRpY/CrSEDDWsLV2l6erLz3XwpymnsOvAn2RFNn7MHwMKEPsJtMlgXcoj8tI7L18A9gBoJ9D2FsIsws4ATKAF13ryss+oQeQ0pJwDVDa1gawqWOPCQbIavOLrt2FYH/+h4sBXMUelBkOYB9wtnII4F84DLl4hX4OSAhglwM4cZe3YiaA73IW3OsLc48awPUDHcBwG3CWkQE8z5ug09Ue+2ROAew4MgJuUgKImII+EGgfvMVZyMV3lEXgzaczBeUpKDKAVwXaixwFBxeBJ/LahHHkGML0JsxZ9ypB2etGL+T6+o8hQisDSD+GQJwDnhFoP3ISHDwJXMzrIN6RSphdwImRpWj3Bdo3nIScfDwjsA4tEGpBSaVojtSCDnSUotVNvFL9j9wK0dhPRrui6S/Gbtp7GyIcAkYX23Lj3nTtwfBDufPUxtGbgLJs7X3Auo5jlg72Qu5NB3uCsjcF2qGHxBvxfUCJre3MW9R+IVc1TDxSfYxz4OQzgY+J24QDwFi3tjd9wdfRkmJF7WWkM/a/OQZOHkQ8oN5YbRm9MU5n5Mb/DnaP6baLHdHY9wLtWi5NU3oWP48UId5GSoqxe0xLAuknTkGeXjL4PmBRe2NeT9qkSW/M20U/PjPn5LMQ7H2BdZN4EBjSW9MH0io1Ta3pEUvcwsNp60rPxTC3qH0JgyG1Z1FVWqVEf5xlW+1loivhTK5XIdhbfxVIC+TW2BvUJWBZSotbY2MWgTF2hn3O0XYU7H2DL3TWyEPEMmIT1BiP/EDnhsLOsO87WonNvjF4EFinPlG9HiLOqc2JqSeBm+gZ9r3/snfejYliaxgHC2IEA8YaGxENokSJRhk1c7f33jvTWyqD2TJ9Jtvbd74hW7J6NAmvBCGT37+7089znvNWSCCLZxIAkSpm2UW8EJGk5rIgJGWZ9npjFJUv7xNqDFE2oPaIeVuyLAiVpiJJkUgJr7MiCeQ9eBYG+gbdRRzCiVkY+ETSD+A2gxcnqAKu7J+liHGWmoKwf5S81D9nydcYdZby+0fJ65XlpOBpzhlnCcfZbBE7nRRZPCLNeaK0l0r7Gv4gIS6R0+dleKUMWqv+ZQqfZoE7vP4E2GUAqHI+T8LoiHHSSuIiH+QaoTLlpZMVJRPB2RzjRn/LLka6lWiL8tU4QiSdyYsTfyFw+w48RHJeCIg6/DcTFTn7KqAO70QCBNdYSOwJsjuPZ1cwp8JUF8NKkqZCfiJg9k8oigTPBznO39gjVP4bKl0+oLHHDMdxQZ4QrZH0J3CLAEZJDzUkBHR0ELhjrtDyRB/wTzMh4FeWPYn2jxLPcdw/z02D9MBRMgKcGrcHDzlLAX7Gl6B7ShjPMk6QXbbU9dD5ENfukEchEkF/w5emvHRUWFakcKSEr7LVYgr0qi1m2TpeisxLUgKaBr0Esgh4GuZu38khoMH6RBfMN1CDh38dkJdlwdNUpEykhJ9nc0WQJFaKVZbF8UhYalYEmfYm8uXGTPA4NtIOhii6IpXslyLDRpSkd2GG6Bx6V/hD6Rid9CiZAs6eWICbg0YB705cCdQfwXOETqsCGmwOXzA/we8XbcuGL8QnT/SQ51i8kFEqSTqx0OAOFWSHmCnHonMRljlx4c0vy1SDH6e7OOH3UXSyIkXq2RRmE3kSxhXI1Dj8hD7pIzkKx9HXBtmF3y+3VRuqEOcxG0lV64XMcrKVD3FEfJwA+AYlL8+zKcttpqSMF96e6hK0R4nUc9g0iNiVhUHfoPouNAI0XqCOf4PqO3cA9wtg1vEFEkQQmxq51UjXIyd8XJscxRJRo6IKXsQmZgVXolStPVrs+ZbQLbCMS8dynwNPDBywfReQo3fmCxQZ+DC4D5gEBKSYPiVB0JgDSLGFrkDnG8FRrtieQIdsuJdoECSCyJW9PQnPYY5BIEEsXYA2LAM2U/z0g+b0F6jB9rDFPza5cBjQBgNPguKYo6iWur1YmRNH6TAhhNnjSy+TpGaQmDOwJzxBMtTsNIoBu3ph1C1dG+JbUIRk7+fh4UGu9uB4Ue7dHW2CIucb0BeoMyniktAqo44o1qhkhj1cw2FUeobyWpVI9vR1ZL8E2Jyypg2x8+RYD1AdfkCnV4s3uA96gPZVM7xMgpAxR8Ow85VWmUPk5KeS4Sr6f68qdGjowdkJIspzJnVgKR4UJUE84smwQfSvqc5kTRvmkYkSIDDC/exUN2JnI5WWjx96ZRM+WlllsH3OlSqxWmBIegu0gqcwt+CDBYHvwLtFTIWBdx5oBg5YSAi4YPqPzQ3CG+hb6snnYDjMTZzD5+hysDNohrVYpXQOE4ekJyuLqadjMP59UMcywsOj9Pc1/IDaDnrBbN87KgGjawbgPvMLS/AqvMtILSpyelCGItY40ONyKYW5Ej+wEghg26wCUf1NcxACcMHsPD5cf31NA6d44Z8m62QxF4K+ORtYa/9F2p3FXIwC308POKEI3985JP57oDnJAAEWqPUPS/XuHvgfcNnNVRJCCHM3zPku7SNIsoXVw1XM7TA8fDsvwAIRHnw31h92NIcZIOCC0b8Zl2n66aFmADZA+FLeLnYaqIbr2KmgSUK4Cj2hCP3d0c/P+7rmfANEu30Qfhl9wzz+QZv4frnwPxJAO4Wd4XoL/BR+QhEefIvawyPU/tAcvSNnIhD69++ir+vBEVzg/fKae9vQsDOKVRYvRSSlGSIhvAE/oQj6g0cDoeDd3R+0UWxfU53NLW0k/Yf3Bt3ve12b9H6Bf5mMkoVKc38QkM0WGewMG1jJ1gvh7nJP9lILxm4ZXgyQE/IRfGgAQdf1/s+7j5/8tGd9T7795hddG82G6nC2+mNuGO2H+99+Z1wyd+89eoiaO3DM41NycjoiwXO1UDrhlXsVJVOoZ89hZ0xO7nwh0+zJsbyvFmzHSeu5fAm0QXNbG4P+HzVqKGiK0DV5mNF/VEAGBrAUG0S8HZwxBsJ7c5nSbA4747hU6/OKYAwhB9sd0gQBkEBfA/aLQDGa0JzPmgZFN93jA2oEDfBtc6v1Ou1grfzX1GoVOwPh3PmI0tvf6BQ/xtXGc41yPuGl/w4D8EW2WsSwMAngBejkKpTrqnX8+tuTO3fu3vv9qxN4hAIATHlANxJWsD2YYtVYCBqW5ppCUm4l8r4Gx7cDR4uR4EJ5WlAKs0/7O5XJliTPnuyC4qGCI4I1Xz4m95YlY09jChsHJA/zv7ehuXoY6xbK78m/2dY/LJUgwOLhFZa3IX1oROqIXS7z0n6qoHxU5CIaa5WEbukpc8XiYqZC58evliGX2lwoHZOFuXBpdgU7Losd0jyf2+oRt1XL+GOgIHDB8sFAAJAE0ysn3gZanC2FFY8cSzeCbfIAdL8DXcngpztYzOHdZMwXFMeulvJRxsbFxSqDgUjA0jAgNnXNPNuWleAv/TE0EXvBCWHgTdWWF2igOMH22v0Mg2/sQr8A5/P20Llzd5M6H/a0FvziSLMzVjrJlQx+oDowVZE0z6vgVKFp+puqVfyOFMUvqZZyDfDIBrTYXYS8QFvWxD94phKNlcdIUfQvtDyZVcblQd5sRoiF+CUSpe0ve5NKwdqdpj34WC5kP4xJdOv09xXa/f27ai3XdjQTQAssH0IMsGr16HpBSXr3lEiidPiQV8jMuk6HDDvvafmCnRFv7VAi2pyfTWEnAcOR5nndpjhJv65aaIAId9UpK/A2pMDyqZO60FJsZC6aGJWbiAd9Xk+YdYX0VqVonkNTT0Qtb2wsZZz3ucDnVVs8sG9lAWLUIppfLS9GmFLgGkR/X0IMMGfD4ndj/zSBvNwCM1RUWmUcPe07LL0lPhQTMnW7Ki4JUEMolA3d/vjP4KsfR/CHimJPHAgfsfrM0W3YqVUjgkIMMc4tyA5b2DIryWXkvUk0Ej2pbvPvs9omTfOxCmazf9wC9ZZqIX+OEuBvNnyuZSw3VAjvPEOaRszZ7ix1qYdmMjrBdFRisWlTLHgStcDwDZGWu/iKe2bjX1fBbB3PJNatbUD7deTnB9WJgHs8/Hn9oZu+Cp/CFTk9HFyJtVilUMSmAtuVyzzyRk5KU04ZlUGJUDg39aPPp1GfdqEDGmwe44ZZA9r7JcB3OfnUtBP7UpKaEckB+LIssfZqjw6Jg67np3rOyBJBioHvn+gRvYXan3NjQJQbRzyzt8HXy6vu3USRDfco/6AbtkO0xE5De7yPVuqMq7dTXP5qsnfa9mHZeST74uwsKMrWun6Iu9+EXy/PkaapYQ6CqSu0jx9WYffEVFiVhrQXmEl4IkXMaSxAO0LhbIxzwTVUftY0giLcuaSqJyfB/hj3M+QH5T3A4C2OOY5iwTO02FoMyZmcxVovefL84FJf75xhe04kR5BmeebixLHSOmqDOzeR4MgdnTAo1zbWEBvUbwFzL/BtaF7MoTD1Oe+gCoOUB2esMr5G4L/aa7QM7TmY+SUbShEomzfWtg++bXlrA64+B/SColy7vn77XyPsr928DjU/uAESRYc3oSitIanQUnainxEX8vyA77UUN/Sn0nb1ZKNsbV6/vrm5pZ40vw09QC+otnBt0/jzbSHas8cAFcz5GCoc8EI+71lkQK/Onk8c/HlKzP/ZuwvnRJYnDuBzSsc5i5wQF0I2xYsr7vEECHC3vdl9+SNypOQnD6qA429+fhvOmUVudrc/JRGmKP1WT6/0MHMYW+afkn2CpvFlG1isY/e0p9aeA7eHzBy+bNncC7tc4Rmbet7n+LSSepiZvNkwMJzCVFS1UtTfiK/KaDYq/2PY7jfMPL7s3Rx9o1Nj7Me2XnpXhht7ycV7TmY6g/xt4K9oughWi+Xy+5sPCppP2sggGPNxzi32TzeWMu/Lre9WzueN4Zt4selhJuXlvxJ6ZLoEomkd+210Gotn88UE6IZXnk99taQNLU7e9XzbvetLLmZizofAK9i1jRzJG9mAmplrab13+64SPpyf+/TjnZHpu4guDwzOMLOb6QFOUgRJd6QkO56GNDM4sHy3wXzc/3F/OTdwl03p0cAXm1STGtrgTuAFkm6Q+a/AjDBr2Hr5adr+Op3smX6nYWTHxazj5TB3G2j83VzS0fNYeraYdcwsPdB7wmd/9Yh/7Qfck4tDzGIW+Z/KPkYB0QbUMccs5s2z8Y2/auDfu9DlleezTmZBXuAVVJB0mKIBr2fMgpz3RleWmbWNAK+sip1FwsDrASN2uRkh5bGjSBx4LTsZMamtXuAkZbCDyIEPOD32MGJaM4+AjyRFkXTMsQacHPcYMTHPBPAqoIAq1WoNm1L/c6WKYpIvgdP2a0ZMzTMNvK5RNGqt6cFnf6+8tcwjaPcZMbk3/AnMoGDksj54iWOlcKLAa50R03szAbzyMgql0vTw3Zo+JVQ8cQk49TN7oj4wpKBA9FG8Cv6AWtSnhArnQgJOC05GrMDVC7yCVyiSol7YmpvWdILCOfcBp74xRqxhZgV4Bd6JOAKm0ty8whsr5G9lixGrGHsFvHxvxbsKUyrK+D23ek5Fc0H5szfnA+AWkcUrgbdqE4tuUDRvJcqf3Y0Ct+ARikIulv5RbWJcbx0FU6D8MbLjAF7+X4W6E6HXwO/nr4piUfPAa3KMEcu59xi4hU9QEFV9DP0JfoV897mMIlFPQsBrxMmIBb3pBW5aEsWg6oeSlT+o+LmGOb11FMqpBry8jFjTWD9wk/InKASlWPqoWJOxgVq50T8qV1AoF37gtL3IiGXdHwZugQthEqgr39bq+DelUn1fEjV/Sh54uQcZsbDZaeAXOkQBqMp/S43Kxf/+t1gu6cTL30EOePXsMWJprj7g58ucoADk29J3FesoELXgA14rLkYszjk6DPwCcRV/NhXVWrn0bVUZBXJq5AxcJ7M+MtsDBuQSKADlm0XwvxUUiBz1AS/HDiO2sDYCRgST+POp9duvxq+GIknmgNvEECN2sbNh2giqqHwolj7xvlpBkRxlgd/IFiP24XkFhgQTqgARRKVWvSmWy6Xy+5tqrY5COcn4gNvGDiNUBJuRiysoElVVUSBKwQ/8+t4wYjeecTAmcH2F5BvxCwC/4XlG7GiwB4zxZc+QfOHEUPxgZY8RexrzDoNBWuEKSaOjiB8McN93MmJb+31glJRNyEj+dZaVwIiHTxixtaUeMMyfP1MRyXE6B4Y8poufZGzXDcYFInbPoJoM+8CQ4YE1xgjxvNiGFgTy5wra1btIAAzqG2KE/G3/FbTEF0of2jF9GQ0kCQyZGGSE6O71QYu0iK0KoZyMaGDY41+cjJBGT5ehVVIwk1TQBo5iWT8Y536+xQj53NMVgHaE8PwYLezqIqJBK9zeGUbI10z1QVto4XRKQes5jYU1aI1jwMW+hZDZSQnaQ8rlYxZK4dV5NBuAVrkpfuQHhl44oC0kH4CkZa8vTlU0taNENBSANng8OsMI+RHX8w1oK18uex1PHaPZqIeJQjjoh/boWR1jhDRjbLUX2s8fDEfjyUMZhaecnqcj2ZwP2qfvNSOkebP9DugMKRAMZ9IXqSMZBSMfpS7SmXAwAACSBO3jfrDP+BDi2u2BzvLnQuFMIZZInR6r+JOox6epRKwQCYdyAeiMicU1RogBUyMO6A4pkAuGsvlMNB1PnL07ODpWsBNOro4OUsnE21j6OhLOXuY0P3SYe2SWEWLU2i/L0DWSBA38AS2Xu7wMZbP5fCSSiUajhXQ6HYt/V/ov0T9F/pT/U/ZPl5fBnKb5/RJ028rqGiMW4Jl9/Wze672/NOth3Tb0vAd+Ekn/xUCYpW99Wbf0eIeY6f3B3n0oJK51UQDeiMLCGnQGRAdFsVFiL4N68Q0FwaOA3ak/t/fe74P9ioiJBgmhhbC/d1icsjg7bD1qX3TiQWjRG56TqKlsGw6wqjg2Zom1v8EFDzQ4u+d3qZmkYbsDTKdN75hErP35+1Cea8BGzSTNbgTBKgrahyViVuB2QMN+InmQTKVxI7AzQU1lW+4Be4ZrYJaYVaziqfShuHN0jBuefhs1lz+84ATT4OwOu4lZhxtPyJmsKEmiYHWYmsw3aHeBqbjsgz5iljKNJ3JZoZBAcyOo5F+b3AQrcPSv+Yl1wgqYFEonuNe9RC0wt7MQQofbnOpaImZNLjx2KpTOUBKzz1ArSHNd4w50qGD/yi4x6wrjEflcKF1AwbFFrbK75g3E0FGcixvbEWLWJgXwyP6ZUEhAZSFCrbM+NrqwiU4QC3jDNok6AJtz4pGMIoHneGQzSq3ljy53O2Bdnl5v1/Q6dQy2hcdyp5ei4CJj0i+NR169GHfFYDGOvo2ROYk6DBvFE3vH58nzRA6aAkNkCj7byEB30CLRs4enZ6iIcQLlpxMT5HQilcjsAQhFyTzWbVvL4wEn2lOod3J5a5aj1+HmUVH8/Ercujy8BuRRMhv3WHhgvCeENhELrvYvj0xPEGM3tpx4Xu5IfTHT7yNTmpjdHrUv9GzCpEKuPu/y2rBbIgXGZh14jnz0uJroWycze707AJPpGxnbXSfGNPkX8YyEULrCjd4ImZhvA6az4aNyGJM2UF5SqMRxI+An0xoKwIR6PqGyGHu1iXJSQimLgmCETCoagvlUuD5mLNKNMvayQiGJO4EImdIyTGuZymNsJAhtyke6b+IwcwJfT8HEFl4TY4+9paLXAzFoun4j7mTP4yjpWSezifTC1BYnSI2xd++pxBaAtvT56eHhQSIOpW6JzMXtgsm53KTC2IeP9MBnRxW8ZCpDDpieY4gYU/pf/q3hS8QXnL9qbc4RYw8+/Sz/OSntuqBflPPHa2At2Bf5/JekMtMH3ZxLZBL+INqEw0/3GPsqn//6G1KRvHiGnDm4uLo6OTiWcSM4QaYwE0DbcE1QEWPf5vP57+iRFygrfSGKjr7HjSkyA98i2siijxgreJe/8Z4eG4U2OZ0VJZcZ3OgiE+hHW5kkxgo+5G98pCfC0HYiFH6IA/DYqOV20GZGibG7EuLWW70J/FGoZHAj4KMWG4uhzcTGiBVwCXHrJ72ryrVQSeDWALVWxIG2s+knxuiLfMGXet8VxM+EwmUOt2I2aiWpD21oVSLGvsoXKIoIBTueSmk9TeqRqIVG0ZZGibFv83e+Iw3SAp6QU5cP+ZNR1EWts+tBW/LYqNOxt/min0nLeg+ekHMHP4gbZ6fXKAlNUKtIi2hTvRJ1OPZ5vugjafI7oGX/+joHFS83ENUbJcYlRNFb0mRzQpOMR6apNfxOtC2nmxiXEHd+Im1r0CcgUUuMo41NEeMSQqOIUPKa+mngMNraGLFO9j5foiwiVHw90MWzSy3Qi7bWIxHrYB/zD76jMoZC5r3U20abGyHGJYSyiNCwhWfI+7m9lm1CJRfaXFAixiXErV8MvPWJpy4uhRA/3FWCnllqsjW0vTCxjvVlXulXKmcmCC3y9z+IewcygOA6L4BVinXuEsg+/Tqv9KHau8brS/HgtAXvTKOwgC1ifAS89Z7KewkNb4TSdfP/E7oIC+gh1qF+zav8RuWtB/FE/FIonTf9GDgNS5gm1pF+f5tX+aPK3Z6sEUA4/DwHpkrjxDrTN3mVn+k5U3jiUCilUdD7mppkwgNL8ESIdaZf8ko/Vfun59yZxttcTEn8DIIfRTA93qtriKrfnecuRFE2hRI7NYcLFuEi1pneKnuIP+l5PheeypweZS9/eHO+3/xfdBssY5ZYZ/opX/L1X/Vr3cLUBAOwDDuxzvT736X8/UMVrZrqL8ZBWIZDItah/vq3EL8/3lJlNhk6xRqfwFlYAVeB7N1///31DekyCd26eAdahQ2qjLEhj3m+nRuAhbiIMR1e4jl7x6nk+fE+7nglaiA/LMVNjNU2gix3eiluXR6mUdA3Q40ThqV0EWO1LIHycVbcu0ygwLXLw9B0WiDGdHB7oC2dFQ8ur1EQ2qZGccBSQhIxVsMSeCCUTlFk91FDfAKLsRFjOgzFoOmNUDrBvcAcNcIKLKaLGKvh8HUqlA5R4nkhUf1NwmImiTE9bKg8H0ZkoBCYpvqSthdhNS5iTJdVaEqJB+dQ6/dT/ax3BWFBM8RYLaPIvr8Qd04yeMw5MEP1YfM6YUnDxJgeUhCaZKRTB6cHqTS0bO6sU81mVhZhVfPEWB1GQchxaAsNRKgWvui4E03kWi1xofG8xFhjhyE5vbNkkDToDaG51po7AX+VGKv7OMD4ngwl107EQOK3JkMArB3ATWKsrgNx5cThmRDi6CANhdjqvJv08w0vL8YAWD6AmCDG9HFBh/SR6sstSgF7dIIq80cHVj2on01TB3CWGNPnBSqSVUNDD/GY7OqfH56gMiZmRwb6NlFXsdH55gTQA0O2iTF9/DFUdCiUMtAU6pnaGF2JTttsbrd7yTY7uB0efbnQu4n682zRvNGvFo2gGi8WYMQOMaZTNyo6E0oHqElcRo1i21RlAKNGP4M2L002dDYhY4PVBjAJw/bPL7JC/HCYiKMG89S8AJI0yd9oYS2+hjkVShkYJKeyoujqGob1UzMDSL7VRhaBjK2gkv0fxINTGHWufmhvUHC9uQGkiWAD30Mw5nOgAjl3UQpOUobaXi4Xx1PxXG4PKrlLoXACg4apyQGk6VgDm3jG5lGRfHx6dSmyJ8kcVK5Pf7hN5cn5HpT2zk9u03al6u1TQmUPhkxS0wNIG6iSTLox9tqBimRoiB+Iez9klGk9Uy+YmgHchxEedwsCuO5o4ItAxtZgzKn2oS4jFJL13YLayUgAX1HJKwMBpC0ezttATArAAPlaKF2gSL4SSjncS9Z+CRNzGwrgMJUMGwkg9aA6S6QfY8Mw4lyoxHEnJ1RSKDm/FEVXGRgyTq0JYJQnEzYSG689gJcy7uwLlQQe5JK3lzPZN6k4jBlsUQAlFw+laCDmD6F66TLjCy9UudyH2l4chjmkFgWQdjiAjcTCtS6BP+S0R9unUEcD1KoARjwGVmrdGFuFAakzUfQmhwfpk1IsE6gnW8sCSFMGeg/dGHM7YcB+6vAqe3Z0kIGKnDk9OsteHab2UE8Oal0AoxxAM+IyUJa1anoZjeCtQwD/z549YE0CAwEQzti2bdv3P9aaj7v5J+m8mao7fEF3VxPgvghAEp2EynfVBehRv/JoAlR+owCJ+hHXATYkAXoBaDYahtz211OSAFcANBzl3AbYEgWojoYBEiWcBniTBegHIJmu4zLApCzAPADJdOeowwAzsgDnACTjzSLO+gupZwAcagPMAJDM1+i5CrCtDzDzByNtgCoEQDJfKugoQL80wDYA3zgEFqQBjgH4xvEKLUsD9AHQStSIuAhwIw2wDEA7UX/rIMC5NMAcAC1Flbh7ALvSAJMAtBblF64B9EgDHADQXpScOAYwow+wr37V1we4AqDFKBN1C2BDGmAGgDajis8pgH1pgH0A2o2qQQACUC7qtwAIQMGo3gOgHECi87rIEOZbTQmARCk/awjBKShRdxuW76EPUP2RPsCUFECiekAc4EAaoEcOINF8KQww+9YAibLjixw/ABJlEkE5gAAkSl/HRTmAACRqTmMXOYAAJGruOpNnmApt/dYBLl4AIFE6u14WP2JvWdgM02puA2BI/dHkRQASVbrlTu+/6RUjnfXpkVbfsgJw8rIAiZrVUWEb/Dd5scJtvvpBD4BPi+i8qk/XpfEyEpz8je7YC8Q+s08PRhIAMAAA87Zt2+q/tD+M0sAlg90e9mRv9/l16iUSAScEfm/PtsbObyMTsAEI2AAEbAUCgoDzkdwICKUBbwQEARuAgP1AQBBQQBAQCggIAi5FcikglAa8FBAEbAACNgEBQUABQUAQcK40IAj4Hsl3aUAQ8FtAELAeCAgCCggCQgMBoYGAIOBKJI+lAUHARwFBQBBQQBAQmggIDQQEAa9KA4KAJ5GslgYEAVcFBAFBQAFBQGgiIDQQEAQ8KA0IAh5EMlMaEAScERAEBAEFBAGhiYDQQEAQ8K80IAj4F8lnaUAQ8FNAELAeCAgCCggCQgMBoYGAIOBuJA+lAUHAhwE7d9CUuJPGcTzH583kvLV7CO8wV6s4Wir6E2UQKRQUB1FYZxcJTEAggYD4Qnb2/y+nFFX76XQYkedzhxkP33q6O6QlQCEkQCHWMsDr3d1y41FTAhRimQH+s4knWAH++7CydSMB/k1IgDdb3y8ztZ1q7poYNAN8/GS+/CNX3all/iMBijUO8L/13fxjRfnmEgN81JIAxRoHeIsnJEAhVjLAtu4nPZ0AhZAA2/oBygT884QEyJyAzr+sVSDEP77mBOw06qcHh9vWpyXEUSWzk+uSsp8rMAEfdfGXRm4nUzmyPhchto9PqgX8n0/KWis0AX08UajWjmUYis/SXm2vgd9KjABXaAKWsKix92crFOLmV3tlPNOzSVn/T0/APimz7/Ca8q8Kbywhlu28kjnbxQvegNQNzQQ40g5wSOoGeNPuWaZybi2JEDeHtVwWrwtIXagd4MhMgCGpC/CubE5GoViCm8vTH3jHmJS5MBKgpx8gXFI2xsd+nF5KhCLJ+Ap434TUjfGnJyDGpG4CJQWJUCw1Pu2MfP0Ab/HET/0Afe4nJcLlE+ffa3UPSoqkLtAPsIUn+voBBqSuCA7vovb93BIirq3MXhaq+tpHmV6XGCI8ERFDF9pPMPpgyu5ltiwhYoy+b7vgCIjhJ56aEkOoe5ZJM2ivXgNo2P12uG/xCXF0WW2Ap+eSOqenvR1L4RlXe+MZOpx/tQctjerlkSUEx9ZBLg+2e9LfUxW1z0+xuZx/le6hK587UF2MCrF1cgEdYSnGii6tPcZYwzOtv2a20yFiuDiRBgW/Pt4A1P5tV2iTuim0t492iKduydwINN+gkPoYwjQxOCGe8GI8S0BT+yzTC1PEkO4BCTUoxFGmjji6RPrLyJH+8MSAGEac5euiLgyoZxbPZIQ4P65mEUvfIQa7E2OKRXgmijE9O8Th9GFCvnp8bv0mROVbGXFtEIcb6u/jXCxw9fePoUscGzCksVOxhPh76XmB+NrEEuC5Oambw+CHA2Jpw5gLWYpalqicNmBAP0Uc9iTGEAuwIIgxPic2caT6MCd7KmNwve1f1WFEb0wcjr+Ygf45CvcUZjF9n1jGPZhUv9q3xJrarjVghucTi93CcyOKcz3LnR0j35ZNLL4Hoxq1bUusocpZHqYExDOL8wWbeGEzzgJ2RjwBDMufVSyxbk8dcjDnmnicCRbM+QEYe69v4hBPF8bl5LnEOjnPFGC0P6ZrLAgd3dfh2b8os53Q/P/fgEJGElwT+5ldGOQFxDQOYwRE7gNeeHDjBByOiWn6APPKB/uW+PL2D8ow6c4nJqcV61dsM7xiFmsF2XKIyb8DnyQo9k/KMKpVIq5mvKtkRnjFKN7lLvfEVWohCeUTSfBL7/0M5+c1HeKaAXEeI7ghXhG6sW6Z92bE5TS9ZBKUveCXdVmAWa0isRV7eKET/yFAEO/nZD2dv6SFRBQuLfEFVeowK5rZxFaK8JJP6lp4VYuU2T5eikrEZs8mSET9uyW+mO0qzOpPHbKJKz3BSz3HwO2cRe51UAsmOgU60z4SUd22xJc6e8nCJG/k26Sh1AfirUA7WKT/JVoFLrD9kYcEZOU05gs5LMCo4Zy0jKO4bxKmPbzBK8V9qy8ak5b5EEkoHFriS7g5g1n9NGnZuMNrJraRa5Hu2S9DLfB6G6QlndQ69MYSq++q8Tn6s7te7Ltk0qGZO6G6eJXXtUmH20ciGleWWHE3ezBsqNefe2sgnDbe0TYQ8q1LfLadHiIZe6t9GCOOGzBtg3TMhga6GYd4hzc2UPJwRhrsDSSkcWmtLHF0BuM6pCE9gonDkwHeNSBlJQ9v8AZp0tBBUs6OrNUkKgWYVyS2VLdnJGgfH/CNBNO7ThFbEYkpVKxVJDJZmBcRlzONzKwbUxN8IFIvZ/yAt0VTh7giJCZ/YK0csX+GJNwSjxNEeE9bZ9+W/LdFgUM8t0jQ2b61WsR2HYloEUepOcS7hq65BShvEeoO8a67Zok4WkjSxWqdhopKGeYx3/tJzQYePjAjVW4EBZFLqmb4gDeYpfTfkjKsXLFWhzjOIiltxfr8Tg8fGpAq+xZKbm39M9WXeh1frUH7HgnLHlurQlzlkZwpfcQeB4PQ8LxqQlHT8EwNB8GmTR+ZInH5jLUaxAkSde/Q21LzYDSEmoe5znrR2KrWnj9AzXAUzFP0Nucey3BiCenvzVP6dHHW7fQ91ixVNQ+hLNwgVVOo8/qd7qyYfvU5ywTLUbPE51dD0jxE1/68OP6lON/wp0GzPWiFCV4nunkHhrtighd8hq1BuxlM/Y3Hv/9/7N3Flty+EgZwvdC8wjziLC/twskXHAoznrDC0Mm5AVklt7EH1hfCbJVM6vOv337ansV3hFV+fO3f+EISKA6jf4ml7zmX2mmWGDDc4JQRsrx43U8CTZJNberoBzbBJzILFVfRO2Ppd1yaFwY+9KSP/PFLaycaPkyRp45+xxoM5aqKmTiyjL4ljv7M2axEg2f+C7X1F2B7ts6pEm5QZrbxX04wkOUjSsRr93X0rXTkweWV7mT/ZeHvTxDgSUc7MbrKa/LgSgzk0G4lYrWyit6l5MnlCX7nxaL3FNEgiPGe4i6+wO8kuSNPKYayuqJEpM6jd4YY6plptwG6eB/B7i+224gxs5oYDIZyQIk47UP/EuKxJX7hxBAfYLjr+xT8QmmJJ8FgDisRo92H0L+SqH0E73o2nn6CVp68DS1kKC1xlcBfehkozl3BEBy1j+C78DYWPH7tJd61jx85DOjKOSWisw+DmFKAqeZe11x88wzt6WdvFrgXTXXYf4ghySQ0PjevYxDGUYC64vWVeX8XHbn7ntfPpaopgDMY0vWbSkTmGAaSUJBc44vXTXdfXqJDLxsfhy90TkESDGuvEnHZs4yhZBSkLj1HwJ0PNDqlH+z88wPxWVlTkAwDW96jRFT2ArEnkAqP79EuPL6HHtx7vOCxBiwoTIbBnVIiJjcPYUAFhZk1tbX41+QpevJ08q+mBmkzClNgeMs3lYjISQyqtBQkxwevfnlEvuTRxCnchyZLS788iH+FD3IKYkuM4aQSEVnFwMzMhSdQP/rXT21k3myQrfoNYGVp483rhR9H3Uc6PH9uZjCO/eeUiMYZDE9nLjSBGW2+WfqagMeTjU36wOUlelLmjj7Y3Jg8/pr/pTebVITmz2Uao7moRDQuYQxmGrgOtPQ/W9uTyeTh9tYmfcdW6EFl6TubW9sPJ5PJ9taHRwau/6YGIzqmRDRuYRxlSmxFU0lTXWh0Shd1UylRQWxpiVGtKhGLmxiLnhJbiabY1gU6VNRNj0MZdLtuZDeViMQaxlM5Yqp1Sk3SBB1JPB6mU2JyFUa3pkQkTmJEZU1MeU7NcoMOmNzvfZjqEgzSo1Aq4ftkUmLKyYMrhhqec2JKDSJwXolIXMF8JdCRF2ta90/04uYyf7igRCROI/4EhqgTtJDUFC7+/OG0EpG4jpEZR/3IECyjfjiDOCwrEQmMrqSe5BpBdE49KRELJSKB8RVEMU34jKWeFPiBBFAcwvgssbheE2hSxouwWPxIpqDiNMZnauJIZ+SrNj2+yzRtuwCUTRhxBfM3CS2z3sZAxviXmQEmoHIMIQfx8U1CZ5j1lECTcl5igAmotKiXaqT4dkJTTglequFNp5zixLT1DqhcRRNriEJOHAawPQw9vB81xJEjJpeViMO5m4iCIY6MdX4/g6cZa0MlIw6DmOxRIharczgEWl6T3wrN+L9o53cA3K9ENI7N4RDoeJF1Bh6M48WpntsVoDTHjslFxMESg+EFxsKD5QXadLEFKk2ZxLn9iEJFDBXz9DDr9AJ2Efa+0Th9Tgmpif+RY/fJTsmb6XAKXLN7YTsNOYQQv3bu5vL8bcPk3EHTdjgDrgJfNxbydZbInEIUEvKX4oO6s0lgxR0AkZK/BDE5q0RUdi/P3Ry0Zt8hrTX+QDOiXLDD7xATvVsJGQJbzkHxgXYd7cNk/PVcrDNQ+TqZfKBsgJoIjQ9m/OC0HQBn+EDPaR0EDu1RIjaH5+4s3vD/JMNvZf0+2eAP5Ntk4ty5C/O2CCz5m5e17mIAtPz6DYeI3DqnRHzOLCMClh/AouVMkP8j/ACmiMfyGfUbQk7jp/wAauogCCn50/wATmUCKpqcO4rxZQEna5b8le2rgW3AH2X/Ze8ullQHojCOn0eY918nBImQXGuk0VSqwop3uDaCbnCqbq67HWT6JN9/ZDU+/OjuaNWYAk3IzNKyqMNBX3Omj5PTd39MGQDnVVNqpoRMreWKBPjq5EMyx7ecDZoSAbpYAJrcU5EAvy7guBTmrGWkRIADMjnkiQS4ZKzg2DPQpWSAipDZ9SUCfM2Yg7JnoK8vCBAnIaGSQIDjtyxALMBvx3IBlghB4AUAVu9O2w46YSwBLwQQ/lBfHsB7niCO33uxAOskI6TEAZwzL8/JuBrbXCpARVJCcSgMIJcQh69MgGFMckK9RBbA6i1jEsmawN5WRQJMeoQkZY1kAbzjLwL5nywH4BOLkKyiiiiAE8Ygxho+JxIBViJC0tIqFATwgbGMYy0gH+QBDJUmJLBeUw5A/jWq+Z8rBGCzR0hmaUUMwNlbxtGcnNFzJg1gJSUkNscVAnDMuE8Y665oY1kAXYeQ5OxABsDqgnFCBOOE+kVVFMChRUh22nNFAGTtSmB8qiSArqcJic+uSAD4hr8f4pYxeEoAGNiEctGgaShA/kKOvXwUA7A5IJSXonpoOsAlY0cgYzfgUgjAsB4RylFWYDhAzr4Exh6MBxkAA4tQzvJHEgAyPvN17gCOnhLKX9ppmg2QyWGeM4BNRxPKZTWVGA4QABNVI5Tb0r6bB4DTvAJ0+ymhXBepJGcAp7kBmIBf/tMXJgiA3BIVUSFCkWoaBhAAm+BXpGpx1yCAADiKa1SskF8xBCAAVnwqYMhquEIBPuQIYNiwqKCh1HsiH+CDZIBPvJSKHOp1wkcCCIBhx8dBLyhVZQB8BIBllVIWQtpvu1cFCIBuG4PfN6EoDsbXAgiAQRzR9yFkq9EVAALgSNn0qxBq9csiAC6r37SUBLDcbxE6fzAIgNCHzpH+B4MAyNSnCf09EMwMdgHwjAC7GPvQf2Y7lRAAzwAwDBybEPr/oqftBABPApi0BxFxQ0i3VBAaB3BS/aZ7UwGGQ9XSdHIIA2HpicEAJ0YCfNJ4erahDyHb6TQB8B9LOudf9SFk/R0hADY7jqXpyiEgBMCP+OjCO/sQsuJSdwyA3zXuNmKLrhRCka8qCQB+KKkoP6Irh5C24vrQLTRAd1iKH3HJh5BuxaWhWziAH+21DLGHoLAeJIUBmAR14+whZPuq3Z3mGmDYbSvfJoRMrfZ0td5s8wcwHHX6g1aNBIRQzd/tN9uLAXxT/aY3lwa43ex3mHEKDFnOx+FQKMDtZr1yLJIaQjf0PjterQ/HrRiA2+NhvxrY3/wGwkNg+HFb6WqfQTQV4Ed4TkvnWh6CxLTnZRI3w5FrAsDtcZO58/yUqEDyECBm1azeU0fV20H3eE2AYbMbtOvK2zm9D+wQQmlv4K1W+/Vhc9xub2/PC/B2+36gW+93A79lRz8/EyCEbm5I6y+Do93yB94uI5mZPBw2m+Mxg/mR5l2ShF8A3n1Vdps52x6Pm83mcMi07VernfOtOP3x3b+FEECe3E0WFb137cGBDAAAAMAgf+t7fNUNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQExqJY3hZ9OAAAAAASUVORK5CYII="
6
+ end
7
+ end
@@ -5,7 +5,7 @@ module Primer
5
5
  module VERSION
6
6
  MAJOR = 0
7
7
  MINOR = 0
8
- PATCH = 97
8
+ PATCH = 98
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH].join(".")
11
11
  end
data/lib/tasks/docs.rake CHANGED
@@ -386,7 +386,7 @@ namespace :docs do
386
386
  task :preview do
387
387
  registry = generate_yard_registry
388
388
 
389
- FileUtils.rm_rf("test/previews/primer/docs/")
389
+ FileUtils.rm_rf("previews/primer/docs/")
390
390
 
391
391
  components = Primer::Component.descendants
392
392
 
@@ -400,7 +400,7 @@ namespace :docs do
400
400
 
401
401
  yard_example_tags = initialize_method.tags(:example)
402
402
 
403
- path = Pathname.new("test/previews/docs/#{short_name.underscore}_preview.rb")
403
+ path = Pathname.new("previews/docs/#{short_name.underscore}_preview.rb")
404
404
  path.dirname.mkdir unless path.dirname.exist?
405
405
 
406
406
  File.open(path, "w") do |f|
@@ -412,7 +412,7 @@ namespace :docs do
412
412
  method_name = name.split("|").first.downcase.parameterize.underscore
413
413
  f.puts(" def #{method_name}; end")
414
414
  f.puts unless index == yard_example_tags.size - 1
415
- path = Pathname.new("test/previews/docs/#{short_name.underscore}_preview/#{method_name}.html.erb")
415
+ path = Pathname.new("previews/docs/#{short_name.underscore}_preview/#{method_name}.html.erb")
416
416
  path.dirname.mkdir unless path.dirname.exist?
417
417
  File.open(path, "w") do |view_file|
418
418
  view_file.puts(code.to_s)
@@ -514,7 +514,7 @@ namespace :docs do
514
514
  def preview_exists?(component)
515
515
  path = component.name.underscore
516
516
 
517
- File.exist?("test/previews/#{path}_preview.rb")
517
+ File.exist?("previews/#{path}_preview.rb")
518
518
  end
519
519
 
520
520
  def example_path(component)
data/lib/tasks/test.rake CHANGED
@@ -33,7 +33,7 @@ namespace :test do
33
33
 
34
34
  t.libs << "test"
35
35
  t.libs << "lib"
36
- t.test_files = FileList["test/system/**/*_test.rb", "test/previews/**/*_test.rb"]
36
+ t.test_files = FileList["test/system/**/*_test.rb"]
37
37
  end
38
38
 
39
39
  Rake::TestTask.new(:bench) do |t|
@@ -0,0 +1,4 @@
1
+ <%# this <ul> is necessary here to make axe happy %>
2
+ <ul>
3
+ <%= render(Primer::Alpha::ActionList::Heading.new(scheme: scheme, list_id: list_id, title: title, subtitle: subtitle)) %>
4
+ </ul>
@@ -0,0 +1,308 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Primer
4
+ module Alpha
5
+ # @label ActionList
6
+ class ActionListPreview < ViewComponent::Preview
7
+ # @label Default
8
+ #
9
+ # @param role text
10
+ # @param scheme [Symbol] select [full, inset]
11
+ # @param show_dividers toggle
12
+ def default(
13
+ role: Primer::Alpha::ActionList::DEFAULT_ROLE,
14
+ scheme: Primer::Alpha::ActionList::DEFAULT_SCHEME,
15
+ show_dividers: false
16
+ )
17
+ render(Primer::Alpha::ActionList.new(
18
+ role: role,
19
+ scheme: scheme,
20
+ show_dividers: show_dividers,
21
+ aria: { label: "Action List" }
22
+ )) do |c|
23
+ c.with_heading(title: "Action List")
24
+ c.with_item(label: "Item one", href: "/") do |item|
25
+ item.with_leading_visual_icon(icon: :gear)
26
+ end
27
+ c.with_item(label: "Item two", href: "/") do |item|
28
+ item.with_leading_visual_icon(icon: :star)
29
+ end
30
+ c.with_item(label: "Item three", href: "/") do |item|
31
+ item.with_leading_visual_icon(icon: :heart)
32
+ end
33
+ end
34
+ end
35
+
36
+ # @label Divider
37
+ #
38
+ # @param scheme [Symbol] select [subtle, filled]
39
+ def divider(
40
+ scheme: Primer::Alpha::ActionList::Divider::DEFAULT_SCHEME
41
+ )
42
+ render(Primer::Alpha::ActionList::Divider.new(scheme: scheme))
43
+ end
44
+
45
+ # @label Heading
46
+ #
47
+ # @param scheme [Symbol] select [subtle, filled]
48
+ # @param title text
49
+ # @param subtitle text
50
+ # @param list_id text
51
+ def heading(
52
+ scheme: Primer::Alpha::ActionList::Heading::DEFAULT_SCHEME,
53
+ title: "This is a title",
54
+ list_id: "unique-id",
55
+ subtitle: "This is a subtitle"
56
+ )
57
+ render_with_template(
58
+ locals: {
59
+ scheme: scheme,
60
+ title: title,
61
+ list_id: list_id,
62
+ subtitle: subtitle
63
+ }
64
+ )
65
+ end
66
+
67
+ # @label Item [playground]
68
+ #
69
+ # @param label text
70
+ # @param truncate_label toggle
71
+ # @param href text
72
+ # @param size [Symbol] select [medium, large, xlarge]
73
+ # @param scheme [Symbol] select [default, danger]
74
+ # @param disabled toggle
75
+ # @param description text
76
+ # @param description_scheme [Symbol] select [inline, block]
77
+ # @param active toggle
78
+ # @param leading_visual_icon [Symbol] octicon
79
+ # @param leading_visual_avatar_src text
80
+ # @param trailing_visual_icon [Symbol] octicon
81
+ # @param trailing_visual_label text
82
+ # @param trailing_visual_counter number
83
+ # @param trailing_visual_text text
84
+ # @param private_leading_action_icon [Symbol] octicon
85
+ # @param private_trailing_action_icon [Symbol] octicon
86
+ # @param trailing_action toggle
87
+ # @param trailing_action_on_hover toggle
88
+ # @param tooltip toggle
89
+ def item(
90
+ label: "Label",
91
+ truncate_label: false,
92
+ href: nil,
93
+ size: Primer::Alpha::ActionList::Item::DEFAULT_SIZE,
94
+ scheme: Primer::Alpha::ActionList::Item::DEFAULT_SCHEME,
95
+ disabled: false,
96
+ description: nil,
97
+ description_scheme: Primer::Alpha::ActionList::Item::DEFAULT_DESCRIPTION_SCHEME,
98
+ active: false,
99
+ expanded: false,
100
+ leading_visual_icon: nil,
101
+ leading_visual_avatar_src: nil,
102
+ trailing_visual_icon: nil,
103
+ trailing_visual_label: nil,
104
+ trailing_visual_counter: nil,
105
+ trailing_visual_text: nil,
106
+ private_leading_action_icon: nil,
107
+ private_trailing_action_icon: nil,
108
+ trailing_action_on_hover: false,
109
+ trailing_action: false,
110
+ tooltip: false
111
+ )
112
+ list = Primer::Alpha::ActionList.new(aria: { label: "Action List" })
113
+ list.item(
114
+ label: label,
115
+ truncate_label: truncate_label,
116
+ href: href,
117
+ size: size,
118
+ scheme: scheme,
119
+ disabled: disabled,
120
+ description_scheme: description_scheme,
121
+ active: active,
122
+ expanded: expanded,
123
+ id: "tooltip-test"
124
+ ) do |item|
125
+ if leading_visual_icon && leading_visual_icon != :none
126
+ item.with_leading_visual_icon(icon: leading_visual_icon)
127
+ elsif leading_visual_avatar_src
128
+ item.with_leading_visual_avatar(src: leading_visual_avatar_src, alt: "An avatar")
129
+ end
130
+
131
+ if trailing_visual_icon && trailing_visual_icon != :none
132
+ item.with_trailing_visual_icon(icon: trailing_visual_icon)
133
+ elsif trailing_visual_label
134
+ item.with_trailing_visual_label { trailing_visual_label }
135
+ elsif trailing_visual_counter
136
+ item.with_trailing_visual_counter(count: trailing_visual_counter)
137
+ elsif trailing_visual_text
138
+ item.with_trailing_visual_text(trailing_visual_text)
139
+ end
140
+
141
+ if private_leading_action_icon && private_leading_action_icon != :none
142
+ item.with_private_leading_action_icon(icon: private_leading_action_icon)
143
+ elsif private_trailing_action_icon
144
+ item.with_private_trailing_action_icon(icon: private_trailing_action_icon)
145
+ end
146
+
147
+ item.with_trailing_action(show_on_hover: trailing_action_on_hover, icon: "plus", "aria-label": "Button tooltip", size: :medium) if trailing_action && trailing_action != :none
148
+
149
+ item.description { description } if description
150
+
151
+ item.with_tooltip(text: "Tooltip text", for_id: "tooltip-test", type: :description) if tooltip
152
+ end
153
+
154
+ render(list)
155
+ end
156
+
157
+ # @label Item [default]
158
+ def item_default
159
+ render(Primer::Alpha::ActionList.new(
160
+ aria: { label: "List heading" }
161
+ )) do |c|
162
+ c.with_item(label: "Default item", href: "/")
163
+ end
164
+ end
165
+
166
+ # @label Item [size large]
167
+ def item_size_large
168
+ render(Primer::Alpha::ActionList.new(
169
+ aria: { label: "List heading" }
170
+ )) do |c|
171
+ c.with_item(label: "Default item", href: "/", size: :large)
172
+ end
173
+ end
174
+
175
+ # @label Item [size xlarge]
176
+ def item_size_xlarge
177
+ render(Primer::Alpha::ActionList.new(
178
+ aria: { label: "List heading" }
179
+ )) do |c|
180
+ c.with_item(label: "Default item", href: "/", size: :xlarge)
181
+ end
182
+ end
183
+
184
+ # @label Item [leading visual]
185
+ def item_leading_visual
186
+ render(Primer::Alpha::ActionList.new(
187
+ aria: { label: "List heading" }
188
+ )) do |c|
189
+ c.with_item(label: "Item with leading visual", href: "/") do |item|
190
+ item.with_leading_visual_icon(icon: :star)
191
+ end
192
+ end
193
+ end
194
+
195
+ # @label Item [trailing visual]
196
+ def item_trailing_visual
197
+ render(Primer::Alpha::ActionList.new(
198
+ aria: { label: "List heading" }
199
+ )) do |c|
200
+ c.with_item(label: "Item with trailing visual", href: "/") do |item|
201
+ item.with_trailing_visual_icon(icon: :star)
202
+ end
203
+ end
204
+ end
205
+
206
+ # @label Item [leading and trailing visual]
207
+ def item_leading_trailing_visual
208
+ render(Primer::Alpha::ActionList.new(
209
+ aria: { label: "List heading" }
210
+ )) do |c|
211
+ c.with_item(label: "Item with trailing visual", href: "/") do |item|
212
+ item.with_leading_visual_icon(icon: :heart)
213
+ item.with_trailing_visual_icon(icon: :star)
214
+ end
215
+ end
216
+ end
217
+
218
+ # @label Item [description]
219
+ def item_with_description
220
+ render(Primer::Alpha::ActionList.new(
221
+ aria: { label: "List heading" }
222
+ )) do |c|
223
+ c.with_item(label: "Default item", href: "/") do |item|
224
+ item.with_description.with_content("This is a description")
225
+ end
226
+ end
227
+ end
228
+
229
+ # @label Item [inline description]
230
+ def item_with_description_inline
231
+ render(Primer::Alpha::ActionList.new(
232
+ aria: { label: "List heading" }
233
+ )) do |c|
234
+ c.with_item(label: "Default item", href: "/", description_scheme: :inline) do |item|
235
+ item.with_description.with_content("This is a description")
236
+ end
237
+ end
238
+ end
239
+
240
+ # @label Item [trailing action]
241
+ def item_trailing_action
242
+ render(Primer::Alpha::ActionList.new(
243
+ aria: { label: "List heading" }
244
+ )) do |c|
245
+ c.with_item(label: "Default item", href: "/") do |item|
246
+ item.with_trailing_action(show_on_hover: false, icon: "plus", "aria-label": "Button tooltip", size: :medium)
247
+ end
248
+ end
249
+ end
250
+
251
+ # @label Item [trailing action on hover]
252
+ def item_trailing_action_hover
253
+ render(Primer::Alpha::ActionList.new(
254
+ aria: { label: "List heading" }
255
+ )) do |c|
256
+ c.with_item(label: "Default item", href: "/") do |item|
257
+ item.with_trailing_action(show_on_hover: true, icon: "plus", "aria-label": "Button tooltip", size: :medium)
258
+ end
259
+ end
260
+ end
261
+
262
+ # @label Item [danger]
263
+ def item_danger
264
+ render(Primer::Alpha::ActionList.new(
265
+ aria: { label: "List heading" }
266
+ )) do |c|
267
+ c.with_item(label: "Danger item", href: "/", scheme: :danger)
268
+ end
269
+ end
270
+
271
+ # @label Item [disabled]
272
+ def item_disabled
273
+ render(Primer::Alpha::ActionList.new(
274
+ aria: { label: "List heading" }
275
+ )) do |c|
276
+ c.with_item(label: "Disabled item", href: "/", disabled: true)
277
+ end
278
+ end
279
+
280
+ # @label Item [wrap label]
281
+ def item_wrap_label
282
+ render(Primer::Alpha::ActionList.new(
283
+ aria: { label: "List heading" }
284
+ )) do |c|
285
+ c.with_item(label: "This is a very long string of text that will wrap if it runs out of horizontal space", href: "/")
286
+ end
287
+ end
288
+
289
+ # @label Item [truncate label]
290
+ def item_truncate_label
291
+ render(Primer::Alpha::ActionList.new(
292
+ aria: { label: "List heading" }
293
+ )) do |c|
294
+ c.with_item(label: "This is a very long string of text that will truncate if it runs out of horizontal space", href: "/", truncate_label: true)
295
+ end
296
+ end
297
+
298
+ # @label Item [active]
299
+ def item_active
300
+ render(Primer::Alpha::ActionList.new(
301
+ aria: { label: "List heading" }
302
+ )) do |c|
303
+ c.with_item(label: "Active item", href: "/", active: true)
304
+ end
305
+ end
306
+ end
307
+ end
308
+ end