[PATCH conductor] buildpush ui icons and styling

jtomasek at redhat.com jtomasek at redhat.com
Wed Dec 14 14:53:31 UTC 2011


From: Jiri Tomasek <jtomasek at redhat.com>

---
 src/app/stylesheets/layout.scss                    |  121 +++++++++++++-------
 .../views/deployables/_new_from_image.html.haml    |    2 +-
 src/app/views/images/show.html.haml                |   95 ++++++++--------
 src/app/views/pool_families/_list.html.haml        |    8 +-
 src/config/locales/en.yml                          |    8 +-
 src/config/navigation.rb                           |    2 +-
 src/public/images/new_catalog_entry_from_image.png |  Bin 0 -> 6037 bytes
 src/public/images/template-valid.png               |  Bin 3998 -> 4301 bytes
 8 files changed, 137 insertions(+), 99 deletions(-)
 create mode 100644 src/public/images/new_catalog_entry_from_image.png

diff --git a/src/app/stylesheets/layout.scss b/src/app/stylesheets/layout.scss
index 5163a6a..2ba780e 100644
--- a/src/app/stylesheets/layout.scss
+++ b/src/app/stylesheets/layout.scss
@@ -185,6 +185,14 @@ form{
 }
 form.button_to > div {display: inline;}
 
+button::-moz-focus-inner, input[type="button"]::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="reset"]::-moz-focus-inner {
+  padding: 0 !important;
+  border: 0 none !important;
+}
+button, input[type="button"], input[type="submit"], input[type="reset"] {
+  cursor: pointer;
+}
+
 /* `Clear Floated Elements
 ----------------------------------------------------------------------------------------------------*/
 
@@ -633,6 +641,7 @@ http://github.com/necolas/css3-github-buttons
 .button + .button,
 .button + .button-group,
 .button-group + .button,
+.rounded-link + .button-group,
 .button-group + .button-group {
     margin-left: 15px;
 }
@@ -1151,6 +1160,7 @@ div#content .page-header{
 
   h1.pools{
     background: transparent url('../../images/header_icon_pools.png') no-repeat 8px center;
+    cursor: pointer;
   }
 
   h1.section-index{
@@ -1265,12 +1275,16 @@ header.admin-page-header{
       padding-left: 54px;
       background: transparent url('../../images/admin_h1_icons.png') 7px -34px no-repeat;
     }
+    &.images{
+      padding-left: 54px;
+      position: relative;
+      &:before{ content: ''; position: absolute; left: 12px; width: 27px; height: 100%; background: transparent url('../../images/buildpush_symbols.png') 0px 0px no-repeat; }
+    }
   }
 
   #obj_actions{
     float: right;
-    display: inline-block;
-    margin: 17px 0px 0px 0px;
+    margin: 14px 0px 0px 0px;
   }
 
   .button{
@@ -1278,6 +1292,8 @@ header.admin-page-header{
   }
 
   .rounded-link{
+    display: inline-block;
+    margin: 3px 0px 0px 0px;
     background: #cccccc;
     color: black;
     text-decoration: none;
@@ -1709,9 +1725,14 @@ section.admin-content-section{ margin-bottom: 10px; }
 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Build Push
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-div.lefted.image-upload-overview{background: url(../../images/template-valid.png) no-repeat 600px top;}
-div.lefted.new-catalog-entry-from-image{background: url(../../images/template-valid.png) no-repeat 600px top;}
-
+div.lefted.image-upload-overview{
+  position: relative;
+  &:after{ content: ''; position: absolute; top: 0px; right: 143px; width: 107px; height: 100%; background: transparent url('../../images/template-valid.png') -111px 0px no-repeat; }
+}
+div.lefted.new-catalog-entry-from-image{
+  position: relative;
+  &:after{ content: ''; position: absolute; top: 0px; right: 100px; width: 185px; height: 100%; background: transparent url('../../images/new_catalog_entry_from_image.png') 0px no-repeat; }
+}
 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 User Card
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -2544,6 +2565,14 @@ table.light_table{
     width: 16px;
     height: 16px;
   }
+  th.image_controls{ border-bottom: none; }
+  td.image_controls input.delete_image{
+    background: transparent url(../../images/buildpush_symbols.png) -112px 2px no-repeat;
+    cursor: pointer;
+    border: none;
+    width: 16px;
+    height: 16px;
+  }
 }
 
 div.build_status{
@@ -2717,43 +2746,53 @@ ul.catalog_pretty {
 /********************************************* Image show view */
 /************************************************************************** */
 
-#obj_actions.images {
-  #back_to_images {
-    margin: 0px 10px;
-  }
-
-  #delete, #new_deployable {
-    margin-top: -5px;
-  }
-}
-
-.image_builds h1 {
-  padding: 10px;
-  font-size: 16px;
-}
-
-dl.image_builds {
+ul.image_builds{
   border: 1px solid #ccc;
   -webkit-border-radius: 7px 7px 7px 7px; -moz-border-radius: 7px 7px 7px 7px; border-radius: 7px 7px 7px 7px;
-  margin: 10px 0px 10px 0px;
-  background: #eee;
-  dt{
-    padding: 20px;
-    float:left;
-    text-align: center;
-    width:150px;
-    border-right: solid #ccc 1px;
-    border-top: 1px solid #ccc;
-  }
-  dd{
-    margin-left: 180px;
-    border-top: 1px solid #ccc;
-    table{
-      margin: 10px 10px 10px 42px;
-      td,th{ padding: 10px; width: 150px;}
-      td:first-child, th:first-child{padding-left: 0px;}
-      td:last-child, th:last-child{padding-right: 0px;}
-      th{border-bottom: 1px solid #CCCCCC;font-weight: bold;}
+  li{
+    list-style-type: none;
+    background-color: #efefef;
+    background: -moz-linear-gradient(top, #efefef 0%, #e0e0e0 100%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#efefef), color-stop(100%,#e0e0e0)); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* Opera11.10+ */
+    background: -ms-linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* IE10+ */
+    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#e0e0e0',GradientType=0 ); /* IE6-9 */
+    background: linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* W3C */
+    border-bottom: 1px solid #ccc;
+    &:first-child { -webkit-border-radius: 7px 7px 0px 0px; -moz-border-radius: 7px 7px 0px 0px; border-radius: 7px 7px 0px 0px; }
+    &:last-child { border-bottom: none; -webkit-border-radius: 0px 0px 7px 7px; -moz-border-radius: 0px 0px 7px 7px; border-radius: 0px 0px 7px 7px; }
+    &:only-child { border-bottom: none; -webkit-border-radius: 7px 7px 7px 7px; -moz-border-radius: 7px 7px 7px 7px; border-radius: 7px 7px 7px 7px; }
+    dl{
+      dt{
+        float: left;
+        width: 152px;
+        border-right: 1px solid #ccc;
+        padding: 25px 10px 25px 58px;
+        position: relative;
+        &:before{ content: ''; position: absolute; left: 20px; width: 28px; height: 20px; background: transparent url('../../images/buildpush_symbols.png') -28px 1px no-repeat; }
+        h3{
+          font-size: 18px;
+          font-weight: 200;
+        }
+        input[type="submit"]{
+          display: inline;
+          border: none;
+          background: none;
+          padding: 0px;
+          margin: 0px;
+          text-decoration: underline;
+          &:hover{ text-decoration: none; }
+        }
+      }
+      dd{
+        padding: 10px;
+        margin-left: 220px;
+        border-left: 1px solid #ccc;
+        table{
+          td.light{ color: #666;}
+        }
+      }
     }
   }
 }
@@ -3036,7 +3075,7 @@ table.pool_families{
     }
   }
 
-  .rounded-link{
+  .pool_family_button{
     background: #535353; /* Old browsers */
     background: -moz-linear-gradient(top, #535353 0%, #666666 100%); /* FF3.6+ */
     background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#535353), color-stop(100%,#666666)); /* Chrome,Safari4+ */
diff --git a/src/app/views/deployables/_new_from_image.html.haml b/src/app/views/deployables/_new_from_image.html.haml
index c2114ee..732b9ad 100644
--- a/src/app/views/deployables/_new_from_image.html.haml
+++ b/src/app/views/deployables/_new_from_image.html.haml
@@ -1,5 +1,5 @@
 %header.admin-page-header
-  %h1.deployables= t('.catalog_entry_name', :name => @deployable.name)
+  %h1.images= t('.catalog_entry_name', :name => @deployable.name)
 
 %section.admin-content-section
   .content
diff --git a/src/app/views/images/show.html.haml b/src/app/views/images/show.html.haml
index ee09306..898ba16 100644
--- a/src/app/views/images/show.html.haml
+++ b/src/app/views/images/show.html.haml
@@ -3,10 +3,10 @@
   %h1{:class => controller.controller_name}= @image.name
   #obj_actions.button-container.images
     =t'return_to'
-    = link_to t('images.index.images'), images_path, :class => 'rounded-link', :id => 'back_to_images'
+    = link_to t('images.index.images'), images_path, :class => 'rounded-link'
     .button-group
-      = button_to t("delete"), image_path(@image.id), :method => 'delete', :confirm => "Are you sure you want to delete?", :class => 'button danger', :id => 'delete'
-    = link_to t('.new_deployable_from_image'), new_deployable_path(:create_from_image => @image.id), :class => 'button', :id => 'new_deployable'
+      = link_to t('.new_deployable_from_image'), new_deployable_path(:create_from_image => @image.id), :class => 'button pill'
+      = button_to t("delete"), image_path(@image.id), :method => 'delete', :confirm => "Are you sure you want to delete?", :class => 'button pill danger', :id => 'delete'
 
 %section.admin-content-section
   %header
@@ -16,54 +16,53 @@
       = form_tag image_path(@image.id), :method => :get do
         = select_tag :build, options_for_build_select(@builds, @build, @latest_build)
         = submit_tag t('.select_build'), :id => 'seletect_build_button'
-      = button_to t('.rebuild_all'), rebuild_all_image_path(@image.id)
+      = button_to t('.rebuild_all'), rebuild_all_image_path(@image.id), :class => 'button pill'
   .content
-    %dl.image_builds
+    %ul.image_builds
       - @account_groups.each do |driver, group|
         - timg = @target_images_by_target[driver]
-        %dt
-          %h1
-            = group[:type].name
-          - if @build and b = @builder.find_active_build(@build.id, driver)
-            = label_tag b.status
-          - elsif timg
-            = button_to t('.delete'), image_target_image_path(@image.id, timg.id), :method => :delete
-          - elsif @build and @build.id == @latest_build
-            = button_to t('.build'), image_target_images_path(@image.id, :target => driver, :build_id => @build ? @build.id : nil), :method => :post
-          - else
-            &nbsp;
-        %dd
-          %div
-            %table
-              %thead
-                %th
-                  = t'.account'
-                %th
-                  = t'.provider'
-                %th
-                  = t'.image_uri'
-                %th
-                  &nbsp;
-              %tbody
-                - group[:accounts].each do |account|
-                  - pimg = timg ? timg.find_provider_image_by_provider_and_account(account.provider.name, account.warehouse_id).first : nil
-                  %tr
-                    %td
-                      = account.name
-                    %td
-                      = account.provider.name
-                    %td
-                      = pimg ? pimg.target_identifier : '-'
-                    %td
-                      - if timg and b = @builder.find_active_push(timg.id, account.provider.name, account.warehouse_id)
-                        = label_tag b.status
-                      - elsif timg and not pimg and @build and @build.id == @latest_build
-                        = button_to t('.upload'), image_provider_images_path(@image.id, :build_id => @build.id, :target_image_id => timg.id, :account_id => account.id), :method => :post
-                      - elsif pimg
-                        = button_to t('delete'), image_provider_image_path(@image.id, pimg.id), :method => :delete
-                      - else
-                        &nbsp;
-        .clear
+        %li
+          %dl
+            %dt
+              %h3= group[:type].name
+              - if @build and b = @builder.find_active_build(@build.id, driver)
+                = label_tag b.status
+              - elsif timg
+                = button_to t('.delete'), image_target_image_path(@image.id, timg.id), :method => :delete
+              - elsif @build and @build.id == @latest_build
+                = button_to t('.build'), image_target_images_path(@image.id, :target => driver, :build_id => @build ? @build.id : nil), :method => :post
+              - else
+                &nbsp;
+            %dd
+              %table.light_table
+                %thead
+                  %th
+                    %strong= t'.account'
+                  %th
+                    = t'.provider'
+                  %th
+                    = t'.image_uri'
+                  %th.image_controls
+                %tbody
+                  - group[:accounts].each do |account|
+                    - pimg = timg ? timg.find_provider_image_by_provider_and_account(account.provider.name, account.warehouse_id).first : nil
+                    %tr
+                      %td
+                        %strong= account.name
+                      %td.light
+                        = account.provider.name
+                      %td.light
+                        = pimg ? pimg.target_identifier : ''
+                      %td.image_controls
+                        - if timg and b = @builder.find_active_push(timg.id, account.provider.name, account.warehouse_id)
+                          = label_tag b.status
+                        - elsif timg and not pimg and @build and @build.id == @latest_build
+                          = button_to t('.upload'), image_provider_images_path(@image.id, :build_id => @build.id, :target_image_id => timg.id, :account_id => account.id), :method => :post, :class => 'upload_image'
+                        - elsif pimg
+                          = button_to "", image_provider_image_path(@image.id, pimg.id), :method => :delete, :class => 'delete_image'
+                        - else
+                          &nbsp;
+          .clear
 
 :javascript
   $(document).ready(function(){
diff --git a/src/app/views/pool_families/_list.html.haml b/src/app/views/pool_families/_list.html.haml
index 1cf70ec..bcb6136 100644
--- a/src/app/views/pool_families/_list.html.haml
+++ b/src/app/views/pool_families/_list.html.haml
@@ -14,9 +14,9 @@
               = link_to pool_family.name, pool_family
             .section-controls
               #obj_actions
-                = link_to t(:edit), edit_pool_family_path(pool_family), :class => 'rounded-link'
-                = link_to t("pools.new_pool"), new_pool_path, :class => 'rounded-link'
-                = link_to t("images.new.new_image"), new_image_path( :environment => pool_family.id), :class => 'rounded-link'
+                = link_to t(:edit), edit_pool_family_path(pool_family), :class => 'pool_family_button'
+                = link_to t("pools.new_pool"), new_pool_path, :class => 'pool_family_button'
+                = link_to t("images.new.new_image"), new_image_path( :environment => pool_family.id), :class => 'pool_family_button'
       - unless pool_family.pools.blank?
         %tr
           %th= t("pool_families.index.pool_name")
@@ -40,4 +40,4 @@
             %td= pool.statistics[:used_quota]
             %td= pool.statistics[:available_quota].nil? ? raw('&infin;') : pool.statistics[:available_quota]
             %td= link_to pool.catalogs.first.name, catalog_path(pool.catalogs.first) if pool.catalogs.any?
-            %td= link_to t(:edit), edit_pool_path(pool), :class => 'rounded-link'
+            %td= link_to t(:edit), edit_pool_path(pool), :class => 'pool_family_button'
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index 05feeaf..922b461 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -605,10 +605,6 @@ en:
       from_url: From URL
       hw_profile: Default Hardware Profile
       catalog_detail: "%{name} Catalog"
-    new_from_image:
-      catalog_entry_name: "%{name}"
-      title: Create Deployable
-      description: "Creating a deployable from the \"%{name}\" component outline will allow it to be built and launched. Simply choose a catalog in which to store the deployable, and define a default cloud resource profile."
     form:
       choose_xml: "Choose Deployable XML file:"
       catalog: "Catalog: "
@@ -777,6 +773,10 @@ en:
       not_deleted:
         one: "Deployable %{list} was not deleted. There are deployments associated with it."
         other: "Deployables %{list} were not deleted. They have deployments associated with them."
+    new_from_image:
+      catalog_entry_name: "%{name}"
+      title: Create Deployable
+      description: "Creating a deployable from the \"%{name}\" component outline will allow it to be built and launched. Simply choose a catalog in which to store the deployable, and define a default cloud resource profile."
     show:
       images: "Images"
       launch: "Launch"
diff --git a/src/config/navigation.rb b/src/config/navigation.rb
index 264b9c1..661c816 100644
--- a/src/config/navigation.rb
+++ b/src/config/navigation.rb
@@ -22,7 +22,7 @@ SimpleNavigation::Configuration.run do |navigation|
     first_level.item :administer, t('navigation.first_level.administer'), users_path, :class => 'administer' do |second_level|
       second_level.item :users_and_groups, t('navigation.second_level.users_groups'), users_path, :link => { :class => 'users' }, :highlights_on => /\/users|\/roles|\/permissions|\/account/
       second_level.item :environments, t('navigation.second_level.environments'), pool_families_path, :link => { :class => 'environments' }, :highlights_on => /\/pool_families|\/images/
-      second_level.item :content, t('navigation.second_level.content'), catalogs_path, :link => { :class => 'content' }, :highlights_on => /\/catalogs|\/catalog_entries|\/realms|\/hardware_profiles|\/realm_mappings/
+      second_level.item :content, t('navigation.second_level.content'), catalogs_path, :link => { :class => 'content' }, :highlights_on => /\/catalogs|\/catalog_entries|\/realms|\/hardware_profiles|\/realm_mappings|\/deployables/
       second_level.item :cloud_providers, t('navigation.second_level.cloud_providers'), providers_path, :link => { :class => 'providers' }, :highlights_on => /\/providers/
       second_level.item :settings, t('navigation.second_level.settings'), settings_path, :link => { :class => 'settings'}, :highlights_on => /\/settings/
     end
diff --git a/src/public/images/new_catalog_entry_from_image.png b/src/public/images/new_catalog_entry_from_image.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2b4a4a2ef4c02bf22574f6d0f38d27975fa6908
GIT binary patch
literal 6037
zcmW+)2Rt0l7hhe7UK2G$JuRZw5GU#>(K$6D2~ke(1c`c_-dl(WPDJk|5hPJV5QoD>
zFX70EDF6Na-)CoccINGT_RV`U-|w3QW7q>4s+&{*0MO{_Xqke~cCbWKl7sicSdK#Q
zLF%iiYeor580DjQ at co*%j<qiUP&58lh^7`J&cQ}bKd6=8L$AkvfldflK;w~@vn#Lm
zQ-o`v7sB0__x?j!pXN0=P>=OLz557PC%>m&p1fvHpSuEg?nvI1lDu;V-j!nrD(vZM
zX_y5S?iG0%FwZUxMc(Zci+ at kG%46|6u_*{uZu&!rsP<Sbq1&XsWn$`Bw>VcW#ZXK;
zLy*;BdYUcV$yqGH at U2&J^HvI>+ODDfl)ZWeVg!l&(gE?-s20{HZIAn<K0LO&k00R5
zRSg~cw%eiH*%+!e at +i>F&26mk at 4i<LUfFF->fSZB<dTw$L2-PZjO2FEWMaiBh3;_M
z8h!lcuh>0{Q at EK1lshDoa>3o+#l-~?5D;L4Kp^sARY|EyN%|zf#LmfA_Lp}`IlSBL
zGGJA{Q~-9q(ak8RI4~KBq?MPExqh(R8%fJbYQWf%c`8fC61>Tq$X*n9apu3aK3dSo
z$i!qw9 at 8JogeYyZLyxq#xA%{Xj0mww+K1`TtLoxRZUu=RVfh6-C7rzHKe)O$JFnVg
zyJpOYa*pHqGcqy=J^%JQJ1OY6nMqTb0;c1O5><kR6AFlc$4{O-34iu%Tf5u7*I;JK
zDYvL-?*=DlS3yzH1?li)(IbBu5|&_ZUTqJ+5muzca&`Idz{@~S?<czfgi$Q0n5SW3
zZx3RL?xLVZsXqGzgI+r8Bys?`4Gj(A+OO}ZGY+P#BH9H*LqolAINWu>emB2K$_y7B
zLuGSbytT9Q^~<+!Viw=MD5#NZ<dNrxLpz-Td-+kq@!Mv&%a{-^$!H$+2$hwIvinzg
zX=%SHPLf#dJ`W9v>*q*ZuvEMb`9ximh*6JkAyt_S9nF`GoO&T^LN(;WZ;7^RKU**G
zf&o#~GVC+e!&&@KjRXY+TLguKdKt6R<Jeml_Siu~n?p{vJF#3dvbX%?Fk};yx1$>!
z!VaM?KCZltw}>VIq^`S2<r&l)85nqw;daS-{26^V2jBor6q5oquq)Yn{^7ivu(a at c
zb|>d$)st;T9-iLS-zy(KfBN*Pe`mJ7Q_ErHCnX=bDB`L2QUMw8rlG+nSXXz%GuxFd
zuFlV?&rwPYA}VV0 at xyLRfxMT}N^nuztru}HD2zPR=Nfmk*J6i%pbXscECyDkFD4=~
z;@7!IcawvI-+t2!7o<b%<^snOD-}r`HqY9BkDcHzr)MBH!ODALtn6)U&T_2S+Sp%x
zyu;4Jb46#RBS~ei>WtWu>0G6mEay}UQz)ybsK}(kaK!Ydsi~=53jMaL>3i{pPjE+*
z|1WWc7!?Vy3(9_MZ0zy-OaqeZw6t=025)GCxJTmN!nO(JqBcpm3eLJ|=HW9UEn=RV
zH>Dp&>t_ at f+xwkt&&bfbmhx(z2Uj=*rQhT{XKBye)cx83^tCiK)sBsfh|p}?Lq*(Y
z(W8Zhg<Z=S%r}yDw7HP!9+e0&si}SC;{9;M3K+3=$G>tMvUmJCDu5P_3<D!0bv- at 3
zXHjGeFYM#rdD`+B;uJJoHv9tvtHf=Zh8<;YX3&twpf>)tgCXbyM3qFGJw5$Mr(TE`
zt2svdl?bazOPdzv=jXHiUiu_FIy#z at l$cl?75G`eV?JAlK~eM(kCVKd+)Z!_bDM(>
zSH-&Rz0z&VzW&PhQ{W_7TU(>Etg|_x$3d*b5b*Hu at SkXS=a=&(CMt!ZF_CWjEBW8Z
z^$HmLmJo(7ClPZUkm~O4uDN^nZtJJPL9(!wjet(BhYug_MPBSUETB4PCO>?8aF~~u
z*DGez^u)Y$A=$rJE&Q3Gk&zck*RXlB_zJTkY<d9V(rokn=;)}WC%(-D<Js!s;ZZ9t
zE87gujq_v!=0XYkb>kx=!Qxg6DNs9!oVC7ak}Lelti!lw?sNS%EhI~elpze3eOo}_
z*Q;l1oI@!x^72={3oXw-=I%9e4t3Ye?raUNQ%fr-Jdw>aVC7w4HP_-sswm!J2|7PL
zBz^Vq at Ubu%EkMu4*6OkIqplN_+32C-Ai>2V<v_&SzL@(VAtC(_c*2?KaLi~?4U0V;
zq`Ube?B7v}L(l<R#cgd0=0p5jTU&p7Pj+UP31N>m*4LNruwPG_5xXyg$Bi)AYHPoo
zE2!Zfok_-NMMqx#-MF?wuK?VG!N%MzYGf$@KX9{?F^Q(gIX*t7!7dWN3z4yeq%(oP
zmHcrfNQje|4L at V)aB;BU)m!8)o%dnD8u_H6re<fOtE;P%{>>Bgo8j;e>_Fe#-k<c$
z%*^-8JX?NBibXIswta*aKj_%h90~XtKcJwY6v)juz1gX`%{I`~-0WIw+v-_E<(d}f
zI<Ipu^xB${kujS+<?}xp8XDgteF~mt6-D$Kb3sXoL&ek|5vRw5{YCeFLNc1Fj8$=;
z at BWh!J1;4A)B9cFda>`F2NTVs4qia$r6+gpH#;+^F>nHNvhF{+-VL;fFbt#%=u1aq
zSZ?yh_NZi{3g_NgTUzF5bJ#hje$A1rBC*EZx-Z_j+U!!_dl at p<D8hU)^7X4NnG=2R
z+g+;3Bod$?GgB*+Fvwe7UG0pbF15MV@%&md{4ftztdeI?r{@9gP9>yMJu0`~qBM^`
zh;hhyOkhfnGqKn$>9Tx724iKTvGw)!sm>*rT%L$ijrZ@~LGi}%g>zY~K;JI}Lxgq$
zSs|=yo2yxqWki>)xYkWb<c?lM#HC)^K8oEh{J&8XcgbU-X&YHTwk>*^Ve=ay=@w*w
zV?aPQ^^u&&P2z@{caLnQk8t?bTrkKVqK2f3b&#D2e2-A7xqL(GgK^beT`EhD8-K0;
z`c+4_3Vy;5fk0}it3^7&4x+F@?)10Z$t)|E39AJ$^Tox*Df9F51y<RW5rxFS_^aB@
z?d at ly<Kw*)<6foS#1V5;QEVP$;U=gIn5-D^-q6snX7sVI$n%woG;amYKMSp1@(C}q
z_)|t1-%mJb;S}fw0pQ=fTZur}(TLExPFr0{InB#gue>B3dN{d!sCg-47|28s<$b*%
z4hnd6pZwrh>A90vuBw3KsIIT?wXwHHhMxKMX%Z}PPY&+XS2s5Lp1h>txHRBV)V#(F
zLeA;mjgqT|=L;>%8X at OegU*BpxZ78w001t54E212H?tR3JaL+j938PG{UP7ldquQ7
zXwMJVhT6 at rnU2oVdG?X#r#=$c?}-tL^p$)<^UQz1&d6`W!=<SlWu!&P$;qav6T1A~
zB8;7ksEqt=>zbL4e5yi5J!xray*i7XXMOUVM8fnPg~JKNy*_K7j|>asx*2r(MVKS!
znx1~=*cdO7*NoE4IZGGz1{}F)A1E3!nNGi0Yh#G%_hzUVGW}#9FPeZ;a|UgJnqiq`
z6Oxi_AGa<f0X%~O{EE7`&D8bRLHhb%pZ!eNy+$D-B2wSf)Kq$Dcim#QEw2Lo;X3eM
zW&DaQ94#PVr@%=Y8WwiGOmxM`SNj~5h*K*<lT%QPg0^})gKLHYtYbMw6I#ev6i41j
zWo2a at LM&=a={zfAi&!8QICBdN(Fj%slj*3r%;;z$UvLxB(9tt2J5AUaL1 at -P3!mq;
zimmFv&g9<%eG(2m=fBdj6kg_nctaC-qns#}JC4H_xLvL|hCbCg+TZs)o9pG3Qc+R)
zJEnYK1-f16Bb>DkMD~o1&Q9OH1s}(~Bs(e;5%Bqu^u;YL*OVKav=ouJVbs{mmoMk}
zA0Yi+cB)K9J;?bWUb1SOnzAZnR4j8d<+E&=xaYC&-=kkkciqMefT*2sd3Txo{rw38
zaKSnknVYkPD#25fxF=%(F9Syx8Jc9=a2O;ON38xyJn-W`e=h%3=Gb?njP*udUDkl%
z4jC|c^JJxUIpUwJkWdvDtLMu<?EuTPq&DZJ^?0MbFp;#ZtZb*-c(L+(Z~EAg=KpFS
z<{WDtlhLatQAVY~GMgbFeT0|`yHA^%o4ampZzG}zcnBQ8Zi7`bb93tfn|mp1lT{UP
z)HigYa-io8E{K3P$f>5xA3nTGRlX^nUkG4ptE+ExBYx>wvL{tPwaS+LzanWa-0299
z-{Pkvsi?0%*cvNR4kcocm2L<6nteCMmU?=6s+=ITpAR?9TC924*7GX$bEYss0Eq14
z*;!fE{gxA-#$8=qe{5|%-5w|Dd;PHXB at t^_a_-+`eH)vb-J92=UOz}}`RUQ3n1)=n
zpTs<F9OY6CX_7U7{*d7=N=N*<{<HQV%k((;p59>$=$SFlCX?T+t(ow=NC!Av_2<OI
zJ&we4EzfVh^)RdVX*{z;QDb`n2j<O9H#a6<KQNj_!xxB8sSOX~je#ZqeRG0QiP~ZZ
zXlKYq7LU|*ytw078g?Xu1Y587l$k(+Tx<LA;llzJ-ruH|a}hCw<Pzr`n)Jb3kj$WK
zg{p`N8Q>3C)Xa#UdfPD%*)V^TmZ+IgvV_A8FWRphIbzs at A`*|EeIayhFM1LpYizVq
zrlzO;>f74dIEITk<kwq_*r at 2Op}+)41tG0(-^Qyo-6OjGF^mFGaopz05voFA=s+{I
zRfq{sCrQJaEV}G`e0&HK6BF_8lq;UU|C!~1r}Ix}q8;+VAi0!nfD%;`KF{>ZJO_%C
zjl^3&Jx6>jKY#vw$@PvAN)k`^piy|!ZR+-k^7c3jZ`H%fHMB83NSF4_&CM at pr%*Ro
z8ZmCWV2GTAK77cu7b%hYs8KB&g+et<WI`8$!cO7F>kVW?B&SP{lC-_bM at 1wgdh{<8
zxfP4jwf4yYb}p_W+K>bp<nSw|g3W$;O%iM!6 at B(lOPXmU@<GMJt0B$Z%}sV1Pz464
zai$TX@~Y-aBLD5RwoL5i1)#o*NEk^JAA7d`>o#UHh0J-hP>_+4?eQ+s#o<PXy5f+X
zC-l!(hq#!EW}Yp!1>@KK%jWg>`lY at tJKlPL<Yw|H#z0m<3b1 at 1t|KlbCnslbY&=19
z#Fnq%LxSaRKUEFU(8ItqG&F|h=H`N=2u3xI$6GGe#;Dg-Muf%AKnhJ`Im3P*&Q`DG
z9tRDj7``y_-v=VDZLYdI#U+3C76_1&4S+lROch&YN%~&`a(3VRUY+-!U2EIt&-Y}~
z at EEoJTYZKrw5)RD_O`al;eU4La|s*qY7PFW0nO0xQf|Nx<RX!BH&gWQ+pkjMz%l8l
zsi~EtFp_q<U+4kJFuN-^yIHqFc{ieaZVgsP4&f&=wT`<rKXP+(*=;{O8Zi&Dzj8K`
zP!m)u=48{ww0bUf)azCAU+-L0GqJKdmE>);AQn#jsn=nMU0)ev#N(-`sjpmH7lfFz
zZ at v4y$(U1lq$IdmcRqJrAB>}c(E|Cvt&=ka|3sb}eu066R3vijz1Yr=of9<3>RRpV
z!QPP8jc#QLiLuJ>TbPh;Zk76dBof&Pg+d47$_m5tQddbxNN#Aq_K_XOCx7316jV%6
z^?k&fbLdEA9K8Ql83(VBrACRIBwbLxfvlX;KU|AZW!$&2vN8wEfljX9mWBY>&k39?
z9pDT-fByV$TwGlHvx8*Tt%HNBTX*l`uL(Co at Y$|lF00NeY42h2I at xB(xxues^l`s-
zIUk|J+bueb>QBdeC2#CKx^euSNZERj*hX{2ntnk`0ex+D5~af*@hXAXzG!aVDvxd%
z at htdZettm#mt29kV0U}(x3RIr at nqoiCC~9)P;rmF3Md#2=xuMGCz_ho!|T9<&b07f
zzI<7JB9rrKO#$-+))q=Xc(AoeNreqAuBoj(r at 1{<b8k2!gY}p(#NEAS?ffs^Z&&R`
zv1;f`jsiL`*2Bg_JZPaW at EhZ{Hnz5L4FXx4tfWTB7w%7eNut~jmbytUE-qrq7FnL(
zm6w0O8D>iQ(=E<NsmKh+cuXMB?Slad;FLclpmsZ7G>S<8-XLUJKL+JRC-vk<45m<>
zxWtRJoKFZ$NbWwguy{<grHlroG})5urryO{Y(H~%FHjEHwbIx5BS`goj&{md(C3BQ
zO1qF{U9!#ET!V`^IP;opZe|(jJ$AbzgQs?We2{=51s~@oG<xi2dH9r!M9$X|9kr`G
zZG;L4aX*-ZV3hX{R+Q>d(hz(xXORfYNcS5slj#8yzsZJw^l7_^QMHm)!3YO1kNRP4
zZ@)w_wOGL7Y6)Br<N0^BTfCMdmLE5&Qm!MPa-~}7n&h$9J*Ao~0GZzq$liMCzK}_L
z9zvHoFkUEliV6!qsjsU``RiFi%(tNN0ph%#Q-%tQ{`u2p;p}8*lG<=;FFHb=ysV^>
z?{AnxbYf!S1GCM<{=^dPqYb+@?|ustlS4}S6eq!XVOrks)}BInLNGZD3LSiX{}rw5
z=QAcIl~KH2=hRpv+YTxWq#J+0gNc*_ at Nk8{Pu*oiQc?ozRct3(-U;*tZ%<cGrl+SD
z9N$m?O2h0%a#OKjx at e@Yr{`I$<gXW$#txf%YksI~BtZ_Rhu`t++WR}J9JsIY^~;xM
zs^MpT9NlybK*b>Ucj65Nq%zoGYhhur1Lj-BMA}B!I$0TPq6z27Bu^O%-bG{=y-wW>
z(gUK#`SXlH=is+~Rj-*>tIeDvrd=AWxbsKXOa2 at zOUlf=zBxb>nIgBMKO+w4B-ynD
z^E{+4sqXF$AM=n41mPFnY9&VJa_d9mZdmgdZeS9zx(o&3%!f7Umy@;iyno|7W`1c&
zjbe(9hF>*X`^Otf;RM`34F>uacfV8u-XY^ESD*~;SM{^Avw={2c!Jp1^iO+&T|?nW
z(cOT5THq8|IytTUH%{=@RHaB7tDHoQX2(Qkt#bE^qjsl$c`Ar+KVChaI#2SF#?x6@
zNohUcU}=#Wpi{p*T@&C5`>pZ0!+*yVBs3{hU&^nsYyWsm?Z0iVe*L3X*2G at GzfUm~
zbh{ws*{cWH3B~eyP^4g?Igv3vXJ))zm-I>>5JX)R7nelbuDh9rLxVbXU?Bn4vn=fs
zYTmw;%FfP~(AU?u%><p7o0e8OTYh>H(p^5ynrN|?xae6D^k?^mx{{L8U63e-;@3w}
z)NB$4egOdptV1?TZ%#oHO&N*a^&yCz9Vd_<G_VXZDbWF8o?^xb^+#<CmeN~iq+BGV
zsx##$>vxxKi6z(Zp_NT9VwuwS1`;@;FwaDaUp+R_`J;uJAW6Zk#!K)bH`|nvvCEWS
z6K0`|!M79P+dpId9CauXP*zo^$}8)v0*j>6ntGT4h{%gIKBfH&YHH3tbrdz^^EEpK
z`ptfZf3Rb^f%t4o(PJIOHdD<9bhP_~+dfJB#X!h9^EkDTf`b8LTj88ZJ at N;cO->>i
zEw*=fki#*J;M`ADE|g%$Ia+yU|G-8oM=8EdIM&vpi<|tfYBeP4G?l@#>?_oJr8~3F
z$9V|q)z?KRxThs?FL9gr?WRenX5#AYvJADF6wH>DXELJNf5qnagd<-B4cqN9>Vqr;
zM2m!D=!+vhJ~p{z{Fd{bB%!IWV>2;-DgG at WDNa}EBApf)qz1#ZMe)+>`bUj at ggQkE
z`oSyqMAo5D2}?l4B<7O}#=Rn1IZY4NO}uGse9kcy_l9+wI9y;pH7&`OcP>ltS5=ml
z#}rY at r<fh1CPqm~a!dIq at 1&-n$V-zr%XIAEL8TTKb2LdTdJ6YRqU(&KoBtQ at no4yq
zg^4I7cAN47-iB&)LhucB>($9SYQmimd5nraU$cz%NF+9(ah8=;Z~-C!=q*9LKQLW}
zFd%dW#Y-)qs85i<-+ThkbTyQWZ%0$x+a?!6zavyj at j8(&(- at FnGLnASD3so=pl!+&
j0+&X1i1CqP#ksmEnzCHpt-&2U8V7WtFfFvE<BR_R7Id2b

literal 0
HcmV?d00001

diff --git a/src/public/images/template-valid.png b/src/public/images/template-valid.png
index de0086be13495c563e25a21250be03831faaec50..61971732cf7227c2bd42cc66eb409d82864851a1 100644
GIT binary patch
literal 4301
zcmbVQcQ{;IyPqU_$q<6*5fPt=7A1N{Cq^H~DA9Wvy_YZ;M0aqMs6q5zM#)48au8+C
zFnY@%MvZ9EzMb#>b)WmkeeT`QyY^apuXq36wbt|29j~XOPD{l~1p<L+H8oTWfPM~W
zZz;%tJNY;&9_UDXlr)VffGd>3E)IC6^wfa+fI!suez#jwi{Y2ROLkvX6JJAwgKvPf
zw>=1Ahp at 5dR&(~Y4?uXk`fw{7N_e%dO9FgMzxkBC?X7*C5gyz|&hGXgQBmRNBEq7g
z7TwuU5Qy%vrV7L;Fn at Ou;l{QZMt)Ea&DnnU`L7?7qwnLZ4G=~X1CQmqs)vJ;Im#@U
zUiIdW4%#^S+^D{8VpiVVO=`Y<*uZR-M#3 at 06E|5Wskal;>`xrFQPv9*jZJ?laNiDA
zvGGi+C6(Si7S&iD%KT2%Rk&qS>lLGB{5SdWSq%8)OP-Vfuu51^!1z_cresn|iXy1V
z+Ht&~$8GZ at D=Vv}u%f&?Yg<surK=@if9a0D+lODxb8bUql<0Z=35v#Bq)BvadJ`mn
zgyrkz7f(B?L5Ob-4-ad*=U?VZNlOP=d3*n8ez!nITKk-AXlN)RGvLv1XJ~bXb!m}b
za(3Uw3l3^F(%NQzx3Ac=2K@<{l)eo)cQ7027$>9Trn4)a-|3{dL3+HM at 5vL)T=ISW
zi5*pIp900a{Cv5YZ7pE76qt=S?pK4XBY{t!#Uw=yf at 8*lB-tgYSS<mJSv>&bQXil1
zxCqFMj|7;ARBWVB_TTt2Zj9oMdieZ`N<j92GJqWWn<*Y(@&h0lm;t0|8nf&%TC~}M
z6E?UlUoL2hy6B(s<22Tjy~PW at H_-p=?atQ%dD)RJS`|UxEsZ!@ey3>so4Xue76)a4
zBlwg|3xz`Aiinat^A at +PAvMd8-Bvc=4C>7yc~c^pwEN6-7d~}*LYnoVWKj{l%^j-$
z%RoSYuPxpFflxLzKuv<nC%GepC|*qwnmd_Vgti%93-vMsNSQ%o9noJB{fyt~y{#N4
z7$9CvrGNk_UQL%@VM#2pkufo(z}*|2=#5@*@sa)83qnnDTaS at 6@+Byp_aPkx2*juw
zS;FtPT<y#%4!r}iYlZ{-Zj#hcZ0eYU?9z$sJ3wv;|3PpMG^Xr+Ixi%hH?ZgR&*S4;
zpuY)XT4nddp=Pb>-=JqjG5yvgNC*urt+ka^QJEhMCCWlm7c8GW at -XAeOBn3EL1k8(
zpOjbE;@18?;!JhM*$vD}K~m(*y0NigmCH9HDXK*Fj5Ude{q7 at 1s@cxP$jDnXG&ELr
zb|j!wor*NAvQ!OTH+NLV&(l-05XQ6yVO*#}3K}iFG)Di_Y0`<Yw6t^q^B_l$KN_IP
zN&SI!FRBG9V58xf!hq-7+e9LAgs>Lw!mTo42On%6S1>#B)FDYISs93Dh*RMSJjVUO
zF-ydGc(j|HrHY1QxMu1s)`MC8HQ?7`SfNA7*5uM_MOUHoZf%j~p>IIIkw;(Wfrs#E
z5h=1aOICVETts9gPB=#AY4%8;uei8PF5l^1#2&;fXmW}&AHSjVS56LnIa`nU<YC{A
z^v*k(c(3EfAAbFihL;)ij*il7PE*o}!(beKUrUKHMlb>(WUDjz`*&yJ9Ir4TA^GsB
zFwbjk(5qKxUyf<6{Ws<(#A&futkPwK7dW?$7<f*|jybaxUwhv+S7uOY<?qh~%<?l*
znV)!CcK)Ecz8DPoRBJZ9UNK1H;OH1LyG}Jp{A<kN at bYMUeK_q=oLXsjo}nR6+9zT?
zM(3d!(m8k7p&6iqK)J2&-y4Ov1E#2-FRQqOAJfOSPmul$@Wm2&R3_dKdOn{YZPKR<
ziOR?%c)l3DGS`^#dvEYB;Pm%U>N<Tc;G=W7Hv}Kk_IX;(^lhg5GtEsO at FFy!wLgW=
zbdMaXvv$R#R@;}aB&bZ~bIVsR&yQY2T+2oE7Qv!EyRgbW%NsL&Y~m}_CJE1)#A1<3
z#S at -zi<x4gj8 at sNQ$xE|+v2Ltg*9+$&1Lt7E0>`>3*}Anao6(x(B-AvOey_plra<r
zBNkd@*#p{C12^h^-I|c#gJ$PomHa~R227v`gW-x%y7k$nk+65IRW at ZLbt!$6B%!>K
z=VR+j6bTLqSv@*mIlWl*Mt4LwdxKfK_;6d`-r$RAQ;#0p1sl#SWS<Ez(y*|wEkMVt
zS@@aWax8}AKVN?7eOQ}Y?~X=OVi2KJs1#0*V2xyp4sv%VCkjAY^<eiI7#P^<auMor
z+mxt&mIn_YA}lI$oE1ely|8HO+;Tr5m{4|}47=O6zP>z-CG#+y!BCkCZiQ1+#ApxI
zd!{{zZB#EeKs5ag0vka$&&iPxSKdgc<<t_Nu0_wT#r7m-TaE{rTBNboK+s}lt}S#;
z<E6B)u=wljbBd^bfvFGrLa~E+{ZRz3-7qLJYEUCRT7x%AgZFm7NKuu5SWY5Nb5gSg
zYY(ir*DAFS=OC0lvb}c-cms at Z7ACs>>(zR0{b_i|eccN#hR#2AJBnZ#ykA(W`o4Kf
zS05>1#TnnK63^8(No$lzL7 at tTxXKd#gbA*xMZv5H2FIn~);%%Q-yxo!b{OchIhJCi
zF*RGh^J$Tu4F<oE_rm9#=$Abka;(4}@iVRgm6*65rM7ps5q<M1rw|98?U8C*{f5-F
z9!lnrY;{@hn31{XXli1zg`dd4Uod-ZRMamRcXj+&eZ7$QB>TknbZ?P%<`1Fl#)gK8
zv^L4NCr)<C+Sur-DnQ2%F0PC>)poAl#u0 at 2n(dz^(<WPwpODYAzCQldHS*Ba>V_P=
z0=~;t*QH%)q*Sc8qQFE;$L*w3GvH~HCmVy4=rkAVw&wF%MMkv0?)vja`0{)R^Tzg6
ze(9gie~9~QIRoDbJ;ofe^{1;jVY=%DA$ygxoKUQuKxTC10yzoA+`s at y)2!g&;9xWt
zx~59Nrjg~87{XI!ByiSVo&9F)RlEGn4+4VQFt;~n(X#3y{P>q_;0CI~tJL7;Rn6vx
zx~JR4!<_{*wo?e$p*4$Izo}M12RW_DHF@~=vTQmEl7oYOFtt8<yn*WaEwiw9p{Ay<
z{pcMDf3 at Xtot0hiQm-Z1M~a&^LNc}SXE130+2|^oD-3Nt46-_#yTYUQ6|{AAWgP at a
zU#1p`&bm!kEr4T`SXfz=Ua+@?{gMX41>m5+*a4o}eX-3jP>z#7!F!&!?Bkj-W9E78
zh+|^FL7!|y%4X<LvG3In8^4ncShvX;pMtr|0{n3D=5V!mIj*MK775)m<!Ag5jLGtq
zNdkzPS;&O>PdHBPIqATdjYN9QuV at RpCrORtk?)vyvHfu&;c=hq<~G%&pQm8HVxlk|
zr*A1bE>b0q0uSe;a;f0sNhwx41xTo_*U;RcfPP>^`2w<>pNgjc!-ac)AFx`$bJYUL
zM9wiywspTPo-XGYh`Q;#UN<W$eQE|b-wzdgLzdAAg>K_D=pEE6t~JCD%l^qF<+GV7
zFn~W(LOprP^{GzXzZRW1zZ*NW-nen)h$<^t;cRgdPXKHwKAw^{<BQ+!QZ;hwyRsZS
zi#}dOL`*EoPAuL;aC&lAS|5QBE?7K*U*gOxdt3K at S*kF%Y}|x%g<!Z+)D&#5zLLc?
z$>JL57kJh=#jS$s{eN!hCnhC5%+!K|>7)Cti4fJnq}`<+Hk8BN6|Su7%4fuj%pk6U
zi*K9sR524c905Q6GOkFpRp1m}5p98TNhmRSCt}o#5mo05zO8uunhIMmErjeqxc5>n
zXW-irmU*UwDSD9VwkGewcZQW!32u_}S?BkWz1((iHEz0w*kQc}({|gTyZNC9Bp)wN
zmRBRX!W&nQ<;1vp*L4$H8|^PC*jh4qHJiv#bu9&xxZRybURO3w&cWgw<k?B>zQ at +p
zDN$DRI>eIhqW}h;Old05$SKNkGis=Db7ZfL=xM4uJr?rl$I7NG>D!W21{b=;)e&hC
z2mcXzIj}k58oX`1Rv*f~&Dz_$71`G6=i!kY61L6JsQ&1r+DKq{^9TrifK4Bqhe~we
zQ7F{m at H}|+*lgL=rKc+~W&Mm{$W*~j9Ln(7CT(7v at Kk?7<CV$Ek8?RYcx(wj5b)5o
z#>Z!o6(UzxBOOx~n4|3_RYjdx1<Yz>erKI+csOTnxz{qXc0k at KUgh?DJA&E&>s98x
zc#=h%09rRSo0V*aL%@}~&$q4O>$yJv;b1v<xxpr}OdMpAL+^UgfWcC&wV9b01aEkp
z{ETS_c at p#%XUY(u8gxl&F+ at BN+yUG#cIjI6*M%d5s*4nhN+ZBo0F*kuIr;Q-O{zZp
zw&qQWr_a$^72(m~lf$ijg-(~$a%&b7bMuz)x`L*!ngHyiIPGB|J3z&H6sw+i0qzZ4
zfi at q~NI>=erNnSkVs9^GbZkuGn6U2Ob%?Lv?5}<Gs-x+ODxrXIdiFOJ*;}s9*UNJV
zj;OW_;9U0ihjw-ZXVRwoNNQQD7s#`2^Z?MRrTu@#gz(Q$-e`7%O2%Du?uvhx=!+L|
z*Vo~HYL&%qs`d2r1g>FGq7o7 at 3*$bZEJulXKTl>Lvd&Kn`PXe72gg)KGKx9j#G(BI
z0|V~kjZ^$goyEn)u>EQ&^>DssbBnJ6=gtGZt_vPgm*I++;TS*6mO-V_QMWU3x)zVY
z^!SK09YKuI!de|wUf?-Ao`q2rBFN+#EZi5>dlHOOc9hZ7X9TPU0)uVS!IAU3A8X%O
z5!f$x*j-EU!){Mtdv|V=(7u6b<O8Xu1~1^09s5>AN+v(R0yI&XW7QJmiiV4m`Y9RJ
zCl4M*4L0!D_?J=}_aIIs=;2wl+hMGnSm^-lGVDW<D6ZdLC;vsHxsaouvG1A#bB%YQ
z{N8(3Sst>7$hLcV2*rExCgU(&)dsP^nr0+?7TzbL<zzzB`1Vm05d9?YSm7pefb^9U
z%3}vL>d}>aZ!To(?{9pDz7NHI3vXogJm5?^7$RF}lIHArT~F7n+xSBmitQjzEG|mR
zf{kOwiG5zB)P!y?uqj^#g!dkOU25R78nW~nV+#!$K}%)ZBdcIJP9TGAe;iuwY}%e=
z;}ew-PB9|yR8_V1^E(#Eg^e at g;>4lKf=tR{Io}o;heV(Z0O$Qn?c?qXd3kx-ndgca
zxv{`%*kd^_Fl&Z3Uz#=_Jp~C}yh_I?8gnlXshFcZMJqJ-K}N77U)e8L1Y(O<{r=mR
zV?Q-+U+FActIhaT2NyzJ)iq=(m|I)~eQSa-zZ{qoN<M8KxjT^wPMaAEG8H?sE-pm*
z=1)M(DuKz?;ihhfb0eW_pPfT_F9mhd+BE;s*V-CS^z14AKPA?GtH(M at 2TK=Y_=2R~
zh at +x5+>W~0Ugj#Jl7WIRO6|WYzar{Sv`b0c-*nVN#FgA$LLLo}G5#+D+{N8Cpyo#Y
hu9}tq=T|r6bM)GezwLWZ1HTkNnyNY~bxKxI{{~|bNfQ77

literal 3998
zcmZ8k2RIvC+m5{nRaG<8s;yO{Mv17TO(ZrIL{X*XHT&AL)K;Uz2&%P$s8L(BwW?a9
zDM4toRwa~BG`0S`-}n9he_h{o=5x+<opYaa-_LWdlZvvm;NuqK1^@tjFet>D(dIBp
zDJMIlrhhiDVKhv^))rs at epF(OVX)u4ZUF(D{FBOhs`3~kTmew0U;uze=%2#$c|PWl
zF~|`DLzr`rczF0g+&-cBW&l7y3I;K?4V&G-p8O at gEIC9To1Y=BBnXg}K8w!H2B at -E
zZ9MilO`SUb8E6IvH6q}I7mY_RH#lOZdtV;O9JpVJ1Hw;nzIA-1Q9&3K>2GD8x2EL2
zcyVv>3v9g~rmjzJmOeZh!D9O@?~+$tWLSUB8y(M4jmagEQqA-8E)VCb#M5;Pk4xQX
zW|1bO{SLVcRR;O5pA61zOO!g7_7!%pn+m^SWd~rCj*FZnq{0GLmd-*pv(<}Zm!ewo
zf}2$w at BtTSn6>W%>2-wOt^#s@*Gcpf@?0lZHjxGP7!)q286V&H*+=w^9t#Htw~2dO
zT+h5w#+D$QqbksSoB14a$@<9Sr}SaNNGzKtX6aavQ;Mlv4vYZ{O4yp>00T^G_gRPY
zQPXM*o7C8$%o*`R`tO~)wrBmqCF9{n#Suq|M7o>(F|)gE+`h5Ki&H|ZNI at wc5!J6-
z*<SI%{QUe17obh7W7Ql@$ic#vWVe%5VwBb^D6qr4A$m)!w<GeDYw4NKFfRDbmza2G
z36X|(@7 at -<D>Hco@&G^)=3y2+z^iQC9b31qKjbWzA#@SHsxfO*l70v>C373rn>4bd
z?I;JpJ-0H#-Uuh_u8<e#Q6(TT`%h}4?m7lMV=&~vfo<8#Fu|uR0LGG-0W=r)R at cdK
z)+vY?uI&tY<ug<(YBC;mY{McP#vz5{wHsE6XUbJ|PpZf45u7Z6d<9>7X~tve;hF+0
z-rbb&u+z*2Wrc?MUT^0vHWs1>R%UNWqTrZ^meAjt2QuO1?gWkk0Z>?aTk}M%t+IxA
znKB*8rQ|X4W@=u|@F2;XHbB#uid1$4$}u^=6TwH{^JBmjQuBV?coPqhrMyGB<j%>U
z#B0S-I;Xos*5nN%C{|B%XXe;366F^C-bJP60AC&cB)o>(YC;ty$+swF!Te<$<rn*6
z#aQ^O;rBce9g+IzarFfQw?F(rUHaX*VQd{eXj=P+wJ`Z)wYwT|ATbeSOEcO>_MLLV
zTfIA!Yfm<>a5S)_IZMz(q{fW)B-D+g1nE77u06ZTQ}>8zt6(lY+c6%dX^%*#_h;4#
zO{F`x(ucJh?7w#ZNJs-Z@&a$L*lF@;65)rp|5$`YeGgney|=aUy{Nq{xPdb4IGlHh
zSzfd5uZB~QzOoA@%cw#9hWoYiSQk-ocFW(EZw$WI at 1Uki*gWIU^d8DeO-iu=(5{^s
z&NI%BfP>d!3*(q;@9SKvd%*T0C>L$>Zu4y9IJemAGbd8aw*Vw at QmA})hwpbqH#&^1
zY^JOEcffLAr*A#}L#-dzm%Xg_hlvf_d?M{AUYk16QQ2e87|{cns3rk#GjH1V6}Q1p
zlSQH(v8++p#VX{X at B~L%18;?nO?%X8kk at FPmX>$-bS!SkT0YyN<o0wo%FL-$>q2{B
zCpQ3v#Qmo0#$+}4x(y6s`MLx4lDJJsk)*IYG&Rx6i8+t&_Fl>_f+TBaMHUv8Qj<*u
z4x|P*K5kswMq5?~cj=>hf=~1ElCz at 3%R%3}-2SM)K7LOW?7U*De|*%nxwtpD;rs4W
zp-Q{`rliy3q+t$4u5$PBn!GBElf9PDRkO2W at haCHKo<m&rQu at bped%1zZcc<3Jvys
zj)?Xk=Ct4}txd<xKag^zn;{`zc6I*_4nCCxezr<1$bvVMV~(9)5AEaZ?9@=ji`i`_
zoJ`Cmmv?OE8=q{V2QA$><bx>J!#K*?2L$(rB3W`Oea1tvb7rtq2=iJ<=PEILZeQ=X
zhqmcEeclYkGAJ!_0<Z$oK5gkT0Zv8^1*FLb?f4TLQUN~Xl{0{$j1;;@9X0h84#$d0
z3~_mY!x{CC+EkU^WNXHpjH1p9#zY?bp?hrLttTM|NCYfoaqfl-wQL1#^ZI-SJrX#|
z91pPa at OW}pheWt at JBH6q{6OsZG2NMFe%R!2{u1XMqhW)cO^ly6-`Yk<1$?zw_tKd=
zrzo at N5gv__R6`qjSuL=j64o#A+@&PdxX<73>-WDiyLMqg;je31zqEE_UeP$}V1~0@
z;I}Ay18{uP1|}y2S=XT3YQL#sEl)w!0GHE>IRW{CY*)g5b9@}>exxg2<jT_+&Q-6o
z^e7S>+VC(x%c!cPFNv^A9q;7MaTje5Tx93%14U#FOL-5DE>sM;-joVkCl|EdK)ScE
zP>Lh?$+7DP2%fV(Z0i7A-szX=`y#aM`X}MODt3Ng=1_f04>pG`+1Bmw8pU5rHHx%f
z=a6mP>WE0*no+|5_Flbxo_lLw<b}DDD!oj+H0&HgUu~gq)!)6{exGe-saA}ZwLXFB
z*DNFrxneE~j4tfA#g1LMal~nmgk5p99zL-BYRcS~s3_fEVe at 3G-wfHZ8^M~x^MbD3
zt+y-75*I6fGLT1?GyW8PL;4*c1A1;e`tm6IXp<J%acEUB1zou|u3a=3;xGo&7hD^s
z6ewB?v*l_RXZ@^Juy^5M=p_XrYsQ0eDuA=6LJ~0GYz52%Nf3aOJy9?Ek9Nm1f3u|>
zI at +tdu~ADlMd*$-*|epzlcKy>Usne-oljOO9rN(_A3c4MUSrF>v$F$1Y2cbCC+$9t
zj)EV173&4w{K0#xP(iG%=v+#KT%YETM?h|GIU!SsYzmZBFcl=5lU0A2hm|?y>hp(Q
zGrNPAcv%>$n33;q;1qMc&Nez`0D=mP7(`Y2K(cr?!1{tUy`T at vL7rA;W-DreUd>K&
zLR>elx#ap3Lgj>v$RFK*;F?1&XTlZCiqLP3HgE2GGPk0Xc#jAc<^6>aU=FA3Kbs3e
zUL4~`h0WvfRFtsS?Mwzl>l$I>lfz)yY7%g`DI?6#_?HSs9tPHvU<WXB89j{)?GvIj
zDJUqs=L;2=)n!^5+>De1cKETaTluN2E2lKgsEUY)pxxW=>ReaBMA~8H^I)DA3Z9{l
zZa8Bnl&7V at tm71i|2})~WgB5O0i$0)Tf5Lu3!*l{v)M^iO^q+wpp2 at 5S)}PDye*?v
zvC6@~nxYUxsjAa24{}Hf7=xr#`!~5z3obzfTRTDBrE~yUVGTiKTGxCT at 0}mtWxW*>
zBefPHmR8;#k$$#M^WoU4%QtLfE?d_?nB28G*uQRG5b_TX6fy<=*z11Zw`Urg^W!J_
zA}J87e)`U;i&ktUPI+Zzh4Y2~gJv2n&;jx0>T|0gv-xDGu(`w8Y at O&$CWybYLjJI4
zN}0b|zGan5bIY_gf&pL9w5NJhD3#UT-hN?+o;-Cs*&UQO+<r6in at 2pS65ggtE#-W1
z&cFF*ph#dy at IPw!H>Ur!{zKNk<`~pvx%#<fPiphU^h%41i#xiy`X9J9Dy4}^OAoz&
z&)M4A`Vg)_;s*<x-v`UQZ^}Tc6DLNFn^eyUb2BOZ9G at Ddw&QTJKu&<tv6!`Dt&KJ!
zacniwT@<R2C)wj5$(^K3j=iGOwfXwsWoxTWK)U4gBNd1C`3IeN;zm^A*eY#Uv2<F@
zT-Y3rKujK`1n3kE>{5x6?zhpGimp{i#9oJ6<yVpm5pqIVgG6n<PQ1f0NgILgjhPR;
zh`+6UWB(Mk(&zi^t2<d+1B-#xxCo`93W5(qzN9<o?ywv_h at OqzD<3M_+)C5f*gvv~
zMx#}_J;O);aXv4>uUlV;efl&2Em}>DAZX=4`)TPqG3qdDN!$7b|HDk;tTfQS!UTlk
z7&rB+^tnL at XTPA><h;GOe;_&Egk25jbgEza^*pkER1ucD(c$Uj-_cF-LEj_(ok02-
zWvP<5v91rjj=w9 at M5@O4`F+~+yr)h&?>U{6jKxZlJZ>yssq~pG8PVi at S~)WjKI=k0
zpFb0gtSWv#T9Vjeb$`M0;h at AhMkojmpV{*q_G}t{xE3-y0b;l^LRat6HT|!3Nl8hS
z9<xV#cNbSHeJ)FRh+ZY!`@ra}_}13es`;(hqE$6C+FE8ne#Mlhj!zbwRY#PBxh3ty
zmMIWnbJ64ps|qW;CBzD%{)AfnIoGQrw>dN-1BZL0nPXXHfE)cVw7z;koUJ2JS`Lp4
z8l8IOr~G7OcT3qTFQ5A_9sN55q(J`>-v0-L|FalDiBF308t*M<FHf|ybIQ69XTE$9
zrnYHRQZExido+elXI?#PYU}Y3qseJ*HICF(mEdp2Xr?f7fZm+$V%pW`s-nDLLd$D0
zVx#E`pIP|E1!{~|My1ciSJ$z9-!!!mMQe$Hjk8`e-vUJAP2xI4WD$g0Auh2ENgR4p
z;+0AtBIJa8#2n;=!jV?_yB-omaBUAW<2f!@;=w1r|9N#%bj8Tdj;xn;|B^^L-MPNw
zi5yp><HuMDu6m`kl%YkduE4cUDal_D=V=WST3GjTCT?<RX=%seXbFixXjOd@@pKvt
z6b9JX*nAvzO)Ce9q-!~t$fe1KxctR49%xAK#9yqEH1_>#+DZg~&AM)9#~U=Du)dl~
z=?7&ZV;W3-;adj34=i%qlE5;prGW at I+=QU5(*g|r1CiX#YhWCpmbEu=lR$tt+f7Qh
zkwQjpp;-!Uw<RfwW&Wh5`r2xWu5&>dzA2S`AP^B{D79~}jCxShub`+H8=Mlzhb~uZ
z;W?e at JSwTV6msc)zOvR7EM`jKFRE|5+H&SZUlvvAbKJRjsNJM4zmRe<7}{pSxOEQh
zhWdAYx~FCnlaE}psg59PVXx?*pl!OpTb($fH$X3{dTaK>^?T0=t|h)}EA8NCKyhfw
zwNF|n?&zkx+N`0)<HQ7EPS%*UmPo1$zyt*Ry)5IeM;&OF&3SJE&*aPmFuXUEMb3q|
zKX0aNce9t`j$C!%h$s19d!D{XIY>kNFo$o-t!!3Bu4`9JAlmmyAhk at D2vz|XH;21m
zHIw;_HEi4$pEc?90Y{AwG<(0qBe-cxk?&e%{hx4O2w;!wvT<vB8qYluij`dcxsAi!
zW8Jq3-<S>Dy)&S2yHJNP^7N}^#l4dZKF^CoY;86M44HX^|M(N?yL95)K+Dc>cq7R8
OJOg0nmJmD`lkh+21Z1%Q

-- 
1.7.7.3




More information about the aeolus-devel mailing list